この記事は公開されてから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()
を使用するタスクを実行するステートマシンを作成しています。
lib/aws-cdk-app-stack.ts
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から作成する場合と同じような記述とすれば良いようです。
以上