使用Python Boto与AWS支持API
我之前用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 个回答
这个应该可以用:
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
方法,传入你想要的区域名称作为参数。