我設定了 Amazon API Gateway API 以使用階段變數調用 AWS Lambda 函數。當我調用 API 方法時,API 傳回 "Internal server error (內部伺服器錯誤)" 和 500 狀態碼。如何解決此錯誤?
如果您 Lambda 函數的資源型政策不包含 API 調用函數的許可,API Gateway 會傳回 Internal server error (內部伺服器錯誤) 訊息。
如果您建立階段變數以透過 API 呼叫函數,則必須執行下列動作之一來新增必要的許可:
**注意:**如果您使用 API Gateway 主控台建立具有標準 Lambda 整合的 API Gateway API,主控台會自動新增必要的許可。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新的 AWS CLI 版本。
如果是 REST API 和 WebSocket API
檢閱您的 API Gateway 執行日誌。如果您看到類似 Invalid permissions on Lambda function (Lambda 函數的許可無效) 的錯誤訊息,表示錯誤是因缺少許可而造成。如需詳細資訊,請參閱如何開啟 CloudWatch Logs 以疑難排解我的 API Gateway REST API 或 WebSocket API?
如果是 HTTP API
檢閱您的 API Gateway 存取日誌。如果您看到包含 Invalid permissions (許可無效) 的錯誤訊息,表示錯誤是因缺少許可而造成。如需詳細資訊,請參閱設定 HTTP API 的記錄功能。
注意:integrationErrorMessage 內容變數 ($context.integrationErrorMessage) 包含需檢閱的錯誤訊息。
Lambda 主控台說明
請遵循授與函數對 AWS 服務的存取中的說明進行操作。
以下是授與 API Gateway 調用許可的資源型政策範例:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "ServiceAllowListing", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>" } } } ] }
AWS CLI 說明
執行下列 add-permission AWS CLI 命令:
**重要事項:**在執行命令之前,請先取代下列變數:
aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1
請遵循用於調用 API 的 API Gateway 許可模型中的說明進行操作。
**注意:**如需詳細資訊,請參閱使用 IAM 許可控制 API 的存取。
使用 HTTP API 的階段
設定 REST API 部署的階段變數
使用 Amazon API Gateway 階段變數
使用 API Gateway 階段變數來管理 Lambda 函數
建置具有 Lambda 整合的 API Gateway REST API