
AWS Step FunctionsステートマシンでStates.Formatによる文字列テンプレートを使用する(AWS CDK)
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
以前の下記エントリでは、States.Formatによる文字列テンプレートを使用するステートマシンを、Workflow Studioを使用して作ってみました。
今回は、AWS Step FunctionsステートマシンでStates.Formatによる文字列テンプレートを使用する構成を、AWS CDKで作ってみました。
States.Formatとは
Step FunctionsではIntrinsic functionsという組み込み関数を使用できます。
そのうち文字列リテラル中の特定シーケンス({})の置き換えをするテンプレートのような利用ができるものがStates.Formatです。
例えば下記のような入力がある場合に、
{
 "name": "Arnav",
 "template": "Hello, my name is {}."
}
States.Formatを下記のように使用すれば、
States.Format($.template, $.name)
Hello, my name is Arnav.という出力を得られます。
やってみた
CDKコード
Lambda関数の実行インプットでStates.Format()を使用するタスクを実行するステートマシンを作成しています。
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';
import * as sfn from '@aws-cdk/aws-stepfunctions';
import * as tasks from '@aws-cdk/aws-stepfunctions-tasks';
export class AwsCdkAppStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const helloFunc = new lambda.Function(this, 'helloFunc', {
      code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
            callback(null);
          };
      `),
      runtime: lambda.Runtime.NODEJS_14_X,
      handler: 'index.handler',
    });
    const helloTask = new tasks.CallAwsService(this, 'helloTask', {
      service: 'lambda',
      action: 'invoke',
      parameters: {
        FunctionName: helloFunc.functionName,
        Payload: {
          'greet.$': "States.Format('{}, {}!', 'Hello', $.name)",
        },
      },
      iamResources: [helloFunc.functionArn],
      iamAction: 'lambda:InvokeFunction',
    });
    new sfn.StateMachine(this, 'helloStateMachine', {
      definition: helloTask,
    });
  }
}
CDKスタックをcdk deployでデプロイします。
動作
作成されたステートマシンを実行すると、
{
    "name": "Step Functions"
}
実行結果で、テンプレート中の{}が置き換えられて文字列リテラルが作成されています。
//CDk上での記述
{
  'greet.$': "States.Format('Hello, {}!', 'Step Functions')"
}
//実行結果
{
  "greet": "Hello, Step Functions!"
}

おわりに
AWS Step FunctionsステートマシンでStates.Formatによる文字列テンプレートを使用する構成を、AWS CDKで作ってみました。
Intrinsic functionsをAWS CDKで使用する場合も、CDKの組み込み関数など使わずにWorkflow Studioから作成する場合と同じような記述とすれば良いようです。
以上






