前回は、以下の構成イメージに沿って、VPC環境の構築手順について説明しました。

開発するアプリケーションの構成イメージ

続く今回は、アプリケーションロードバランサ(ALB)を作成していきます。

ALBの作成

前回構築したVPCの環境では、パブリックとプライベートにサブネットを分割しました。プライベートサブネットのECSコンテナへは、基本VPC内以外からのアクセスは受け付けないよう、ロードバランサにもセキュリティグループを設定しておく必要があります。一方、パブリックサブネットのECSコンテナはインターネットからの接続を受け付けるようにするため、ロードバランサもパブリック用とプライベート用の2種類作成します。

AWSのロードバランサについて

AWSにおいて、ロードバランサは「Elastic Load Balancer(ELB)」というサービス名で提供されてます。ELBにはいくつか種類がありますが、代表的なものがALBです。

ALBの代表的な機能としては、パケットの内容に応じたコンテントベースのルーティングで、レイヤー7(L7)スイッチが備える機能に相当します。ALBが提供される以前のロードバランシングサービスは「Classic Load Balancer(CLB)」という名称に変更されました。

ELBは、新しいALBと従来のCLB、後述するNLB(Network Load Balancer)を合わせたロードバランシングサービスの総称として使われます。ALBの特徴は以下の通りです。

  • パスベースルーティング
  • コンテナ化されたアプリケーションのサポート
  • HTTP/2サポート
  • WebSocketサポート
  • StickySessionの強化
  • ヘルスチェックの強化
  • インスタンスのヘルスチェックは従来通りHTTP/HTTPSでpingを実行
  • レスポンスコードの指定(200~299複数)
  • CloudWatchのメトリクス強化(ターゲットグループ単位)

ALB、ELBはリバースプロキシ型の負荷分散サービスを提供します。一方、最も新しいELBであるNLBが「L4 NATロードバランサ」です。NLBの特徴は以下の通りです。

  • 固定IPアドレス
  • Pre-warming申請不要
  • ゾーナリティ
  • Source Address Preservation
  • フェイルオーバーに対応

各ロードバランシングサービスの比較は「Elastic Load Balancing製品の詳細」に詳細にまとめられていますので、適宜参考にしてください。


次回も解説しますが、パブリックサブネットのBFF(Backends for Frontends)アプリケーションでは、バックエンドのコンテナアプリケーションを呼び出す際に、ロードバランサを経由するHTTPリクエストを送信します。この時、ロードバランサでは、ALBのパスベースルーティング機能を使ってコンテナアプリケーションを識別するので、ロードバランサにはALBを指定しておいてください。

「EC2」サービスから、「ロードバランサ」メニューを選択し、「ロードバランサの作成」を押下します。ALBを選択し、「作成」ボタンを押下します。

「ロードバランサの種類の選択」画面

ALBの設定

続いて、ALBの設定を行います。設定項目は以下の通りです。

入力項目 説明
名前 ALBに設定する任意の名前を入力します
スキーム ALBが使用されるサブネットに従って、設定します。パブリックサブネットはインターネット向け、プライベートサブネットは内部向けを設定してください
アドレスタイプ ロードバランサで取り扱うIPアドレスタイプを設定します。ここではIPv4を設定してください
リスナー:ロードバランサのプロトコル・ポート HTTPかHTTPSかを指定します。本番環境などはHTTPSを指定しますが、今回はHTTP:80を設定しておきます
アベイラビリティゾーン:VPC 前回作成したVPCを指定します
アベイラビリティゾーン:アベイラビリティゾーンおよびサブネット ロードバランシングするアベイラビリティゾーンおよびそのサブネットを指定します。上記のスキームに合わせて設定してください

「ロードバランサーの設定」画面

入力が終わったら、「セキュリティ設定の構成」ボタンを押下後、そのまま「セキュリティグループの設定」ボタンを押下し、先に進んでください。

ロードバランサのセキュリティグループを作成する

次に、ロードバランサのセキュリティグループを作成します。後々、作成するECSクラスタのセキュリティグループの発信元ソースに、このロードバランサのセキュリティグループを許可対象として設定することになるので、ここでは今回、ユニークに割り当てるセキュリティグループを新規作成してください。設定項目は以下の通りです。

  • セキュリティグループの割り当て:新しいセキュリティグループを作成する
  • セキュリティグループ名:任意のセキュリティグループ名を入力
  • タイプ:HTTP
  • プロトコル:TCP
  • ポート範囲:80
  • ソース:0.0.0.0/0

「セキュリティグループの設定」画面

プライベートサブネットのロードバランサ設定

プライベートサブネットのロードバランサ設定では、以下の通り、VPC内からのアクセスしか許可しないよう、セキュリティグループを設定しておきます。

  • タイプ:HTTP
  • プロトコル:TCP
  • ポート範囲:80
  • ソース:172.0.0.0/16

プライベートサブネットのロードバランサ設定

ルーティングの設定

ルーティングの設定画面では、コンテナを実行するECSクラスタ向けのターゲットグループを指定します。ちなみに、複数の違う種類のコンテナを配置する場合は、各コンテナアプリケーションごとにターゲットグループを指定することになります。

【ターゲットグループ】

  • ターゲットグループ:新しいターゲットグループ
  • 名前:任意のターゲットグループ名(32文字以内)
  • ターゲットの種類:ECSクラスタとなるインスタンスを指定するため、インスタンスを指定してください
  • プロトコル:HTTP
  • ポート:80

【ヘルスチェック】

  • プロトコル:HTTP
  • パス:アプリケーションを実行した時に正常応答する場合のパスを指定してください

なお、ヘルスチェックするアプリケーションのURLが「http://localhost:8080/backend-for-frontend/index.html」であれば、パス名はアプリケーションコンテキストパス以下の「/backend-for-frontend/index.html」を指定します。

「ルーティングの設定」画面

ターゲットグループの登録

ターゲットグループにはECSサービスの作成で改めて登録するので、ここでは特に何もターゲットの登録をせずALBを作成してください。

「ターゲットの登録」画面。ここでは特に何も設定しない

パスベースのルーティング設定

作成したロードバランサでターゲットグループに対し、パスベースのルーティングを設定します。「EC2」サービスから「ロードバランサー」メニューを選択して、作成した2つのパブリック/プライベート用のロードバランサを各々選択し、「リスナー」タブから「ルールの表示/編集」リンクを押下します。

ターゲットグループにルーティングを設定

画面上部の「+」ボタンを押下し、ルールを追加します。各ターゲットグループに対し、どのパスで、どのターゲットグループへルーティングするかを設定します。条件を設定した後、「保存」ボタンを押して、パスベースのルーティングのルールを保存してください。

パスとして指定する値は、アプリケーションのコンテキストルートだけを設定しておくと、次回作成するSpringアプリケーションで柔軟なサービス呼び出しが可能となる    

以上で、ALBの作成は終了です。次回はECSコンテナで実行するSpringアプリケーションについて実装方法を解説します。

著者紹介


川畑 光平(KAWABATA Kohei)

某システムインテグレータにて、金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professionalなどの資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。

本連載の内容に対するご意見・ご質問は Facebook まで。