計画と改善

エンジニアのブログ

ALB+Auto Scaling+EC2環境の構築

今回はインフラのハンズオンでの学習を行なった。デフォルトVPCを利用して、Auto Scalingでパブリックサブネット(EC2インスタンスロードバランサーからのみアクセスを許可)にEC2インスタンスを異なる2つのAZに1台ずつ配置し、ALBでトラフィック制御を行う構成にしてみた。ほぼ自分用のメモ。

できたのは以下。やりながら思ったが、ネットワークの設定はいつも手探りでいつも自信がない。

毎回結構な時間をかけて構築するが、ちょっとしたミスに気が付かず苦戦をする。(今回はapachemod_sslモジュールの入れ忘れによる502エラー)

ALBの作成

前提としてAuto Scalingグループと同じAZでなければならない。

事前準備としてまずACMの設定から行う。(HTTPSを設定するため、ドメインを取得し、証明書を作成、DNS検証を行う)

ACMの設定

  1. ACMAmazon Certificate Manager)から証明書をリクエストを選択
  2. 証明書タイプからパブリック証明書をリクエストを選択(AWS Certificate Manager でプロビジョニングされたパブリック SSL/TLS 証明書は無料、プライベート証明書の場合は料金がかかってくる)
  3. 設定するドメイン名を入力する
  4. 検証方法にDNSを選択する。DNSの検証についてはドキュメント参照
    1. CNAMEは証明書を自動更新するために ACM が使用する AWS ドメインを指すエイリアスで、ユーザーのドメインおよびアカウントに固有のものとして作成される。各レコードには名前と値が含まれる
    2. リクエストを選択
    3. ドメイン側の管理画面(今回は外部レジストラのお名前.comを使用。理由は安いから)のDNSの設定でCNAMEの欄に取得したCNAME 名とCNAME 値を入力する
    4. しばらくするとACMの証明書発行ステータスが発行済みになる(私の場合大体1時間くらいかかった)

ALBの設定

  1. EC2コンソールからロードバランサーを選択
  2. ALBの作成を選択
  3. ロードバランサープロトコル(リスナー)を選択
    1. HTTPとHTTPSを追加
  4. アベイラビリティゾーンの追加
    1. VPCとサブネットを選択
      1. ap-northeast-1d、ap-northeast-1cを選択する
  5. セキュリティ設定の作成画面に進む
  6. 証明書のタイプを選択
    1. ACMから証明書を選択する
    2. 証明書の名前で先ほどACMで作成した証明書を選択する
  7. セキュリティポリシーはデフォルトで次へ
  8. セキュリティグループの設定
    1. 今回は新しいセキュリティグループを作成した
      1. 443(HTTPS)を許可しておく
  9. ルーティングの設定
    1. ターゲットグループを新規で作成
    2. 名前を入力
    3. ターゲットの種類にインスタンスを選択
    4. プロトコルHTTPS、ポートは443
    5. HTTP1を選択
    6. ヘルスチェックはHTTPSに変更
  10. ターゲットの登録
    1. 何も設定せずに進む(Auto Scalingの方でアタッチする)
  11. 作成

Route53の設定

  • ホストゾーン作成を選択
  • ドメイン名を入力
  • ホストゾーン作成
  • レコード作成を選択
  • エイリアス
    • トラフィックのルーティング先(以下を選択)
      • Application Load BalancerとClassic Load Balancerへのエイリアス
      • アジアパシフィック(東京)
      • 作成したALB
  • レコードを作成
  • 外部レジストラドメイン管理画面のDNSの設定でRoute53に記載されているNSレコードを設定する
  • あとは時々nslookup -type=NS ドメイン名をしてネームサーバーが書き変わるまで待つ。大体40時間くらいかかった

Auto Scalingで起動テンプレートを作成

前提として事前にEC2インスタンスのAMIを作成しておくこと。

今回はAMIの元になるEC2インスタンスApatchサーバーをインストールし、確認用のhtmlファイルが表示されるように設定している。

  1. インスタンスナビゲーションから起動テンプレートを選択する
  2. 名前と説明を入れる
  3. Auto Scaling のガイダンスにチェックを入れる
  4. AMIを選択
  5. AMIと互換性のあるインスタンスタイプを選択する
    1. ここではt2microとした
  6. キーペアは既存のキーペアを選択した
  7. セキュリティグループを設定
    1. 既存のHTTPS(ALBのセキュリティグループのみ許可)、SSHを許可するものを設定
  8. 起動テンプレート作成

起動テンプレートを使用してAuto Scalingグループを作成

  1. EC2ナビゲーションからAuto Scalingグループを選択
  2. 起動テンプレートと同じリージョンでAuto Scalingグループの作成を選択
  3. 名前を入力
  4. 起動テンプレートを選択
  5. VPCとサブネットを選択
    1. ap-northeast-1d、ap-northeast-1cを選択する
  6. 詳細オプション
    1. ロードバランサーの設定
      1. 既存のロードバランサーにアタッチする
      2. ロードバランサーのターゲットグループから選択する
      3. 先ほど作成したロードバランサーのターゲットグループを選択する
    2. ヘルスチェックの設定
      1. ELBのヘルスチェックにもチェックを入れる
  7. CloudWatchメトリクスの設定
    1. 今回はチェックを入れずに次に進む
  8. デフォルトインスタンスのウォームアップの設定
    1. CloudWatchに関わる機能。今回はチェックを入れずに進む
  9. グループサイズとスケーリングポリシー画面に進む
  10. グループサイズ
    1. 希望する容量は起動するインスタンスの初期数。最小、最大もここで設定可能
    2. 今回は2,2,2で設定
  11. スケーリングポリシー
    1. Auto Scalingグループのサイズを自動的にスケーリングするにはターゲット追跡スケーリングポリシーを選択し、指示にしたがう
      1. ここでメトリクスを選択し、どんな時にスケーリングをするか選択できる
        1. CPU使用率
        2. 平均ネットワーク入力
        3. 平均ネットワーク出力
        4. ターゲットごとのALBリクエスト数
    2. 今回はなしで設定
  12. インスタンスのスケールイン保護
    1. 今回はデフォルトの保護を有効にするにチェックを入れずに次に進む
  13. 通知を追加する
    1. 受信者にメールアドレスを設定
      1. topicを作成。名前はお好きなように
  14. イベントタイプにチェックを入れたままにする。
    1. 起動、終了、起動失敗、終了失敗
  15. タグは何も入れずそのまま作成
  16. EC2コンソールのナビゲーションAuto Scalingグループに追加されている
  17. SNSの方も確認するとTopicが作成されていることが確認できる
    1. メールが届くので確認すること
  18. EC2インスタンスの画面を確認するとAuto Scalingグループで作成したインスタンスがrunningとなっている
  19. パブリックIPにアクセスすると元々Apatchサーバーに設定していたHello Worldが表示される
  20. 試しにインスタンスを終了してみると、そのインスタンスは終了し、設定したアベイラビリティゾーンに他のインスタンスが立ち上がる
    1. SNSを通して、インスタンスが終了したことと、起動したというメールも通知される。
  21. auto scalingグループを削除するとそれに紐づくインスタンスも削除される
  22. インスタンスを終了するとそれに紐づくEBS ボリュームも削除された

502 Bad Gateway

途中502 Bad Gatewayが出て大変苦しんだが、apacheSSLの設定をし忘れていただけだった。

sudo yum -y install mod_ssl