165

Amazon は AWS Lambda ( http://aws.amazon.com/lambda/ ) を発表しました。

製品説明には以下が含まれます:

スケジュールされたタスク

AWS Lambda 関数は外部イベント タイマーによってトリガーできるため、定期的にスケジュールされたメンテナンス時間またはピーク時以外に関数を実行できます。たとえば、AWS Lambda 関数をトリガーして、混雑していない時間帯に毎晩アーカイブのクリーンアップを実行できます。

これを読んだとき、ようやく「cron のような」タスクを一貫して実行できる方法を手に入れたことがわかりました。たとえば、毎日午後 5 時に特定のクエリを実行したいとします。

ただし、これはドキュメントのどこにもありません。プログラムイベントのトリガー、または他の AWS サービスからのイベントのみが言及されています。

私は誤解しましたか?または、誰かが私にドキュメントを教えてもらえますか?

4

13 に答える 13

170

2015 年 10 月 8 日に追加されたスケジュールされたイベントのネイティブ サポート:

このAWS ブログ投稿で発表されているように、スケジューリングは「 CloudWatch Events - Schedule 」と呼ばれるイベント ソース タイプ(トリガーとも呼ばれます)としてサポートされるようになり、レートまたは cron 式として表現できます。

スケジュールされたイベントを新しいラムダに追加する

作成の「トリガーの設定」ステップに移動し、「CloudWatch イベント - スケジュール」トリガーを指定します。以下の構成例:

UTC 午後 5 時にスケジュールされたイベントを作成するための構成を示す画像。

スケジュールされたイベントを既存のラムダに追加する

ラムダの [トリガー] タブに移動し、[トリガーの追加] を選択して、[CloudWatch イベント - スケジュール] トリガーを指定します。SNS トリガーを持つ既存のラムダがあるスクリーンショットの例:

Lambda コンソールからトリガー UI を追加するために移動する方法を示す画像。

読み込まれると、このトリガーを構成するための UI は、上記の「スケジュールされたイベントを新しいラムダに追加する」セクションのスクリーンショットと同じになります。

討論

あなたの例では、cron()代わりにrate(). ラムダの cron 式にはすべてのフィールドが必要であり、UTC で表されます。したがって、毎日午後 5 時 (UTC) に関数を実行するには、次の cron 式を使用します。

cron(0 17 * * ? *)

その他のリソース

ノート

  • この機能が最初にリリースされて以来、このイベント タイプの名前は「スケジュールされたイベント」から「CloudWatch イベント - スケジュール」に変更されました。
  • この機能がリリースされる前は、この問題 ( 「AWS Lambda の使用開始」の 42 分 50 秒) に対する推奨される解決策は、SWF を使用してタイマーを作成するか、外部アプリケーションでタイマーを作成することでした。
  • スケジュールされたイベントのブログ投稿が公開されて以来、Lambda UI はオーバーホールされており、その中のスクリーンショットは正確ではなくなりました。最新のリビジョンについては、2017 年 3 月 10 日に更新された上記のスクリーンショットを参照してください。
于 2014-12-09T15:11:09.663 に答える
19

この投稿の時点から、別の解決策が浮上しているようです: Unreliable Town Clock (UTC) を使用して定期的な AWS Lambda 呼び出しをスケジュールする では、著者が SNS トピックUnreliable Town Clockへのサブスクライブを提案しています。私は SWF も SNS も使用したことがありませんが、SNS ソリューションの方が簡単に思えます。記事の抜粋です

信頼できない町の時計 (UTC)

Unreliable Town Clock (UTC) は、新しい無料のパブリック SNS トピック (Amazon Simple Notification Service) で、すべてのサブスクライバーに 15 時間ごとに「チャイム」メッセージをブロードキャストします。チャイムを AWS Lambda 関数、SQS キュー、および E メールアドレスに送信できます。

チャイム属性を使用して、コードを 15 分ごとに実行するか、コードを 1 時間に 1 回 (例: 分 == "00" の場合) または 1 日 1 回 (例: 時間 == "00" および分 = の場合) 実行することができます。 = "00") またはその他の一連の間隔。

将来の特定の時間に一度だけ実行したい関数をサブスクライブすることもできます: 関数が必要な時間になるまで、すべての呼び出しを無視するようにします。時間になったら、ジョブを実行してから、SNS トピックから自分自身を購読解除できます。

コードを Unreliable Town Clock に接続するのは、すばやく簡単です。申し込み手続きやアカウント作成は不要

于 2015-07-11T07:09:20.233 に答える
17

新しいソリューション: Lambda のスケジュールされたジョブ

Werner Vogel は、今夜 (10/08) re:Invent で、AWS Lambda が独自のスケジューラーを持つようになったことを発表しました。

2015 年 10 月 8 日のAWS Lambda リリース ノートを参照してください

また、AWS Lambda コンソールを使用して定期的にスケジュールに基づいてコードを呼び出すように AWS Lambda を設定することもできます。固定レート (時間数、日数、または週数) を指定するか、cron 式を指定できます。例については、「チュートリアル 5: Lambda 関数を使用してスケジュールされたイベントを処理する (Python)」を参照してください。


古い解決策: AWS Data Pipeline を使用したスケジューリング

AWS Data Pipeline を使用して、特定の期間でタスクをスケジュールできます。ShellCommandActivityを使用してパイプラインを構成する場合、アクションは任意のコマンドにすることができます。

たとえば、AWS CLI コマンドを実行して次のことができます。

  • SQSにメッセージを送る
  • またはLambda 関数を直接呼び出す ( invoke を参照)

AWS Data Pipeline のスケジュールされたタスクは、AWS コンソール内で (たとえば、AWS CLI コマンドを使用して) 直接簡単に作成できます。

ここに画像の説明を入力

API を使用してスケジュールを定義することもできます。

{
 "pipelineId": "df-0937003356ZJEXAMPLE",
 "pipelineObjects": [
    {
      "id": "Schedule",
      "name": "Schedule",
      "fields": [
        { "key": "startDateTime", "stringValue": "2012-12-12T00:00:00" }, 
        { "key": "type", "stringValue": "Schedule" }, 
        { "key": "period", "stringValue": "1 hour" }, 
        { "key": "endDateTime", "stringValue": "2012-12-21T18:00:00"  }
       ]
     }, {
      "id": "DoSomething",
      "name": "DoSomething",
      "fields": [
        { "key": "type", "stringValue": "ShellCommandActivity" },
        { "key": "command", "stringValue": "echo hello" },
        { "key": "schedule", "refValue": "Schedule" }
      ]
    }
  ]
}

制限: 最小スケジュール間隔は 15 分です。
料金: 月額約 1.00 ドル。

于 2015-08-21T11:15:59.027 に答える
9

これが私がそれを行う方法です:

  • 次のような Lambda を作成します。

  • 次の CloudWatch アラームを作成します。ApproximateNumberOfMessagesVisible > 0 で 1 分間

  • SNS トピックをアラームに登録する
  • Lambda を SNS トピックにサブスクライブする

これで、約 15 分の分解能のタイマーができました。

次に、他の Lambda 関数が SNS トピックにサブスクライブされ、15 分ごとに呼び出されます。

于 2015-07-14T19:07:12.750 に答える
4

HTTP 経由で (GET や curl などを使用して) ラムダ関数を簡単にトリガーできるようになったため、簡単な解決策は easycron のようなマネージド CRON を使用することです: https://www.easycron.com/ラムダ関数をトリガーして実行します。

同じ問題が発生し、Google App Engine で cron サービスを Python で実行することになりました。これにより、CRON ジョブ自体の柔軟性と複雑さが向上しました。

于 2015-07-30T06:59:03.787 に答える
1

cloudWatch イベントでもスケジュールできます。ルールを作成 -> ターゲット (ラムダ) をアタッチし、ルールに cron/rate wise スケジュールを設定します。

于 2016-06-28T14:41:15.713 に答える
0

ラムダ関数の作成中に、トリガー「CloudWatch Events - Schedule」を作成します

rate = 15 min のようなスケジュール表現で AWS プリセットを使用するか、cron 表現を使用できるようになりました。

ここに画像の説明を入力

あなたの要件では、Cronスケジュールは「0 0 17 1/1 * ? *」です

于 2017-01-29T18:25:03.757 に答える
-1

Diksha は、 AWS チームが推奨する AWS SWF トリガーに基づく AWS Lambda スケジューラです。cron 式を使用してジョブをスケジュールしたり、実行する回数、開始時期、終了時期を指定したりできます。スケジュールされたジョブのステータスと履歴を表示できます。セキュリティは AWS ポリシーによって管理されます。

diksha エンジンをセットアップしたら、次の方法で cron 式を使用して関数をスケジュールできます。

java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "ジョブ名|機能名|コンテキスト|0 0-59 * * * *|10"

このジョブでは、ジョブは毎分 10 回実行されます。AWS SWF はそれ自体で関数をトリガーします。

詳細: https://github.com/milindparikh/diksha

免責事項: 私はプロジェクトの貢献者です。

于 2015-08-14T13:45:59.113 に答える