LAMBDA_PROXY統合リクエストタイプのAPIゲートウェイがあります。 Lambdaでcontext.succeed
を呼び出すと、応答ヘッダーは期待どおりにコード302
で返送されます(以下を参照)。ただし、500
および404
エラーを処理したいのですが、これまでのところ確実なのは、502 Bad Gateway
を取得しているときにエラーが誤って返されることだけです。私のcontext.fail
の何が問題になっていますか?
これが私のhandler.jsです
const handler = (event, context) => {
//event consists of hard coded values right now
getUrl(event.queryStringParameters)
.then((result) => {
const parsed = JSON.parse(result);
let url;
//handle error message returned in response
if (parsed.error) {
let error = {
statusCode: 404,
body: new Error(parsed.error)
}
return context.fail(error);
} else {
url = parsed.source || parsed.picture;
return context.succeed({
statusCode: 302,
headers: {
Location : url
}
});
}
});
};
Lambda関数(またはcontext.fail)内で例外をスローすると、API Gatewayはバックエンドで問題が発生したかのようにそれを読み取り、502を返します。これがランタイム例外である場合は、500/404を返します。必要なステータスコードとメッセージを指定してcontext.succeedメソッドを使用します。
if (parsed.error) {
let error = {
statusCode: 404,
headers: { "Content-Type": "text/plain" } // not sure here
body: new Error(parsed.error)
}
return context.succeed(error);
同じ問題がありました。私の場合、関数がcontext.done()
で何も返さないという問題がありました。したがって、context.done(null)
の代わりに、context.done(null, {});
を実行しました
私は複数のことから502を手に入れました。これが私がこれまでに理解したものです。
回答1:
claudia generate-serverless-express-proxy --express-module {src/server?}
claudiaとexpressを使用していない場合、この回答は役に立ちません。
回答2:
ラムダ関数->基本設定->タイムアウト。妥当なものに増やしてください。デフォルトは3秒です。ただし、最初に構築する場合は通常、時間がかかります。