1

ショートバージョン: AWS ラムダで定期的にイベントをトリガーするにはどうすればよいですか?

LONG VERSION: 私の状況では、特定の時間内に有効期限が切れるイベントがデータベースにあるようなものです。イベントの有効期限が切れたことがわかったときに、関数 (プッシュ通知の送信、行の削除など) を実行したいと考えています。作成されたイベントごとにタイマーを設定するのは現実的ではないことはわかっていますが、データベースを毎分または何かスキャンして期限切れのイベントを探してコードを実行するものはありますか? そうでない場合、私の解決策に代わるものはありますか?

4

2 に答える 2

1

UUID をキーとする DynamoDB テーブルにイベントを保存し、このテーブルにハッシュ範囲スキーマ GSI を設定できます。ハッシュ キーは、イベントの有効期限が切れる時間 20150701T04Z などの有効期限バケットであり、範囲キーはGSI は正確なタイムスタンプ (UNIX 時間) である可能性があります。そうすれば、特定の時間有効期限バケットに対して、イベントが期限切れになる時間に範囲クエリを使用し、重要な条件を利用して、関心のある時間範囲に読み取りを制限できます。GSI は一意性を強制しません。であるため、同じ Unix 時間に複数のイベントがあっても問題ありません。すべての属性を射影することによってKEYS_ONLY または INCLUDE の代わりに、ベース テーブルへの 2 回目の読み取りを行わずに、イベントの有効期限を GSI から遠ざけることができます。有効期限バケットのサイズを調整することにより (時間、分、または日がすべて適切な候補です)、ベース テーブルへの書き込みと GSI でのクエリが調整されない可能性を大幅に減らすことができます。ハッシュ キーは、ハッシュ キー空間全体に均等に分散されます。

イベント処理と Lambda の使用に関しては、最初に、EC2 インスタンスでクエリを実行し、有効期限が切れたときにイベント テーブルからアイテムを削除する (または期限切れとしてマークして廃棄する) ことができます。イベント項目を削除すると、テーブルのサイズが管理しやすくなり、テーブルのパーティションでIOPSが低下するのを防ぐことができます。アイテムの数が際限なく増加すると、テーブルをアッププロビジョニングしない限り、テーブルのパーティションが分割され続け、各パーティションでプロビジョニングされたスループットがますます少なくなります。パイプラインの次の段階では、イベント テーブルで DynamoDB ストリームを有効にし、古い画像と新しい画像を含むストリーム ビュー タイプを使用できます。次に、 Lambda 関数をストリームにアタッチできます。イベント駆動型の処理 (プッシュ通知など) を行います。old が入力され、new が null の場合、または古いイメージと新しいイメージの違いがイベントが廃棄されたことを示している場合に、Lambda 関数で通知を発生させることができます。

于 2015-07-01T04:18:14.410 に答える
0

現在、スケジュールされた Lambda ジョブがサポートされていると思いますが、まだ試していません。https://aws.amazon.com/about-aws/whats-new/2015/10/aws-lambda-supports-python-versioning-scheduled-jobs-and-5-minute-functions/

于 2015-11-12T21:24:46.683 に答える