背景
- 対象プロダクトのリニューアルに伴い、EC2で稼働していた旧バージョンから一新したい。
- 旧バージョンはモノリスなアーキテクチャで、リリースやメンテに一苦労している。
- バックエンドとフロントエンドの2ラインに分けてアプリケーションを管理したい。
- IaCにて、クラウドインフラストラクチャをコードで管理したい。
制約
- production, stagingのデータは、既存のRDSを利用する。
- フロントアプリケーションはscope out。
運用方針
- 環境はproduction, staging, previewの3つ存在。全く同じ構成を作成するため、それぞれの環境ごとに
.tfstate
を管理する。 - CodeBuildのプロセスは、アプリケーションを管理しているリポジトリに
buildspec.yml
を配置してそれに記述する。 - CodeDeployの必要資材(
appspec.yml
, taskdef.json
)は、CodeBuildのプロセス内で生成する。
( 仕様により必要資材のサイズは3MBを超えられないらしい。Source StageのArtifactをそのまま利用したらサイズが大きすぎてエラーになる。かなりの沼ポイント。 )
実際の記述は以下。テンプレートを用意してそこから生成している。
# (omitted)
- cat $TASKDEF_TEMPLATE_FILENAME | sed -e s@\<PHP_IMAGE\>@$REPOSITORY_URL_PHP:$IMAGE_TAG@ > taskdef.json
感想とか
- Terraformerにかなりお世話になった。本稼働しているRDSの情報を引っ張ってきたり、AWSのコンソールから手動で作ったリソースを引っ張ってきて値を確認したり、
terraform import
だと多少手間がかかりそうな作業を簡単にできた。