繁体   English   中英

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

[英]AWS Batch - How to access AWS Batch environment variables within python script running inside Docker container

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

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

Status reasonEssential container in task exited

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

AWS通过作业定义参数提供docker env配置,您可以在其中指定:

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

这将变成docker env参数:

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

因此可以访问

import os

job_id = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']

但请注意,如果以这种方式传递敏感数据,以明文形式传递凭据是不明智的。 相反,在这种情况下,您可能想要创建计算环境

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM