【実践】FlaskとAmazon Aurora!データベース連携の方法を徹底解説

データベース

Webアプリケーション開発において、データの永続化は非常に重要な要素です。せっかく入力したデータも、ページを更新したりアプリを閉じたりしたら消えてしまうのでは困りますよね。

そこで登場するのが「データベース」です。

今回は、人気のあるPythonのWebフレームワークFlaskと、AWSが提供するスケーラブルなリレーショナルデータベースサービスAmazon Auroraを組み合わせ、データの保存・管理ができる単語帳アプリの開発に挑戦しましょう。

今回は、FlaskとAWS Auroraを使って、以下のような単語帳アプリを作成します。

データベースを使うことで、データが補遺されページを更新してもデータが消えずに表示させ続けることができます。

今回作成するアプリについて

今回作成するのは、「用語」とその「意味」を登録・一覧・削除できるシンプルなWebベースの単語帳アプリです。このアプリのポイントは、その裏側でデータベースが使われている点です。

具体的には、AWSのクラウド上にあるAmazon Auroraにデータが安全に保存されるため、ブラウザを閉じたりページを更新したりしても、登録した単語や意味が消えることはありません。

Flaskで構築されたフロントエンドと、Auroraに保存されるデータが連携することで、機能的で使いやすい単語帳が手に入ります。

機能内容
🔡 登録機能単語と意味をフォームから追加(POST)
📄 一覧表示登録済みの単語が一覧として表示
❌ 削除機能各単語の横に「削除」リンクがあり、1クリックで削除
🔁 自動反映追加・削除後はリダイレクトされ、即座に反映される
💾 データ永続化すべてのデータはRDS(Aurora)上のMySQLデータベースに保存される

Amazon Auroraとは?

Amazon Aurora は、AWS(Amazon Web Services)が提供するリレーショナルデータベースサービス(RDS)の一種です。

簡単に言うと

MySQLまたはPostgreSQLと互換性があり、クラウドに最適化された超高速で信頼性の高いデータベース。

AWSが一から設計し直しており、従来のオープンソースDBよりも高い性能と可用性を備えています。

Auroraの特徴

高性能

  • MySQLの最大5倍、PostgreSQLの最大3倍のスループット。
  • AWSが独自に最適化したエンジンにより、クエリ処理が非常に高速。

高可用性と耐障害性

  • データは自動で6重コピーされ、複数のAZ(アベイラビリティゾーン)に分散保存。
  • 自動フェイルオーバーに対応。障害時でもダウンタイムを最小限に。

フルマネージド

  • バックアップ、パッチ適用、モニタリング、スケーリングはすべて自動
  • インフラ管理の手間を大幅削減。

MySQL / PostgreSQL 互換

  • 既存アプリとの移行もスムーズ。
  • MySQLやPostgreSQLで使っていたクライアントやツールがそのまま使える。

Serverless にも対応!

Aurora は通常のインスタンス型に加えて、Aurora Serverless v2 という自動スケーリング版もあります。

サーバーレスとインスタンス型の違いは以下の表をご確認ください。

比較Aurora Serverlessインスタンス型
料金体系使った分だけ従量課金常にインスタンス分の料金が発生
スケーリング自動でスケールアップ/ダウン手動でサイズ変更が必要
起動時間コールドスタートあり(数秒〜数十秒)常に起動中(すぐ反応)
料金が安いか?✅ アクセス頻度が少ないなら安い高頻度アクセスではこちらが安くなることも

【実践】単語帳アプリを作ってみよう!

ここからは、実際にFlaskAmazon Auroraを使って単語帳アプリを作成する手順を解説していきます。一つずつ丁寧に見ていきましょう!

必要なライブラリのインストール

まずは、アプリ開発に必要なライブラリをインストールします。以下のコマンドをターミナルに入力して実行してください。

pip install flask flask_sqlalchemy pymysql

このコマンドでインストールされる主なライブラリは以下の通りです。

  • Flask: Python製の軽量なWebフレームワークです。Webアプリの基本的な機能を提供してくれます。
  • Flask-SQLAlchemy: Flaskでデータベースを扱うための拡張機能です。Pythonのコードでデータベースの操作ができるようになります。
  • PyMySQL: PythonからMySQLデータベースに接続するためのライブラリです。Amazon AuroraもMySQL互換なので、このライブラリを使って接続します。

ステップ1:ローカルでFlaskアプリを作る

次に、単語帳アプリの基本的なファイル構成を作成し、それぞれのファイルにコードを記述していきます。

まずは、以下のディレクトリ構造を作成しましょう。

wordbook-app/
├── app.py
├── models.py
├── requirements.txt
└── Dockerfile(※ECSに載せるなら後で作成)

ターミナルで以下のコマンドを実行して、ディレクトリとファイルを作成します。

mkdir wordbook-app
cd wordbook-app
touch app.py
touch models.py
touch requirements.txt
touch Dockerfile

requirements.txt

requirements.txtファイルには、このアプリが依存するライブラリとそのバージョンを記述します。これにより、他の環境でも同じライブラリ構成を簡単に再現できます。

flask
flask_sqlalchemy
pymysql

models.py

models.pyファイルには、データベースのテーブル構造を定義します。

Flask-SQLAlchemyを使って、Pythonのクラスとしてテーブルを表現します。

# SQLAlchemyのインスタンスを初期化
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

# 単語を保存するWordモデルの定義
class Word(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    
    # 単語(最大100文字)
    word = db.Column(db.String(100), nullable=False)
    
    # 意味(最大255文字)
    meaning = db.Column(db.String(255), nullable=False)

ここでは、Wordというクラスを定義しています。

app.py

app.pyは、Flaskアプリのメインとなるファイルです。

Webページのルーティング(URLと処理の紐付け)や、データベースへの操作などを定義します。

# 必要なモジュールのインポート
from flask import Flask, request, redirect, render_template_string
from models import db, Word
import urllib.parse

# Flaskアプリの初期化
app = Flask(__name__)

# データベース接続設定(Aurora MySQL)
# 環境変数やSecretsManagerで安全に管理するのが推奨
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<USER>:<PASSWORD>@<エンドポイントURL>:3306/<DBNAME>'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# SQLAlchemyの初期化
db.init_app(app)

# トップページ(単語一覧+追加フォーム)
@app.route('/')
def index():
    words = Word.query.all()
    return render_template_string('''
        <h1>単語帳</h1>
        <ul>
        {% for w in words %}
            <li><strong>{{ w.word }}</strong>: {{ w.meaning }} <a href="/delete/{{ w.id }}">削除</a></li>
        {% endfor %}
        </ul>
        <form action="/add" method="post">
            <input name="word" placeholder="単語">
            <input name="meaning" placeholder="意味">
            <button>追加</button>
        </form>
    ''', words=words)

# 単語を追加するエンドポイント(POST)
@app.route('/add', methods=['POST'])
def add():
    word = request.form['word']
    meaning = request.form['meaning']
    db.session.add(Word(word=word, meaning=meaning))
    db.session.commit()
    return redirect('/')

# 単語を削除するエンドポイント(GET)
@app.route('/delete/<int:word_id>')
def delete(word_id):
    word = Word.query.get(word_id)
    db.session.delete(word)
    db.session.commit()
    return redirect('/')

# アプリのエントリーポイント(初回起動時にテーブル作成)
if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(host='localhost', port=5200)

以下のように出力されていれば、OKです。

Serving Flask app ‘app’
Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
Running on http://localhost:5200
Press CTRL+C to quit

ステップ2:Amazon Aurora Serverless v2 のクラスターを作成

単語帳アプリの準備ができたら、次にデータベースとして利用するAmazon Aurora Serverless v2を設定します。

FlaskアプリをAWSのAurora Serverlessに接続するには、RDSクラスターを起動するだけでなく、その中に実際のデータベースを作成しておく必要があります。

まずは、「AIT-wordbook-app-DB」というクラスターを作成します。

AWSマネジメントコンソールでAmazon Auroraページを開く

エンジンのタイプは、Aurora (MySQL Compatible)を選択して作成を進めます。

Screenshot

今回のFlaskアプリはMySQL向けに構成されています(mysql+pymysql://

SQLAlchemyによる接続やモデル定義などがMySQLの方言に最適化されており、

pymysqlドライバはPostgreSQLでは使えないためです。

続けて、以下のような条件で Aurora Serverless のクラスターを作成します。

  • テンプレート:開発/テスト
  • DBクラスター識別子AIT-wordbook-app-DB
  • インスタンスクラス:Serverless v2
  • パブリックアクセスあり(一時的に有効。必ずテスト後は無効にする or 削除)
     外部からのアクセスができてしまい、セキュリティリスクがあるため注意してください。
  • セキュリティグループ:ポート 3306 を開放しているもの
  • その他設定:基本的にデフォルトのままでOK

作成後、数分でクラスターが「利用可能」な状態になります。

ステップ3:CLI からデータベースを作成する

RDSクラスター自体ができても、その中にMySQLデータベースが存在しないと接続エラーになります

以下の手順で「ait-test-db」というデータベースを作成しましょう。

RDSに接続するコマンド

まず、Auroraに接続するために以下のコマンドを使います。ターミナルで実行してください。

mysql -u <ユーザー名> -p -h <エンドポイント名>

※コマンド実行後に、パスワードが求められます。

🔐 エンドポイント名、ユーザー名、パスワードの確認方法については後述。

データベース作成

接続に成功したら、以下のSQLコマンドを実行してデータベースを作成します。

CREATE DATABASE `ait-test-db`;

🔸 名前に -(ハイフン)が含まれているので、バッククォート ` で囲む必要があります。

作成したデータベースの確認

データベースが正しく作成されたか確認するために、以下のコマンドを実行します。

SHOW DATABASES;

ait-test-db がリストに表示されていればOK!

①エンドポイント名の確認方法

Auroraが作成されたら、AWSコンソールのRDSダッシュボードでエンドポイントが表示されます。

その値をコピーしてメモ帳などに貼り付けておきましょう。

これがFlaskアプリからデータベースに接続するためのURLになります。

②USER/PASSWORDの確認方法

Auroraのページで「設定」タブを開き、Secrets Managerのリンクをクリックします。

AWS Secrets Managerのページが別タブで表示されます。「シークレットの値を取得する」をクリックすると、データベース接続用のUSER名とPASSWORDの値が表示されます。

これらの情報もメモしておきましょう。

ステップ4:Aurora作成後にアプリの起動

Auroraクラスターと、その中にデータベースが作成できたら、いよいよapp.pyの接続情報を修正し、アプリを起動します。

app.pyの11行目、app.config['SQLALCHEMY_DATABASE_URI']に、先ほど確認した接続情報を記入します。

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<USER>:<PASSWORD>@<エンドポイントURL>:3306/<DBNAME>'

①エンドポイント名の確認方法
②USER/PASSWORDの確認方法
で確認した値を記入します。

データベース名は、「Auroraクラスター内に作成したデータベース」です。
今回は「ait-test-db

例えば、ユーザー名がadmin、パスワードがyour_password、エンドポイントがyour-aurora-endpoint.xxxxxxxx.ap-northeast-1.rds.amazonaws.comの場合、以下のようになります。

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://admin:your_password@your-aurora-endpoint.xxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306/ait-test-db'

コードの修正後に、ターミナルで以下のコマンドを実行すればアプリが起動します。

python app.py

下記のように出力されていれば起動成功です。

Serving Flask app 'app'
Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
Running on http://localhost:5200
Press CTRL+C to quit

Webブラウザでhttp://localhost:5200/にアクセスしてください。

これで単語帳アプリが表示されるはずです!

ステップ5:RDSに書き込みができているか確認

単語帳アプリが表示されたら、実際に単語と意味を追加してみましょう。

例えば、「Hello」と「こんにちは」を追加してみてください。

検証では、画像のように単語と意味を追加しました。この単語と意味がデータベース上に記述されているか確認します。

RDSのMySQLで中身を確認する方法

🔧 ① RDSに接続(すでに行っている場合はスキップOK)

mysql -u <ユーザー名> -p -h <エンドポイント名>

📂 ② 使用するデータベースを選択

USE `ait-wordbookapp-db`;

📋 ③ テーブル一覧を表示

SHOW TABLES;

word という名前のテーブルが表示されていれば、SQLAlchemyのモデルが反映されています。

🔍 ④ データを確認する

SELECT * FROM word;

→ 単語と意味が登録されていれば、FlaskからRDSへの書き込みが完全に成功している証拠です。

追加した単語と意味がデータベース上にも登録されていることが確認できました。

まとめ

この記事では、FlaskAmazon Aurora Serverless v2を使って、簡単な単語帳アプリを作成する方法を詳しく解説しました。

この実践を通して、PythonのWebフレームワークであるFlaskと、AWSのマネージド型リレーショナルデータベースサービスであるAmazon Auroraを連携させる基本的な流れを理解できたかと思います。この知識を応用すれば、さらに複雑なWebアプリケーションを開発する足がかりになるでしょう。ぜひ、この単語帳アプリを自分なりに拡張してみてください!

プロフィール
TanaT

株式会社あいてぃ所属。
クラウドエンジニア(AWS・Azure)
取得資格:AWS SAP、AZ-104、AZ-305
フロントエンド、バックエンド開発もできるフルスタックエンジニアとして学習中。
「AIとクラウドについて学ぶ」サイトの編集長。

TanaTをフォローする
データベース
シェアする
タイトルとURLをコピーしました