チュートリアル: CloudWatch Events を使用して AWS Lambda 関数をスケジュールする
イベントを管理するには、Amazon EventBridge が好ましい方法です。CloudWatch Events と EventBridge は同じ基盤となるサービスと API ですが、EventBridge はより多くの機能を提供します。CloudWatch または EventBridge のいずれかで行った変更は、各コンソールに表示されます。詳細については、Amazon EventBridge を参照してください。 |
スケジュールに基づいて AWS Lambda 関数を実行するルールを設定できます。このチュートリアルでは、AWS Management Console または AWS CLI を使用してルールを作成する方法について説明します。AWS CLI を使用したいが、まだインストールしていない場合は、「AWS Command Line Interface ユーザーガイド」を参照してください。
CloudWatch Events は、スケジュール式で秒レベルの精度を提供しません。Cron 式を使用した最小の解決は分です。CloudWatch Events とターゲットサービスが持つ分散性の特質により、スケジュールされたルールがトリガーされてから、ターゲットサービスがターゲットリソースの実行を優先するまでの遅延は、数秒となる可能性があります。スケジュールされたルールは、その分のうちにトリガーされますが、正確に 0 秒にトリガーされません。
ステップ 1: AWS Lambda 関数を作成する
スケジュールされたイベントのログを記録する Lambda 関数を作成します。ルールを作成するときに、この関数を指定します。
Lambda 関数を作成するには
AWS Lambda コンソール (https://console.aws.amazon.com/lambda/
) を開きます。 -
Lambda を初めて使用する場合は、ウェルカムページを参照してください。[Get Started Now] を選択します。そうでない場合、[Lambda 関数の作成] を選択します。
-
[設計図の選択] ページで、フィルターに
hello
を入力し、[hello-world] 設計図を選択します。 -
[トリガーを設定する] ページで、[次に進む] を選択します。
-
[関数を設定する] ページで、以下の作業を行います。
-
Lambda 関数の名前と説明を入力します。たとえば、関数名を「LogScheduledEvent」とします。
-
Lambda 関数のサンプルコードを編集します。例:
'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
-
[Role] で、[Choose an existing role] を選択します。[既存のロール] で基本的な実行ロールを選択します。それ以外の場合は、新しい基本的な実行ロールを作成します。
-
[Next] を選択します。
-
-
[Review] ページで、[Create function] を選択します。
ステップ 2: ルールを作成する
Lambda 関数をスケジュールに従って実行するルールを作成します。
コンソールを使用してルールを作成するには
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
ナビゲーションペインで、[イベント]、[ルールの作成] の順に選択します。
-
[Event Source] で、以下の操作を実行します。
-
[スケジュール] を選択します。
-
[Fixed rate of] を選択し、スケジュール間隔 (たとえば 5 分) を指定します。
-
-
[Targets (ターゲット)] で、[Add target (ターゲットの追加)]、[Lambda function (Lambda 関数)] の順に選択します。
-
[関数] で、作成した Lambda 関数を選択します。
-
[設定の詳細] を選択します。
-
[Rule definition] で、ルールの名前と説明を入力します。
-
[Create rule] を選択します。
必要に応じて、 を使用してルールを作成できますAWS CLI まず、Lambda 関数を呼び出すためのアクセス権限をルールに付与する必要があります。次にルールを作成し、Lambda 関数をターゲットとして追加できます。
を使用してルールを作成するにはAWS CLI
-
次の [put-rule] コマンドを使用して、スケジュールに従ってトリガーするルールを作成します。
aws events put-rule \ --name
my-scheduled-rule
\ --schedule-expression 'rate(5 minutes)'このルールがトリガーされると、このルールのターゲットへの入力として機能するイベントを生成します。以下に示しているのは、イベントの例です。
{ "version": "0", "id": "53dc4d37-cffa-4f76-80c9-8b7d4a4d2eaa", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2015-10-08T16:53:06Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/my-scheduled-rule" ], "detail": {} }
-
次の [add-permission] コマンドを使用して、CloudWatch Events サービスプリンシパル (events.amazonaws.com) や指定された Amazon リソースネーム (ARN) を持つルールに対するスコープ権限を信頼します。
aws lambda add-permission \ --function-name
LogScheduledEvent
\ --statement-idmy-scheduled-event
\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1
:123456789012
:rule/my-scheduled-rule
-
次の put-targets コマンドを使用して、このルールに作成した Lambda 関数を 5 分ごとに実行するように追加します。
aws events put-targets --rule
my-scheduled-rule
--targets file://targets.json次の内容で、
targets.json
ファイルを作成します。[ { "Id": "1", "Arn": "arn:aws:lambda:
us-east-1
:123456789012
:function:LogScheduledEvent
" } ]
ステップ 3: ルールを確認する
ステップ 2 を完了してから少なくとも 5 分後に、Lambda 関数が呼び出されたことを確認できます。
ルールをテストするには
-
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
ナビゲーションペインで、[Events]、[Rules] を選択し、作成したルールの名前を選択して、[Show metrics for the rule] を選択します。
-
Lambda 関数からの出力を表示するには、以下の操作を実行します。
-
ナビゲーションペインで [ログ] を選択します。
-
Lambda 関数 (/aws/lambda/function-name) のロググループの名前を選択します。
-
起動したインスタンスの関数によって提供されるデータを表示するログのストリーム名を選択します。
-
-
(オプション) 終了したら、ルールを無効にすることができます。
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
ナビゲーションペインで、[イベント]、[ルール] を選択します。
-
ルールを選択し、[アクション]、[無効化] を選択します。
-
確認を求められたら、[無効にする] を選択します。