web-dev-qa-db-ja.com

AWS Lambdaの実行を停止させる方法は?

AWS Lambda関数が_Kinesis Firehose_に対して操作を実行します。この関数はバックオフメカニズムを使用します。 (現時点では、計算時間を無駄にしていると思います)。

しかしとにかく、私のコードのある時点で、実行に失敗したいと思います。実行を停止するには、どのコマンドを使用する必要がありますか?

P.s.次のようなコマンドがあることがわかりました。

  • context.done()
  • context.succeed()
  • context.fail()

私はあなたに言わなければなりません、私はできませんでしたこれらのコマンドに関するドキュメントをAWSドキュメントで見つけてください。

6
johni

これらのメソッドは、Node.js v0.10.42で最初に導入されたため、下位互換性のためにのみ使用できます。 NodeJSバージョン4. *または6. *を使用する場合。 callback()関数を使用します。

チェック: Lambdaのコールバックパラメーターの使用 この関数を利用する方法の詳細については。

3
David Gatti

これが私の解決策です(おそらく完璧ではありませんが、私にとってはうまくいきます)

time.sleep(context.get_remaining_time_in_millis() / 1000)

コードはPythonですが、他の言語を使用して同じロジックを適用できると確信しています。アイデアは、「再試行」の残りの時間、ラムダ関数を「スリープ状態にする」ことです。

完全な例は次のようになります。

... 
some code that processes logs from CloudWatch when my ECS container stops(job is finished) 
...

# Send an email notification
sns_client = client('sns')
                  sns_client.publish(
                      TopicArn=sns_topic,
                      Subject="ECS task success detected for container",
                      Message=json.dumps(detail)
                  )
                  # Make sure it was send only once, therefore 'sleep'
                  # untill lambda stops 'retries'
                  time.sleep(context.get_remaining_time_in_millis() / 1000) 

したがって、電子メールは1回だけ送信されます。お役に立てば幸いです。

0
Leo Skhrnkv