Amazon API Gateway で作成された API から送信されるメッセージに含まれるカスタムヘッダーを処理する AWS Lambda 関数はどのように作成できますか?

デフォルトでは、Lambda 関数は、API Gateway で作成される API より送信されるリクエストボディのみ取り込みます。

Amazon API Gateway API から Lambda 関数にカスタムヘッダーを渡すには、curl ユーティリティで本文マッピングテンプレートを使用してメッセージを API ゲートウェイに送信し、メッセージに追加されたカスタムヘッダーを抽出します。

API によって、更新されたメッセージが Lambda 関数に送信され、ヘッダーが処理されます。その後、元のメッセージのヘッダー値が 1 つ以上返ります。

Lambda 関数の作成

開始する前に、Lambda と Amazon API Gateway に必要なアクセス許可が設定されていることを確認します。この設定については、「AWS Lambda に対する認証とアクセスコントロール」および「API Gateway にアクセスするための IAM アクセス許可を設定する」を参照してください。テストロールを作成し、AmazonAPIGatewayInvokeFullAccess および AmazonAPIGatewayPushToCloudWatchLogs 管理ポリシーをアタッチします。

1.Lambda コンソールを開き、[Create function (関数の作成)] を選択します。

2.    [一から作成] を選択します。[Name (名前)] に、分かりやすい名前を入力します。[Runtime] で [Node.js 6.10] を選択します。[Role (ロール)] で、前に作成したテストロールの名前を選択します。

3.    [関数の作成] を選択します。

4.[Function code (関数コード)] で、[index.js] のコードを以下に置き換えます。

exports.handler = (event, context, callback) => {
// TODO implement
callback(null, "This message header was processed by Amazon " +event.headers["header1"]);
};

5.    [保存] を選択します。

API Gateway API の作成

1.API Gateway コンソールで、[Create API (API の作成)] を選択します。

2.[New API (新しい API)] を選択します。[API name (API 名)] に「SendtoLambda」と入力し、[Create API (API の作成)] を選択します。

3.ナビゲーションペインで [Resources (リソース)] を選択後、[Actions (アクション)] メニューを開き、[Create Resource (リソースの作成)] を選択します。

4.[Resource Name (リソース名)] に「HeadersResource」と入力し、[Create Resource (リソースの作成)] を選択します。

5.[Actions (アクション)] を開き、[Create Method (メソッドの作成)] を選択します。

6.[/headersresource] のドロップダウンメニューから「POST」を選択し、チェックマークアイコンを選択 (クリック) します。

7.統合ポイントの設定:
[Integration type (統合タイプ)] で、[Lambda Function (Lambda 関数)] を選択します。
[Lambda Region (Lambda リージョン)] で、お客様のリージョンを選択します。
[Lambda Function (Lambda 関数)] に「CustomHeaders」と入力します。

8.    [保存] を選択します。

9.[Integration Request (統合リクエスト)] を選択します。

10.[Body Mapping Templates (ボディマッピングテンプレート)] を展開し、[Request body passthrough (リクエストボディのパススルー)] で [When there are no templates defined (recommended)] を選択します。

11.[Add mapping template (マッピングテンプレートの追加)] を選択します。

12.[Content Type (コンテンツタイプ)] に「application/json」と入力し、チェックマークアイコンを選択 (クリック) します。

13.入力セクションに以下を追加します。

{
    "method": "$context.httpMethod",
    "body" : $input.json('$'),
    "headers": {
        #foreach($param in $input.params().header.keySet())
        "$param": "$util.escapeJavaScript($input.params().header.get($param))"
        #if($foreach.hasNext),#end
        #end
    }
}

14.   [Save (保存)] を選択します。

15.[Actions (アクション)] メニューから、[Deploy API (API のデプロイ)] を選択します。

16.[Deployment stage (デプロイメントステージ)] で [New Stage (新しいステージ)] を選択し、[Stage name (ステージ名) (例: "prod"、"test"、"beta")] を入力します。

17.[Deploy (デプロイ)] を選択します。[Stage Editor] の最上部にある [Invoke URL (URL の呼び出し)] の横に表示された URL を書き留めます。

18.API Gateway にメッセージを送信するには、curl ユーティリティを使用します。この例では、Lambda 関数によって参照された「header1」ヘッダーの値が返ります。

curl -H "Content-Type: application/json" -H "header1: API Gateway and AWS Lambda" -X POST -d "{\"API_body\": \"This is the body\"}" https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/headersresource

このプロセスが成功すると、次の出力が表示されます。

"This message header was processed by Amazon API Gateway and AWS Lambda"

注意事項: curl を Windows にインストールするには、「Git for Windows」をダウンロードしてください。この中には「GNU bash shell」と、curl、tail、cat、grep、gzip、Perl などの Linux ツールが含まれています。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 10 月 06 日

更新 : 2018 年 7 月 31 日