Я не понимаю почему Fn::Sub
в этом шаблоне не работает. Я получаю следующую ошибку:
Шаблон содержит ошибки .: Ошибка шаблона: одна или несколько встроенных функций Fn :: Sub не указывают ожидаемые аргументы. Укажите строку в качестве первого аргумента и необязательный второй аргумент, чтобы указать отображение значений для замены в строке
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
Но если у меня есть только одно отображение, то оно работает.
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 для проверки этих двух примеров.
Вы даете Fn::Sub
функция 3 аргумента:
Lambda2
Lambda1
Переместите оба сопоставления в один элемент списка, и он будет работать (я также использовал «точечную нотацию» для! GetAtt для простоты, но это необязательно).
DefinitionString: !Sub
- |-
{
[...]
}
- Lambda2: !GetAtt LambdaSubmitJob.Arn
Lambda1: !GetAtt LambdaJobStatusPoll.Arn
Надеюсь, это поможет :)