📌
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