据我所知,boto3将尝试从实例元数据服务加载凭据。如果我在EC2实例中运行这段代码,我希望没有问题。但是,当我的代码被dockerized时,boto3将如何找到元数据服务呢?
Amazon ECS代理填充可用于获取凭据的AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量。这些特殊变量只提供给使用PID 1的进程。在Dockerfile ENTRYPOINT
中指定的脚本获得PID 1
有许多网络模式,其他网络模式的细节可能会有所不同。更多信息请参见:如何在Amazon ECS中配置IAM任务角色以避免"访问被拒绝";错误吗?
对于awsvpc
网络模式,如果您将printenv
运行PID为1,您将看到类似于以下内容:
AWS_EXECUTION_ENV=AWS_ECS_FARGATE
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/0f891318-ab05-46fe-8fac-d5113a1c2ecd
HOSTNAME=ip-172-17-0-123.ap-south-1.compute.internal
AWS_DEFAULT_REGION=ap-south-1
AWS_REGION=ap-south-1
ECS_CONTAINER_METADATA_URI_V4=http://169.254.170.2/v4/2c9107c385e04a70b30d3cc4d4de97e7-527074092
ECS_CONTAINER_METADATA_URI=http://169.254.170.2/v3/2c9107c385e04a70b30d3cc4d4de97e7-527074092
调试一些东西也变得棘手,因为在SSH进入容器后,你使用的是PID而不是1,这意味着需要获得凭据的服务可能会失败,如果你手动运行它们。
ECS任务元数据端点文档
在~/中查找。aws文件夹。
在Docker容器的/root目录下。。aws包含具有aws密钥和aws PW的文件。可以通过以下命令轻松地将其从本地计算机复制到当前运行的容器docker cp ~/.aws <containder_id>:/root