AWS步骤功能-将输入传递给AWS批处理作业的容器覆盖



我正在从Step Function提交AWS批处理作业。批处理作业采用命令行参数。我可以在步骤函数中运行它,如下所示:

{
"Comment": "Submit aws batch job with parameters",
"StartAt": "SubmitJob",
"States": {
"SubmitJob": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "my-job",
"JobDefinition": "arn:aws:batch:us-west-1:123456789000:job-definition/my-job-definition:1",
"JobQueue": "arn:aws:batch:us-west-1:123456789000:job-queue/my-job-queue",
"ContainerOverrides": {
"Command": [
"Hello",
"World"
]
}
},
"End": true
}
}
}

但是,我希望使用此步骤的输入作为命令行参数。因此,我尝试在命令中使用$.参数表示法。

我的输入是

{
"param_1": "Hello",
"param_2": "World"
}

我的阶跃函数是

{
"Comment": "Submit aws batch job with parameters",
"StartAt": "SubmitJob",
"States": {
"SubmitJob": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "my-job",
"JobDefinition": "arn:aws:batch:us-west-1:123456789000:job-definition/my-job-definition:1",
"JobQueue": "arn:aws:batch:us-west-1:123456789000:job-queue/my-job-queue",
"ContainerOverrides": {
"Command": [
"$.param_1",
"$.param_2"
]
}
},
"End": true
}
}
}

然而,这导致我的批处理作业接收到像"$"这样的原始字符串。param_ 1";而不是用输入"0"代替它们;你好;。为什么?相反,需要什么?

这是一个解决方案/Workaraound,我不确定它是否是唯一的选项。

在AWS批处理作业定义的Container属性中,将Command设置为

["Ref::param_1","Ref::param_2"]

这些";参考号:";链接将捕获作业运行时提供的参数。此外,您可以在作业定义"参数"部分中指定参数,但只有在希望提供默认值时才需要这样做。

在步骤功能状态机定义中,不要使用ContainerOverrides,而是使用Parameters。总的来说,它看起来像:

{
"Comment": "Submit aws batch job with parameters",
"StartAt": "SubmitJob",
"States": {
"SubmitJob": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobName": "my-job",
"JobDefinition": "arn:aws:batch:us-west-1:123456789000:job-definition/my-job-definition:2",
"JobQueue": "arn:aws:batch:us-west-1:123456789000:job-queue/my-job-queue",
"Parameters": {
"param_1.$": "$.param_1",
"param_2.$": "$.param_2"
}
},
"End": true
}
}
}

因此,步骤函数的输入被传递给Batch作业,该作业捕获它们并用作命令。

参考:https://docs.aws.amazon.com/batch/latest/userguide/example-job-definitions.html

最新更新