0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Amazon EC2】ALBを使ってみる

0
Last updated at Posted at 2026-08-07

はじめに

ALBの学習が目的。

ALB + EC2 でWEBページが表示してできるようにして、ヘルスチェックが成功しているターゲットに分散ルーティングされることを確認するところまでやってみる。

【構成図】

  • 作業前
    ALB_EC2_20260806.drawio (2).png

  • 作業後
    ALB_EC2_20260806.drawio (1).png

【前提】

  • EC2ではApacheが動いており、ドキュメントルート直下にindex.htmlを設置済み
  • ALB → EC2間はHTTPで通信、ヘルスチェックも同様

パブリックサブネット作成

後述のとおり、インターネット向けALBのネットワークインターフェイスを設置するために必要。

ちなみにALBのネットワークインターフェースを作成するサブネットの大きさは最低でも/27とすることが推奨されている。
(参考:Application Load Balancer > アベイラビリティーゾーンサブネット | AWS)

/27でパブリックサブネットを作成した。
スクリーンショット 2026-08-06 212806.png

セキュリティグループ編集

※先んじてEC2用のものを、ルールが空の状態で作成済み

■ALB

AWSの推奨ルールのとおり、アウトバウンドはEC2のリスナーポートおよびヘルスチェックポートへのトラフィックのみを許可(前述のとおり、いずれもHTTPを想定)
スクリーンショット 2026-08-06 205112.png

■EC2

インバウンドルールにALBのセキュリティグループからの80番ポートへのトラフィックを許可。
※アウトバウンドルールは一旦デフォルト(全開放)
スクリーンショット 2026-08-06 205813.png

ターゲットグループ作成

ALBからのルーティング先としたいEC2をターゲットグループのターゲットとして指定。ALB作成段階でALBとターゲットグループを紐づける。

マネジメントコンソールの
EC2 > ターゲットグループ
画面にて"ターゲットグループの作成"をクリック。
スクリーンショット 2026-08-06 214957.png

遷移先の画面で設定を入力していく。

■ターゲットグループの作成

設定

EC2をターゲットにする場合、"ターゲットの種類"については"インスタンス"もしくは"IPアドレス"を選択することとなる。

それぞれ、ターゲットをインスタンスID、IPアドレスで指定するというもの。

双方の主な違い、特徴としては以下のとおり。

インスタンス ID を使用してターゲットを指定すると、トラフィックはインスタンスのプライマリネットワークインターフェイスで指定されたプライマリプライベート IP アドレスを使用して、インスタンスにルーティングされます。IP アドレスを使用してターゲットを指定する場合は、1 つまたは複数のネットワークインターフェイスからのプライベート IP アドレスを使用して、トラフィックをインスタンスにルーティングできます。

インスタンス ID でターゲットを登録する場合は、Auto Scaling グループでロードバランサーを使用できます。Auto Scaling グループにターゲットグループをアタッチすると、ターゲットの起動時に Auto Scaling によりターゲットグループにターゲットが登録されます

VPC (同じリージョンまたは異なるリージョン) とピア接続されている VPC にインスタンスがある場合、そのインスタンスをインスタンス ID で登録することはできません。このようなインスタンスは IP アドレスで登録できます。

(出典:Application Load Balancer のターゲットグループ | AWS)

今回、以下の状況なので、どちらでも成立する。

  • ターゲット(EC2)にはネットワークインターフェイスが1つ
  • Auto Scalingグループを使うわけではない
  • ターゲットはALB設置先と同一のVPC内

設定画面でIPアドレスを入力するのが面倒なので、"インスタンス"を選択する。

ALB → ターゲット間の通信用プロトコルはHTTP:80を指定。

VPCはターゲットが設置されているVPCを選択。
スクリーンショット 2026-08-07 112922.png

ヘルスチェック

ヘルスチェックプロトコルは
ALB → ターゲット間の通信用プロトコルに合わせて
HTTPとする。

ヘルスチェックの詳細設定にてヘルスチェック用の通信先ポートを変更することも可能。
スクリーンショット 2026-08-07 114212.png

ターゲットオプティマイザー

ターゲットに対する同時接続数の制御に関する設定(参考:ALBの新機能 Target Optimizer による同時接続数の制御を試してみた | DevelopersIO)。
不要なのでオフ。
スクリーンショット 2026-08-07 120726.png

ここまでで"次へ"をクリック

■ターゲットを登録

使用可能なインスタンス ターゲットを確認

設定にて選択したVPCに設置されているインスタンスが表示されているので、ターゲットとするインスタンスにチェックを入れて"保留中として以下を含める"をクリック。
スクリーンショット 2026-08-07 180055.png

チェックを入れたインスタンスが"ターゲットを確認"に表示されたことを確認のうえ、"次へ"をクリック。
スクリーンショット 2026-08-07 180425.png

確認画面に遷移するので、内容に問題がないことを確認のうえ、"ターゲットグループの作成"をクリックしていターゲットグループ作成完了。

ALB作成

マネジメントコンソールの
EC2 > ロードバランサー
画面にて"ロードバランサーの作成"メニューの"Apllication Load Balancer"ボタンをクリック。
スクリーンショット 2026-08-07 191323.png

遷移先の画面で設定を入力していく。

■基本的な設定

インターネットからアクセスできる必要があるので、
スキームはインターネット向けを指定。

IPv4アドレスで通信できれば足りるので、
ロードバランサーのIPアドレスタイプはIPv4を選択。
スクリーンショット 2026-08-07 192155.png

■ネットワークマッピング

Application Load Balancer を作成するときは、ターゲットを含むゾーンを有効にする必要があります。ゾーンを有効にするには、ゾーン内のサブネットを指定します。

ゾーンを有効にしていない場合、登録したターゲットはロードバランサーからのトラフィックを受信しません。

Elastic Load Balancing は、ロードバランサーを設定したサブネットにネットワークインターフェイスを作成します。

(出典:Application Load Balancer > ロードバランサーのサブネット | AWS)

上記の内容をざっくり言うと、以下のとおり。

  • ALBは選択したアベイラビリティゾーンに設置されたターゲット(今回はEC2)にのみリクエストをルーティングする
  • 選択したアベイラビリティゾーンの中から、ALBのネットワークインターフェースを作成したいサブネットを選ぶこととなる

①アベイラビリティゾーンはリクエストをルーティングしたいターゲットが設置されているサブネットを含むもの全てにチェック。

インターネットからのトラフィックを処理する想定なので、ALBのネットワークインターフェースはパブリックサブネットになくてはならない。
②サブネットはパブリックサブネットにチェック。

とくにALBのENIに付与するパブリックIPv4アドレスはこだわらないので
IPプールは使用しない。
スクリーンショット 2026-08-07 192621.png

■セキュリティグループ

先に作成したALB用のセキュリティグループを選択

■リスナーとルーティング

リスナーはリクエストを受けつけてルーティングするプロセス。

プロトコルは、ALBの場合、HTTPもしくはHTTPSの2択。
HTTP、80番ポートを選択。

アクションのルーティングは
"ターゲットグループへ転送"として、リクエストをルーティングしたいターゲットグループを選択。
ターゲットグループが一つなので重み(分散の割合)およびターゲットグループの維持(セッションを特定のターゲットにバインド)は無視。
スクリーンショット 2026-08-07 202943.png

"ロードバランサーの作成"をクリックして完了。

検証

ヘルスチェックが成功しているターゲットに分散ルーティングされることを確認したい。
なお、作成したALBのDNS名は test-alb-****.ap-northeast-1.elb.amazonaws.com 。

①すべてのターゲットが正常な場合

スクリーンショット 2026-08-07 205757.png

ターゲットインスタンスのトップページの内容は、
アベイラビリティゾーンaの方が"testa"、cの方が"testc"となっている。

curlで連続アクセスすると交互に"testa"、"testc"が表示されている。期待通り。

$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testc
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testc
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$

②片方のターゲットが異常な場合

ターゲットインスタンスのうち、アベイラビリティゾーンcの方のApacheを停止。
ヘルスチェックのステータスが異常となった。
スクリーンショット 2026-08-07 213327.png

curlで連続アクセスしても"testa"しか表示されなくなった。期待通り。

$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$ curl test-alb-****.ap-northeast-1.elb.amazonaws.com
testa
$
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?