在Re:Invent 2018中,AWS似乎已经启动了与Step Functions的新集成,其中包括ECS Fargate支持。
https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ecs.html
我一直在研究这个问题,并且能够启动ECS任务并执行其任务,但是我无法将所需的输出发送回step函数。响应语法似乎也没有对应于特定状态输出的任何内容。
ECS任务是否可以将输出发送回步进功能?任何线索都会有所帮助。
P.S:我了解活动,并进行了ECS活动调查,并在完成时发送任务成功。但是,我一直在寻求利用可以调用ECS的步进功能的方法。
答案 0 :(得分:1)
我目前正在一个利用Step Functions依次启动多个Fargate Tasks的项目中工作,但我遇到了同样的问题。当前,除了标准ResponseSyntax之外,似乎没有其他方法可以返回任何东西,尽管希望这是AWS可以扩展的领域。
我们针对此限制的解决方法只是使用S3存储每个任务的输出,以便后续任务(或其他步骤)可以访问它。我们为每个Step Function调用提供S3存储桶和S3键前缀作为环境变量,并且由于容器重写是作为ResponseSyntax的一部分返回的,因此可以使用以下代码段将它们传递给其他Steps。
"Overrides": {
"ContainerOverrides": [
{
"Name": "<your container name>",
"Environment.$": "$.Overrides.ContainerOverrides[0].Environment"
}
]
}
答案 1 :(得分:1)
您可以使用“等待回调(.waitForTaskToken
)” 模式在ECS任务中回调到Step Functions。使用.waitForTaskToken
而不是.sync
,执行将暂停并等待SendTaskSuccess或SendTaskFailure,这可以从ECS任务中通过所需的任何输出来完成。它与活动类似,但是任务令牌被推送到下游服务,而不是对其进行轮询。
arn:aws:states:::ecs:runTask.sync
任务的输出是ECS DescribeStacks的结果。
https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token