我使用階段變數在 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 (Lambda 函數的許可無效) 的錯誤訊息,表示錯誤是因缺少許可而造成。如需詳細資訊,請參閱如何開啟 CloudWatch Logs 以疑難排解我的 API Gateway REST API 或 WebSocket API?

如果是 HTTP API

檢閱您的 API Gateway 存取日誌。如果您看到包含 Invalid permissions (許可無效) 的錯誤訊息,表示錯誤是因缺少許可而造成。如需詳細資訊,請參閱設定 HTTP API 的記錄功能

注意:integrationErrorMessage 內容變數 ($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 命令:

**重要事項:**在執行命令之前,請先取代下列變數:

  • arn:aws:lambda:region:account-id:function:function-name,輸入您 Lambda 函數的 Amazon Resource Name (ARN)
  • statement-id-guid,輸入唯一的陳述式 ID。例如,api-gateway-invoke
  • arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1,輸入調用您函數的 API Gateway 資源 ARN。如需 HTTP API 和 REST API 的 ARN 格式,請參閱](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html#api-gateway-iam-policy-resource-format-for-executing-api)在 API Gateway 中執行 API 之許可的資源格式[。如需 WebSocket API 的 ARN 格式,請參閱使用 IAM 授權
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 Gateway 可用來調用 Lambda 函數的 IAM 角色

請遵循用於調用 API 的 API Gateway 許可模型中的說明進行操作。

**注意:**如需詳細資訊,請參閱使用 IAM 許可控制 API 的存取


相關資訊

使用 HTTP API 的階段

設定 REST API 部署的階段變數

使用 Amazon API Gateway 階段變數

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

建置具有 Lambda 整合的 API Gateway REST API