Flutterで単語帳アプリを構築しようと思い立ち、バックエンドを Django + AWS RDS(PostgreSQL)に選定しました。今回はこの手順をメモがてら記事に残そうと思います。
環境
- M1 MacBook Air
使用技術スタック
- Django 4.x(Python 3.13)
- AWS RDS(PostgreSQL)
- psycopg2-binary(PostgreSQL ドライバ)
- 環境変数管理:python-dotenv
- API:Django REST Framework
🛠 構築手順
1. Django プロジェクトの準備
仮想環境を立ち上げ、django プロジェクトを作成しました。今回は単語帳アプリなのでvocab という名前にしましたが、これを参考にしている方は好きなプロジェクト名にしてください。
python -m venv venv
source venv/bin/activate
pip install django djangorestframework psycopg2-binary python-dotenv
django-admin startproject config .
python manage.py startapp vocab
2. .env ファイルの作成(RDS 接続情報)
プロジェクトのルートディレクトリに .env ファイルを作成し、AWS RDS で設定した際に表示される以下情報を.env にまとめました。
.gitignore に .env を追加しておけば、リモートでの管理ができます。
DB_HOST=your-rds-endpoint.ap-northeast-1.rds.amazonaws.com
DB_NAME=vocab
DB_USER=yourusername
DB_PASS=yourpassword
3. settings.py に DB接続を設
先ほど作った.env を読み込ませます。PORTはデフォルトで5432なので直接書きました。
import os
from dotenv import load_dotenv
load_dotenv()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASS'),
'HOST': os.getenv('DB_HOST'),
'PORT': '5432',
'OPTIONS': {
'sslmode': 'require',
}
}
}
4. AWS RDS(PostgreSQL)インスタンスの構築
AWS RDS のコンソールにWebからアクセスして、作成したRDS の設定を変更します。
- パブリックアクセス:はい
- セキュリティグループで 5432 ポートを開放
- ソース:自分のIP/32(ターミナルでcurl -4 ifconfig.me で確認)

5. セキュリティグループを RDS に割り当て
AWS Console → RDS → データベース → 「変更」→ セキュリティグループを追加
6. RDS に接続してデータベースを作成
vocab という名前のデータベースを作成しました。psqlコマンドを使用するので入ってない人はインストールしてください。
brew install postgresql
psql "host=your-rds-endpoint port=5432 user=yourusername dbname=postgres sslmode=require"
CREATE DATABASE vocab;
7. Django モデル定義とマイグレーション
例:vocab/models.py
from django.db import models
class Vocabulary(models.Model):
word = models.CharField(max_length=100)
meaning = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
マイグレーション実行:
python manage.py makemigrations vocab
python manage.py migrate
8. Django REST Framework でAPI構築
vocab/views.py
from rest_framework import viewsets
from .models import Vocabulary
from .serializers import VocabularySerializer
class VocabularyViewSet(viewsets.ModelViewSet):
queryset = Vocabulary.objects.all()
serializer_class = VocabularySerializer
vocab/serializers.py
from rest_framework import serializers
from .models import Vocabulary
class VocabularySerializer(serializers.ModelSerializer):
class Meta:
model = Vocabulary
fields = '__all__'
config/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from vocab.views import VocabularyViewSet
from django.http import JsonResponse
router = DefaultRouter()
router.register(r'vocab', VocabularyViewSet)
def root_view(request):
return JsonResponse({"message": "Vocab API is running!"})
urlpatterns = [
path('', root_view),
path('api/', include(router.urls)),
path('admin/', include('django.contrib.admin.urls')),
]
9. 開発サーバー起動・確認
python manage.py runserver
確認:
• http://127.0.0.1:8000/ → 簡易JSON
• http://127.0.0.1:8000/api/vocab/ → API 動作確認


✅ まとめ
Django × AWS RDS の連携は、セキュリティグループやパブリックアクセスの設定など、最初の接続までが一番の壁でしたが、そこを乗り越えれば快適にクラウドDBで開発が進められます。
✍️ 補足(記事に入れてもOK)
• .env に機密情報を書くので .gitignore で Git に上げないこと
• RDS の接続テストは psql の sslmode=require を忘れずに
• セキュリティグループのソースIPに注意(固定IPでない場合は都度更新)
コメントを残す