使用Flask-SQLAlchemy连接到AWS RDS MySQL数据库实例

25
我的Flask应用程序中,我想使用Flask-SQLAlchemy扩展来连接到我在AWS RDS上创建的数据库实例。
当我尝试连接时,应用程序超时并出现以下错误信息:
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文档指出,用于mysql数据库连接的SQLALCHEMY_DATABASE_URI格式如下: (链接)
mysql://username:password@server/db

此外,我可以在AWS RDS控制台上检查有关我的数据库实例的信息。控制台看起来像这样
目前我假设SQLAlchemy中的“用户名”指的是AWS RDS控制台中的“主用户名”, SQLAlchemy中的“服务器”指的是AWS RDS控制台中的“端点”, 而“db”指的是“数据库实例名称”
我做错了什么?
如果有人能用AWS RDS控制台术语为我描述SQLALCHEMY_DATABASE_URI,那将完全解决问题。

如何在 AWS 旋转密钥时使用相同的方法,如果密钥更新,我们是否需要重新启动应用程序? - newuser
4个回答

21

前往AWS RDS控制台并选择您的实例 -> DB安全组 -> 点击 默认

然后根据建议的IP范围添加一个新的CIDR。

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

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


1
这个答案现在不太有效,因为AWS中的界面已经改变了 :( - sbose
1
更新:前往 VPC > 然后进入安全组 > 入站规则 > 添加 IP 范围以允许。 - Sheece Gardazi

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

Security groups

如果您已经创建了安全组,可以直接进行第二步。
1. 创建新的安全组:
在此处,您可以为安全组命名并添加描述。
可能会自动为您创建VPC。

Create security group window

创建完成后,从列表中选择它。
2. 设置入站和/或出站连接:
在这里,您可以配置入站连接规则。

Inbound window

在编辑时,您可以添加规则,您可以使用默认预设进行简单配置,例如端口80上的HTTP。

Edit inbound connection rules window

我希望这能从现在开始对大家有所帮助。

  • 出于安全考虑,尽量只允许可信IP和/或必要的安全组。

2

请确保在数据库的初始设置中,在附加配置下创建数据库名称,否则AWS RDS将无法创建数据库。


否则,使用类似DBeaver的数据库管理工具连接到RDS实例并在那里创建数据库。 - florisla

1

由于AWS接口已经改变了很多,因此更新界面后重新发布答案。

  1. 进入您的数据库实例,单击您的数据库的DB标识符
  2. 您将在那里看到连接性和安全性,在其中单击安全性下的VPC安全组。您将看到安全组列表。
  3. 现在单击Inbound Rules,然后在右侧单击Edit Inbound Rules
  4. 您的Inbound Rules应该像下面的图片一样。

image

添加完这些规则后,只需保存并尝试连接,应该就可以了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接