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