我从Step函数提交一个AWS批处理作业。批处理作业接受命令行参数。我可以像这样在step函数中运行它:
{
"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
}
}
}但是,我想使用这个步骤的输入作为命令行参数。因此,我尝试在命令中使用$.parameter符号。
我的意见是
{
"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“这样的原始字符串,而不是由输入"Hello”代替它们。为什么?什么是必需的呢?
发布于 2022-08-11 16:52:14
这是一个解决方案/沃卡伦德,我不确定这是否是唯一的选择。
在AWS批处理作业定义中,在容器属性中,将命令设置为
["Ref::param_1","Ref::param_2"]这些“Ref:”链接将捕获在作业运行时提供的参数。此外,可以在“职务定义参数”部分中指定参数,但只有在要提供默认设置的情况下才需要这样做。
在Step函数状态机定义中,使用参数而不是使用ContainerOverrides。总体上看,如下所示:
{
"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
}
}
}因此,step函数中的输入被传递给批处理作业,该作业捕获它们并作为命令使用。
参考资料:https://docs.aws.amazon.com/batch/latest/userguide/example-job-definitions.html
https://stackoverflow.com/questions/73322674
复制相似问题