[英]Override field in the input before passing to the next state in AWS Step Function
[英]AWS Step Function - passing Input to container override for AWS batch job
我正在從步驟 Function 提交 AWS Batch 作業。 批處理作業采用命令行參數。 我可以像這樣在步驟 function 中運行它:
{
"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"
}
我的步驟 function 是
{
"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”代替它們。 為什么? 相反需要什么?
這是一個解決方案/解決方法,我不確定它是否是唯一的選擇。
在 AWS Batch Job Definition 的 Container properties 中,將 Command 設置為
["Ref::param_1","Ref::param_2"]
這些“Ref::”鏈接將捕獲作業運行時提供的參數。 此外,您可以在作業定義參數部分中指定參數,但這僅在您想提供默認值時才是必需的。
在 Step Functions State 機器定義中,不使用 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
}
}
}
因此,步驟 function 的輸入被傳遞給批處理作業,該作業捕獲它們並用作命令。
參考: https://docs.aws.amazon.com/batch/latest/userguide/example-job-definitions.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.