AWS Lambda関数で動作するようにAmazon API Gatewayプロキシの統合を設定しましたが、APIを呼び出すと、設定エラーまたは502ステータスコードが返されます。どのように解決すればよいですか?

これらのエラーは、多くの場合、ラムダ関数の応答の形式に起因します。レスポンスの形式を確認するには、 Amazon API GatewayコンソールAmazon CloudWatchでAPIゲートウェイのログを確認してください。詳細は、 Amazon API Gateway で作成した API に対して Amazon CloudWatch Logs を有効にする方法を参照ください。

プロキシ応答の形式が問題の原因である場合は、APIゲートウェイログに次のメッセージが表示されます。

Thu Dec 08 01:13:00 UTC 2016 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Dec 08 01:13:00 UTC 2016 : Method completed with status: 502

この問題を解決するには、ラムダ関数がAPIに応答する方法を変更します。 

ラムダ関数のレスポンスをAPIゲートウェイで処理するには、レスポンスを次の形式で返す必要があります。

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

以下はNode.jsの関数の例です:

exports.handler = (event, context, callback) => {

    var responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    var response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };
    callback(null, response);
};

この例では、関数の応答は、APIゲートウェイが期待する形式です。追加情報については、「Lambda プロキシ統合で API Gateway API をビルドする」を参照ください。。

注:この応答には、[statusCode]、[headers]、[body]、および[isBase64Encoded]の4つのフィールドがあります。

  • [statusCode] は、APIメソッドの呼び出し元に返されるAPIゲートウェイによって解釈される整数です。
  • [headers]収集され、APIゲートウェイの応答とともに返送されます。
  • [body]フィールドは、JSONを返す場合は、文字列に変換する必要があります。そうしないと、レスポンスにさらなる問題が発生します。JSON.stringifyを使ってNode.js関数を操作できます。他のランタイムには異なるソリューションが必要ですが、その概念は同じです。
  • [isBase64Encoded]フィールドは、バイナリデータを扱う場合に重要です。このフィールドを使用しない場合は、ブール値falseに設定する必要があります。

API Gatewayのシンプルなプロキシで動作するラムダ関数を記述する場合、レスポンスは指定された形式のJSONでなければならず、 [body]フィールドを適切にエスケープする必要があります。


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

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

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

公開日: 2017 年 10 月 16 日

更新: 2018 年 4 月 02 日