2013-02-13 213 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

    我希望這有助於大家從現在開始。