EventBridgeの時刻起動ルールを作成して、指定時刻にAWS Lambdaを起動する方法を解説します。
Lambda関数のアクセス権限を設定する
EventBridgeからLambda関数を起動できるよう、アクセス権限を設定します。
- [設定]から[アクセス権限]を選択します。
- [アクセス権限を追加]を選択します。
- ポリシーステートメントを指定します。
- [AWS]のサービスを選択
- サービスに[EventBridge]を選択
- ステートメントIDは任意のIDを指定
- プリンシパルは初期表示値を指定
- ソースARNは[arn:aws:events:リージョンID:アカウントID:rule/*]を指定
- アクションは[lambda:InvokeFunction]を指定
イベントルールを作成し、Lambda関数へターゲットを設定する
以下の順でイベントルールを作成し、Lambda関数へターゲットを設定します。
- cron形式で起動時刻を定義する(ここで指定する時刻は協定世界時[UTC]です。)
- イベントルールを作成する
- イベントのターゲットにLambda関数を設定する
import os
import boto3
import json
from datetime import timezone,timedelta,datetime
def main_logic():
event_name = "event-sample"
JST = timezone(timedelta(hours=+9), 'JST')
now = datetime.now(JST)
# 3分後を起動時刻に設定
target_time = now + timedelta(minutes=+3)
# cron時刻表現を作成([UTC]で指定)
cron_expression = "cron(" + target_time.astimezone(timezone.utc).strftime("%M %H %d %m ? %Y") + ")"
events_client = boto3.client('events')
response = events_client.put_rule(
Name=event_name,
ScheduleExpression=cron_expression,
)
param = {}
response = events_client.put_targets(
Rule=event_name,
Targets=[
{
'Id': "sample-lambda-func",
'Arn': "arn:aws:lambda:ap-southeast-1:xxxxxxxxxxxxx:function:sample-lambda-func",
'Input': json.dumps(param)
}
]
)
👇参考URL
- https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/events.html#CloudWatchEvents.Client.put_rule
- https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/events.html#CloudWatchEvents.Client.put_targets
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/access-control-resource-based.html