У меня есть контейнер Docker, который выполняет скрипт Python внутри него как ENTRYPOINT. Это DockerFile
FROM python:3
ADD script.py /
EXPOSE 80
RUN pip install boto3
RUN pip install uuid
ENTRYPOINT ["python","./script.py"]
Это скрипт Python:
import boto3
import time
import uuid
import os
guid = uuid.uuid4()
timestr = time.strftime("%Y%m%d-%H%M%S")
job_index = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']
filename = 'latest_test_' + str(guid) + '_.txt'
with open(filename, 'a+') as f:
data = job_index
f.write(data)
client = boto3.client(
's3',
# Hard coded strings as credentials, not recommended.
aws_access_key_id='',
aws_secret_access_key=''
)
response = client.upload_file(filename, 'api-dev-dpstorage-s3', 'docker_data' + filename + '.txt')
with open('response2.txt', 'a+') as f:
f.write('all done')
exit
Он просто предназначен для создания файла, записи индекса массива заданий в файл и отправки его в S3 Bucket. Индекс массива заданий из пакета AWS поступает из одной из предопределенных переменных среды. Я загрузил образ в AWS ECR и настроил пакет AWS для запуска задания с массивом 10. Это должно выполнить задание 10 раз, и я ожидаю, что в S3 будут выгружены 10 файлов, каждый из которых содержит индекс массива самой работы.
Если я не включаю переменную среды и вместо этого просто жестко кодирую значение в текстовом файле, пакетное задание AWS работает. Если я включаю вызов os.environ для получения переменной, задание завершается с ошибкой пакета AWS:
Status reasonEssential container in task exited
Я предполагаю, что есть проблема с тем, как я пытаюсь получить переменную среды. Кто-нибудь знает, как я мог бы правильно ссылаться на одну из встроенных переменных среды и / или пользовательскую переменную среды, определенную в задании?