Amazon EventBridgeルールでAWS Step Functionsステートマシンを定期実行する

2021.11.04

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、Amazon EventBridgeルールでAWS Step Functionsステートマシンを定期実行してみました。

Amazon EventBridgeとは

Amazon EventBridge は、コードを作成せずに、AWS のサービス、独自のアプリケーション、サービス型ソフトウェア (SaaS) アプリケーションのデータの変更にリアルタイムにアクセスできるサービスです。使用を開始するには、Amazon EventBridge コンソールでイベントソースを選択し、AWS Lambda、Amazon SNS、Amazon Kinesis Data Firehose といった数々の AWS のサービスの中からターゲットを選択します。Amazon EventBridge により、イベントがほぼリアルタイムで自動的に送信されます。

やってみた

AWSマネジメントコンソールと、AWS CDKによる方法それぞれでやってみました。

マネジメントコンソールの場合

下記の作成済みのステートマシンMyStateMachineを実行対象にします。

EventBridgeのマネジメントコンソールを開き、[ルールの作成]をクリックします。

[ルールを作成]ページが開きます。ルール名を指定し、[パターンを定義]で定期実行のスケジュールを指定します。[スケジュール]-[固定速度ごと]で今回は5分とします。

[ターゲットを選択]で実行対象のステートマシンを指定します。[ターゲット]でStep Functions ステートマシンを選択し、対象のステートマシン(MyStateMachine)を指定します。[作成]をクリックしてルールを作成します。

イベントルールを作成できました。

ステートマシンが5分毎に実行できていますね。

AWS CDKの場合

CDKコードは下記のようになります。

import * as cdk from '@aws-cdk/core';
import * as sfn from '@aws-cdk/aws-stepfunctions';
import * as events from '@aws-cdk/aws-events';
import * as targets from '@aws-cdk/aws-events-targets';

export class AwsCdkAppStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    //ステートマシン
    const stateMachine = new sfn.StateMachine(this, 'sampleStateMachine', {
      stateMachineName: 'sampleStateMachine',
      definition: new sfn.Pass(this, 'pass', {}),
    });

    //イベントルール
    new events.Rule(this, 'sampleRule', {
      ruleName: 'sampleRule',
      schedule: events.Schedule.rate(cdk.Duration.minutes(5)), //5分毎に実行
      targets: [new targets.SfnStateMachine(stateMachine)],
    });
  }
}

cdk deployしてリソースをデプロイします。

作成されたステートマシンを見ると、5分毎に実行できていますね。

イベントルールのスケジュール

イベントルールのスケジュールの指定方法には、RateCronがあります。今回はRateを指定しましたが、Cronを使うことにより更に複雑なスケジュール条件を表現できます。詳しくは下記をご覧ください。

参考

以上