У меня есть существующая оркестровка AWS Steps, которая выполняет пакетное задание AWS через lambdas. Однако недавно 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"
Я ожидал, что значения среды и команд будут переданы соответствующему параметру (ContainerOverrides) в AWS Batch. Вместо этого кажется, что 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 из микса и просто указать статические свойства контейнера (даже если этот длительный срок не будет решением). Но даже тогда у меня возникают проблемы.
"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 - AWS добавило следующее примечание:
Примечание
Параметры в пошаговых функциях выражаются в CamelCase, даже если API-интерфейс нативного сервиса - pascalCase.