AWS Lambda関数を呼び出す時間を設定して、その関数をそのときだけ呼び出せるようにしたいのですが。たとえば、2017年12月19日の午後9時にLambda関数を実行したいのですが、繰り返したくありません。19日の午後9時にだけ呼び出したくありません。
CloudWatchがスケジュールされたイベントを提供していることを理解しており、このリマインダーをスケジュールする時間が入力されると、CloudWatchのスケジュールされたイベントが作成され、その時間内に起動するように作成されます(たとえば、午後8時22分にスケジュールした場合)午後9時に実行する場合は38分です)、次に午後9時にLambda関数を呼び出し、CloudWatchのスケジュールされたイベントを削除します。これに関する私の問題は、CloudWatchのスケジュールされたイベントが作成されると、すぐに実行され、その後、指定された間隔で実行されることです。
私は別の解決策を考えることができないので、他のアイデアはありがたいです。前もって感謝します!
次の構文を使用してラムダイベントをスケジュールできます。
cron(Minutes Hours Day-of-month Month Day-of-week Year)
注:すべてのフィールドが必須で、タイムゾーンはUTCのみです
詳細はこちら AWSドキュメント を参照してください。
ありがとう
イベントを介したラムダ関数の呼び出しは、非同期呼び出しオプションです。 CloudWatchEventを使用してLambda関数をトリガーすることで、cronジョブを使用できますが、同じcronスケジュールでLambda関数が複数回トリガーされるため、依然として問題が発生しています。PFBリンク: https://cloudonaut.io/your-lambda-function -might-execute-twice-deal-with-it /
ただし、これにはDynamo DBをアカウントに実装して、Lambda関数をべき等にする必要があります。
DynamoDB TTL
機能を使用して、これを簡単に実装できます。以下を実行するだけです。
1-アイテムをTTL
で書き込みます。これは、ラムダ関数を実行または呼び出す正確な時間です。
2- DynamoDB Streams
を設定して、アイテムのremove
イベントでラムダ関数をトリガーします。
アイテム/レコードの有効期限が近づくと、ラムダが呼び出されます。 dynamodbの項目はすでになくなっているので、何も削除またはクリーンアップする必要はありません。
注:ただし、このアプローチは実装が簡単で非常によく拡張されますが、注意すべき点が1つあります。 DynamoDB TTL
をスケジューリングメカニズムとして使用すると、遅延が発生する可能性があるため、正確な時間精度を保証できません。スケジュールされたタスクは数分遅れて実行されます。