我有一个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
我假设我尝试获取环境变量的方式存在问题。有谁知道我如何正确引用作业中定义的内置环境变量和/或自定义环境变量之一?
答案 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。