使用ECS Fargate执行步骤功能“任务”

时间:2019-04-09 00:17:23

标签: amazon-web-services amazon-ecs aws-step-functions aws-fargate

在Re:Invent 2018中,AWS似乎已经启动了与Step Functions的新集成,其中包括ECS Fargate支持。

https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ecs.html

我一直在研究这个问题,并且能够启动ECS任务并执行其任务,但是我无法将所需的输出发送回step函数。响应语法似乎也没有对应于特定状态输出的任何内容。

https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html#API_RunTask_ResponseSyntax

ECS任务是否可以将输出发送回步进功能?任何线索都会有所帮助。

P.S:我了解活动,并进行了ECS活动调查,并在完成时发送任务成功。但是,我一直在寻求利用可以调用ECS的步进功能的方法。

2 个答案:

答案 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