チュートリアル: EventBridge を使用した AWS Lambda 関数のスケジュール
スケジュールに基づいて AWS Lambda 関数を実行するルールを設定できます。このチュートリアルでは、AWS Management Console または AWS CLI を使用してルールを作成する方法について説明します。AWS CLI を使用したいがインストールしていない場合は、「AWS CLI バージョン 2 のインストール、更新、アンインストール」を参照してください。
スケジュールについて、EventBridge のスケジュール式は、秒レベルの精度ではありません。cron 式を使用した最小の粒度は 1 分です。EventBridge とターゲットサービスは分散しているため、スケジュールされたルールがトリガーされてからターゲットサービスがターゲットリソースを実行するまでの間に数秒の遅延が発生することもあります。
ステップ 1: Lambda 関数を作成する
スケジュールされたイベントのログを記録する Lambda 関数を作成します。
Lambda 関数を作成するには
AWS Lambda コンソール (https://console.aws.amazon.com/lambda/
) を開きます。 -
関数の作成 を選択します。
-
Author from scratch(製作者を最初から) を選択します。
-
Lambda 関数の名前と説明を入力します。例えば、関数名を
LogScheduledEvent
とします。 -
残りのオプションはデフォルトのまま、[Create function] (関数の作成) を選択します。
-
関数ページの [Code] (コード) タブで、index.js をダブルクリックします。
-
既存のコードを以下のコードに置き換えます。
'use strict'; exports.handler = (event, context, callback) => { console.log('LogScheduledEvent'); console.log('Received event:', JSON.stringify(event, null, 2)); callback(null, 'Finished'); };
-
[Deploy] (デプロイ) をクリックします。
ステップ 2: ルールを作成する
ステップ 1 で作成した Lambda 関数をスケジュールに従って実行するルールを作成します。
ルールを作成するには、コンソールまたは AWS CLI を使用します。AWS CLI を使用するには、まず Lambda 関数を呼び出すためのアクセス許可をルールに付与します。次にルールを作成し、Lambda 関数をターゲットとして追加できます。
ルールを作成するには ( コンソール)
Amazon EventBridge コンソール (https://console.aws.amazon.com/events/
) を開きます。 -
ナビゲーションペインで [Rules] (ルール) を選択します。
-
[Create rule] (ルールの作成) を選択します。
-
ルールの名前と説明を入力します。
ルールには、同じリージョン内および同じイベントバス上の別のルールと同じ名前を付けることはできません。
-
[Event bus] (イベントバス) では、このルールに関連付けるイベントバスを選択します。このルールをアカウントからのイベントと一致させるには、AWSデフォルトのイベントバスを選択します。アカウントの AWS サービスがイベントを発行すると、常にアカウントのデフォルトのイベントバスに移動します。
-
[Rule type] (ルールタイプ) では、[Schedule] (スケジュール) を選択します。
-
[Next] (次へ) をクリックします。
-
[Schedule pattern] (スケジュールパターン) については、[A schedule that runs at a regular rate, such as every 10 minutes.] (10 分ごとなど、定期的に実行されるスケジュール。) を選択して、
5
を入力し、ドロップダウンリストから [Minutes] (分) を選択します。 -
[Next] (次へ) をクリックします。
-
[Target types] (ターゲットタイプ) では、AWS[services] (サービス) を選択します。
-
ターゲットの選択では、ドロップダウンリストから [Lambda function] (Lambda 関数) を選択します。
-
[Function] (関数) で、[Step 1: Create a Lambda function] (ステップ 1:Lambda 関数を作成する) セクションで作成した Lambda 関数を選択します。この例では、
LogScheduledEvent
を選択します。 -
[Next] (次へ) をクリックします。
-
[Next] (次へ) をクリックします。
-
ルールの詳細を確認し、[Create rule] (ルールの作成) を選択します。
ルール (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": {} }
-
EventBridge サービスプリンシパル (
events.amazonaws.com
) のアクセス許可を使用してルールを実行するには、add-permission
コマンドを使用します。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
-
次の内容で、
targets.json
ファイルを作成します。[ { "Id": "1", "Arn": "arn:aws:lambda:
us-east-1
:123456789012
:function:LogScheduledEvent
" } ] -
ステップ 1 で作成した Lambda 関数をルールに追加するには、
put-targets
コマンドを使用します。aws events put-targets --rule
my-scheduled-rule
--targets file://targets.json
ステップ 3: ルールを確認する
ステップ 2 を完了してから少なくとも 5 分待ってから、Lambda 関数が呼び出されたことを確認できます。
Lambda 関数からの出力を表示する
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
ナビゲーションペインで [ログ] を選択します。
-
Lambda 関数 (
/aws/lambda/
) のロググループの名前を選択します。function-name
-
起動したインスタンスの関数によって提供されるデータを表示するログのストリーム名を選択します。
ステップ 4: 成功を確認する
CloudWatch ログに Lambda イベントがある場合、このチュートリアルは正常に完了しています。イベントが CloudWatch ログにない場合は、ルールが正常に作成されたことを確認してトラブルシューティングを開始し、ルールが正しく見える場合は、Lambda 関数のコードが正しいことを確認します。
ステップ 5: リソースをクリーンアップする
このチュートリアル用に作成したリソースは、保存を希望しない限り、すぐに削除できます。使用しなくなった AWS リソースを削除することで、AWS アカウントに請求される料金が発生しないようにできます。
EventBridge ルールを削除するには
-
Eventbridge コンソールの [Rules
] (ルール) ページを開きます。 -
作成したルールを選択します。
-
[Delete] (削除) をクリックします。
-
[Delete] (削除) をクリックします。
Lambda 関数を削除するには
-
Lambda コンソールの [Functions]
(関数) ページを開きます。 -
作成した関数を選択します。
-
[Actions] (アクション) で、[Delete] (削除) を選択します。
-
[削除] を選択します。