AWS RDSにDjangoのデータベースを接続する方法【Django×AWS入門3】

はじめに

Djangoアプリケーションを本番環境で運用する際、データの安全性やスケーラビリティを考慮すると、AWS RDS(Relational Database Service)を利用するのが有効です。本記事では、AWS RDSを作成し、Djangoアプリケーションと接続する方法を詳しく解説します。

AWS RDSの準備

1. RDSインスタンスの作成

AWSマネジメントコンソールでRDSをセットアップします。

  1. AWSマネジメントコンソールにログイン
  2. 「RDS」サービスを開く
  3. 「データベースの作成」ボタンをクリック
  4. データベースエンジンを選択(MySQL、PostgreSQL、MariaDB など)
  5. デプロイオプションを選択(「標準作成」を推奨)
  6. DBインスタンスの詳細を設定
    • エンジンのバージョン(例:PostgreSQL 14)
    • インスタンスクラス(無料枠ならdb.t3.micro
    • ストレージの設定(必要に応じて拡張)
  7. 認証情報を設定(マスターユーザー名・パスワード)
  8. VPCと接続オプションを設定
    • 「パブリックアクセスを有効化」(開発用のみ)
    • 「デフォルトVPC」を選択
  9. バックアップやモニタリングの設定を調整(必要に応じて変更)
  10. 「作成」ボタンをクリックし、RDSインスタンスを起動

2. RDSのセキュリティ設定

RDSがDjangoアプリケーションから接続できるようにセキュリティグループを設定します。

  1. EC2と同じVPCにRDSを配置
  2. セキュリティグループを編集
    • インバウンドルールを追加
    • PostgreSQL(5432)または MySQL(3306)のポートを開放
    • EC2のセキュリティグループを許可

3. RDSのエンドポイントを取得

RDSインスタンスの詳細画面から、**エンドポイント(例:mydb.abcdefghij.us-east-1.rds.amazonaws.com)**を取得します。

Djangoの設定

1. 必要なパッケージのインストール

pip install psycopg2-binary  # PostgreSQLの場合
pip install mysqlclient  # MySQLの場合

2. settings.pyのデータベース設定を変更

Djangoのsettings.pyに以下の設定を追加します。

PostgreSQL の場合

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',  # 作成したRDSのデータベース名
        'USER': 'myuser',  # RDSのマスターユーザー名
        'PASSWORD': 'mypassword',  # RDSのマスターパスワード
        'HOST': 'mydb.abcdefghij.us-east-1.rds.amazonaws.com',  # RDSのエンドポイント
        'PORT': '5432',
    }
}

MySQL の場合

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'mydb.abcdefghij.us-east-1.rds.amazonaws.com',
        'PORT': '3306',
    }
}

3. マイグレーションを実行

データベースのマイグレーションを適用します。

python manage.py migrate

接続確認とデータ操作

1. Djangoシェルで接続確認

python manage.py dbshell

または、Djangoのシェルを開いてデータベースにアクセスできるか確認。

python manage.py shell
from django.db import connection
print(connection)

2. データの作成・取得テスト

Djangoのモデルを利用してデータを挿入・取得してみましょう。

from myapp.models import MyModel
MyModel.objects.create(name="Test Record")
print(MyModel.objects.all())

運用とセキュリティの最適化

1. RDSの自動バックアップ設定

AWS RDSには自動バックアップ機能が備わっています。

  • バックアップ保持期間の設定(1〜35日)
  • 手動スナップショットの作成
  • 定期的なバックアップをS3に保存

2. データベースの監視とスケール管理

AWSの監視ツールを利用してデータベースのパフォーマンスを管理します。

  • CloudWatchメトリクスの活用
  • スケールアップ(インスタンスタイプ変更)
  • リードレプリカの導入(読み取り負荷分散)

3. セキュリティ対策

  • IAMロールを活用してアクセス管理
  • セキュリティグループで特定のIPまたはVPCのみに制限
  • SSL接続を強制する設定(rds.force_ssl=1

まとめ

本記事では、DjangoアプリケーションをAWS RDSに接続する手順を詳しく解説しました。

  1. AWS RDSインスタンスの作成と設定
  2. Djangoのデータベース設定変更
  3. マイグレーションとデータベース接続の確認
  4. 運用とセキュリティの最適化

RDSを活用することで、Djangoアプリのパフォーマンスと信頼性を向上させることができます。