使用boto和SigV4的S3 - 缺少主机参数
在开发的时候,我使用了位于爱尔兰的S3存储桶,一切运行得很好。现在在生产环境中,我想使用新的“法兰克福”地区的S3,但显然这个新的法兰克福地区使用了“SigV4”认证,这导致我的Python脚本出现问题。
当我在~/.boto文件中添加以下内容时,出现了一个错误:
~/.boto:
[s3]
use-sigv4 = True
错误信息:
File "/usr/lib/python2.6/site-packages/boto/__init__.py", line 141, in connect_s3
return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
File "/usr/lib/python2.6/site-packages/boto/s3/connection.py", line 196, in __init__
"When using SigV4, you must specify a 'host' parameter."
boto.s3.connection.HostRequiredError: BotoClientError: When using SigV4,
you must specify a 'host' parameter.
有没有人能告诉我怎么指定“host”参数?我在AWS/boto的文档中找不到这个参数。
1 个回答
13
这里有关于你遇到的错误的文档,还有这段具体的源代码,它是用来创建S3Connection
的(也就是导致你错误的原因)。
在创建S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
的时候,你需要额外传入一个参数host=...
,这个参数应该是一个简单的字符串,比如's3.amazonaws.com'
,或者根据你的设置来调整。
解决方法:
你可以把这个参数添加到你传入的kwargs
中:
kwargs.update({'host': 's3.amazonaws.com'})
或者你也可以手动调用它,像这样:
S3Connection(aws_access_key_id, aws_secret_access_key, host='s3.amazonaws.com', **kwargs)