我正在从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