Open4
EC2+AutoScaling環境におけるデプロイ戦略
環境
- EC2
- AutoScaling + LaunchTemplate
- TerraformでAWSリソースをコード化
- Ansible + PackerでAMIをコード化
今試しているのは以下
アプリケーション変更
↓
GitHubへPush
↓
CodeBuildでアプリケーションのUnitTest&E2Eテスト
↓
CodeBuildでAnsible + Packer実行し、AMI更新
↓
CodeBuildでterraform apply
を実行し、起動テンプレートのみ更新する
↓
instance refresh
によりAutoScaling Groupのインスタンスがローリングアップデートされる
個人的には流れとしてはとてもスマートだと感じてるけど、ビルド&デプロイ時間がどこまで短縮できるかが鍵になりそうだなぁ。。。
CodeBuildではなく、GitHub Actions に置き換えてこのフロー自体はAnsible&PackerのCI/CD限定でアプリは別にした方が良さそうだな。
なので以下のような感じか
前提条件
- AMIにアプリケーションは含めず、
user data
から起動時にS3からアプリケーションをダウンロードする
AMI更新のCI/CD
- Ansibleのyaml変更
- GitHubへPush
- GitHub Actionsで
packer build
& Gossによるテスト実施し、AMIを更新 - GitHub Actionsで
terraform apply
を実行し、起動テンプレートのみを更新する - AutoScalingの
instance refresh
によりAutoScaling Groupのインスタンスがローリングアップデートされる
アプリケーション更新のCI/CD
- アプリケーション変更
- GitHubへPush
- Github Actions でUnitTest&E2Eテスト&ビルド実施
- CodeDeployでリビジョンを作成し、S3へアップロード
- CodeDeployで対象のAutoScalingグループへデプロイを実施