boto.rds2使用boto配置文件连接到任何区域

时间:2016-03-30 07:15:56

标签: amazon-web-services boto

我有多个aws帐户,我想通过脚本管理大部分工作。我能够使用boto配置文件连接到ELB,EC2但是我无法找到与RDS一起使用的相同机制。

对于EC2连接,我的示例功能如下所示:

def Ec2Conn(reg,profile = 'default'):
        ec2conn = ''
        try:
                ec2conn = boto.ec2.EC2Connection(profile_name=profile, region=boto.ec2.get_region(reg.strip()))
        except Exception, e:
                boto.log.error("Cannot validate provided AWS credentials: %s" % e)
        return(ec2conn)

如果reg(region)传递给函数,它将读取,否则它将在aws boto中选择区域set default。同样,如果没有为配置文件提供选项,则从boto获取默认配置文件。

但是我无法对RDS连接做同样的事情。

我认为可以使用boto配置文件进行RDS连接的示例代码,但遗憾的是无法正常工作:

def RDSConn(reg,profile = 'default'):
        rdsconn = ''
        try:
                rdsconn = boto.rds2.connect_to_region(region=boto.ec2.get_region(reg.strip()), profile_name=profile)
        except Exception, e:
                boto.log.error("Cannot validate provided AWS credentials: %s" % e)
        return(elbconn)

哎呀这是敬畏!! :

>>> dir(boto.rds2)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'connect_to_region', 'get_regions', 'regions']
>>>

Boto rds2中没有任何配置文件的方法。

我在我的盒子上运行的Boto版本如下:

>>> print boto.Version
2.39.0

任何遇到同样问题的人。任何建议PLZ。

3 个答案:

答案 0 :(得分:1)

region不是可选key=value参数的一部分,它是必需参数。对于boto.ec2.connect_to_region也是如此。

connect_to_region(region_name, **kw_params)

所以你的代码应该是:

rdsconn = boto.rds2.connect_to_region(boto.ec2.get_region(reg.strip()), profile_name=profile)

答案 1 :(得分:0)

这是常见的AWS汇总(AKA差的文档),您必须找到分散的信息。 (Python help()并没有给你很多信息)

这是有效的示例代码。假设您有一个〜/ .aws / credential文件,文件中有[default]条目。 (解决方案示例在此处http://boto3.readthedocs.org/en/latest/guide/configuration.html

rds_conn = boto.rds2.connect_to_region("eu-central-l", profile_name="default")
#you cannot specifiy region=, and things like profile_name= not mentioned as arguments

AWS改变boto.rds2的参数传递方式,使用的方法与boto3非常相似。

答案 2 :(得分:0)

感谢大家的建议。我正在制作一个模块,用于访问aws中的多个服务,现在已完成。我不需要知道aws键,密钥和所有,一旦我自动化我的东西。

我用以下方法修复了rds连接问题:

def RDSConn(reg,profile = 'default'):
        rdsconn = ''
        endpt = 'rds.' + reg + '.amazonaws.com'
        reg = boto.regioninfo.RegionInfo(name=reg,endpoint=endpt)
        try:
                rdsconn=boto.connect_rds2(profile_name=profile, region=reg)
        except Exception, e:
                boto.log.error("Cannot validate provided AWS credentials: %s" % e)
        return(rdsconn)