何ができるようになったのか?
ALB において URL とホストヘッダーの書き換え機能が追加されました。
過去に apache のコンテナを挟んで URL 書き換え処理を行なっていた経験がありましたので、これらで運用していた人にとっては嬉しいアップデートかと思います。
詳細
- 正規表現(Regex)によるルーティング条件のマッチング:ホストヘッダー、パス、HTTP ヘッダーに対して正規表現でマッチング可能
- URL パスの書き換え(Transform):バックエンドへルーティングする前に URL パスを変換
- ホストヘッダーの書き換え:リクエストのホストヘッダーを変換
Before / After 比較
Before(従来)- サードパーティプロキシが必要
After(新機能)- ALBでネイティブに書き換え
これまでの課題と新機能のメリット
| 観点 | Before(従来) | After(新機能) |
|---|---|---|
| アーキテクチャ | NGINX等のプロキシが別途必要 | ALB単体で完結 |
| 運用負荷 | 追加コンポーネントの保守が必要 | メンテナンス不要 |
| コスト | プロキシ用インフラのコスト発生 | 追加コストなし |
| レイテンシー | プロキシ経由で増加 | 直接ルーティングで低減 |
| 障害ポイント | 増加 | 削減 |
やってみる
ここでは、default/user.html にアクセスすると、v1/user.html へアクセスできることを確認していきます。
環境の準備
まず、環境が必要です。せっかくなので ECS MCP サーバーを使って簡易的な環境をデプロイしておきます。
今回 .mcp.json の設定では書き込み操作が必要となりますので、ALLOW_WRITE と ALLOW_SENSITIVE_DATA は true にしておく必要があります。
{
"mcpServers": {
"awslabs.ecs-mcp-server": {
"command": "uvx",
"args": ["--from", "awslabs-ecs-mcp-server", "ecs-mcp-server"],
"env": {
"AWS_PROFILE": "default",
"AWS_REGION": "us-west-2",
"FASTMCP_LOG_LEVEL": "ERROR",
"FASTMCP_LOG_FILE": "/path/to/ecs-mcp-server.log",
"ALLOW_WRITE": "true",
"ALLOW_SENSITIVE_DATA": "true"
}
}
}
}
この、ECS MCP サーバー は ECS Express Mode で動作するツールがあるようです。
ECS Express Mode は従来の ECS でウェブアプリを公開しようとすると、VPC、サブネット、セキュリティグループ、ALB、ターゲットグループ、ECS クラスター、サービス、タスク定義…と、設定すべきものがかなり多かったものをコンテナイメージだけ指定すれば、あとは AWS がよしなにやってくれるというアプローチのようです。
個人的には、実際のプロダクション運用では本番環境は通常、Terraform や CDK、CloudFormation などの IaC でインフラを管理することとなると思います。
そのため、PoC 検証や今回のようにサクッと環境を準備したいとときに活用できそうです。
ECS MCP サーバーは次のようなツール群を使ってデプロイされるようです。
ECS MCP サーバーを使ってデプロイされるリソースは次のイメージです。
ここで個人的に良いと思ったのは、AWS 管理のカスタムドメイン が作成(自身の Route 53 には作成されない)され、自身でドメインを持っていない、準備しない場合でも簡単に HTTPS でアクセスできることが嬉しいポイントかと感じました。なお、証明書は 自身の ACM 上に作成されます。
(補足1)
internet-facing ALB(パブリック)としてデプロイしていますが、プライベートサブネットを指定すると、自動的に internal ALB(プライベート)としてデプロイすことも可能なようです。
(補足2)
デプロイ方式は、カナリアデプロイになるようです。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/express-service-work.html
パブリックサブネットが指定された場合、パブリック IP アドレスを持つインターネット向けロードバランサーを作成します。プライベートサブネットが指定された場合、プライベート IP アドレスを持つ内部ロードバランサーを作成します。
デフォルトは Canary – Express Mode サービスはカナリアデプロイを使用します
では一旦 ECS MCP サーバーを使ってデプロイまで完了したら、アプリケーション URL(カスタムドメイン)を確認、アクセスし表示を確認しておきます。

https://<アプリケーション URL>/v1/user.html へアクセス。

ALB リスナーでの URL パスの書き換え(Transform)
ALB の HTTPS:443 リスナーを開き、トランスフォームの項目で、default から v1 に置換する設定を入れます。

ちなみにですが、同じ ALB の HTTPS:443 リスナーの画面を見るとわかりますが、ホストヘッダールールにアプリケーション URL(カスタムドメイン)を条件値としてトラフィックをルーティングする設定がデフォルトで構成されていました。

https://<アプリケーション URL>/default/user.html へアクセスし、表示されるか確認します。

コンテナのログを確認すると、https://<アプリケーション URL>/v1/user.html へリクエストが来ていることが確認できると思います。
