【发布时间】:2020-09-15 05:37:49
【问题描述】:
编辑:刚刚找到这个https://github.com/serverless-operations/serverless-step-functions/issues/209 基本上是那个例子,但不是硬编码ARN,我想使用一个输入变量,如果这有意义的话。
这里是上下文:
使用无服务器的错误目标,将错误负载发送到 SQS,这会触发启动状态机以执行重试的 lambda。
例如,如果 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 作为变量引用?我知道错误属性将包含 Lambda A 的 ARN,但是如何将其传递给状态机以进行重试步骤?
注意:Lambda A 没有在这个 Serverless.yml 中定义,它可能来自任何地方。如上所述,ARN 将作为来自 SQS 的错误事件的一部分传入。
【问题讨论】:
标签: serverless-framework aws-step-functions