API ゲートウェイ HTTP API で AWS Lambda 関数を呼び出そうとすると、「内部サーバーエラー」メッセージが表示されます。Amazon CloudWatch Logs に、「インテグレーションを呼び出す権限がありません」または「オーソライザーを呼び出す権限がありません」というエラーが表示されます。
簡単な説明
API ゲートウェイ HTTP API が Lambda 呼び出し権限なしで Lambda 関数を呼び出そうとすると、API ゲートウェイから「内部サーバーエラー」メッセージが返されます。HTTP API の CloudWatch ロギングを有効にした場合、API Gateway は次のエラーメッセージのいずれかをアクセスログに記録します。
- Lambda インテグレーションを使用した HTTP API の場合:integrationError。 「インテグレーションまたは API Gateway に設定された IAM ロールには、インテグレーションを呼び出す権限がありません。権限を確認して、やり直してください」
- Lambda オーソライザーを使用する HTTP API の場合:authorizerError。 「オーソライザーまたは API Gateway に設定された IAM ロールには、オーソライザーを呼び出す権限がありません。権限を確認して、やり直してください」
これらのエラーを解決するには、次のいずれかの操作を行います。
API Gateway コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、リソースベースの Lambda 呼び出し権限を HTTP API に追加します。
-または-
HTTP API に関数を呼び出す権限を付与する AWS ID およびアクセス管理 (IAM) 実行ロールを設定します。詳細については、「API を呼び出すための API Gateway 権限モデル」を参照してください。
HTTP API で Lambda 統合を使用する際のエラーのトラブルシューティングの詳細については、「HTTP API Lambda 統合に関する問題のトラブルシューティング」を参照してください。
解決策
**注:**AWS CLI コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用しているかどうかを確認してください。
API Gateway コンソールを使用して、Lambda インテグレーションを含む HTTP API に Lambda 呼び出し権限を追加します。
- API ゲートウェイコンソールを開きます。
- **API ** ペインで、HTTP API の名前を選択します。
- 左側のナビゲーションペインで、「統合」を選択します。
- 「統合を管理」を選択します。
- Lambda インテグレーションの名前を探し、Lambda インテグレーションの名前の横にある [編集] ボタンを選択します。
- 「呼び出し権限」で、「API Gateway に権限を付与」を選択して Lambda 関数を呼び出します。
または、API ゲートウェイが Lambda 関数を呼び出すために使用できる IAM ロール ARN を指定します。
- [保存] を選択し、次に [API をデプロイ] を選択して、API に Lambda 呼び出し権限を追加します。
AWS CLI を使用して Lambda インテグレーションを使用して HTTP API に Lambda 呼び出し権限を追加します
以下の追加権限の AWS CLI コマンドを実行します。
aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction
注:****関数名の値を Lambda 関数の ARN に置き換えます。**ソース ARN **の値を API のソース ARN に置き換えてください。statement-id の値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。
API Gateway コンソールを使用して、Lambda オーソライザーを使用して HTTP API に Lambda 呼び出し権限を追加します。
- API ゲートウェイコンソールを開きます。
- **API ** ペインで、HTTP API の名前を選択します。
- 左側のナビゲーションペインで、[認証] を選択します。
- [認証の管理] を選択します。
- Lambda オーソライザーの名前を探し、Lambda オーソライザーの名前の横にある[編集] ボタンを選択します。
- 「呼び出し権限」で、「API Gateway に Lambda 関数を呼び出す権限を自動的に付与」を選択します。
または、API ゲートウェイが Lambda 関数を呼び出すために使用できる IAM ロール ARN を指定します。
- [保存] を選択し、次に [API をデプロイ] を選択して、API に Lambda 呼び出し権限を追加します。
AWS CLI を使用して、Lambda オーソライザーを使用して HTTP API に Lambda 呼び出し権限を追加します
以下の追加権限の AWS CLI コマンドを実行します。
aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction
注:****関数名の値を Lambda 関数の ARN に置き換えます。**ソース ARN **の値を API のソース ARN に置き換えてください。statement-id の値を、同じポリシー内の他のステートメントと区別するステートメント識別子に置き換えます。