10

エンドポイントと通信する Lambda 関数を作成しています。500 エラーが発生した場合、関数が何度か再試行するようにしたいと思います。

exports.handler私は自分の関数内でこのようなことをしたいと思っていました:

exports.handler = function(event, context){  ...
  if (!error && response.statusCode >= 500 && response.statusCode < 600) {
    if (event.retries <= 5) {
      setTimeout(exports.handler(event, context), 60000);
    }
  }...

context変数をどうするのが正しいのか疑問に思っています。

上で引用したコードの後、私はすべきですcontext.fail()か?または、この再試行プロセスの後の繰り返しで発生するのを待つ必要がありますcontext.succeed()か?context.fail()

それぞれが登場しcontextたオリジナルのレベルで解決する必要があるのか​​ 、それともどのレベルでも解決でき、Lambda実行全体で解決できるのかを判断するのに苦労しています。exports.handlercontext

アドバイスをありがとう。

4

1 に答える 1

16

ここを見てください:

http://aws.amazon.com/lambda/faqs/

この関数は、Lambda があきらめる前に最大 3 回実行されます。

ただし、「context.succeed」を呼び出すと、ラムダは再試行しません (関数が成功したと見なされます)。

「context.fail」を呼び出すと、関数が再試行されます。

注意すべきことの 1 つは、適切なタイミングで「context.succeed」または「context.fail」を呼び出すように注意する必要があることです。ノードがまだ処理していない保留中のコールバックでいずれかを呼び出すと、Lambda 関数は早期に中断され、コードの一部が実行される可能性があります。そのため、context.succeed または context.fail を呼び出すのに最適な場所は、他の処理を行う必要がないことがわかっているコールバック内です。

この記事もチェックする価値があります。

https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/

于 2015-07-09T07:46:13.490 に答える