AmazonはAWS Lambdaを発表しました( http://aws.Amazon.com/lambda/ )。
製品の説明には以下が含まれます。
スケジュールされたタスク
AWS Lambda関数は外部イベントタイマーによってトリガーできるため、定期的にスケジュールされたメンテナンス時間またはピーク時以外の時間に関数を実行できます。たとえば、AWS Lambda関数をトリガーして、空き時間に夜間のアーカイブクリーンアップを実行できます。
これを読んだとき、私は最終的に一貫して「cronのような」タスクを行う方法があると理解しました。毎日午後5時に特定のクエリを実行したいとしましょう。
しかし、私はドキュメントのどこにもこれを見つけません。プログラマティックイベント、または他のAWSサービスからのイベントのトリガーのみに言及しています。
誤解しましたか?または、誰かがドキュメントを教えてくれますか?
この AWSブログの投稿 で発表されているように、スケジューリングは、「=CloudWatch Events-Schedule」と呼ばれる イベントソースタイプ (トリガーとも呼ばれる)としてサポートされるようになりました。レートまたはcron表現で表されます。
作成の「トリガーの設定」ステップに移動し、「CloudWatchイベント-スケジュール」トリガーを指定します。以下の構成例:
ラムダの[トリガー]タブに移動し、[トリガーの追加]を選択して、[CloudWatchイベント-スケジュール]トリガーを指定します。 SNSトリガーを持つ既存のラムダがあるスクリーンショットの例:
ロードされると、このトリガーを構成するUIは、上記の「スケジュールされたイベントを新しいラムダに追加する」セクションのスクリーンショットと同じです。
あなたの例では、cron()
の代わりにrate()
を使用したいと思うでしょう。ラムダのCron式はすべてのフィールドを必要とし、UTCで表されます。したがって、毎日午後5時(UTC)に関数を実行するには、次のcron式を使用します。
cron(0 17 * * ? *)
lambda-canary
というcron式を使用するサンプル「ブループリント」を提供しています。これは、AWSコンソールからの関数作成中に選択できます。Werner Vogelは今夜(10/08)re:Inventで、AWS Lambdaが独自のスケジューラーを持つようになったことを発表しました。
AWS Lambdaコンソールを使用して、定期的に定期的にコードを呼び出すようにAWS Lambdaをセットアップすることもできます。固定レート(時間数、日数、または週数)を指定するか、cron式を指定できます。例については、「 ウォークスルー5:Lambda関数を使用してスケジュールされたイベントを処理する(Python) 」を参照してください。
AWS Data Pipelineを使用して、特定の期間のタスクを schedule にできます。 ShellCommandActivity でPipelineを構成する場合、アクションは任意のコマンドにできます。
たとえば、AWS CLIコマンドを実行して次のことができます。
AWSコンソールで直接AWS Data Pipelineスケジュールタスクを簡単に作成できます(AWS CLIコマンドなどを使用):
APIを使用して define スケジューリングを行うこともできます。
{
"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" }
]
}
]
}
ここに私がそれをする方法があります:
次のLambdaを作成します。
以下のCloudWatchアラームを作成:1分間のメッセージの概数> 0
これで、約15分の解像度のタイマーができました。
その後、他のLambda関数がSNSトピックにサブスクライブされ、15分ごとに呼び出されます。
簡単に可能 HTTP経由でラムダ関数をトリガーする(たとえば、GETまたはcurlを使用する)ため、簡単な解決策はeasycronのようなマネージドCRONを使用することです: https://www.easycron。 com / ラムダ関数の実行をトリガーします。
同じ問題があり、pythonのGoogle App Engineでcronサービスを実行することになりました。これにより、CRONジョブ自体の柔軟性と複雑さが増しました。
特定の時間間隔でラムダでクエリを実行する簡単な方法は、ラムダ関数のルールを設定することです。そのためには、ラムダ関数を作成した後、cloudwatch >> rules >> scheduleに移動します。 cron式を定義し、ターゲットセクションでトリガーするラムダ関数を選択します。
Webコンソールの方法は非常に簡単です。ラムダのCloudWatch
ルールを作成し、ラムダのTriggers
タブに追加するだけです。
aws cli
で自動化する必要がある人のために、
関数の作成
aws lambda create-function --function-name ${FUNCTION-NAME} \
--runtime Java8 \
--role 'arn:aws:iam::${Account}:role/${ROLE}' \
--handler org.yourCompany.LambdaApp \
--code '{"S3Bucket":"yourBucket", "S3Key": "RC/yourapp.jar"}' \
--description 'check Hive connection' \
--timeout 180 \
--memory-size 384 \
--publish \
--vpc-config '{"SubnetIds": ["subnet-1d2e3435", "subnet-0df4547a"], "SecurityGroupIds": ["sg-cb17b1ae", "sg-0e7ae277"]}' \
--environment Variables={springEnv=dev}
ルールの作成
## create
aws events put-rule --name ${ruleName} \
--schedule-expression 'rate(5 minutes)' \
--state ENABLED \
--description 'check Hive connection'
# grant permission to the Rule to allow it to trigger the function
aws lambda add-permission --function-name ${functionName} \
--statement-id 123 \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:acc:rule/${ruleName}
# link rule and function
aws events put-targets --rule ${ruleName} \
--targets '[{"Id":"1", "Arn":"arn:aws:lambda:us-east-1:acc:function:RC-checkhive"}]'
ラムダ関数の作成中にトリガー「CloudWatch Events-Schedule」を作成します
これで、レート= 15分などのスケジュール式でAWSプリセットを使用するか、cron式を使用できます。
要件については、Cronスケジュールは「0 0 17 1/1 *?*」です。
CloudWatchイベントでもスケジュールできます。ルールを作成->ターゲット(ラムダ)をアタッチし、ルールにcron/rate賢明なスケジュールを設定します。