【问题标题】:How to reference a dynamic lambda ARN in AWS Step Functions written in the Serverless Framework?如何在用无服务器框架编写的 AWS Step Functions 中引用动态 lambda ARN?
【发布时间】: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


    【解决方案1】:

    我发现我的原始代码实际上非常接近。唯一的问题是 FunctionName 键前面有一个连字符,lambdaArn 上有额外的“$”。

        States:
          StepOne:
            Type: Task
            Resource: arn:aws:states:::lambda:invoke
            Parameters:
              FunctionName.$: $.lambdaArn
    

    这允许 lambda 作为动态资源传入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多