我正在使用一个模拟在http://127.0.0.1:4569上运行的S3服务器的容器(无需授权或凭据)
我正在尝试使用python和boto3简单地连接并打印所有存储桶名称的列表
这是我的docker-compose:
s3:
image: andrewgaul/s3proxy
environment:
S3PROXY_AUTHORIZATION: none
hostname: s3
ports:
- 4569:80
volumes:
- ./data/s3:/data
这是我的代码:
s3 = boto3.resource('s3', endpoint_url='http://127.0.0.1:4569')
for bucket in s3.buckets.all():
print(bucket.name)enter code here
这是我收到的错误消息:
botocore.exceptions.NoCredentialsError: Unable to locate credentials
我试过这个解决方案=> How do you use an HTTP/HTTPS proxy with boto3?
但仍然无法正常工作,我不明白我做错了什么
答案 0 :(得分:1)
首先,boto3总是尝试使用AWS API密钥与S3服务器握手。即使您的模拟服务器不需要密码,您仍然需要在.aws /凭证或程序内指定它们。例如
[default]
aws_access_key_id = x
aws_secret_access_key = x
硬编码虚拟访问密钥示例
import boto3
session = boto3.session(
aws_access_key_id = 'x',
aws_secret_access_key = 'x')
s3 = session.resource('s3', endpoint_url='http://127.0.0.1:4569')
其次,我不知道你的" s3模拟容器"实现了多么可靠和哪种协议。为了让生活更轻松,我总是建议任何想要模拟S3负载测试或任何使用的人fake-s3