Flaskアプリの場合、Flask-SQLAlchemy拡張機能を使用して、AWS RDSで作成したデータベースインスタンスに接続します。
接続しようとすると、アプリケーションがタイムアウトし、次のエラーが発生します。
sqlalchemy.exc.OperationalError:(OperationalError)(2003、 "'xxxxxxxxxxxxxxx.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com'(60")上のMySQLサーバーに接続できません
私のコードは次のようになります:
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コンソールを確認できます。コンソールは this のようになります。
現在、SQLAlchemyの「ユーザー名」はAWS RDSコンソールの「マスターユーザー名」を指し、SQLAlchemyの「サーバー」はAWS RDSコンソールの「エンドポイント」を指し、「db」は「データベースインスタンス名」
何が悪いのですか?
誰かがAWS RDSコンソールの用語でSQLALCHEMY_DATABASE_URIを説明してくれれば、問題は完全に解決します。
AWS RDSコンソールに移動し、インスタンスを選択します-> DBセキュリティグループ->デフォルトをクリック
推奨IP範囲に従って新しいCIDRを追加します。
これは基本的に、データベースインスタンスに接続できるユーザーを決定するファイアウォール構成です。
ファイアウォールがホスト/ネットワークからのアクセスを妨げないように、0.0.0.0/0に設定できます。
これは有効なパスです:EC2ダッシュボード->左側のパネルからネットワークとセキュリティを検索->セキュリティグループ。
セキュリティグループを作成している場合は、番号2に進むことができます。
そこでセキュリティグループと説明に名前を付けることができます。
VPCはおそらく自動的に作成されます。
作成後、リストから選択します。
ここでは、インバウンド接続ルールを構成できます。
編集->ルールを追加すると、ポート80のHTTPなど、簡単に設定できるデフォルトのプリセットがあります。
これが皆さんのお役に立てば幸いです。
aWS RDSがデータベースを作成しない場合を除き、追加構成のデータベースの初期セットアップでデータベース名を作成していることを確認してください。