如何在AWS Step Functions中传递输入至AWS Batch作业容器覆盖参数?
问题原因与解决方案
原因
你将"$.param_1"作为普通字符串写入Command数组时,Step Functions会直接把它当作字面量传递给Batch作业,不会自动解析为输入中的对应值。只有当明确指定这是路径引用或通过内置函数生成数组时,Step Functions才会从输入中提取实际参数值。
正确做法
有两种可靠的实现方式:
方式一:使用States.Array内置函数构建命令数组
通过在Command字段后添加.$,声明该字段的值由表达式计算生成,再用States.Array将输入参数组合成命令数组:
{ "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.$": "States.Array($.param_1, $.param_2)" } }, "End": true } } }
方式二:使用路径引用的数组元素写法
如果希望保持数组结构,可以将每个数组元素标记为路径引用(Step Functions会自动解析这类格式的路径):
{ "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 } } }
注意:方式二需要确保你的Step Functions状态机使用的是最新的参数解析规则,若遇到解析问题,优先使用方式一的内置函数写法。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

