文件可以在本地上传到 S3 但不能在容器内(无法找到凭据)
File can be uploaded to S3 locally but can't within a container (Unable to locate credential)
我有一个 Python 脚本可以将文件上传到 S3,代码与 中的相同。
我有一个传递 AWS 凭证的 bash 脚本。我想上传的文件是从 运行ning 在 Fargate(容器)上的模型生成的,所以我尝试 运行 将容器内的这个 Python 脚本上传到 S3,我已经构建了图像,但是当我 运行 docker run containername
时它会给我错误:
INFO:root:Uploading to S3 from test.csv to bucket_name test.csv
File "/usr/local/lib/python3.6/dist-packages/botocore/auth.py", line 357, in add_auth
raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials
有人可以给我一些提示吗?我该如何解决?提前致谢。
要传递 docker 凭据,您需要在容器中安装 ~/.aws/credentials
docker -v ~/.aws/credentials:/root/.aws/credentials:ro
或者将您的凭据作为环境变量传递
docker run -e -e AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile profilename) -e AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key --profile profilename)
对于 Fargate 端,您需要创建一个 IAM 角色并添加一个可以访问该存储桶的策略。
这需要分配给 Task Role
。这与用于拉取 docker 图像的 Task Execution Role
不同。 Task Role
在 运行 时使用,这就是您需要添加 S3 访问策略的地方。
我有一个 Python 脚本可以将文件上传到 S3,代码与
我有一个传递 AWS 凭证的 bash 脚本。我想上传的文件是从 运行ning 在 Fargate(容器)上的模型生成的,所以我尝试 运行 将容器内的这个 Python 脚本上传到 S3,我已经构建了图像,但是当我 运行 docker run containername
时它会给我错误:
INFO:root:Uploading to S3 from test.csv to bucket_name test.csv
File "/usr/local/lib/python3.6/dist-packages/botocore/auth.py", line 357, in add_auth
raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials
有人可以给我一些提示吗?我该如何解决?提前致谢。
要传递 docker 凭据,您需要在容器中安装 ~/.aws/credentials
docker -v ~/.aws/credentials:/root/.aws/credentials:ro
或者将您的凭据作为环境变量传递
docker run -e -e AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile profilename) -e AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key --profile profilename)
对于 Fargate 端,您需要创建一个 IAM 角色并添加一个可以访问该存储桶的策略。
这需要分配给 Task Role
。这与用于拉取 docker 图像的 Task Execution Role
不同。 Task Role
在 运行 时使用,这就是您需要添加 S3 访问策略的地方。