ALB+Auto Scaling+EC2環境の構築
今回はインフラのハンズオンでの学習を行なった。デフォルトVPCを利用して、Auto Scalingでパブリックサブネット(EC2インスタンスはロードバランサーからのみアクセスを許可)にEC2インスタンスを異なる2つのAZに1台ずつ配置し、ALBでトラフィック制御を行う構成にしてみた。ほぼ自分用のメモ。
できたのは以下。やりながら思ったが、ネットワークの設定はいつも手探りでいつも自信がない。
毎回結構な時間をかけて構築するが、ちょっとしたミスに気が付かず苦戦をする。(今回はapacheにmod_ssl
モジュールの入れ忘れによる502エラー)
ALBの作成
前提としてAuto Scalingグループと同じAZでなければならない。
事前準備としてまずACMの設定から行う。(HTTPSを設定するため、ドメインを取得し、証明書を作成、DNS検証を行う)
ACMの設定
- ACM(Amazon Certificate Manager)から証明書をリクエストを選択
- 証明書タイプからパブリック証明書をリクエストを選択(AWS Certificate Manager でプロビジョニングされたパブリック SSL/TLS 証明書は無料、プライベート証明書の場合は料金がかかってくる)
- 設定するドメイン名を入力する
- 検証方法にDNSを選択する。DNSの検証についてはドキュメント参照
ALBの設定
- EC2コンソールからロードバランサーを選択
- ALBの作成を選択
- ロードバランサーのプロトコル(リスナー)を選択
- HTTPとHTTPSを追加
- アベイラビリティゾーンの追加
- VPCとサブネットを選択
- ap-northeast-1d、ap-northeast-1cを選択する
- VPCとサブネットを選択
- セキュリティ設定の作成画面に進む
- 証明書のタイプを選択
- セキュリティポリシーはデフォルトで次へ
- セキュリティグループの設定
- 今回は新しいセキュリティグループを作成した
- 443(HTTPS)を許可しておく
- 今回は新しいセキュリティグループを作成した
- ルーティングの設定
- ターゲットの登録
- 何も設定せずに進む(Auto Scalingの方でアタッチする)
- 作成
Route53の設定
- ホストゾーン作成を選択
- ドメイン名を入力
- ホストゾーン作成
- レコード作成を選択
- エイリアス
- レコードを作成
- 外部レジストラのドメイン管理画面のDNSの設定でRoute53に記載されているNSレコードを設定する
- あとは時々
nslookup -type=NS ドメイン名
をしてネームサーバーが書き変わるまで待つ。大体40時間くらいかかった
Auto Scalingで起動テンプレートを作成
前提として事前にEC2インスタンスのAMIを作成しておくこと。
今回はAMIの元になるEC2インスタンスにApatchサーバーをインストールし、確認用のhtmlファイルが表示されるように設定している。
- インスタンスナビゲーションから起動テンプレートを選択する
- 名前と説明を入れる
- Auto Scaling のガイダンスにチェックを入れる
- AMIを選択
- AMIと互換性のあるインスタンスタイプを選択する
- ここではt2microとした
- キーペアは既存のキーペアを選択した
- セキュリティグループを設定
- 起動テンプレート作成
起動テンプレートを使用してAuto Scalingグループを作成
- EC2ナビゲーションからAuto Scalingグループを選択
- 起動テンプレートと同じリージョンでAuto Scalingグループの作成を選択
- 名前を入力
- 起動テンプレートを選択
- VPCとサブネットを選択
- ap-northeast-1d、ap-northeast-1cを選択する
- 詳細オプション
- CloudWatchメトリクスの設定
- 今回はチェックを入れずに次に進む
- デフォルトインスタンスのウォームアップの設定
- CloudWatchに関わる機能。今回はチェックを入れずに進む
- グループサイズとスケーリングポリシー画面に進む
- グループサイズ
- 希望する容量は起動するインスタンスの初期数。最小、最大もここで設定可能
- 今回は2,2,2で設定
- スケーリングポリシー
- Auto Scalingグループのサイズを自動的にスケーリングするにはターゲット追跡スケーリングポリシーを選択し、指示にしたがう
- ここでメトリクスを選択し、どんな時にスケーリングをするか選択できる
- CPU使用率
- 平均ネットワーク入力
- 平均ネットワーク出力
- ターゲットごとのALBリクエスト数
- ここでメトリクスを選択し、どんな時にスケーリングをするか選択できる
- 今回はなしで設定
- Auto Scalingグループのサイズを自動的にスケーリングするにはターゲット追跡スケーリングポリシーを選択し、指示にしたがう
- インスタンスのスケールイン保護
- 今回はデフォルトの保護を有効にするにチェックを入れずに次に進む
- 通知を追加する
- 受信者にメールアドレスを設定
- topicを作成。名前はお好きなように
- 受信者にメールアドレスを設定
- イベントタイプにチェックを入れたままにする。
- 起動、終了、起動失敗、終了失敗
- タグは何も入れずそのまま作成
- EC2コンソールのナビゲーションAuto Scalingグループに追加されている
- SNSの方も確認するとTopicが作成されていることが確認できる
- メールが届くので確認すること
- EC2インスタンスの画面を確認するとAuto Scalingグループで作成したインスタンスがrunningとなっている
- パブリックIPにアクセスすると元々Apatchサーバーに設定していたHello Worldが表示される
- 試しにインスタンスを終了してみると、そのインスタンスは終了し、設定したアベイラビリティゾーンに他のインスタンスが立ち上がる
- auto scalingグループを削除するとそれに紐づくインスタンスも削除される
- インスタンスを終了するとそれに紐づくEBS ボリュームも削除された
502 Bad Gateway
途中502 Bad Gatewayが出て大変苦しんだが、apacheにSSLの設定をし忘れていただけだった。
sudo yum -y install mod_ssl