2013-02-13 212 views
16

对于我的Flask应用程序,我想使用Flask-SQLAlchemy扩展连接到我在AWS RDS上创建的数据库实例。使用Flask-SQLAlchemy连接到AWS RDS MySQL数据库实例

当我尝试连接时,应用程序超时,我得到以下错误:

sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on 'xxxxxxxxxxxxxxx.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com'(60")

我的代码如下所示:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
application = Flask(__name__) 

application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{master username}:{db password}@{endpoint}/{db instance name}' 
db = SQLAlchemy(application) 

@application.route('/') 
def hello_world(): 
    return 'Hello World' 

if __name__ == '__main__': 
    application.run() 

Flask-SQLAlchemy documentation说,SQLALCHEMY_DATABASE_URI的格式对于mysql数据库连接应该看起来像这样:

mysql://username:[email protected]/db 

此外,我可以检查AWS RDS控制台以获取有关我的数据库实例的信息。控制台看起来像this

现在我假设 “用户名”中的SQLAlchemy是指“主用户名”,在AWS RDS控制台, “服务器”中的SQLAlchemy是指在AWS RDS控制台的“终端”, 和“ db“是指”数据库实例名称“

我在做什么错?

如果有人能够使用AWS RDS控制台术语为我描述SQLALCHEMY_DATABASE_URI,那将完全解决问题。

回答

19

转到您的AWS RDS的控制台,然后选择您的实例 - >数据库安全组 - >单击默认

,并添加了新的CIDR按照推荐的IP范围。

这基本上是一个防火墙配置,它确定谁可以连接到数据库实例。

您可以将其设置为0.0.0.0/0,以便防火墙不会阻止您从任何主机/网络访问它。

+0

这个答案现在不是很有效,因为AWS中的接口已经改变:( – sbose 2015-07-20 10:09:42

0

这是一个有效的路径:EC2仪表板 - >从左侧面板 - >安全组查找网络&安全组。

Security groups

如果你有一个安全组创建的,你可以去数2

  1. 创建一个新的安全组:

在那里,你可以说出你的安全组和描述。

VPC可能会自动为您创建。

Create security group window

创建后,从列表中选择它。

  • 设置入站和/或出站连接:
  • 在这里可以配置入站连接的规则。

    Inbound window

    上的编辑 - >添加您轻松配置默认预设规则,例如HTTP端口80上

    Edit inbound connection rules window

    我希望这有助于大家从现在开始。