Open4

EC2+AutoScaling環境におけるデプロイ戦略

TocyukiTocyuki

環境

  • EC2
  • AutoScaling + LaunchTemplate
  • TerraformでAWSリソースをコード化
  • Ansible + PackerでAMIをコード化
TocyukiTocyuki

今試しているのは以下

アプリケーション変更

GitHubへPush

CodeBuildでアプリケーションのUnitTest&E2Eテスト

CodeBuildでAnsible + Packer実行し、AMI更新

CodeBuildでterraform applyを実行し、起動テンプレートのみ更新する

instance refreshによりAutoScaling Groupのインスタンスがローリングアップデートされる

個人的には流れとしてはとてもスマートだと感じてるけど、ビルド&デプロイ時間がどこまで短縮できるかが鍵になりそうだなぁ。。。

TocyukiTocyuki

CodeBuildではなく、GitHub Actions に置き換えてこのフロー自体はAnsible&PackerのCI/CD限定でアプリは別にした方が良さそうだな。

TocyukiTocyuki

なので以下のような感じか

前提条件

  • AMIにアプリケーションは含めず、user dataから起動時にS3からアプリケーションをダウンロードする

AMI更新のCI/CD

  1. Ansibleのyaml変更
  2. GitHubへPush
  3. GitHub Actionsでpacker build & Gossによるテスト実施し、AMIを更新
  4. GitHub Actionsでterraform applyを実行し、起動テンプレートのみを更新する
  5. AutoScalingのinstance refreshによりAutoScaling Groupのインスタンスがローリングアップデートされる

アプリケーション更新のCI/CD

  1. アプリケーション変更
  2. GitHubへPush
  3. Github Actions でUnitTest&E2Eテスト&ビルド実施
  4. CodeDeployでリビジョンを作成し、S3へアップロード
  5. CodeDeployで対象のAutoScalingグループへデプロイを実施