如何设置需要访问s3并将推送到ECS中运行的ECR的dockerfile
我是docker和AWS ECR&ECS服务的新手 我有一个在本地运行的小型web scraper映像,现在我正在尝试将其移动到AWS web scraper结果将保存在a.txt中,该文件已移动到s3,因此web scraper应用程序需要在开始时读取a.txt,然后进行修改,最后进行更新。更具体地说: dockerfile中的以下脚本将数据从s3移动到容器中:如何设置需要访问s3并将推送到ECS中运行的ECR的dockerfile,docker,dockerfile,amazon-iam,amazon-ecs,amazon-ecr,Docker,Dockerfile,Amazon Iam,Amazon Ecs,Amazon Ecr,我是docker和AWS ECR&ECS服务的新手 我有一个在本地运行的小型web scraper映像,现在我正在尝试将其移动到AWS web scraper结果将保存在a.txt中,该文件已移动到s3,因此web scraper应用程序需要在开始时读取a.txt,然后进行修改,最后进行更新。更具体地说: dockerfile中的以下脚本将数据从s3移动到容器中: from python:3.7-slim run aws s3 cp s3://bucket_name/path_to_a.txt
from python:3.7-slim
run aws s3 cp s3://bucket_name/path_to_a.txt local_path_to_a.txt
然后,app.py将读取数据并进行处理。代码结束时,以下脚本将更新s3中的a.txt:
boto3.resource('s3').Bucket(bucket_name).upload_file(local_path_to_a.txt, s3://bucket_name/path_to_a.txt)
这是我当前的工作流程,所以简言之,dockerfile需要将文件从s3复制到容器中,脚本app.py将写回
现在我陷入了这个问题:
要在本地构建映像以推入ECR,我需要向aws授予dockerfile访问权限:
# syntax = docker/dockerfile:experimental
run --mount=type=secret,id=aws,target=/root/.aws/credentials \
aws s3 cp s3://bucket_name/path_to_a.txt local_path_to_a.txt
因此,我的问题是,这是在ECR+ECS中工作的正确方式吗?我知道我可能需要通过设置IAM角色来授予容器访问权限,但是,我仍然需要在本地无错误地构建映像,这需要从本地计算机进行aws访问。我认为更好的工作流是创建一个只包含执行以下操作的Python应用程序的容器映像:
- 将数据从S3复制到容器
- 处理容器中的数据以生成新的数据版本
- 将(新)数据从容器放回S3
code构建
(构建项目需要有一个与之关联的IAM角色,可以推送到ECR)这样的服务来完成此操作要使AWS命令正常工作,您需要在docker映像内设置AWS访问密钥和密钥,这些密钥可以通过env变量接收。但这不是推荐的最佳做法
如果您正在自动化该过程,那么您可以在docker build之前使用具有适当IAM角色的EC2实例或代码构建从S3下载文件您真的需要在构建时将文件复制到映像中吗?或者这是应该在运行时发生的事情吗?@larsks,一个很好的例子,我可以调整以在运行时读取数据。我想更多地了解这个问题的答案,以了解上述过程是否有效,以及如何有效。或者,您是否建议数据转换和交互应该/通常只在运行时而不是构建时进行?这更多的是关于您项目的体系结构的问题:如果数据是相对静态的,那么您不需要不断构建新的映像来合并更改的数据,在构建时复制数据可能是有意义的。但是,如果数据是动态的,那么将获取委托给运行时可能更有意义,这样您就可以继续使用单个图像。