Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文件可以本地上载到S3,但不能在容器中上载(找不到凭据)_Python_Amazon Web Services_Docker_Amazon S3_Aws Fargate - Fatal编程技术网

Python 文件可以本地上载到S3,但不能在容器中上载(找不到凭据)

Python 文件可以本地上载到S3,但不能在容器中上载(找不到凭据),python,amazon-web-services,docker,amazon-s3,aws-fargate,Python,Amazon Web Services,Docker,Amazon S3,Aws Fargate,我有一个Python脚本将文件上传到S3,代码与中的相同 我有一个通过AWS认证的bash脚本。我想要上传的文件是从Fargate ina容器上运行的模型生成的,因此我尝试在容器内运行此Python脚本以上传到S3,我已经构建了该图像,但当我运行docker run containername时,它会给我错误: INFO:root:Uploading to S3 from test.csv to bucket_name test.csv File "/usr/local/lib/pytho

我有一个Python脚本将文件上传到S3,代码与中的相同

我有一个通过AWS认证的bash脚本。我想要上传的文件是从Fargate ina容器上运行的模型生成的,因此我尝试在容器内运行此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/凭据

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角色,并添加一个可以访问该存储桶的策略


这需要分配给任务角色。这与用于提取docker映像的任务执行角色不同。任务角色在运行时使用,您需要在运行时添加S3访问策略。

要传递docker凭据,您需要在容器中装载~/.aws/凭据

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角色,并添加一个可以访问该存储桶的策略


这需要分配给任务角色。这与用于提取docker映像的任务执行角色不同。任务角色在运行时使用,因此需要添加S3访问策略。

如何配置AWS SDK?您是否正在尝试将accessKeyId和secret传递给sdk?您是否在本地计算机上运行此容器?是否在我的本地计算机@RaduDiță上运行。我有一个bash脚本,我在这个问题上添加了这个脚本,它可以通过证书。这不是开箱即用的。您需要将您的凭据复制到docker容器中,才能使其正常工作。使用卷应该可以做到这一点。但在法尔盖特,情况并非如此。您需要为任务定义创建IAM角色并分配它。AWS将负责在任何AWS API调用中使用该角色。@RaduDiță您能否更详细地了解Fargate部分,我如何将其与Fargate链接?通过地形?我已经有一个Fargate角色来允许它运行容器,我是否应该向该角色添加一些策略?是否有示例或分步说明?如何配置AWS SDK?您是否正在尝试将accessKeyId和secret传递给sdk?您是否在本地计算机上运行此容器?是否在我的本地计算机@RaduDiță上运行。我有一个bash脚本,我在这个问题上添加了这个脚本,它可以通过证书。这不是开箱即用的。您需要将您的凭据复制到docker容器中,才能使其正常工作。使用卷应该可以做到这一点。但在法尔盖特,情况并非如此。您需要为任务定义创建IAM角色并分配它。AWS将负责在任何AWS API调用中使用该角色。@RaduDiță您能否更详细地了解Fargate部分,我如何将其与Fargate链接?通过地形?我已经有一个Fargate角色来允许它运行容器,我是否应该向该角色添加一些策略?是否有示例或分步说明?我现在解决了凭证问题,犯了一个愚蠢的错误,谢谢,现在转到Fargate任务。只是一个快速的后续问题,如何将Python脚本链接到Fargate?或者我根本不需要它?您需要将python脚本复制到docker映像,将映像推送到ECR,如果脚本作为CMD docker命令的一部分运行。应该没有其他需要您配置的内容。我现在解决了凭证问题,犯了一个愚蠢的错误,谢谢,现在转到Fargate任务。下面是一个简单的后续问题,如何将Python脚本链接到Fargate?或者我根本不需要它?您需要将python脚本复制到docker映像,将映像推送到ECR,如果脚本作为CMD docker命令的一部分运行。不应该有任何其他内容供您配置。