LoginSignup
1
1

More than 1 year has passed since last update.

AWS 【セキュリティグループで解決】ELBが応答しない(HTTP 504: Gateway Timeout)

Posted at

前提条件

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」のエラーが発生する

スクリーンショット 2022-01-16 17.44.29.png

切り分け

・各EC2インスタンスのグローバルIPには正常にアクセスできる
   →インスタンスの異常ではない

スクリーンショット 2022-01-16 18.03.18.png

スクリーンショット 2022-01-16 18.06.23.png

※どちらのインスタンスにアクセスできているかがすぐ分かるよう、それぞれに置くhtmlファイルの内容はAZ名で書き分けています。

・サブネットのネットワークACLはデフォのまま、IN,OUT共に全トラフィックを許可することになっている

・ELBのターゲットグループやELB自体は正常に動作している

原因

EC2に設定したセキュリティグループのインバウンドルールで、ELBからのトラフィックを許可していなかった。

ELBは配下のEC2に負荷分散を行うに当たってEC2にリクエストを送りますが、そのトラフィックがインスタンスに届かなかったことが原因でした。

解決策

セキュリティグループの見直し

修正前)EC2、ELBとも同じセキュリティグループを設定

修正後)

①ELBのセキュリティグループを設定
  IN)クライアントからのトラフィックを許可
  OUT)全て許可

②各EC2のセキュリティグループのインバウンドで、①のセキュリティグループを許可

セキュリティグループは、許可するソースとして別のセキュリティグループも設定できる
という点がポイントだったんですね。
ここがネットワークACLと異なる点であり、見落としがちな点なんだとか。

※自分も勉強したばかりの内容でしたが、気づくまでずいぶん時間がかかりました。。。

手順

1 ELBにセキュリティグループを設定

分かりやすいよう、「ELB-SG」という名前にしました。

スクリーンショット 2022-01-16 18.24.02.png

※セキュアな状態となるよう、インバウンドはクライアントPC(自分)からのアクセスのみ許可するようソースを設定しました。
(セキュリティグループ編集の「ソース」から「カスタム」→「マイIP」で設定可能)
※アウトバウンドはデフォのまま、全て許可としています。

2 EC2にセキュリティグループを設定

「Webserver-SG」という名前にしました。
スクリーンショット 2022-01-16 18.29.07.png

※ELBからのトラフィックが届くようにします。
上記1で設定したELBのセキュリティグループを、インバウンドで許可するソースとして設定します。
タイプ「HTTP」 ソース「カスタム」とすると、選択肢から他のセキュリティグループを指定できます。

3 ELBのDNSをブラウザURL欄に貼り付け、アクセスしてみる

無事にページが表示されました。

繰り返しアクセスすると、アクセスのたびに各インスタンスにトラフィックが分散されていることがわかります。
(各インスタンスに置いた別々のhtmlファイルの内容が、交互に表示されているため。)
正常に動作しているようです。

参考サイト

↓Udemy

↓公式ドキュメント

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1