📌
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