容器服务的 AWS Step Function 输出

0

【以下的问题经过翻译处理】 将 Step Functions 与 EKS 或 ECS 等容器服务结合使用时,这些步骤的输出如何工作?从下面两个链接的问题来看,似乎输入是通过将输入传递给命令覆盖或将其作为环境变量传递来完成的。这些作业如何返回输出以供后续步骤使用?

输入问题:

编辑

根据此博客,没有办法从 ECS 或 Fargate 任务输出。因此,输出需要基于先前的输入是确定性的。谁能证实这一点,这也适用于 EKS 吗?

https://nuvalence.io/blog/aws-step-function-integration-with-ecs-or-fargate-tasks-data-in-and-out

1 回答
0

【以下的回答经过翻译处理】 你好,

re:Post 帖子中的答案对使用 .waitForTaskToken 能够从 ECS/Fargate 获得更动态的输出有很好的建议,并且是准确的:<https://docs.aws.amazon.com/step-functions /latest/dg/connect-ecs.html>

我设法按照此处的说明使用 .waitForTaskToken 进行测试:https://docs.aws.amazon.com/step-functions/latest/dg/callback-task-sample-sqs.html

该示例的工作方式(基于说明,我最后确认):

  1. Step Functions 将包含任务令牌的消息传递到 Amazon Simple Queue Service (Amazon SQS) 队列。
  2. Step Functions 然后暂停,等待返回该令牌。
  3. Amazon SQS 队列触发 AWS Lambda 函数,该函数使用相同的任务令牌调用 SendTaskSuccess。下面的代码显示了如何使用 Lambda 函数完成此操作:
console.log('加载函数');
const aws = require('aws-sdk');

exports.lambda_handler = (event, context, callback) => {
    const stepfunctions = new aws.StepFunctions();

    for (const record of event.Records) {
        const messageBody = JSON.parse(record.body);
        const taskToken = messageBody.TaskToken;

        常量参数 = {
            output: "\"回调任务成功完成。\"",
            任务令牌:任务令牌
        };

        console.log(`调用 Step Functions 完成参数回调任务 ${JSON.stringify(params)}`);

        stepfunctions.sendTaskSuccess(参数,(错误,数据)=> {
            如果(错误){
                console.error(err.message);
                回调(错误消息);
                返回;
            }
            控制台日志(数据);
            回调(空);
        });
    }
};

  1. 收到任务令牌后,工作流继续。
  2. “通知成功”任务发布一条 Amazon Simple Notification Service (Amazon SNS) 消息,表明已收到回调。

因此,我们现在可以基于上述理解将其应用于 ECS/Fargate,因为 Step Function 服务 ECS/Fargate 集成支持任务令牌:

  1. Step Functions 使用任务令牌调用 ECS/Fargate
  2. Step 函数然后暂停等待返回该令牌。
  3. ECS/Fargate 发回具有相同任务令牌的 SendTaskScucess。您可以使用上面提到的代码作为示例来构建解决方案。从代码中可以看出:
        常量参数 = {
            output: "\"回调任务成功完成。\"",
            任务令牌:任务令牌
        };

在哪里可以修改“输出”以获得您想要的任何类型的消息。他们使用 \"Callback task completed successfully.\" 但您可以将其更改为您喜欢的任何内容,例如数据存储在 S3/DynamoDB/其他地方的位置。

  1. 收到任务令牌后,工作流程继续。

从您链接的博客文章中,它说没有办法从 ECS 或 Fargate 任务输出并提到在 S3 中存储,我相信他们在谈论写入数据(让我们以 .jpeg 图像为例)。因此,按照该博文,您可以将 .jpeg 图像写入 S3,然后在“输出”中返回 .jpeg 图像在 S3 中的存储位置,以便 Step Function 的下一步知道位置和可以通过将位置交给 step 函数中的另一个任务来继续进行一些处理。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则