なぜかわかりませんFn::Sub
このテンプレートでは機能しません。次のエラーが発生します。
テンプレートにエラーが含まれています。:テンプレートエラー:1つ以上のFn :: Sub組み込み関数が予期される引数を指定していません。文字列を最初の引数として指定し、オプションの2番目の引数は文字列内で置き換える値のマッピングを指定します
Resources:
LambdaSubmitJob:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
LambdaJobStatusPoll:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
MyStepF:
Type: 'AWS::StepFunctions::StateMachine'
Properties:
DefinitionString: !Sub
- |-
{
"Comment": "A state machine that submits a Job to AWS Batch and monitors the Job until it completes.",
"StartAt": "Submit Job",
"States": {
"Submit Job": {
"Type": "Task",
"Resource": "${Lambda1}",
"ResultPath": "$.guid",
"Next": "Wait 30 seconds"
},
{
"Type": "Task",
"Resource": "${Lambda2}",
"ResultPath": "$.guid",
"Next": "Wait 30 seconds"
}
}
}
- Lambda2: !GetAtt
- LambdaSubmitJob
- Arn
- Lambda1: !GetAtt
- LambdaJobStatusPoll
- Arn
しかし、マッピングが1つしかない場合は機能します。
Resources:
LambdaSubmitJob:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
LambdaJobStatusPoll:
Type: 'AWS::Lambda::Function'
Properties:
Handler: index.lambda_handler
Runtime: python2.7
Timeout: 10
Code:
ZipFile: |
import json
import boto3
MyStepF:
Type: 'AWS::StepFunctions::StateMachine'
Properties:
DefinitionString: !Sub
- |-
{
"Comment": "A state machine that submits a Job to AWS Batch and monitors the Job until it completes.",
"StartAt": "Submit Job",
"States": {
"Submit Job": {
"Type": "Task",
"Resource": "${Lambda1}",
"ResultPath": "$.guid",
"Next": "Wait 30 seconds"
}
- Lambda1: !GetAtt
- LambdaJobStatusPoll
- Arn
CloudFormation Designerを使用して、これら2つの例を検証しています。
あなたはFn::Sub
関数に3つの引数を与えています:
Lambda2
のマッピングLambda1
のマッピング両方のマッピングを単一のリスト項目に移動すると機能します(簡単にするために!GetAttの「ドット表記」も使用しましたが、これはオプションです)。
DefinitionString: !Sub
- |-
{
[...]
}
- Lambda2: !GetAtt LambdaSubmitJob.Arn
Lambda1: !GetAtt LambdaJobStatusPoll.Arn
それが役に立てば幸い:)