web-dev-qa-db-ja.com

AWS LambdaでHTTPメソッドを取得するにはどうすればよいですか?

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は常に空なので、ログには何もありません。

11
Xavier M

context.httpMethodアプローチはテンプレートでのみ機能します。したがって、Lambda関数でHTTPメソッドにアクセスする場合は、APIゲートウェイでメソッドを検索する必要があります(例:GET)。Integration Requestセクションに移動し、-をクリックします。 マッピングテンプレート、およびapplication/jsonの新しいマッピングテンプレートを追加します。次に、application/jsonを選択してマッピングテンプレートを選択し、編集ボックスに次のように入力します。

{
    "http_method": "$context.httpMethod"
}

次に、Lambda関数が呼び出されると、関数の呼び出しに使用されるHTTPメソッドを含む、呼び出されたhttp_methodに渡されたeventに新しい属性が表示されます。

17
garnaat

API Gatewayには、httpメソッド、ルートなど、多くのものを渡す組み込みのマッピングテンプレートが追加されました。ポイントが足りないので埋め込むことはできませんが、アイデアは理解できます。

これは、API Gatewayコンソールで追加する方法のスクリーンショットです。

そこに移動するには、AWS Console> API Gateway>(リソースを選択、IE-GET/home)> Integration Request> Mapping Templates>次にapplication/jsonをクリックして、Method Request Passthroughを選択します。上のスクリーンショットに示されているドロップダウン

7
MattS