📌

AWS ECS(Fargate)でドメイン名でルーティング先のコンテナを切り替える

2022/02/27に公開

概要

AWS ECS(Fargate)で同一クラスターで複数のサービスを稼働している場合に、パスベース(URI)ではなく、ドメイン名(ホストベース)で、振り分けたい場合があります。
その場合の設定手順を記載します。

前提

  • ESC クラスターは作成済みとします。
  • ESC クラスターに紐づく ALB は作成済みとします。
  • 使用するドメインは Route53 で取得済みとします。

手順

ESC サービスの設定

ESC でサービスを追加設定します。
クラスターやタスク定義、サービスの基本的な作成手順は以下を参照してください。

https://zenn.dev/ttani/articles/aws-ecs-setup
https://zenn.dev/ttani/articles/aws-fargate-setup

追加設定時のポイント
サービスを追加する際に、ロードバランシングの設定でロードバランス用のコンテナを選択しますが、この際に、AWS コンソール上、パスパターンでしか振り分け設定ができません。
後で、ホストベースに切り替えますので、ここでは、一旦パスパターンにダミーパス(例:/dummy*)を設定します。
※おそらく、ALB 側がホストベースルーティングに対応したのに対して、ECS 側のコンソールの改修が追い付いていないのだと思います。

Route53 ホストゾーンの設定

まず、Route53 で対象ドメインの向き先を設定します。

  1. AWS コンソールから、Route53-ホストゾーンを選択します。
  2. 設定したい対象のドメインを選択します。(ドメイン未取得の場合は先にドメインを取得します)
  3. レコードを作成を押下します。
  4. サブドメインの場合は、レコード名を設定します。
  5. レコードタイプはAのままとします。
  6. トラフィックのルーティング先エイリアスにトグルボタンを切り替えます。
  7. エンドポイントを選択から、Application Load BalancerとClassic Load Balancerへのエイリアスを選択します。
  8. 対象リージョンと ALB を選択します。
  9. レコードを作成を押下します。

この時点で、複数ドメインが同じ ALB(or Cloudfront)を指し示している状態になります。
異なるドメインで HTTPS の場合は、ALB 側(or Cloudfront)に証明書を追加登録が必要になります。

ALB のリスナールール設定

  1. AWS コンソールから、EC2-ロードバランシング-ロードバランサーを選択します。
  2. 設定対象としたい ECS に対して紐づいている ALB を選択します。
  3. リスナータブで、振り分け対象とするリスナーのルールの表示/編集を押下します。(例:HTTP:80HTTPS:443
  4. 画面上部の編集アイコンを押下し、転送先に目的の service が設定されているレコードの左の編集アイコンを押下します。
  5. 条件の追加ホストヘッダーを選択し振り分け対象としたいドメインを設定します。(例:test.sample.com
  6. パスがとなっている設定の削除アイコンを押下し設定を消します。
  7. 更新ボタンを押下し設定を反映します。

以上で、同一クラスター/同一 ALB での、ドメイン別でのコンテナへのルーティング化可能となります。

所感

独自ドメインで、テンプレート的に小型のサービスを複数展開していくことを考えた場合、ECS で同一クラスター内に複数サービスを立ち上げて、ホストベースで振り分けることで、比較的楽に環境が作れそうですね。

株式会社トッカシステムズ

Discussion