📌

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

ログインするとコメントできます