web-dev-qa-db-ja.com

Flask-SQLAlchemyを使用してAWS RDS MySQLデータベースインスタンスに接続する

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を説明してくれれば、問題は完全に解決します。

20
Moni

AWS RDSコンソールに移動し、インスタンスを選択します-> DBセキュリティグループ->デフォルトをクリック

推奨IP範囲に従って新しいCIDRを追加します。

これは基本的に、データベースインスタンスに接続できるユーザーを決定するファイアウォール構成です。

ファイアウォールがホスト/ネットワークからのアクセスを妨げないように、0.0.0.0/0に設定できます。

20
sbose

これは有効なパスです:EC2ダッシュボード->左側のパネルからネットワークとセキュリティを検索->セキュリティグループ。

Security groups

セキュリティグループを作成している場合は、番号2に進むことができます。

  1. 新しいセキュリティグループを作成します。

そこでセキュリティグループと説明に名前を付けることができます。

VPCはおそらく自動的に作成されます。

Create security group window

作成後、リストから選択します。

  1. インバウンド接続および/またはアウトバウンド接続をセットアップします。

ここでは、インバウンド接続ルールを構成できます。

Inbound window

編集->ルールを追加すると、ポート80のHTTPなど、簡単に設定できるデフォルトのプリセットがあります。

Edit inbound connection rules window

これが皆さんのお役に立てば幸いです。

  • セキュリティ上の理由により、必要な信頼できるIPやセキュリティグループのみを許可するようにしてください。
2
Fábio Correia

aWS RDSがデータベースを作成しない場合を除き、追加構成のデータベースの初期セットアップでデータベース名を作成していることを確認してください。

1