【问题标题】:boto3 can't connect to S3 from Docker container running in AWS batchboto3 无法从在 AWS 批处理中运行的 Docker 容器连接到 S3
【发布时间】:2019-05-22 06:55:20
【问题描述】:

我正在尝试将存储在 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 映像,一切都按预期工作。

【问题讨论】:

  • 似乎是连接/防火墙问题。如果你不能检查安全组,你应该在你的容器内检查一个 curl 或 telnet 到这些地址。

标签: amazon-web-services boto amazon-ecs aws-batch amazon-ecr


【解决方案1】:

您提到了计算环境和计算资源。您是否将这个 S3 策略添加到 Job Role 中,如提到的 here

创建角色并将策略附加到该角色后,您可以运行代入该角色的任务。您有多种选择:

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

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

【讨论】:

  • 是的,我已经设置了适当的任务角色。问题最终是我正在运行一个多节点批处理作业。多节点批处理作业部署具有 awsvpc 网络类型的 ecs 容器。该网络不继承主机网络,而是创建自己的 ENI,其作用类似于专用网络。为了让它工作,我必须创建一个 NAT 网关,将它附加到一个私有子网,然后将 EC2 批处理节点部署到该子网中,一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
相关资源
最近更新 更多