跳至內容

我在 API Gateway 中使用階段變數定義 Lambda 整合。為什麼我在調用 API 方法時,會收到「Internal server error」和 500 狀態碼?

2 分的閱讀內容
0

我已將 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 版本

檢閱 Amazon CloudWatch Logs,確認錯誤是由缺少權限所造成

適用於 REST APIWebSocket API

檢閱 API Gateway 執行日誌。如果您看到類似 Invalid permissions on Lambda function 的錯誤訊息,則是因為缺少權限而導致錯誤。如需更多資訊,請參閱「如何開啟 CloudWatch Logs 以疑難排解我的 API Gateway REST API 或 WebSocket API?」

適用於 HTTP API

檢閱 API Gateway 存取日誌。如果您看到包含 Invalid permissions 的錯誤訊息,則是因為缺少權限而導致錯誤。如需更多資訊,請參閱設定 HTTP API 的記錄

注意:integrationErrorMessage context variable ($context.integrationErrorMessage) 包含可供檢閱的錯誤訊息。

更新 Lambda 函式的資源型 IAM 政策,使其授予 API Gateway 調用權限

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

建立 IAM 角色,讓 API Gateway 可藉其調用 Lambda 函式

依照 API Gateway 調用 API 的權限模型中的指示操作。

**注意:**如需更多資訊,請參閱使用 IAM 權限控制 API 的存取

相關資訊

使用 HTTP API 的階段

為 REST API 部署設定階段變數

使用 Amazon API Gateway 階段變數

使用 API Gateway 階段變數管理 Lambda 函式

使用 Lambda 整合建置 API Gateway REST API