AWS Copilot と CloudFormation 学習のために作成したサンプルアプリケーションです。
- 主要技術:AWS Copilot, CloudFormation, Django, RDS
- Django は Copilot の Load Balanced Web Service でデプロイ
- カスタムドメインを使った HTTPS 通信に対応
- Sidecar コンテナで Nginx を使って静的ファイルを配信
- RDS は CloudFormation でデプロイ
pyenv install $(cat .python-version)
公式インストーラー:Linux, macOS, Windows (WSL) の場合
curl -sSL https://install.python-poetry.org | python3 -
公式インストーラー:Windows (Powershell) の場合
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
その他のインストール方法:https://python-poetry.org/docs/#installation
poetry env use $(cat .python-version)
make install
# ローカル開発用の環境変数
# 一通り自身の環境に合わせて値をセットしてください
cp .env.sample .env && vim .env
# アプリ用の環境変数
# RDS_* は RDS との接続時に使用するので後述する手順で値をセットします
cp .env.app.sample .env.app && vim .env.app
# RDS の CloudFormation スタック用の環境変数
# このファイルには後述する手順で値をセットするのでファイルのコピーのみ行います
cp cloudformation/rds.parameters.properties.sample cloudformation/rds.parameters.properties
make dev
make start
AWS 公式の手順を参考に Nginx の Docker イメージを ECR に push する
※ Nginx の Docker イメージビルドコマンドは以下
docker build -t example-django-app/nginx -f docker/nginx/nginx_Dockerfile docker/nginx
Copilot service manifest を自身の環境に合わせて編集する
vim copilot/django/manifest.yml
# http.alias には自身のドメインをセットしてください(Route53 で管理しているドメインを想定)
# ex) example.com, sub.example.com
# platform は自身の Docker ビルド環境に合わせてセットしてください
# sidecars.nginx.image に事前に ECR に push した Nginx のイメージをセットしてください
Copilot にデプロイする
./scripts/copilot.sh create-app
- この時点でデプロイされるのは Copilot の Django アプリのみです
- 完了後に表示される URL にアクセスすると Django アプリのトップページが表示されます
make cf-describe | grep -A 1 \
-e '"OutputKey": "VpcId"' \
-e '"OutputKey": "PrivateSubnets"' \
-e '"OutputKey": "PublicSubnets"' \
-e '"OutputKey": "EnvironmentSecurityGroup"'
VpcId=vpc-xxxxx
CopilotServiceSecurityGroupId=sg-xxxxx
PrivateSubnetId1=subnet-xxxxx
PrivateSubnetId2=subnet-xxxxx
PublicSubnetId1=subnet-xxxxx
PublicSubnetId2=subnet-xxxxx
# 以下の項目は任意の値をセットしてください
DBMasterUsername=admin-xxxxx
DBMasterUserPassword=xxxxx
DBName=xxxxx
DBSubnetGroupName=subnet-group-xxxxx
DBBackupRetentionPeriod=7
CloudFormation スタックを作成する
./scripts/rds.cloudformation.sh create-cf-stack
デプロイプランを確認する (任意)
./scripts/rds.cloudformation.sh plan-cf
デプロイする
./scripts/rds.cloudformation.sh deploy-cf
RDS の接続情報をセットする
# RDS_* のコメントアウトを外して値をセットする
vim .env.app
Copilot service を再デプロイする
./scripts/copilot.sh deploy-svc
svc
./scripts/copilot.sh deploy-svc
env
./scripts/copilot.sh deploy-env
デプロイプランを確認する (任意)
./scripts/rds.cloudformation.sh plan-cf
デプロイする
./scripts/rds.cloudformation.sh deploy-cf
./scripts/copilot.sh exec-svc