Serverless Steps Functions:如何将数据从 Lambda 传递到 ECS Fargate 任务
Serverless Steps Functions: how to pass data from Lambda to ECS Fargate task
我正在尝试使用 AWS Steps Functions with the Serverless Framework 配置一个简单的多步作业,其中第一步是 lambda 生成 json 输出,第二步是 Fargate 任务,它应该接收 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
没有人工作。关于如何使用 Step Functions 将数据从 Lambda 正确传递到 Fargate 任务的任何工作示例?
我认为语法应该是:
ContainerOverrides:
- Name: my-fargate-container
Environment:
- Name: LAMBDA_RESULT
'Value.$': $.payload
我正在尝试使用 AWS Steps Functions with the Serverless Framework 配置一个简单的多步作业,其中第一步是 lambda 生成 json 输出,第二步是 Fargate 任务,它应该接收 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
没有人工作。关于如何使用 Step Functions 将数据从 Lambda 正确传递到 Fargate 任务的任何工作示例?
我认为语法应该是:
ContainerOverrides:
- Name: my-fargate-container
Environment:
- Name: LAMBDA_RESULT
'Value.$': $.payload