web-dev-qa-db-ja.com

AWSエラー:プロキシ統合は、応答を変換するように構成できません

私はAmazonのLambda-API実装の初心者です。

私は非常にシンプルなAPIをデプロイしています。APIGatewayでトリガーするPython 2.7印刷 "Hello World"を含む非常にシンプルなラムダ関数です。ただし、[URLの呼び出し]リンクをクリックすると、 「{"メッセージ": "内部サーバーエラー"}」と表示されます。

したがって、私はここで何が問題なのかを確認しようとしているので、API自体をクリックすると、メソッド実行で次の項目が灰色になっていることがわかります: "Integration Response:Proxy integrations cannot be応答を変換するように構成されています。 "

enter image description here

多くの異なる構成をテストしましたが、それでも同じエラーが発生します。このステップが灰色になっている理由はわかりません。

10
sammtt

APIゲートウェイとラムダ関数を統合しようとすると、同じ問題が発生しました。基本的に、数時間を費やした後、私は理解します。したがって、新しいリソースまたはメソッドを作成するときに、Use Lambda Proxy統合がデフォルトで設定されていました。

したがって、これを削除する必要があります。 Integration Requestに従い、Lambda Proxy統合を使用してチェックを外しますenter image description here

次の画像が表示されます enter image description here

次に、ResourcesAtctionタブで、CORSを有効にするenter image description hereenter image description hereenter image description here

これが完了したら、APIをもう一度デプロイして、関数をテストします。 また、このトピックでは、内部で何が起こっているかを説明します。

幸運を...

9
hasskell

Lambda応答は、APIゲートウェイが処理する特定の形式である必要があります。詳細は投稿で確認できます。 https://aws.Amazon.com/premiumsupport/knowledge-center/malformed-502-api-gateway/

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);
5
aditya

私のAPIはPostmanで動作していましたが、フロントエンドを開発しているときはローカルでは動作しませんでした。 GET、POSTおよびOPTIONSのリソースでCORSを有効にしようとしたときに同じエラーが発生し、@ aditya全体を検索した後、正しい軌道に乗ったが、コードを微調整する必要があった少し。

res.statusCodeと2つのヘッダーを追加する必要があり、機能し始めました。

// GET
// get all myModel
app.get('/models/', (req, res) => {
  const query = 'SELECT * FROM MyTable'
  pool.query(query, (err, results, fields) => {
    //...

    const models = [...results]
    const response = {
      data: models,
      message: 'All models successfully retrieved.',
    }
    //****** needed to add the next 3 lines
    res.statusCode = 200;
    res.setHeader('content-type', 'application/json');
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.send(response)
  })
})
0
Ju66ernaut