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

使用python或CLI为MySQL Amazon RDS打开端口,python,amazon-web-services,boto,amazon-rds,Python,Amazon Web Services,Boto,Amazon Rds,我尝试为我的war文件创建一个到Elastic Beanstalk的命令行部署。到目前为止,它正在发挥作用。但我的最后一个问题是为我的RDS MySQL数据库打开端口3306,我的应用程序可以连接到它。我的部署脚本可以在以下位置找到: 我使用的是BOTO2.23.0、Python2.7.5+、connRds(与RDS的连接正在工作),dbeb是我的数据库名 首先,我用我的vpcid创建了一个EC2组。并设法为该组打开3306端口 .create_security_group(name=group

我尝试为我的war文件创建一个到Elastic Beanstalk的命令行部署。到目前为止,它正在发挥作用。但我的最后一个问题是为我的RDS MySQL数据库打开端口3306,我的应用程序可以连接到它。我的部署脚本可以在以下位置找到:

我使用的是BOTO2.23.0、Python2.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安全组并尝试执行authorize方法

    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]) 
但会导致另一个错误:无法将DB安全组成员资格应用于VPC中的DB实例。请改用VPC安全组

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

无法将DB安全组成员资格应用于专有网络中的DB实例。请改用专有网络安全组

始终记住一条经验法则,当您的东西在专有网络中运行时,只有专有网络安全组占优势。

其他单独的安全组(如RDS安全组、红移安全组等)仅对在
EC2 Classic
中运行的内容有效,也就是说,在专有网络之外


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

似乎是一个bug,让它与java一起工作


可能与此错误有关:

AuthorizedSecurityGroupIngress?boto中是否有等效的方法?我的Ec2组似乎是一个VPC组,通过webinterface,我可以为我的rds安全组选择该组。:/,我将在java中试用它,以检查它是否工作,谢谢,但我认为这是一个bug,也许它与这里相同?即使使用ID,我也会得到错误数据,api是过时的db=conrds.create_dbinstance(self.dbName,5,“db.t1.micro”,self.dbUser,self.dbUserPassword,security_groups=[sgEc2.ID]),然后我会得到错误,我有一个过时的api调用。我在github中提出了一个问题。