HTTP代码400在python

时间:2016-12-22 13:34:22

标签: python amazon-s3 boto aws-cli boto3

我正在编写一个脚本,该脚本应该从我的s3存储桶下载文件,然后对其进行一些更改。 问题是我的脚本在以root身份执行时运行良好,但在使用专用用户时执行则不会。

以下是我们感兴趣的代码:

s3 = boto3.client('s3', aws_access_key_id='xxx', aws_secret_access_key='xxx')

s3.download_file('my-bucket', 'my_file.csv', '/my/path/to/file.csv')

当我以root用户身份运行脚本时没问题,文件被下载并且脚本继续运行,但是我的专用用户执行了该脚本:

logstash:x:501:501::/home/logstash:/sbin/nologin,它不起作用。

我尝试以root身份运行Python解释器并使用logstash并按命令执行脚本命令,它以root身份运行,但不是logstash。这是错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/boto3/s3/inject.py", line 126, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/usr/local/lib/python2.7/site-packages/boto3/s3/transfer.py", line 299, in download_file
future.result()
File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 73, in result
return self._coordinator.result()
File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 233, in result
raise self._exception
botocore.exceptions.ClientError: An error occurred (400) when calling the HeadObject operation: Bad Request

我在谷歌搜索了很多但没有关于这个特殊的“用户切换”案例的话题。

3 个答案:

答案 0 :(得分:0)

我先:)

用户logstash的权限是否已正确设置为您要下载的目录?

你有没有错过-R中的chown -R logstash

答案 1 :(得分:0)

以防万一有人出于与我相同的原因而遇到此错误: 对我来说,解决方法是在初始化s3-client时提供一个 region ,例如:

    s3 = boto3.client("s3", region_name="eu-central-1")

其中“ eu-central-1”需要替换为存储桶实际所在的区域。 看来这是一个错误:https://github.com/boto/botocore/issues/1413,尽管听起来应该予以修复。 仅供参考,由于未设置此区域,我遇到的两个错误是

botocore.exceptions.ClientError: An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

问题中已经提到的一个:

botocore.exceptions.ClientError: An error occurred (400) when calling the HeadObject operation: Bad Request

有趣的是,有些呼叫确实没有在“ eu-central-1”中工作,而在中国,对“ cn-north-1”的相同请求也失败了。

答案 2 :(得分:0)

有相同的错误。问题出在文件的错误路径中