WebTransportを試す

WebTransportを試す

更新: 2026年2月1日

WebTransportをAWS環境で動作させるまでの道のり

背景

なにか、尖ったリアルタイム通信がしたいなーと思い立ち、調べていると、AIヒアリングかけるとだいたいこんな感じらしい

純粋なgRPC ー> ブラウザからは直接呼べない
gRPC-Web ー> サーバーからのストリームのみ可
Connect ー> Web開発における現在の主流
WebSocket ー> 古典的だが確実。

とはいえ、事例がすくないものをやるほうが面白いな。ということになり、WebTransportに手を出すことにする。

WebTransportについては以下 https://developer.chrome.com/docs/capabilities/web-apis/webtransport?hl=ja

https://github.com/quic-go/webtransport-go goの実装がここにあったので、これを元にして、実装してみよう。

Webブラウザのチェック

chrome://flags

上記にアクセスして、設定をEnabledにしておく(もしかしたら、この設定をしておけば証明書の発行いらんかった?)

画像の説明

証明書周りの課題

webTransportを実験する際は、localhostであってもhttpsによる通信を行いたいため、mkcertを利用する。また、今回はアプリが直接TLSを処理する必要があったため、証明書をエクスポート可能な環境を用意する。

https://github.com/FiloSottile/mkcert

mkcertでPC内に認証局を用意して、localhostでもhttpsを実現する。

mkcert --install
mkcert localhost

AWS環境では?

let’s Encryptを利用して、証明書を獲得する。 一日1回動くLambdaを用意して、証明書のチェック、更新をおこなう。

ECSアプリケーションをインターネットに接続する。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/networking-outbound.html

 本来はNLBとかをたてて、そこを中継するほうが筋がいいんだろうけど、NLBたてるとコストが高いので実験のためにそこまでやるのもなーとなったので、今回はECSを上記の方法でつなげる。  当たり前ですがもっとちゃんとやる場合はNLB使うなりしましょう。  

動作確認

ここで疎通確認 https://webtransport.day/

画像の説明

あと気が済んだら消す予定の今回つくったサイト https://wt.muzigen.net:8443/

mermaid

AWS

Squarespace DNS

クライアント

Let's Encrypt

Lambda

Secrets Manager

ECS Fargate

Route53

コンテナ

1. DNS解決
2. 委任
3. IP取得
4. HTTPS :8443
5. WebTransport

QUIC :4433

トリガー

DNS-01 チャレンジ

証明書要求

検証

証明書発行

保存

証明書取得

IP更新

ブラウザ

(Chrome/Edge)

NS レコード

wt.muzigen.net → Route53

Hosted Zone

wt.muzigen.net

A レコード

→ ECS Public IP

ECS Task

WebTransport Server

:4433 UDP/TCP

Static Server

:8443 TCP

DNS更新スクリプト

証明書

CERT_CONTENT

KEY_CONTENT

証明書更新

(1日1回)

ACME Server

EventBridge

スケジュール

ECS TaskSecrets ManagerLet's EncryptRoute53LambdaEventBridgeECS TaskSecrets ManagerLet's EncryptRoute53LambdaEventBridge証明書更新フロー (1日1回)alt[更新が必要]ECS タスク起動フロースケジュール実行現在の証明書を取得有効期限チェック(30日以内?)証明書要求 (ACME)DNS-01 チャレンジTXTレコード作成_acme-challenge.wtチャレンジ完了通知TXTレコード検証証明書発行新しい証明書を保存TXTレコード削除証明書を取得CERT_CONTENT, KEY_CONTENTTLS設定Aレコード更新(Public IP)サーバー起動

最新記事をフォロー

RSS Feed