私はAmazonのLambda-API実装の初心者です。
私は非常にシンプルなAPIをデプロイしています。APIGatewayでトリガーするPython 2.7印刷 "Hello World"を含む非常にシンプルなラムダ関数です。ただし、[URLの呼び出し]リンクをクリックすると、 「{"メッセージ": "内部サーバーエラー"}」と表示されます。
したがって、私はここで何が問題なのかを確認しようとしているので、API自体をクリックすると、メソッド実行で次の項目が灰色になっていることがわかります: "Integration Response:Proxy integrations cannot be応答を変換するように構成されています。 "
多くの異なる構成をテストしましたが、それでも同じエラーが発生します。このステップが灰色になっている理由はわかりません。
APIゲートウェイとラムダ関数を統合しようとすると、同じ問題が発生しました。基本的に、数時間を費やした後、私は理解します。したがって、新しいリソースまたはメソッドを作成するときに、Use Lambda Proxy統合がデフォルトで設定されていました。
したがって、これを削除する必要があります。 Integration Requestに従い、Lambda Proxy統合を使用してチェックを外します
次に、Resources、Atctionタブで、CORSを有効にする
これが完了したら、APIをもう一度デプロイして、関数をテストします。 また、このトピックでは、内部で何が起こっているかを説明します。
幸運を...
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);
私の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)
})
})