AWS Step Functions Express WorkflowをAWS CDKで作ってみた
こんにちは、CX事業本部 IoT事業部の若槻です。
AWS Step FunctionsのWorkflowには、STANDARDとEXPRESSの2種類があります。
既定のSTANDARDは非同期実行ですが、EXPRESSは同期実行となり、Workflowを同期的に呼び出して出力を取得することができます。
今回は、AWS Step Functions Express WorkflowをAWS CDKで作ってみました。
やってみた
環境構築
AWS CDK v2(TypeScript)で次のようなCDKスタックを作成します。
import { Construct } from 'constructs'; import { aws_stepfunctions, Stack, StackProps } from 'aws-cdk-lib'; export class CdkAppStack extends Stack { constructor(scope: Construct, id: string, props: StackProps) { super(scope, id, props); // Express Workflow new aws_stepfunctions.StateMachine(this, 'stateMachine', { stateMachineName: 'stateMachineExpress', stateMachineType: aws_stepfunctions.StateMachineType.EXPRESS, definition: new aws_stepfunctions.Pass(this, 'pass', { parameters: { key1: 'val1', }, }), }); } }
- Express Workflowは、
aws_stepfunctions.StateMachine()
のstateMachineType
プロパティでEXPRESS
を指定することにより作成できます。(既定ではSTANDARD
)
上記をCDK Deployしてスタックをデプロイします。
動作確認
aws . stepfunctions start-sync-executionコマンドで作成したWorkflowを実行してみます。
$ ACCOUNT_ID=<ACCOUNT_ID> $ STATE_MACHINE_NAME=<STATE_MACHINE_NAME> $ aws stepfunctions start-sync-execution \ --state-machine-arn "arn:aws:states:ap-northeast-1:${ACCOUNT_ID}:stateMachine:${STATE_MACHINE_NAME}" { "executionArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:express:stateMachineExpress:0201148f-e0a9-426e-b631-8608604820fb:eced9f1b-a691-4c39-aef1-232fe5ea9366", "stateMachineArn": "arn:aws:states:ap-northeast-1:XXXXXXXXXXXX:stateMachine:stateMachineExpress", "name": "0201148f-e0a9-426e-b631-8608604820fb", "startDate": "2022-07-02T23:41:20.902000+09:00", "stopDate": "2022-07-02T23:41:20.906000+09:00", "status": "SUCCEEDED", "input": "{}", "inputDetails": { "included": true }, "output": "{\"key1\":\"val1\"}", "outputDetails": { "included": true }, "billingDetails": { "billedMemoryUsedInMB": 64, "billedDurationInMilliseconds": 100 } }
Expressは同期実行なのでOutput"{\"key1\":\"val1\"}"
も取得できていますね。
ロギングを有効にする
Express Workflowの実行履歴を残したい場合は、Standardとは異なりCloud Watch Logsに記録される必要がありますが、既定ではロギングは無効になります。
StateMachine Constructでlogs
プロパティを設定します。
import { Construct } from 'constructs'; import { aws_logs, aws_stepfunctions, Stack, StackProps } from 'aws-cdk-lib'; export class CdkAppStack extends Stack { constructor(scope: Construct, id: string, props: StackProps) { super(scope, id, props); // Express Workflow new aws_stepfunctions.StateMachine(this, 'stateMachine', { stateMachineName: 'stateMachineExpress', stateMachineType: aws_stepfunctions.StateMachineType.EXPRESS, logs: { destination: new aws_logs.LogGroup(this, 'stateMachineExpressLogGroup'), level: aws_stepfunctions.LogLevel.ALL, }, definition: new aws_stepfunctions.Pass(this, 'pass', { parameters: { key1: 'val1', }, }), }); } }
CDK Deployすると、Workflowのロギングが有効になりました!
Recent LogsでLogの内容を見ることができました。
しかしSTANDARDの場合と異なり、State毎の詳細な入出力は見れないようです。
おわりに
AWS Step Functions Express WorkflowをAWS CDKで作ってみました。
Express WorkflowもStandardと同様にStep Functionsのコンソールで実行のGraph veiwやEvent viewが見られると良いのですが、Express Workflowは頻繁に実行される処理を対象した機能であることを考えるとStandardと同じレベルの情報をすべてログとして残すとデータ量が増えすぎてしまうことを懸念しているのかも知れませんね。
参考
以上