我正在调整bash脚本到python。该脚本调用aws cli从s3下载文件:
aws s3 cp s3://some_bucket/some/key /some/path
我当然可以从python中调用aws
,但使用像boto
之类的库来做这件事会感觉更好;我可以更多地定制操作,引发的异常将比CalledProcessError
等更具体。所以我写道:
s3 = boto.connect_s3()
bucket = s3.get_bucket("some_bucket")
key = bucket.get_key("some/key")
contents = key.get_contents_as_string().decode("utf-8").strip()
path = "/some/path"
with open(path, "w") as f:
f.write(contents + "\n")
虽然这适用于我的桌面(使用访问密钥授权),但它不能在我需要运行的ec2实例上运行(使用IAM)。相反,它会挂起get_bucket()
来电。我认为这是由于IAM权限,但上面的aws s3 cp
命令工作正常。我试图查看aws
CLI的来源,但它很复杂,似乎没有使用boto
。
什么会导致两者采取不同的行动,是否有一种方法可以调整我的boto
用法,使其与CLI的工作方式相同?