EDIT: только что нашел это https://github.com/serverless-operations/serverless-step-functions/issues/209 В основном этот пример, но вместо жесткого кодирования ARN я хочу использовать входную переменную, если это имеет смысл.
Вот контекст:
Используя бессерверные места назначения ошибок, полезные данные об ошибке отправляются в SQS, который запускает лямбда-выражение, которое запускает конечный автомат для выполнения повторной попытки.
Например, если Lambda A дает сбой, сбой отправляется в SQS -> Lambda B, который запускает конечный автомат, чтобы повторить попытку Lambda A.
Я определяю свой конечный автомат в Serverless. yml вот так (это то, что я пробовал до сих пор):
stepFunctions:
stateMachines:
MyStateMachine:
name: RetryLambdaMachine
definition:
Comment: Example to test retries
StartAt: StepOne
States:
StepOne:
Type: Task
Resource: arn:aws:states:::lambda:invoke
Parameters:
- FunctionName.$: $$.lambdaArn
#### ^^ This is where I need Lambda A to be referenced ####
Retry:
- ErrorEquals:
- States.ALL
MaxAttempts: 2
Catch:
- ErrorEquals: ["States.ALL"]
Next: CatchAllFallback
End: true
CatchAllFallback:
Type: Task
Resource:
Fn::GetAtt: [lambda_c, Arn]
End: true
Вот ошибка, которую я получаю при запуске serverless deploy
:
Error: The CloudFormation template is invalid: [/Resources/RetryLambdasMachineRole/Type/Policies/0/PolicyDocument/Statement/0/Resource/0] 'null' values are not allowed in templates
Как мне ссылаться на Lambda A как на переменную? Я знаю, что атрибуты ошибки будут содержать ARN лямбда A, но как передать это в конечный автомат для шага повтора?
Примечание. Лямбда A НЕ определена в этом Serverless.yml, она может исходить из везде. Как указано выше, ARN будет передан как часть события ошибки, поступающей от SQS.