【问题标题】:Using Python Boto with AWS Support API将 Python Boto 与 AWS Support API 结合使用
【发布时间】:2014-07-08 04:18:06
【问题描述】:

我使用 boto 与 S3 交互没有任何问题,但现在我正在尝试连接到 AWS Support API 以拉回关于开放票证、可信顾问结果等的信息。似乎 boto 库每个 AWS 服务有不同的连接方法吗?例如,对于 S3,它是:

conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

根据 boto 文档,以下内容应该可以连接到 AWS Support API:

>>> from boto.support.connection import SupportConnection
>>> conn = SupportConnection('<aws access key>', '<aws secret key>')

但是,我在挖掘源代码后发现了一些问题。首先, boto.support.connection 实际上并不存在。 boto.connection 可以,但它不包含 SupportConnection 类。 boto.support.layer1 存在,并且确实有类 SupportConnection,但它不接受文档建议的关键参数。相反,它需要 1 个参数 - 一个 AWSQueryConnection 对象。该类在 boto.connection 中定义。 AWSQueryConnection 接受 1 个参数 - 一个 AWSAuthConnection 对象,该类也在 boto.connection 中定义。最后,AWSAuthConnection 采用一个通用对象,其要求在 init 中定义为:

class AWSAuthConnection(object):
    def __init__(self, host, aws_access_key_id=None,
                 aws_secret_access_key=None,
                 is_secure=True, port=None, proxy=None, proxy_port=None,
                 proxy_user=None, proxy_pass=None, debug=0,
                 https_connection_factory=None, path='/',
                 provider='aws', security_token=None,
                 suppress_consec_slashes=True,
                 validate_certs=True, profile_name=None):

所以,为了好玩,我尝试通过传递密钥来创建 AWSAuthConnection,然后是 AWSQueryConnection(awsauth),然后是 SupportConnection(awsquery),但没有成功。这是在脚本中。

最后一个有趣的事情是,我的键在我的主目录中的 .boto 文件中定义,并从命令行运行 python 解释器,我可以直接导入并调用 SupportConnection()(无参数)和有用。它显然是从 .boto 文件中获取我的密钥并使用它们,但我还没有分析每一行源代码以了解如何,坦率地说,我希望避免这样做。

长话短说,我希望有人熟悉 boto 并连接到 S3 以外的 AWS API(通过 google 存在的大量材料),以帮助我进一步排除故障。

【问题讨论】:

标签: python amazon-web-services boto


【解决方案1】:

这应该可行:

import boto.support
conn = boto.support.connect_to_region('us-east-1')

这假设您在 boto 配置文件或 IAM 角色中拥有凭证。如果您想传递显式凭据,请执行以下操作:

import boto.support
conn = boto.support.connect_to_region('us-east-1', aws_access_key_id="<access key>", aws_secret_access_key="<secret key>")

这个基本的咒语应该适用于所有地区的所有服务。只需导入正确的模块(例如 boto.support 或 boto.ec2 或 boto.s3 或其他),然后调用它的 connect_to_region 方法,提供您想要的区域名称作为参数。

【讨论】:

  • 谢谢 - 您能否详细说明密钥是如何/在何处传递给 AWS 的?在我的本地机器上,.boto 文件可以工作,但是如果我将代码移动到需要通过环境变量传递密钥的产品服务器,或者甚至作为构造函数的参数?
  • 是的,做到了,谢谢! boto 文档必须有点过时。 boto.readthedocs.org/en/latest/support_tut.html 采用了我尝试过的方法,尽管它确实引用了更下方的“快捷方式”,这基本上就是您在此处提供的内容。尽管如此,我可以将密钥传递给 connect_to_region() 并不是很明显,所以我可能会一直在这里发布关于它的内容。谢谢!
  • @David 在启动 prod 服务器时最好使用 IAM 角色,而不是在服务器上显式存储密钥。 Boto 将自动使用临时的轮换凭据。
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2018-02-16
  • 2020-06-12
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多