今回ELBを使って、EC2の冗長構成を作りました。
その中で、何個かはまりごとにも出くわしたので、メモがわりに投稿します。
前提条件の構成
(BEFORE)
インターネット -> EC2 -> RDS
(とりあえずのAFTER)
インターネット -> ELB -> EC2 -> RDS
(さらにAFTER)
インターネット -> ELB -> EC2その1 / EC2その2 -> RDS
大まかな流れ
- ロードバランサーの作成
- ターゲットグループの作成
- ヘルスチェック用ファイルの設置
- DNSのAレコード登録
- EC2インスタンスを新規作成
- DNSのAレコード登録(直アクセス確認用)
- ターゲットグループに新規EC2インスタンスを登録
- 動作確認
手順とハマりポイント
1. ロードバランサーの作成
- 入口が見つけづらいので数分ハマるので気をつけてくださいw
- ロードバランサーの種類を選びます。今回は「Application Load Balancer」を選択。
- AWSコンソールの手順に従い、設定を行います。
1. ロードバランサーの設定
2. セキュリティ設定の構成
3. セキュリティグループの設定
4. ルーティングの設定
5. ターゲットの登録
6. 確認
- HTTPSを利用する場合は、証明書の設定が必要なのですが、画面からだとエラーが出ることがあるのでその場合はCLIからの実行が必要です。詳細は 既存の ELB に SSL 証明書 を追加しようとするとエラーが起きる。 をご覧ください。
2. ターゲットグループの作成
- ターゲットグループには、複数のAZを指定し冗長構成を図りました。
- ターゲットは後からでも登録できるので、後回し。
- 基本的には、ここでどんな設定をしても、DNSのAレコードを設定しない限り影響ないので、気軽に
3. ヘルスチェック用ファイルの設置
- 確認をしている中でヘルスチェックが「Unhealthy」と出ていたので、Document Root配下にチェック用ファイルを置き、ヘルスチェックを再設定
4. DNSのAレコード登録
- ロードバランサーの「説明」タブにある情報を参照し、DNSのAレコードを追加
- この状態で、ブラウザからアクセスすると (とりあえずのAFTER) の構成になっている
5. EC2インスタンスを新規作成
- 既存のサーバのAMIを作って、いつも通りにコピー作成
- その時に、AZを既存のEC2と違うところで作るのを忘れずに。あとで必要になります。
6. DNSのAレコード登録(直アクセス確認用)
- 既存のサーバ+新規作成サーバのパブリックIPを参照し、DNSのAレコードに追加
- ロードバランサーを経由せず、インターネットから直接EC2にもアクセス可能な構成とするため
7. ターゲットグループに新規EC2インスタンスを登録
- 既存のサーバ+新規作成サーバのパブリックIPを参照し、DNSのAレコードに追加
- ターゲットグループのターゲットの種類を「ip」で選択した場合は プライベートIP を指定する必要があります。ここで パブリックIP を指定しようとし、しばらくハマりました。
8. 動作確認
- 晴れて、ロードバランサーの設定は完了です。
- それぞれのサーバにアクセスがきていること、ログが出ていること、ラウンドロビンできていることを確認し、ひと段落。
ここには書いてないけど、一緒にやったこと
-
ログファイルバックアップの設定
- ログファイルをS3にバックアップしているのですが、単純に稼働サーバを増やすだけだとログファイル名が被っちゃうことが想定されたので、ログファイル名にホスト名を含めるなどの手入れをしました。
-
ログに出てくるIPアドレス取得に X_HTTP_FORWARDED_FORに切り替え
感想
サブネットグループやインスタンスの新規作成など、結構直感で運用していた面も改めてレビューすることができました。
かといって、大きなハマりポイントはなく、設定完了まで行けたのでAWSさすが!!という感じです。