はじめに
本記事では、FastAPI + SQLAlchemy アプリケーションにおける環境変数の管理方法についてまとめています。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
特に、本番環境と開発環境での環境変数の読み込み方法を切り替える方法を紹介します。
書こうと思ったきっかけ
受講しているITスクールのハッカソンの開発の一環で、データベース接続情報などの機密情報を安全に管理しつつ、開発時には柔軟に変更できる仕組みを残しておきたかったため、この記事を備忘録としてまとめています。
内容
以下のコードでは、開発環境では .env
ファイルを読み込み、本番環境(例:AWS Fargate)では .env
に依存せず、事前に設定された環境変数(Secrets Managerなど)から読み込む構成にしています。
import os
from dotenv import load_dotenv
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from core.config import settings
# 本番以外のときだけ .env を読み込む
if os.getenv("ENV") != "production":
load_dotenv()
DATABASE_URL = os.getenv("DATABASE_URL")
engine = create_engine(DATABASE_URL, echo=True, future=True)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
このようにすることで、開発時は .env
に接続情報を記述し、本番時はタスク定義やSecrets Managerから環境変数を注入するだけで切り替えが可能になります。
まとめ
-
.env
の読み込みはENV != "production"
のときに限定 - 本番環境では AWS Fargate のタスク定義や Secrets Manager を利用
- 開発環境と本番環境の切り分けが簡単になる
セキュアかつ柔軟な構成を実現できるため、今後のプロジェクトでも活用していきたいと考えています...!