AWSと獣には比較的新しいです。 API GatewayからLambdaプロキシへの統合に取り組んだ後、Execution failed due to configuration error: Invalid permissions on Lambda function
私は本当によく文書化されたterraform documentation
そして私に必要なことを正確に行います。しかし、API Gatewayコンソールでテストしているときに上記のエラーが発生します。
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowAPIGatewayInvoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.resource_name.arn}"
principal = "apigateway.amazonaws.com"
# The /*/* portion grants access from any method on any resource
# within the API Gateway "REST API".
source_arn = "${aws_api_gateway_deployment.resource_name_of_deployment.execution_arn}/*/*"
}
API Gateway Lambdaプロキシ統合からの学び
問題の多くのドキュメントと修正により、詳細パスを"arn:aws:execute-api:region_name:account_id:${aws_api_gateway_rest_api.api_resource.id}/*/*"
として明示的に構成することが推奨されます
arn:aws:execute-api:region:accountid:fu349z93pa/*/*
Terraformドキュメントから"${aws_api_gateway_deployment.deployment_rsc_name.execution_arn}"
アクセス許可が付与された構成済みソースは
arn:aws:execute-api:region:accountid:fu349z93pa/stage/*/*
API Gatewayコンソールからテストすると、同じエラーが発生し、ラムダへの権限を手動で追加するか、メソッド統合コンソールでラムダ関数名を再選択する必要があります(同じことを行います)。これにより、2つのAPIゲートウェイがLambdaにアクセスするように構成されます。 (/stage
がデプロイされたARNと他の/*/METHOD/*
-used for test console
を含むもの)
しかし、postmanのステージ環境のARNからAPIゲートウェイをテストすると、Teraformで構築されたインフラストラクチャを手動で更新しなくても同じように機能します。そして、ほとんどの場合、それが問題になります。
Malformed response from lambda
ではありませんこれはかなり簡単で、十分に文書化されています。 AWSドキュメント
指定するフォーマットで応答するようにラムダを更新するだけです。
ために。例えば以下に追加
callback(null, { "statusCode": 200, "body" : JSON.stringify(sampleResponseJSON) }); on lambda `js`
エンドツーエンドで機能するようになったら、いつでもエラー処理シナリオを追加できます。
うまくいけば、これは私のような初心者のためのいくつかの時間を節約するはずです。
だから代わりに:
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${aws_api_gateway_deployment.resource_name_of_deployment.execution_arn}/*/*"
}
replace
メソッドを使用してstage_name
をexecution_arn
から削除します。
resource "aws_lambda_permission" "apigw" {
... ...
source_arn = "${replace(aws_api_gateway_deployment.resource_name_of_deployment.execution_arn, var.stage_name, "")}*/*"
}
そして今、すべてが私のために働きます