无服务器步骤功能:如何将数据从Lambda传递到ECS Fargate任务

问题描述

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

基本上,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

没有人工作。关于如何使用“步函数”将数据从Lambda正确传递到Fargate任务的任何可行示例?

解决方法

我认为语法应为:

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