首页 > 解决方案 > boto3 无法从在 AWS 批处理中运行的 Docker 容器连接到 S3

问题描述

我正在尝试将存储在 ECR 中的 Docker 容器作为 AWS 批处理作业启动。此容器的入口点 python 脚本尝试连接到 S3 并下载文件。我AmazonS3FullAccess在计算环境中为 AWSBatchServiceRole 附加了一个角色,我还AmazonS3FullAccess为计算资源附加了一个角色。

这是正在记录的以下错误:botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "https://s3.amazonaws.com/"

这些实例有可能在自定义 VPC 中启动,而不是在默认 VPC 中启动。我不确定这会有所不同,但也许这是问题的一部分。我没有适当的权限进行检查。我已经在同一个 VPC 中启动的 EC2 实例上测试了这个 Docker 映像,一切都按预期工作。

标签: amazon-web-servicesbotoamazon-ecsaws-batchamazon-ecr

解决方案


您提到了计算环境和计算资源。您是否将此 S3 策略添加到此处Job Role提到的?

创建角色并将策略附加到该角色后,您可以运行代入该角色的任务。你有几个选项可以做到这一点:

  1. 在任务定义中为您的任务指定 IAM 角色。您可以创建新任务定义或现有任务定义的新修订版,并指定您之前创建的角色。如果您使用控制台创建任务定义,请在任务角色字段中选择您的 IAM 角色。如果您使用 AWS CLI 或开发工具包,请使用 taskRoleArn 参数指定您的任务角色 ARN。有关详细信息,请参阅创建任务定义。

  2. 在运行任务时指定 IAM 任务角色覆盖。您可以在运行任务时指定 IAM 任务角色覆盖。如果您使用控制台运行任务,请选择高级选项,然后在任务角色字段中选择您的 IAM 角色。如果您使用 AWS CLI 或开发工具包,请使用覆盖 JSON 对象中的 taskRoleArn 参数指定您的任务角色 ARN。有关详细信息,请参阅运行任务。


推荐阅读