Help us understand the problem. What is going on with this article?

AWS CodeDeploy の Auto Scaling対応

More than 1 year has passed since last update.

以前、 AWS CodeDeployを使ってPHPアプリケーションをデプロイしてみた
という記事でAWS CodeDeployの一連の流れについてまとめましたが、
今回はAWS CodeDeployをAuto Scalingと連動させてみようと思います。

Auto Scaling is 何?

Auto Scalingとは、ざっくりいうとCPU使用率などの閾値や、あらかじめ指定したスケジュール等に起因してインスタンス数を自動的に増減する仕組みの事です。

Auto Scaling対応のデプロイ

Auto Scalingに対応したデプロイを実現するためには、

A: Auto Scaling起動時のAMIを、常に最新ソースコードがデプロイ済みのものになるよう管理する
B: Auto Scalingによって起動されたインスタンスに対して、起動時に最新のソースコードが自動でデプロイされるようにする

等の仕掛けが必要となります。

A の場合、日々の運用の手間が増える事となります(デプロイイベントをフックして、Packer等でAMI化とAuto Scallingの起動設定修正を自動化する等しとかないと辛い)。
B の場合、自前でデプロイ処理を書いて起動時に呼び出す。または CodeDeployを利用する等の方法が考えられます。

CodeDeployでやる場合

CodeDeployでやる場合、以前紹介したEC2に指定したタグを元にデプロイ対象を特定する方法でやろうとすると、

  • 新規起動したデプロイ対象のインスタンスだけを対象とするタグを付与する必要がある
  • 複数インスタンスが同時に起動されることを考慮すると、2重でcodedeployを起動できなくする排他制御を入れる または インスタンス毎に単一のタグが振られるようにする必要がある

など考慮する必要があり、とても面倒な事が予想されます。
そこでCodeDeployでは別の方法として

AWS CodeDeployをタグではなくAuto Scalingと連動させるという方法を取ることができます。

AutoScalingと連動させることにより、新規起動したインスタンスだけを対象に最新のソースを自動でデプロイしてくれるようになります(*1)。

Q: AWS CodeDeploy は Auto Scaling とどのように連動しますか?
Auto Scaling Group をデプロイグループと関連付けることで、新しく開始したインスタンスに常にアプリケーションの最新のリビジョンがデプロイされるようにできます。Auto Scaling Group に新しい Amazon EC2 インスタンスが追加されるたびに、まず状態が Pending になり、前回デプロイグループで成功したリビジョンのデプロイが新しい Amazon EC2 インスタンスに対して開始されます。デプロイが正常に完了すると、Amazon EC2 インスタンスの状態が InService に変更されます。デプロイに失敗した場合、その Amazon EC2 インスタンスは終了し、新しい Amazon EC2 インスタンスが Pending の状態で開始されます。その後新しい Amazon EC2 インスタンスに対してデプロイが開始されます。

AWS Codedeployのよくある質問より引用

CodeDeployのAuto Scaling対応

細かい部分はほぼ前エントリと同じなので割愛し、変更点のみを記載します。

Auto Scalingの設定

事前にデプロイ対象のAuto Scalingグループと起動設定を作成しておきます。
ググればたくさん情報が出てくるので詳細は割愛します。

CodeDeployの設定

基本的には前エントリの設定と同じなので、変更点のみを記述します。
インスタンスの追加時に、タグタイプを Amazon EC2 ではなく Auto Scaling group にします。

c40f30f3-ef4f-62a3-59e8-24d736cbce09.png

これだけ!とても簡単ですね!

これで手動デプロイ対象が、オートスケールにより起動中のインスタンス全てとなり、
オートスケールによりインスタンス数が増えた際は、新規インスタンスに対してのみ自動的にデプロイが実行されるようになります。
※新規インスタンスに対して自動デプロイを成功させる為には、最低1回手動デプロイを実行しておく必要があります。

まとめ

オートスケール対応のデプロイはCodeDeployを使うことでとても簡単に実現できますね!
CodeDeployを使って快適なDeployライフをお楽しみください!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away