こんにちは、CX事業本部 IoT事業部の若槻です。
先日にAWSの新機能としてAmazon EventBridge Schedulerがリリースされました。
タイムゾーンを指定した定期実行を行えたり、AWSサービスのAPIを直接実行できたりとなかなかに便利そうです。
今回は、そんなAmazon EventBridge Schedulerを使って、DynamoDB APIを直接呼び出してみました。
やってみた
Amazon EventBridge SchedulerコンソールからSchedulerを作成してみます。
[Create schedule]をクリック。
スケジュールパターンを指定して[Next]。
[Select target > Taget detail > Taget API]で[All APIs]を選択すると、APIを直接叩きたいAWSサービスを選択できます。
検索をして、DynamoDB
を選択。
するとDynamoDB APIのアクションを一覧から選択できるようになります。
検索をして、PutItem
を選択。
するとエディターでターゲットのAPIに渡すパラメータを指定します。
パラメータを指定したら[Next]をクリック。
{
"Item": {
"id": {
"S": "id001"
},
"message": {
"S": "こんにちは"
}
},
"TableName": "MyData"
}
DynamoDBテーブルへのPut権限を持つロールを選択して[Next]をクリック。
最後に設定内容をレビューしてOKなら[Create schedule]をクリック。
ターゲットのAPIを指定のペイロードを渡して叩く設定を行えました。
備考
Schedulerの実行権限の不備
Schedulerの作成時に次のエラーに遭遇しました。
The execution role you provide must allow AWS EventBridge Scheduler to assume the role.
Schedulerの実行ロールのTrusted Entityに次のStatementを指定する必要がありました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "scheduler.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
CloudWatchで実行の記録を見てみる
EventBridge Schedulerの実行により下記の3つのCloudWatch Metrics メトリクスが記録されます。
- InvocationAttemptCount
- InvocationDroppedCount
- TargetErrorCount
下記のメトリクスのグラフは、ターゲットのDynamoDBテーブルを作り忘れていたため最初は実行の失敗によりTargetErrorCount
が記録され、作成後は実行が成功となったためInvocationAttemptCount
が記録されています。
ちなみに実行が失敗した場合でもCloudWatch Logsへエラーログは記録されないようで、期待通りに実行がされなかった場合にデバッグが少し難しいかも知れません。
参考
以上