
ECS Express Mode で作成したサービスにカスタムドメインを設定してみた #AWSreInvent
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
昨年末、ECS に非常にシンプルな API で、 ECS サービスおよび周辺リソースをデプロイ可能な ECS Express Mode がリリースされました。
「コンテナイメージの URI」、「タスク実行ロール」、「インフラストラクチャロール」のたった 3 つでアプリケーションがデプロイできるのは非常にシンプルな機能です。

この、ECS Express Mode ですが、デプロイすると xxx.ecs.リージョン名.on.aws から始まるエンドポイントが発行され、アクセス可能になるといった代物です。

Express にデプロイできたのはいいのですが、本番利用を考えると、カスタムドメインにしたいケースもあるのではないでしょうか。
調べてみると、「Express Mode 外での更新の例」としてカスタムドメイン対応させる手順が公開されていたため、今回はこちらを試してみたいと思います。
Express Mode API の挙動を理解しよう
カスタムドメインに入る前に、Express Mode API の挙動を理解しましょう。
ECS Express Mode では、別途 Express Mode API が用意されており、この API を通じて作成/削除/閲覧/更新処理を行います。
Express Mode API
- CreateExpressGatewayService
- DeleteExpressGatewayService
- DescribeExpressGatewayService
- UpdateExpressGatewayService
また、ECS Express Mode で作成されたリソースは、標準で提供される API を利用して、自身の AWS アカウント上に見える状態で作成されるため、ECS Service の最小タスク数 を Application Auto Scaling の RegisterScalableTarget API で上書きするようなことができます。
ここで注意なのが、Express Mode API 側では、
- (Config Rule のような) 自動で差分を検知し修復する様な動きはない
- 1 と似ていますが、明示的に UpdateExpressGatewayService の引数として指定しない限り、標準 API で加えた変更を修正しない
- 2 の Express Mode API 側で明示的に引数として指定した場合においても、競合するかどうかを検証しないため、標準 API で加えた変更が Express Mode にどの様に影響するかは利用者の責任となる
点です。そのため、Express Mode 管理外で、色々カスタマイズはできるのですが、Express Mode API で更新かけるタイミングで設定値がバッティングしないよう、お気をつけください。
先ほど例に挙げた「ECS Service の最小タスク数」は UpdateExpressGatewayService で言う、minTaskCount に当たる部分です。もし、 UpdateExpressGatewayService を実行した時に、明示的に指定した場合は、上書きされる可能性があるため注意です。といったことの様です。
やってみた
戻りまして、カスタムドメインの対応です。ACM の証明書発行が済んでいる、ドメインは Route 53 で管理されている前提で進めていきます。
「ecs-express0102.takakuni.blog」という、カスタムドメインを Express Mode によって作成された ALB に紐づけたいケースを想定します。
リソースの確認
まずは、ALB の状態を確認します。
基本的には、以下のドキュメントを参照すれば、諸々書いてあるのですが、全ての設定値が書いてあるわけではないため注意です。
リスナーは HTTPS (443) リスナーのみ設定されていました。

リスナールールは 2 つ設定されており、デフォルトで払い出された xxx.ecs.リージョン名.on.aws のホストヘッダーの有無で ECS なのか、固定レスポンス(デフォルトアクション)なのか振り分けていますね。

証明書も設定されています。xxx.ecs.リージョン名.on.aws のエンドポイントに対して、発行されていますね。

ACM からも発行された証明書が確認できています。

状況が把握できましたね。
リスナールールの編集
では、リスナールールを編集していきましょう。
OR 条件値を追加 から、

今回設定したいカスタムドメイン (ecs-express0102.takakuni.blog) を追加します。
デフォルトエンドポイントからのアクセスが不要であれば、この部分で外すのも良さそうです。

うまく変わっていますね。

証明書の追加
続いて証明書の追加です。証明書の追加から

利用したい証明書を追加します。

証明書が追加できました。

レコード追加
最後に DNS レコードの追加です。カスタムドメインに対して、ALB のエイリアスを指定します。

アクセス確認
カスタムドメイン経由で Express Mode の ECS へアクセスできていますね。証明書もバッチリ効いています。

リスナールール側で OR 条件で、旧ドメインへのアクセスも許可しているため、デフォルトエンドポイント経由のアクセスも問題なさそうです。

まとめ
以上、「ECS Express Mode で作成したサービスにカスタムドメインを設定してみた」でした。
再掲になりますが、以下で手順は用意されているものの、どんなイメージなのか確かめるのは大事ですね。
Express Mode 作成時にカスタムドメイン欄が出てくると嬉しいですね。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!







