web-dev-qa-db-ja.com

AWS Lambda関数を、指定された単一の将来の時点で1回だけ呼び出す

AWS Lambda関数を呼び出す時間を設定して、その関数をそのときだけ呼び出せるようにしたいのですが。たとえば、2017年12月19日の午後9時にLambda関数を実行したいのですが、繰り返したくありません。19日の午後9時にだけ呼び出したくありません。

CloudWatchがスケジュールされたイベントを提供していることを理解しており、このリマインダーをスケジュールする時間が入力されると、CloudWatchのスケジュールされたイベントが作成され、その時間内に起動するように作成されます(たとえば、午後8時22分にスケジュールした場合)午後9時に実行する場合は38分です)、次に午後9時にLambda関数を呼び出し、CloudWatchのスケジュールされたイベントを削除します。これに関する私の問題は、CloudWatchのスケジュールされたイベントが作成されると、すぐに実行され、その後、指定された間隔で実行されることです。

私は別の解決策を考えることができないので、他のアイデアはありがたいです。前もって感謝します!

13
Ethan Harlig

次の構文を使用してラムダイベントをスケジュールできます。

cron(Minutes Hours Day-of-month Month Day-of-week Year)

:すべてのフィールドが必須で、タイムゾーンはUTCのみです

詳細はこちら AWSドキュメント を参照してください。

ありがとう

12
Kush Vyas

イベントを介したラムダ関数の呼び出しは、非同期呼び出しオプションです。 CloudWatchEventを使用してLambda関数をトリガーすることで、cronジョブを使用できますが、同じcronスケジュールでLambda関数が複数回トリガーされるため、依然として問題が発生しています。PFBリンク: https://cloudonaut.io/your-lambda-function -might-execute-twice-deal-with-it /

ただし、これにはDynamo DBをアカウントに実装して、Lambda関数をべき等にする必要があります。

0
Gaurav Singh

DynamoDB TTL機能を使用して、これを簡単に実装できます。以下を実行するだけです。

1-アイテムをTTLで書き込みます。これは、ラムダ関数を実行または呼び出す正確な時間です。

2- DynamoDB Streamsを設定して、アイテムのremoveイベントでラムダ関数をトリガーします。

アイテム/レコードの有効期限が近づくと、ラムダが呼び出されます。 dynamodbの項目はすでになくなっているので、何も削除またはクリーンアップする必要はありません。

注:ただし、このアプローチは実装が簡単で非常によく拡張されますが、注意すべき点が1つあります。 DynamoDB TTLをスケジューリングメカニズムとして使用すると、遅延が発生する可能性があるため、正確な時間精度を保証できません。スケジュールされたタスクは数分遅れて実行されます。

0