YAML記述のCloudFormation内でのJSON箇所の組み込み関数記入方法
今回のテーマ
こんにちは、「金曜日に4時起きしてサッカー見られて良かった」AWS事業本部コンサルティング部のこーへいです。
今回のテーマはYAML記述のCFn内のJSON箇所における組み込み関数の記入方法についてです。
背景
YAMLとJSONを同時に言ってて、何を言っているのか分からない方もいらっしゃると思いますので、まずは以下のコードを見てください。
MyStateMachine: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: !Sub - |- { "Comment": "A Hello World example using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "${lambdaArn}", "End": true } } } - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]} RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
上記コードは、AWS CloudFormation を使用して Step Functions 用の Lambda ステートマシンを作成する内のLambda ステートマシンを作成するにはにあるStep Functionsのコードをそのまま引っ張ってきたものです。
上記コードはYAML形式で記述されていますが、一部Step Functionsの定義はJSON形式で記述されています。
JSON記述の中でLambdaのarnをハードコーディングではなく、組み込み関数を使用する方法で沼った次第です。
結論
答えは先ほど挙げた公式が用意したコード内に書かれていますが、以下の通り(見やすいように必要な箇所を抜粋)、JSON部分の全体に対して!Subの組み込み関数を適用する形で記述しています。
DefinitionString: !Sub - |- { "Resource": "${lambdaArn}", }
決して以下のようにJSONの中で関数毎に!Subを指定するわけではないです。
DefinitionString: - |- { "Resource": "!Sub ${lambdaArn}", }