gpt4 book ai didi

amazon-web-services - 如何将 JSON 传递给 AWS Step Function 中的 ECS 任务?

转载 作者:行者123 更新时间:2023-12-03 21:59:24 24 4
gpt4 key购买 nike

我正在尝试创建一个 AWS StepFunctions我有一个 的工作流程Lambda 任务后跟一个 ECS/Fargate 任务。

Lambda 将 ID 作为输入并以 JSON 格式输出一些数据,ECS 任务使用这些数据,该任务在其容器环境中运行 Python 脚本。我想在 StepFunctions 中做的是以下流程:

{ id: 1234 } -> [Lambda] -> { id: 1234, data: {...} }

{ id: 1234, data: {...} } -> [ECS] -> { id: 1234, result: "bar"}

作为引用,以下是 ECS 任务的示例配置:
https://docs.aws.amazon.com/step-functions/latest/dg/sample-project-container-task-notification.html

我想不出任何方法来传递结构化的 JSON input将 ECS 任务分配给运行该任务的容器。

以下是我迄今为止发现的东西:
  • 通过使用 JSONPath 选择输入的各个字段并将它们设置为环境变量,我可以将 JSON 输入的各个字段传递给容器。但如果我分配整个 input对象 ( $ ) 到环境变量,然后它在运行时失败并出现序列化错误 ( [Object] cannot be converted to a string )。
  • 我可以创建一个中间 lambda,它接受输入并将其转换为 JSON 字符串,该字符串存储在 output 中的单个键值中。 ,然后将此单个字符串键值分配给 ECS Task 的环境变量并对其进行解析。但是,这需要添加一个完整的额外任务和几秒钟的运行时间 + 成本。

  • 以下是我不能做的一些事情:
  • boto3 中似乎没有任何机制获取 input现有的 ECS 任务。我可以得到input一个未分配的事件,或者我可以获得整个执行的输入。但是,即使我有一个任务 token ,也没有用于获取现有正在运行的任务的输入的 API。
  • 我无法修改原始 Lambda 以将 JSON 输出为字符串。我在多个地方(并行任务)使用这个结果,其他任务是消耗 output 的特定子字段的 Lambdas作为他们的 input .

  • 传递定义为 input 的结构化 JSON 对象的预期机制是什么?到一个任务到一个 ECS/Fargate 任务的执行容器?

    最佳答案

    您可以使用 intrinsic functions在运行任务之前格式化请求:

    const formatRequest = new sfn.Pass(this, 'FormatRequest', {
    parameters: {
    'request.$': 'States.JsonToString($)'
    }
    })

    关于amazon-web-services - 如何将 JSON 传递给 AWS Step Function 中的 ECS 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60573180/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com