使用Python Boto与AWS支持API

0 投票
1 回答
1772 浏览
提问于 2025-04-18 12:26

我之前用boto这个库和S3服务互动得很顺利,但现在我想连接到AWS的支持API,以获取关于未解决的工单、可信顾问的结果等信息。看起来boto库对每个AWS服务都有不同的连接方法?比如,连接S3的方式是:

conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

根据boto的文档,连接AWS支持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这个类,但它并不接受文档中提到的密钥参数。相反,它只接受一个参数——一个AWSQueryConnection对象。这个类是在boto.connection中定义的。AWSQueryConnection只接受一个参数——一个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和连接AWS API(除了S3以外的其他服务)有一些了解,能帮我进一步排查问题。

1 个回答

2

这个应该可以用:

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方法,传入你想要的区域名称作为参数。

撰写回答