📌
AWS ECS(Fargate)でドメイン名でルーティング先のコンテナを切り替える
概要
AWS ECS(Fargate)で同一クラスターで複数のサービスを稼働している場合に、パスベース(URI)ではなく、ドメイン名(ホストベース)で、振り分けたい場合があります。
その場合の設定手順を記載します。
前提
- ESC クラスターは作成済みとします。
- ESC クラスターに紐づく ALB は作成済みとします。
- 使用するドメインは Route53 で取得済みとします。
手順
ESC サービスの設定
ESC でサービスを追加設定します。
クラスターやタスク定義、サービスの基本的な作成手順は以下を参照してください。
追加設定時のポイント
サービスを追加する際に、ロードバランシングの設定でロードバランス用のコンテナを選択しますが、この際に、AWS コンソール上、パスパターンでしか振り分け設定ができません。
後で、ホストベースに切り替えますので、ここでは、一旦パスパターンにダミーパス(例:/dummy*)を設定します。
※おそらく、ALB 側がホストベースルーティングに対応したのに対して、ECS 側のコンソールの改修が追い付いていないのだと思います。
Route53 ホストゾーンの設定
まず、Route53 で対象ドメインの向き先を設定します。
- AWS コンソールから、
Route53-ホストゾーンを選択します。 - 設定したい対象のドメインを選択します。(ドメイン未取得の場合は先にドメインを取得します)
-
レコードを作成を押下します。 - サブドメインの場合は、
レコード名を設定します。 - レコードタイプは
Aのままとします。 -
トラフィックのルーティング先でエイリアスにトグルボタンを切り替えます。 -
エンドポイントを選択から、Application Load BalancerとClassic Load Balancerへのエイリアスを選択します。 - 対象リージョンと ALB を選択します。
-
レコードを作成を押下します。
この時点で、複数ドメインが同じ ALB(or Cloudfront)を指し示している状態になります。
異なるドメインで HTTPS の場合は、ALB 側(or Cloudfront)に証明書を追加登録が必要になります。
ALB のリスナールール設定
- AWS コンソールから、
EC2-ロードバランシング-ロードバランサーを選択します。 - 設定対象としたい ECS に対して紐づいている ALB を選択します。
-
リスナータブで、振り分け対象とするリスナーのルールの表示/編集を押下します。(例:HTTP:80、HTTPS:443) - 画面上部の
編集アイコンを押下し、転送先に目的の service が設定されているレコードの左の編集アイコンを押下します。 -
条件の追加でホストヘッダーを選択し振り分け対象としたいドメインを設定します。(例:test.sample.com) -
パスがとなっている設定の削除アイコンを押下し設定を消します。 -
更新ボタンを押下し設定を反映します。
以上で、同一クラスター/同一 ALB での、ドメイン別でのコンテナへのルーティング化可能となります。
所感
独自ドメインで、テンプレート的に小型のサービスを複数展開していくことを考えた場合、ECS で同一クラスター内に複数サービスを立ち上げて、ホストベースで振り分けることで、比較的楽に環境が作れそうですね。
Discussion