Я использую 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']
}
)
Это раскручивает десять вакансий. Две проблемы:
- Переменная array_index не обновляется (она жестко задана в 0)
- Я вручную передал размер массива в качестве параметра. Было бы лучше, если бы это можно было как-то прочитать из переменной среды.
Для первой проблемы, похоже, есть переменная среды AWS_BATCH_JOB_ARRAY_INDEX (см. Учебное пособие: Использование индекса задания массива для управления дифференциацией задания ). Как это можно передать в качестве аргумента? Для второго вопроса я не вижу доступной переменной окружения.