psi*_*gen 5 amazon-web-services amazon-ecs aws-step-functions
我正在尝试创建一个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"}
Run Code Online (Sandbox Code Playgroud)
作为参考,以下是 ECS 任务的示例配置: https://docs.aws.amazon.com/step-functions/latest/dg/sample-project-container-task-notification.html
我无法找到任何方法将inputECS 任务的结构化 JSON 传递到运行该任务的容器。
以下是我迄今为止发现的内容:
input对象 ( $) 分配给环境变量,则它会在运行时失败并出现序列化错误 ( [Object] cannot be converted to a string)。output,然后将此单个字符串键值分配给 ECS Task 的环境变量并解析它。然而,这需要添加整个额外的任务和几秒钟的运行时间+成本。以下是一些我不能做的事情:
boto3获取input现有的 ECS 任务。我可以获取未分配input活动的输入,也可以获取整个执行的输入。但是,即使我有任务令牌,也没有 API 可以仅获取现有正在运行的任务的输入。output其input.将定义为任务的结构化 JSON 对象传递input到 ECS/Fargate 任务的执行容器的预期机制是什么?
小智 0
将定义为任务输入的结构化 JSON 对象传递到 ECS/Fargate 任务的执行容器的预期机制是什么?
查看输入和输出处理文档:https://docs.aws.amazon.com/step-functions/latest/dg/concepts-input-output-filtering.html
这将帮助您决定要将哪些 JSON 输入传递到“运行 Fargate 任务”状态(来自您问题中链接的示例)
Step Functions 支持 ECS 的“RunTask”和几个参数:https://docs.aws.amazon.com/step-functions/latest/dg/connect-ecs.html
例如,
假设我的 Lambda 函数输出此 JSON
{
"commands": [
"foo": { "bar" },
"some command 1",
"some command 2"
]
}
Run Code Online (Sandbox Code Playgroud)我希望我的运行 Fargate 任务有一个仅获取所有输入的输入路径。在我的状态机中,"Type": "Task",我将输入:
"InputPath":"$.commands",
Run Code Online (Sandbox Code Playgroud)然后,在我"Parameters"的 Fargate 任务中"NetworkConfigurations:{....},",我将使用 JSON 路径语法放置我想要的容器覆盖:https://github.com/json-path/JsonPath。但是,我不需要 JSON 中的所有输入,只需要以下值"foo"
"Overrides": {
"ContainerOverrides": [
{
"Name": "container-name",
"Command.$": "$.commands.foo"
}
]
}
Run Code Online (Sandbox Code Playgroud)您可以使用此处使用的语法:https ://docs.aws.amazon.com/step-functions/latest/dg/connect-ecs.html
| 归档时间: |
|
| 查看次数: |
7606 次 |
| 最近记录: |