AWS Step не может правильно вызвать пакетное задание AWS со сложными параметрами - PullRequest
0 голосов
/ 08 января 2019

У меня есть существующая оркестровка 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.

1 Ответ

0 голосов
/ 08 января 2019

Это должно сработать, я проверил, кажется, работает нормально для меня. И 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
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...