awsでデプロイ先をauto scalingグループにする

awsで管理しているインスタンスが落ちて、サービスに接続できないということが起こると困るので、auto scalingグループを利用して、サーバが落ちても自動的に復旧するようにしてみました。あと、awsだとsslも無料で簡単に導入できるので、sslの設定もします。手順は以下のとおり。

  1. ssl証明書を作成する
  2. ロードバランサーを作成する
  3. auto scalingグループで利用するAMIを作成する
  4. auto scalingグループの起動設定を作成する
  5. auto scalingグループを作成する
  6. auto scalingグループにロードバランサーを設定する
  7. code deployの設定を変更する
  8. DNSを変更してドメインへのアクセスをロードバランサーに振り向ける

1.ssl証明書を作成する

awsのcertificate managerにアクセスし、「証明書のリクエスト」ボタンを押します。

パブリック証明書のリクエストを行います。

以下の赤枠のところにドメイン名を入力します。サブドメインの証明書もほしい場合は、その下の「この証明書に別の名前を追加」ボタンを押すと入力欄が出ますので、そこに入力します。

DNSの所有権の確認方法を選びます。「DNSの検証」は、DNSに設定を行うだけで、証明書の自動更新なども行われるのでとても便利ですので、こちらを選びます。

確認ボタンを押し、検証を開始すると以下のような画面になります。青枠のところは「発行済」とか「成功」となっていますが、確認開始時は「確認保留中」とかいった表示になっています。

上の画像のところの赤枠の内容をDNSに登録します。登録内容に問題がなければ5分程度で、青枠のところが「成功」に変わります。以上でssl証明書を利用できるようになりました。

※理由は不明ですが、サブドメインとして「*」以外のもの(例えば「admin」とかいったもの)を設定した場合、登録内容が正しいと思われるにもかかわらず、青枠のところが「成功」になりませんでした。もし、サブドメインを設定して同じような状況になる場合、「*」を設定してみることをおすすめします。

2.ロードバランサーを作成する

awsのEC2の「ロードバランサー」でロードバランサーを作成します。今回はApplication Load Balancerを作成します。

以下の欄にロードバランサーの名前を設定します。わかりやすい名前がよいと思います。ロードバランサーにはhttpsでのみアクセスを許可したいので、リスナーにはHTTPSを選択します。

ロードバランサーを配置するVPCとアベイラビリティゾーンを選択します。

HTTPSでアクセスしたときに利用するssl証明書を設定します。上のほうのcertificate manager(ACM)で作成したものを選択します。

次にロードバランサーのセキュリティグループを設定します。既存のものがあるのなら、適したものを利用します。今回は、新規に作成します。許可するのはhttpsだけなので、赤枠のところにhttpsのみ設定します。

次にルーティングの設定です。ターゲットグループについては、名前にわかりやすい名前を設定します。ヘルスチェックのところの「パス」は、インスタンスの生存チェックに使われるパスですので、自身の状況にあったパスを設定します。ここが正しくないとインスタンスがロードバランサーに登録されないので注意が必要です。

ターゲット(ロードバランサーの配下におくインスタンス)ですが、今回はauto scalingグループで利用するので、デフォルトのままで確認ページに進みます。

作成ボタンを押すと、ロードバランサーが作成されます。

3.auto scalingグループで利用するAMIを作成する

現在、Code deployのデプロイ先として動いているインスタンスをAMIにします。EC2のインスタンスで、インスタンスを選択し、「イメージの作成」リンクからイメージを作成します。

イメージ名はわかりやすい名前を設定します。「再起動しない」にチェックがないとイメージを作成する際にインスタンスが一時的にシャットダウンします。シャットダウンされて問題がある場合はチェックします。

「イメージの作成」ボタンを押すと、処理が開始します。作成されたイメージはEC2のAMIのところで確認できます。

4.auto scalingグループの起動設定を作成する

EC2のauto scalingの「起動設定」に進み、起動設定の作成を開始します。

AMIの選択では、「マイAMI」のタブより、先程作成したイメージを選択します。

インスタンスのタイプについては、利用にあったものを選択します。

名前は、わかりやすい名前を設定します。「IAMロール」については、デプロイ先のインスタンスに割り当てていたIAMロールを設定します。他は必要に応じて設定します。

セキュリティグループについては、ロードバランサーとの通信はhttpなのでhttpを許可します。送信元はロードバランサーと同じアドレス範囲を割り当ておきます。確認ボタンを押して次に進むと起動設定の作成が完了します。

5.auto scalingグループを作成する

EC2のauto scalingのauto scalingグループから作成を開始します。

既存の起動設定を選び、先程作った起動設定を選択します。

グループ名にわかりやすい名前、ネットワーク、サブネットはauto scalingグループを利用するものを設定(選択)します。

次に、このauto scalingグループで維持するインスタンスの数を設定します。デフォルトのままだと、インスタンスを初期値と同じ数(前の画面のグループサイズで指定した数。デフォルトは1)を維持します。CPUの負荷状況に応じてインスタンスの数を増やしたい場合は、「スケーリングポリシーを使用して、このグループのキャパシティを調整する」のほうをチェックすると設定画面がでますので必要に応じて設定します。

このあと、通知やタグなどを適当に設定するとauto scalingグループの作成が完了します。

6.auto scalingグループにロードバランサーを設定する

EC2のauto scalingグループにアクセスすると、先程作成したauto scalingグループが出ています。チェックして、「操作」を押し、編集に進みます。

ウィンドウ内に「ターゲットグループ」という欄がありますので、ここで、先程作成したロードバランサーを選択すると完了です。

7.code deployの設定を変更する

以前に作成したcode deployの設定を変更します。編集画面に入り、以下のように選択し、auto scalingグループには、上で作成したものを選択します。

ロードバランサーについても、上で作成したものを選択します。選択後、保存をすれば変更は完了です。

8.DNSを変更してドメインへのアクセスをロードバランサーに振り向ける

最後に、ドメインのアクセスはインスタンスのIPを参照するようにDNSの設定を行っていましたが、これでは問題があるので、ドメインへのアクセスはロードバランサーに振り向けるように設定します。

EC2のロードバランサーを選ぶと、作成したロードバランサーの一覧が表示されますので、該当するものにチェックします。チェックすると、下のほうに詳しい設定情報が表示されます。

DNSのところに表示されている内容をDNSサーバに設定するとすべての設定が完了します。

運用を考えると、デプロイするたびに新しいAMIを作成して、auto scalingグループの起動設定を作成し直して差し替えると、万一、インスタンスが落ちて、新しいインスタンスが作られたときも最新のAMIが設定されて良いと思います。

awsを触り始めて1ヶ月程度経ちましたが、使い勝手がよくてほんとに便利だなぁと思います。