AWS Batch - как получить доступ к переменным среды AWS Batch в скрипте python, запущенном внутри контейнера Docker - PullRequest
0 голосов
/ 05 июня 2019

У меня есть контейнер 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

Я предполагаю, что есть проблема с тем, как я пытаюсь получить переменную среды. Кто-нибудь знает, как я мог бы правильно ссылаться на одну из встроенных переменных среды и / или пользовательскую переменную среды, определенную в задании?

1 Ответ

0 голосов
/ 05 июня 2019

AWS предоставляет конфигурацию докера env с помощью параметров определения задания , где вы указываете:

"environment" : [
    { "AWS_BATCH_JOB_ARRAY_INDEX" : "string"},
]

Это будет преобразовано в Окно докера параметр:

$ docker run --env AWS_BATCH_JOB_ARRAY_INDEX=string $container $cmd

Таким образом, можно получить доступ по:

import os

job_id = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']

Но будьте осторожны, если вы передаете конфиденциальные данные таким образом, не стоит передавать учетные данные впростой текст.Вместо этого в этом случае вы можете создать вычислительную среду .

...