【问题标题】:Serverless Steps Functions: how to pass data from Lambda to ECS Fargate taskServerless Steps Functions:如何将数据从 Lambda 传递到 ECS Fargate 任务
【发布时间】:2020-08-14 09:54:01
【问题描述】:

我正在尝试使用AWS Steps FunctionsServerless Framework 配置一个简单的多步骤作业,其中第一步是生成 json 输出的 lambda,第二步是应该接收 json 作为输入的 Fargate 任务。

基本上,lambda 生成以下输出:

{
  'payload': 'Some payload as a string'
}

我需要将此输出作为输入传递给 Fargate 任务,作为环境变量或任何其他方法,但我不明白应该使用哪种语法。我尝试了以下方法:

stepFunctions:
  stateMachines:
    MyStateMachine:
      name: MyStateMachine
      loggingConfig:
        level: ALL
        includeExecutionData: true
        destinations:
          - Fn::GetAtt: [StateMachineLogGroup, Arn]
      definition:
        StartAt: LambdaStep
        States:
          LambdaStep:
            Type: Task
            Resource:
              Fn::GetAtt: [lambda_step, Arn]
            ResultPath: $
            Next: FargateStep

          FargateStep:
            Type: Task
            Resource: arn:aws:states:::ecs:runTask.sync
            Parameters:
              Cluster: "#{ECSCluster}"
              TaskDefinition: "#{FargateTaskDefinition}"
              LaunchType: FARGATE
              NetworkConfiguration:
                AwsvpcConfiguration:
                  Subnets:
                    - "#{PublicSubnetOne}"
                    - "#{PublicSubnetTwo}"
                  AssignPublicIp: ENABLED
              Overrides:
                ContainerOverrides:
                  - Name: my-fargate-container
                    Environment:
                      - Name: LAMBDA_RESULT
                        Value: $.payload
            Next: Done

          Done:
            Type: Succeed

但在容器日志中,环境变量 LAMBDA_RESULT 被简单地设置为 $.payload,这意味着 json 路径语法不是从输入中解析出来的。

我也试过了

Overrides:
  ContainerOverrides:
    - Name: my-fargate-container
      Environment:
        - Name: LAMBDA_RESULT
          Value: $$.payload

还有这个

FargateStep:
  Type: Task
  Resource: arn:aws:states:::ecs:runTask.sync
  InputPath: $.payload # <-- added this
  Parameters:
    Cluster: "#{ECSCluster}"
    TaskDefinition: "#{FargateTaskDefinition}"
    LaunchType: FARGATE
    NetworkConfiguration:
      AwsvpcConfiguration:
        Subnets:
          - "#{PublicSubnetOne}"
          - "#{PublicSubnetTwo}"
        AssignPublicIp: ENABLED
    Overrides:
      ContainerOverrides:
        - Name: my-fargate-container
          Environment:
            - Name: LAMBDA_RESULT
              Value: $.payload
  Next: Done

没有人工作。有关如何使用 Step Functions 将数据从 Lambda 正确传递到 Fargate 任务的任何工作示例?

【问题讨论】:

    标签: amazon-web-services aws-lambda serverless-framework aws-fargate aws-step-functions


    【解决方案1】:

    我认为语法应该是:

          ContainerOverrides:
            - Name: my-fargate-container
              Environment:
                - Name: LAMBDA_RESULT
                  'Value.$': $.payload
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2019-09-10
      • 2022-11-14
      • 2021-11-15
      • 2019-09-25
      相关资源
      最近更新 更多