AWS Batch-如何在Docker容器中运行的python脚本中访问AWS Batch环境变量

时间:2019-06-05 00:47:21

标签: python docker aws-batch

我有一个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存储桶。 AWS Batch的作业数组索引来自预定义的环境变量之一。我已将映像上传到AWS ECR,并设置了一个AWS Batch以运行一个数组为10的作业。这应该执行10次,我希望将10个文件转储到S3中,每个文件都包含数组索引。工作本身。

如果我不包括环境变量,而只是将值硬编码到文本文件中,则AWS Batch作业将起作用。如果我包含对os.environ的调用以获取变量,则作业将因以下AWS Batch错误而失败:

Status reasonEssential container in task exited

我假设我尝试获取环境变量的方式存在问题。有谁知道我如何正确引用作业中定义的内置环境变量和/或自定义环境变量之一?

1 个答案:

答案 0 :(得分:0)

AWS通过job definition parameters提供docker env配置,您可以在其中指定:

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

这将变成docker env参数:

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

因此可以通过以下方式accessed

import os

job_id = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']

但是请注意,如果您是以这种方式传递敏感数据,则以纯文本形式传递凭据不是明智的。相反,在这种情况下,您可能要创建一个compute environment