AWS Lambdaコードで、AWS Gateway APIからのHTTPリクエストのHTTPメソッド(GET、POSTなど)を取得するにはどうすればよいですか?
ドキュメント から、context.httpMethodがその解決策であることを理解しています。
しかし、どうにかうまく機能させることができません。
たとえば、次の3行を追加しようとすると、
if (context.httpMethod) {
console.log('HTTP method:', context.httpMethod)
}
次のように、「microservice-http-endpoint」ブループリントのAWSサンプルコードに挿入します。
exports.handler = function(event, context) {
if (context.httpMethod) {
console.log('HTTP method:', context.httpMethod)
}
console.log('Received event:', JSON.stringify(event, null, 2));
// For clarity, I have removed the remaining part of the sample
// provided by AWS, which works well, for instance when triggered
// with Postman through the API Gateway as an intermediary.
};
httpMethodは常に空なので、ログには何もありません。
context.httpMethod
アプローチはテンプレートでのみ機能します。したがって、Lambda関数でHTTPメソッドにアクセスする場合は、APIゲートウェイでメソッドを検索する必要があります(例:GET)。Integration Requestセクションに移動し、-をクリックします。 マッピングテンプレート、およびapplication/json
の新しいマッピングテンプレートを追加します。次に、application/json
を選択してマッピングテンプレートを選択し、編集ボックスに次のように入力します。
{
"http_method": "$context.httpMethod"
}
次に、Lambda関数が呼び出されると、関数の呼び出しに使用されるHTTPメソッドを含む、呼び出されたhttp_method
に渡されたevent
に新しい属性が表示されます。
API Gatewayには、httpメソッド、ルートなど、多くのものを渡す組み込みのマッピングテンプレートが追加されました。ポイントが足りないので埋め込むことはできませんが、アイデアは理解できます。
これは、API Gatewayコンソールで追加する方法のスクリーンショットです。
そこに移動するには、AWS Console> API Gateway>(リソースを選択、IE-GET/home)> Integration Request> Mapping Templates>次にapplication/jsonをクリックして、Method Request Passthroughを選択します。上のスクリーンショットに示されているドロップダウン