Как передать индекс массива и размер массива от AWS Batch до python - PullRequest
0 голосов
/ 21 января 2020

Я использую AWS Batch для запуска python программы. Как я могу передать размер массива и индекс массива в качестве аргументов? Рассмотрим Docker контейнер, загруженный в AWS ECR, который содержит следующую программу:

parse_arguments.py

import argparse

# parse arguments and print array_size and array_index
parser = argparse.ArgumentParser()
parser.add_argument("--array_size", required=True, type=int)
parser.add_argument("--array_index", required=True, type=int)
args = parser.parse_args()
print(f'array size is: {args.array_size}')
print(f'array index is: {args.array_index}')

Моя попытка - самое близкое, что я получил - это отправить работу на AWS следующим образом:

import boto3

client = boto3.client("batch")
response = client.submit_job(
    jobName='Andrew-job',
    jobQueue='Andrew-job-queue',
    jobDefinition='Andrew-job-definition',
    arrayProperties={'size': 10},
    parameters = {'array_size': '10','array_index':'0'},
    containerOverrides={
        'command': ['python','parse_arguments.py','--array_size','Ref::array_size','--array_index','Ref::array_index']
    }
)

Это раскручивает десять вакансий. Две проблемы:

  1. Переменная array_index не обновляется (она жестко задана в 0)
  2. Я вручную передал размер массива в качестве параметра. Было бы лучше, если бы это можно было как-то прочитать из переменной среды.

Для первой проблемы, похоже, есть переменная среды AWS_BATCH_JOB_ARRAY_INDEX (см. Учебное пособие: Использование индекса задания массива для управления дифференциацией задания ). Как это можно передать в качестве аргумента? Для второго вопроса я не вижу доступной переменной окружения.

...