簡體   English   中英

AWS Step Function - 將輸入傳遞給 AWS 批處理作業的容器覆蓋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM