Amazon EventBridge SchedulerでDynamoDB APIを直接呼び出してみた

2022.11.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、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へエラーログは記録されないようで、期待通りに実行がされなかった場合にデバッグが少し難しいかも知れません。

参考

以上