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,那将完全解决问题。

4

4 回答 4

20

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

并根据推荐的 IP 范围添加新的 CIDR。

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

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

于 2013-02-13T09:38:38.870 回答
5

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

安全组

如果您创建了安全组,则可以转到第 2 项。

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

在那里您可以命名您的安全组和描述。

VPC 可能会自动为您创建。

创建安全组窗口

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

  1. 设置入站和/或出站连接:

您可以在此处配置入站连接规则。

入境窗口

在编辑 -> 添加规则时,您有默认预设以便于配置,例如端口 80 上的 HTTP。

编辑入站连接规则窗口

我希望这从现在开始对每个人都有帮助。

  • 出于安全原因,请尝试仅允许需要的受信任 IP 和/或安全组。
于 2017-10-02T02:43:07.507 回答
2

确保您在添加配置下的数据库初始设置中创建数据库名称,除非 AWS RDS 不会创建数据库。

于 2019-11-03T22:50:48.947 回答
0

由于AWS界面发生了很大变化,因此使用更新的界面重新发布答案。

  1. 转到您的database instances,单击您DB identifier的数据库。
  2. 在那里你会看到Connectivity & security,在那个点击VPC security groupsSecurity。在那里,您将看到安全组列表。
  3. 现在点击Inbound Rules,然后在右边你会看到Edit Inbound Rules,点击那个。
  4. Inbound Rules应该如下图所示。

图片

添加这些规则后,只需保存它们并尝试连接,它应该可以工作。

于 2021-10-12T15:07:34.643 回答