FlaskでAWS RDSに接続する方法を徹底解説!MySQL/PostgreSQL設定ガイド
生徒
「Flaskで作ったアプリのデータを、AWSのRDSというデータベースに保存したいです。接続するにはどうすればいいですか?」
先生
「AWS RDSは、クラウド上でデータを安全に保管してくれる専用の金庫のようなものです。Flaskからは、SQLAlchemyという便利な道具を使って接続しますよ。」
生徒
「MySQLやPostgreSQLといった種類があるみたいですが、設定方法は違いますか?」
先生
「基本の書き方は同じですが、接続用の呪文が少しだけ変わります。初心者の方でも迷わないように、順を追って進めていきましょう!」
1. FlaskとAWS RDSの役割を理解しよう
まずは、今回使う道具の役割を整理しましょう。Flask(フラスク)は、PythonでWebサイトの仕組みを作るためのフレームワークです。そして、AWS RDS(アールディーエス)は、Amazonが提供する「リレーショナルデータベース」のサービスです。
データベースとは、ユーザー情報やブログの投稿内容など、大切なデータを整理して保管しておくための巨大な表のようなものです。自分のパソコンの中にデータを置くのではなく、AWSというクラウド上の安全な場所に置くことで、世界中からアクセスしてもデータが消えたり壊れたりしにくくなります。MySQLやPostgreSQLは、そのデータベースを管理するシステムの種類のことで、どちらを選んでもRDSなら高性能に動かすことができます。
2. AWS RDS側で接続情報を取得する手順
Flaskから接続するためには、RDSという金庫を開けるための情報が必要です。AWSの管理画面にログインして、以下の情報をメモしてください。
もっとも重要なのが、エンドポイントと呼ばれる住所です。これは「db-instance.xxxx.ap-northeast-1.rds.amazonaws.com」のような長い文字列です。これに加えて、データベースを作成したときに決めた「ユーザー名」「パスワード」「ポート番号(MySQLなら3306、PostgreSQLなら5432)」が必要です。これらは後ほど、Flaskのプログラムの中で「接続文字列」として組み合わせて使うことになります。
また、セキュリティ設定(セキュリティグループ)で、自分のパソコンやFlaskを動かしているサーバーからのアクセスを許可しておくのを忘れないようにしましょう。これを忘れると、何度試しても「接続できません」とエラーになってしまいます。
3. 必要なライブラリのインストール
Pythonからデータベースを操作するために、便利な拡張機能(ライブラリ)をインストールしましょう。今回は、データベースの操作を直感的にしてくれるFlask-SQLAlchemyと、MySQLまたはPostgreSQLに接続するための「ドライバー」と呼ばれるソフトを入れます。
パソコンの黒い画面(コマンドプロンプトやターミナル)を開いて、以下のコマンドを入力してください。MySQLを使う場合とPostgreSQLを使う場合で、最後の単語が変わります。
# MySQLを使う場合
pip install flask-sqlalchemy pymysql
# PostgreSQLを使う場合
pip install flask-sqlalchemy psycopg2-binary
これらの道具を揃えることで、難しいSQL文を直接書かなくても、Pythonの書き方でデータを保存したり取り出したりできるようになります。これがプログラミングの効率をぐんと上げてくれます。
4. FlaskからMySQLへ接続する基本コード
では、実際にMySQLのRDSに接続するためのコードを書いてみましょう。以下の例は、データベースに接続して、ユーザーという名前のテーブル(表)を管理するための準備をするプログラムです。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# MySQL接続のための設定(呪文の形式:mysql+pymysql://ユーザー:パスワード@エンドポイント:ポート/DB名)
db_user = 'admin'
db_pass = 'password123'
db_host = 'mydb.xxxx.rds.amazonaws.com'
db_name = 'sample_db'
app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{db_user}:{db_pass}@{db_host}:3306/{db_name}'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
if __name__ == "__main__":
print("MySQLデータベースへの接続準備が整いました!")
コード内のSQLALCHEMY_DATABASE_URIという部分が、接続するための大切な鍵です。ここに先ほどメモしたRDSの情報を正しく埋め込むことで、FlaskとRDSが一本の線でつながります。初心者の方は、まずこの「接続文字列」を正しく作ることが一番のハードルですので、一文字ずつ確認しながら入力しましょう。
5. PostgreSQLを使う場合の接続設定の違い
もしPostgreSQLという種類のデータベースをRDSで作った場合、接続の書き方が少しだけ変わります。基本の仕組みは同じですが、先頭の「mysql+pymysql」の部分を「postgresql」に変える必要があります。
# PostgreSQLに接続する場合の設定例
# ポート番号は通常5432になります
db_uri = 'postgresql://admin:password123@mydb.xxxx.rds.amazonaws.com:5432/sample_db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
db = SQLAlchemy(app)
@app.route("/")
def check_db():
try:
# 接続が成功するかテストします
db.session.execute('SELECT 1')
return "PostgreSQLへの接続に成功しました!"
except Exception as e:
return f"エラーが発生しました: {str(e)}"
このように、Flask-SQLAlchemyを使っていれば、データベースの種類が変わっても設定を一行書き換えるだけで対応できます。これがクラウド連携において非常に柔軟で便利なポイントです。PostgreSQLはデータの整合性を重視するアプリに向いていると言われており、多くの開発者に愛用されています。
6. データの保存と読み込みを試してみよう
接続ができたら、実際にデータを保存してみましょう。データベースへの書き込みは「セッション」という単位で行います。これは、銀行の振込作業のように「一連の処理をまとめて確定させる」というイメージです。
@app.route("/add_user/<name>")
def add_user(name):
# 新しいユーザーデータを作成します
new_user = User(username=name)
# データベースに追加して、変更を確定(コミット)します
db.session.add(new_user)
db.session.commit()
return f"ユーザー {name} をRDSに保存しました!"
@app.route("/list_users")
def list_users():
# 保存されている全ユーザーを取得します
all_users = User.query.all()
names = [u.username for u in all_users]
return f"現在のユーザー一覧: {names}"
このように書くだけで、ブラウザから名前を送ればRDSというクラウドの金庫にデータが書き込まれます。自分のパソコンを再起動しても、データはRDSの中にずっと残っています。これがデータベース連携の醍醐味ですね。パソコン初心者の方でも、この「追加(add)」と「確定(commit)」の流れを覚えれば、Webアプリの機能がぐっと本格的になります。
7. 環境変数を使ってパスワードを保護する
一つ、とても大切なセキュリティの注意点があります。プログラムの中に直接データベースのパスワードを書いてしまうと、そのファイルを誰かに見られたときに情報が漏れてしまいます。これを防ぐために環境変数(かんきょうへんすう)という仕組みを使います。
環境変数とは、プログラムの外側に秘密の値を隠しておく箱のようなものです。Pythonのos.environという機能を使えば、安全にパスワードを読み込むことができます。デプロイ(アプリの公開)を考える段階では、この安全な書き方に修正しておくのがプロの常識です。
8. データベースの初期化とエラー対策
初めてデータベースを使うときは、プログラムの中で定義した「テーブル(表)」を実際にRDSの中に作成する必要があります。これを初期化と呼びます。以下のコードを一度だけ実行することで、RDSの中に必要な器が作られます。
# アプリのコンテキスト内でテーブルを作成する
with app.app_context():
db.create_all()
print("データベースのテーブル作成が完了しました。")
もしここでエラーが出る場合は、AWS側のセキュリティ設定(インバウンドルール)が原因であることが多いです。RDSが外部からの通信を拒否していないか、もう一度設定画面を確認してみましょう。エラーメッセージをよく読むと、接続に失敗した原因が書かれています。トラブルを一つずつ解決していくことで、クラウドの仕組みがより深く理解できるようになりますよ。
9. クラウド連携でアプリを成長させるコツ
FlaskとAWS RDSの連携ができれば、もうデータの保存場所に困ることはありません。大量のユーザー情報を扱ったり、ECサイトのような複雑なデータを管理したりすることも可能です。AWS RDSは、アクセスの増加に合わせて自動で性能を上げる設定もできるため、将来的にアプリが有名になっても安心です。
プログラミング未経験から始めると、最初はクラウドの設定に戸惑うかもしれません。しかし、一つひとつの設定には必ず意味があります。一度つながってしまえば、あとはPythonのコードを書くだけで自由にデータを操れるようになります。この強力な組み合わせを武器にして、自分だけの素晴らしいWebアプリを形にしていきましょう。あなたの挑戦を応援しています!