使用python或CLI打开MySQL Amazon RDS的端口

时间:2014-01-21 17:47:10

标签: python amazon-web-services boto amazon-rds

我尝试为我的war文件创建一个命令行部署到Elastic Beanstalk。它到目前为止工作。但我的最后一个问题是为我的RDS MySQL数据库打开端口3306,我的应用程序可以连接到它。我的部署脚本位于:https://github.com/sven-hornberg-1314-fhb/Web106/blob/master/deploy.py

我正在使用boto 2.23.0,Python 2.7.5 +,connRds(与RDS的连接正在工作),dbeb是我的数据库名称。

首先,我首先用我的vpcid创建了一个EC2组。并设法为该组打开3306端口。

.create_security_group(name=group_name, description=descriptionval,vpc_id=vpcid)

接下来,我通过RDS连接创建了一个RDS组

connRds.create_dbsecurity_group(self.rdsSecurityGroup, 'rdsgroup')

我的下一步是使用下一行代码更新RDS组。首先,我获得已定义的EC2安全组并尝试执行授权方法

    connRds = boto.rds.connect_to_region(self.region,
       aws_access_key_id=self.awsAccessKey, 
       aws_secret_access_key=self.awsSecretKey
    ) 

    instances = connRds.get_all_dbinstances('dbeb')
    db = instances[0]


    rdsgp = connRds.get_all_dbsecurity_groups()[1]
    myEC = connEc2.get_all_security_groups([self.ec2SecurityGroup])[0]

    rdsgp.authorize(ec2_group=sgEc2)

我收到了几个错误,还有我稍后发布的其他代码,第一条错误信息是:

<ErrorResponse xmlns="http://rds.amazonaws.com/doc/2013-05-15/">
<Error>
<Type>Sender</Type>
<Code>InvalidParameterValue</Code>
<Message>VPC DB Security Groups cannot be modified with this API version.  Please use  an API version between 2012-01-15 and 2012-10-31 to modify this group.</Message>
</Error>
<RequestId>e48f8443-82bc-11e3-9861-6bf67b1543ed</RequestId>
</ErrorResponse>

我的另一个尝试是更改db对象上的组:

instances = connRds.get_all_dbinstances('dbeb')
db = instances[0]
db.modify(security_groups=[sgEc2]) 

但导致其他错误:无法将数据库安全组成员身份应用于VPC中的数据库实例。请改用VPC安全组

但是我想通过传递vpc_id参数来创建一个VPC组? 您是否有任何提示或其他方法通过命令行打开端口? (必须通过API或CLI)

2 个答案:

答案 0 :(得分:1)

  

无法将数据库安全组成员身份应用于VPC中的数据库实例。请改用VPC安全组

当你在VPC中运行你的东西时,总是记住一个经验法则 ,然后只有VPC安全组占上风。

其他个别安全组,例如RDS安全组,RedShift安全组等仅对在EC2-Classic中运行的内容有效,这意味着在VPC之外。

因此,您实际上是在尝试将EC2-Classic(换句话说,RDS安全组)应用于在VPC内运行的RDS实例。这是错误的,因此您收到了上述错误。

答案 1 :(得分:0)

似乎是一个bug,让它与java一起工作 https://gist.github.com/sven-hornberg-1314-fhb/8560467

可能与此错误相关:https://github.com/boto/boto/issues/561