Ent*_*ord 4 serverless-framework aws-step-functions
编辑:刚刚找到这个https://github.com/serverless-operations/serverless-step-functions/issues/209基本上就是这个例子,但我不想对 ARN 进行硬编码,而是想使用输入变量(如果有意义的话)。
这是上下文:
使用 Serverless 的错误目标,错误负载会发送到 SQS,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
Run Code Online (Sandbox Code Playgroud)
这是我运行时遇到的错误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
Run Code Online (Sandbox Code Playgroud)
如何将 Lambda A 引用为变量?我知道错误属性将包含 Lambda A 的 ARN,但如何将其传递到状态机以执行重试步骤?
注意:Lambda A 未在此 Serverless.yml 中定义,它可以来自任何地方。如上所述,ARN 将作为来自 SQS 的错误事件的一部分传入。
我发现我原来的代码实际上非常接近。唯一的问题是 FunctionName 键前面有一个连字符,并且 lambdaArn 上有一个额外的“$”。
States:
StepOne:
Type: Task
Resource: arn:aws:states:::lambda:invoke
Parameters:
FunctionName.$: $.lambdaArn
Run Code Online (Sandbox Code Playgroud)
这允许 lambda 作为动态资源传入。
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |