aws
2023.10.22
2024.07.28
わかりやすく解説!ALBでEC2にアクセスする方法
今回はALB(Application load balancer)を使ってEC2にアクセスする方法を紹介します。設計を把握する
まず、ALBを使ってEC2にアクセスするとはどういうことなのかを図を使って説明したいと思います。
以下の図が今回説明するアーキテクト図です。図の説明を簡単にします。
- まずRoute53でドメインの名前解決を行います。
- そしてACMというSSL証明書を発行するサービスで発行した証明書をALBにアタッチします。
- アタッチされたALBでEC2にルーティングを行います。
そもそもALBとは何か
ALBとはApplication loadbalancerと呼ばれるAWSサービスです。
主な用途としてはEC2の負荷分散を行うことが挙げられます。例えばEC2を複数作成し、パスによってEC2へのアクセスを振り分けたい時などに使います。こうすることによってEC2への負荷を軽減させるという役割を持ちます。もちろんこれはあくまで一例ですので他にも色々な条件を組み合わせたルーティング方法があります。ただし、今回はEC2は一つしか使わない想定ですので負荷分散という意味では使いません。ALBを使うメリット
ALBを使うメリットは様々ですが、
今回はSSL認証を簡単に行うことができる点です。EC2に直接証明書をインストールしてhttps通信を確立することももちろんできますが、ALBを使えばAWSコンソールだけで操作してhttps通信を実現できます。もし複数のEC2を使う場合でもALBにその設定をするだけですべてのEC2にhttps通信を実現することができます。設定方法
では実際にALBを設定していきましょう。今回はEC2のサーバー内のこととRoute53での名前解決に関しては割愛します。
前提として
今回はEC2がすでに起動しているという前提のもと解説をしていきます。
EC2の準備がまだの人は先に作成してしまいましょう。ターゲットグループの作成
まずはターゲットグループの作成を行っていきます。
実はALBは直接EC2にルーティングを行うということはしません。ターゲットグループというものにEC2を登録してそのターゲットグループに向かってALBがルーティングを行うのです。ちょっと面倒ですが、そういうものだと割り切って設定していきましょう。まずは以下の手順に従ってターゲットグループを作成します。- EC2のダッシュボードからロードバランサーを選択
- 「ターゲットグループ」の作成
ターゲットタイプ: インスタンスターゲットグループ名: 任意の名称プロトコル:HTTPポート:80ヘルスチェックヘルスチェックプロトコル:HTTPヘルスチェックパス:/(ただしデフォルトパスが他のパスにリダイレクトする設定がEC2側でされている場合はリダイレクト先のパスを指定する)ターゲットの登録EC2インスタンスを選択して「保留中として以下を含める」ボタンをクリック「ターゲットグループの作成」ボタンをクリック
これでターゲットグループの登録が完了しました。
ロードバランサーの作成
次にロードバランサーの作成を行います。
以下の手順で行いましょう- EC2のダッシュボードからロードバランサーを選択
- 「ロードバランサーの作成」
- ロードバランサータイプ「Application Load Balancer」を選択
ロードバランサー名:任意の名称スキーム:インターネット向けIPアドレスタイプ:IPv4ネットワークマッピングVPC:作成したVPCもしくはデフォルトのVPC(EC2と同じVPCを選択すること)マッピング2つ以上のAZと1つ以上のサブネットを選択
続いてここからが重要なポイントです。セキュリティグループ
セキュリティグループの設定を行っていきます。
インバウンドルールに80番ポートと443番ポートが解放されたセキュリティグループを選択しましょうもしまだセキュリティグループを作成していない場合は80番ポートと443番ポートを解放したセキュリティグループを作成してください。ここから少しややこしくなるのでまずはを図を見て理解しましょう。http(つまり80番ポート)でアクセスしてきた場合はリダイレクトといってもう一度https通信でアクセス要求するということをALBに設定します。この二つのパターンを実現するために次の設定を行います。リスナー
リスナーを設定していきます。
リスナーとはALBが何番ポートで通信を待ち受けるかというのを設定するものです。今回は上の図でもあるようにリスナーには80番ポートと443番ポートで作成します。プロトコル:HTTP:80ターゲットグループ:先ほど作ったEC2へのターゲットグループ(あとでリダイレクト設定を行いますが、とりあえず今はこれで)
プロトコル:HTTPS:443ターゲットグループ:先ほど作ったEC2へのターゲットグループデフォルトのSSL/TLS証明書ACMから証明書を選択(もし証明書を作成していない場合はACMから証明書を発行する)
現段階では80番ポートのアクセスのリダイレクト設定はできていません。最後に「ロードバランサーを作成」ボタンをクリックしましょうリダイレクト設定
先ほど作成したロードバランサーを選択しましょう。
そしてHTTP:80を選択しましょう。上記のチェックボックスをチェックしたのちに「アクション」をクリックして「ルールの編集」をクリックしましょう。今はデフォルトアクションが「ターゲットグループへ転送」にチェックが入っていますが、下記のように「URLにリダイレクト」に変更しましょう。図のように下の方のポート番号を443にしましょう。※上のポートは変更しないように注意しましょう。最後に「変更内容を保存」をクリックしてリダイレクト設定は完了です。セキュリティグループの設定
最後にセキュリティグループの設定を行います。
「さっきもしたじゃん」と思うかもしれませんが、それはALBの設定です。ここではEC2側のセキュリティグループを設定していきます。もう一度このイメージを見てください。お気づきの方もいるかもしれませんがEC2はどちらも80番ポートで通信を待ち受けています。というのもこれはSSLの証明書をALBで済ませているためEC2には80番ポートで待ち受けていればよいというものなのです。実際ターゲットグループの登録の際も80番ポートでEC2を登録していたと思います。ですので、EC2に適用するセキュリティグループは80番ポートを開いたものを用意しましょう。ALBとEC2でそれぞれ設定するセキュリティグループを表にしました。ご覧の通りALBでは80番ポートと443番ポートにすべてのアクセス元を表す0.0.0.0/0を設定します。対してEC2では80番ポートをALBのセキュリティグループとする設定にしています。セキュリティグループでソースを他のセキュリティグループとして設定できるということをここでは覚えておいてください。これによってEC2ではALBを経由するアクセスのみ許可する設定が実現するのです。まとめ
ALBは負荷分散だけでなく、SSL認証やリダイレクト設定も行うことができます。
この記事を見るだけではなかなか覚えられないと思いますので是非、ご自分の環境で手を動かしながら学習を進めていってください。それでは今日はここまで