#前提条件
OS
MacOS Monterey 12.0.1
CPU
Apple M1(arm64)
AMI(アマゾンマシンイメージ)
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type - ami-02d03ce209db75523 (64 ビット x86) / ami-00ad846222db698f3 (64 ビット Arm)
インスタンスタイプ
t2.micro
※練習用の低スペックなインスタンスです
#はじめに
今回はハマった内容を解決した備忘録的に書いているので、内容はエラー箇所とその解決過程にフォーカスし、各リソースの設計手順等はほとんど割愛しています。
ご容赦ください。
#アーキテクチャ
・1つのVPCに2つのAZ(1b、1cとします)を配置
・それぞれのAZにパブリックサブネットを1つずつ設置(1b、1c)
・それぞれのパブリックサブネットにEC2インスタンスをWEBサーバとして起動
※ほぼ同じ内容でインスタンスを起動しています
※サブネット1bに作ったEC2インスタンスをAMIとしてイメージ保存し、そこからもう1台を立ち上げるとスムーズです。
・起動したインスタンス計2台にELBを紐づける
※EC2インスタンスにアパッチサーバをインストールし、WEBサーバとして起動する手順を記しています。ご参考までに。
↓
#やりたいこと
ELBで2台のWEBサーバ(EC2インスタンス)に負荷分散する
(ELBのDNSにアクセスした際、2台のWEBサーバの内容が均等に表示されることを確認する)
#つまづいた話
ELBのDNSにアクセスすると、「HTTP 504: Gateway Timeout」のエラーが発生する
#切り分け
・各EC2インスタンスのグローバルIPには正常にアクセスできる
→インスタンスの異常ではない
※どちらのインスタンスにアクセスできているかがすぐ分かるよう、それぞれに置くhtmlファイルの内容はAZ名で書き分けています。
・サブネットのネットワークACLはデフォのまま、IN,OUT共に全トラフィックを許可することになっている
・ELBのターゲットグループやELB自体は正常に動作している
#原因
EC2に設定したセキュリティグループ
のインバウンドルールで、ELBからのトラフィックを許可
していなかった。
ELBは配下のEC2に負荷分散を行うに当たってEC2にリクエストを送りますが、そのトラフィックがインスタンスに届かなかったことが原因でした。
#解決策
セキュリティグループの見直し
修正前)EC2、ELBとも同じセキュリティグループを設定
↓
修正後)
①ELBのセキュリティグループを設定
IN)クライアントからのトラフィックを許可
OUT)全て許可
②各EC2のセキュリティグループのインバウンドで、①のセキュリティグループを許可
セキュリティグループは、許可するソースとして別のセキュリティグループも設定できる
という点がポイントだったんですね。
ここがネットワークACLと異なる点であり、見落としがちな点なんだとか。
※自分も勉強したばかりの内容でしたが、気づくまでずいぶん時間がかかりました。。。
#手順
###1 ELBにセキュリティグループを設定
分かりやすいよう、「ELB-SG」という名前にしました。
※セキュアな状態となるよう、インバウンドはクライアントPC(自分)からのアクセスのみ許可するようソースを設定しました。
(セキュリティグループ編集の「ソース」から「カスタム」→「マイIP」で設定可能)
※アウトバウンドはデフォのまま、全て許可としています。
###2 EC2にセキュリティグループを設定
※ELBからのトラフィックが届くようにします。
※上記1で設定したELBのセキュリティグループを、インバウンドで許可するソースとして設定します。
※タイプ「HTTP」 ソース「カスタム」
とすると、選択肢から他のセキュリティグループを指定できます。
###3 ELBのDNSをブラウザURL欄に貼り付け、アクセスしてみる
無事にページが表示されました。
繰り返しアクセスすると、アクセスのたびに各インスタンスにトラフィックが分散されていることがわかります。
(各インスタンスに置いた別々のhtmlファイルの内容が、交互に表示されているため。)
正常に動作しているようです。
#参考サイト
↓Udemy
↓公式ドキュメント