Бессерверные пошаговые функции: как передать данные из Lambda в задачу ECS Fargate

Я пытаюсь настроить простое многоступенчатое задание с помощью шагов AWS Функции с Serverless Framework, который включает в качестве первого шага лямбда, генерирующая вывод json, и в качестве второго шага задача Fargate, которая должна получить json в качестве входных данных.

В основном лямбда генерирует следующий вывод:

{
  '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 с помощью пошаговых функций?




Ответы (1)


Думаю, синтаксис должен быть таким:

      ContainerOverrides:
        - Name: my-fargate-container
          Environment:
            - Name: LAMBDA_RESULT
              'Value.$': $.payload
person Chris Pollard    schedule 14.08.2020