簡體   English   中英

AWS Step無法使用復雜參數正確調用AWS Batch作業

[英]AWS Step cannot correctly invoke AWS Batch job with complex parameters

我有一個現有的AWS Steps orchestration正在通過lambdas執行AWS Batch作業。 但是,AWS最近添加了從步驟直接調用AWS Batch等其他服務的功能。 我很想使用這個新功能,但無法使其正常工作。

https://docs.aws.amazon.com/step-functions/latest/dg/connectors-batch.html

所以我想用來調用Batch的新步驟操作。

"File Copy": {
  "Type": "Task",
  "Resource": "arn:aws:states:::batch:submitJob.sync",
  "Parameters": {
     "JobName": "MyBatchJob",
     "JobQueue": "MySecondaryQueue",
     "ContainerOverrides.$": "$.lts_job_container_overrides",
     "JobDefinition.$": "$.lts_job_job_definition",
  },
  "Next": "Upload Start"
}

請注意,我正在嘗試使用$。 JSONpath語法,以便動態地通過這些步驟傳遞參數。

給出以下輸入時

"lts_job_container_overrides": {
  "environment": [
    {
      "name": "MY_ENV_VARIABLE",
      "value": "XYZ"
    },
  ],
  "command": [
    "/app/file_copy.py"
  ]
},
"lts_job_job_definition": "MyBatchJobDefinition"

我期望環境和命令值將傳遞到AWS Batch中的相應參數(ContainerOverrides)。 相反,似乎AWS Steps正試圖將它們作為頂級參數進行推廣 - 然后抱怨它們無效。

{
 "error": "States.Runtime",
 "cause": "An error occurred while executing the state 'File Copy' 
 (entered at the event id #29). The Parameters 
 '{\"ContainerOverrides\":{\"environment\": 
 [{\"name\":\"MY_ENV_VARIALBE\",\"value\":\"XYZ\"}],\"command\": 
 [\"/app/file_copy.py\"]},\"JobDefinition\":\"MyBatchJobDefinition\"}' 
 could not be used to start the Task: [The field 'environment' is not 
 supported by Step Functions, The field 'command' is not supported by 
 Step Functions]"
}

如何阻止AWS Steps嘗試解釋我嘗試傳遞給AWS Batch的值?


我已經嘗試從混合中取出JSON路徑並且只是靜態地指定ContainerProperties(即使這個長期不是解決方案)。 但即便如此,我也會遇到問題。

"ContainerOverrides": {
   "environment": [
    {
      "name": "RUN_ID",
      "value": "xyz"
    }
   ],
    "command": "/app/file_copy.py"
   }

在這種情況下,步驟本身會在加載時拒絕定義文件。

Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: The field 
'environment' is not supported by Step Functions at /States/File 
Copy/Parameters, SCHEMA_VALIDATION_FAILED: The field 'command' is not  
supported by Step Functions at /States/File Copy/Parameters'

所以看來ContainerOverrides是一個有問題的fullstop? 我是否誤解了在這種情況下如何使用它?


AWS Batch文檔中已解決上述問題(根據下面的答案) - AWS已添加以下注釋:

注意

步驟函數中的參數以CamelCase表示,即使本機服務API是pascalCase也是如此。

這應該工作,我測試它似乎對我來說工作正常。 Environment及其對象鍵和Command都應該是首字母大寫。

{
   "StartAt": "AWS Batch: Manage a job",
   "States": {
      "AWS Batch: Manage a job": {
         "Type": "Task",
         "Resource": "arn:aws:states:::batch:submitJob.sync",
         "Parameters": {
            "JobName": "test",
            "JobDefinition": "jobdef",
            "JobQueue": "testq",
            "ContainerOverrides": {
               "Command": [
                  "/app/file_copy.py"
               ],
               "Environment": [
                  {
                     "Name": "MY_ENV_VARIABLE",
                     "Value": "XYZ"
                  }
               ]            
            }
         },
         "End": true
      }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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