冗長性のある動画配信インフラをAzureで作る(TrafficManager→CDN→MediaService)
2021-12-17
azblob://2022/11/11/eyecatch/2021-12-17-Azure-Live-Streaming-000.jpg

※2022/1/12 レコード周りを修正

この記事はFIXER Advent Calendar 2021(https://adventar.org/calendars/6837)17日目の記事です。

今回は、Azureリソースを使って動画配信をしてみます。

はじめに

大雑把な図です。


あらかじめ以下のリソースを作成しておきます。

  • グローバル
    • TrafficManager
  • 東日本
    • CDN (Akamai)
    • MediaService
    • ストレージアカウント
  • 西日本
    • CDN (Verizon)
    • MediaService
    • ストレージアカウント

カスタムドメインの登録をするので何かしらDNSも必要です。

CDN統合を有効にする

MediaServiceのストリーミングエンドポイントから有効にします。今回はStandard Akamaiを使用するのでポータル以外から有効にします。というのも、ポータルからだとStandard VerizonとPremium Verizonしか選択できないためです。
今回はAzCLIを使用します。

az ams streaming-endpoint create `
	--account-name {MediaService名} `
	--name {ストリーミングエンドポイント名} `
	--resource-group {リソースグループ名} `
	--scale-units 0 `
  --auto-start `
	--cdn-profile {CDNプロファイル名} `
	--cdn-provider StandardAkamai

ここまで来たらついでにVerizonもコマンドで有効にした方が早い(気がする)です。

az ams streaming-endpoint create `
	--account-name {MediaService名} `
	--name {ストリーミングエンドポイント名} `
	--resource-group {リソースグループ名} `
	--scale-units 0 `
  --auto-start `
	--cdn-profile {CDNプロファイル名} `
	--cdn-provider StandardVerizon

カスタムドメインの追加

Akamai

Akamaiの場合は以下2つのレコードをCNAMEで登録します。

cdnverify.<custom domain hostname> -> CNAME -> cdnverify.<cdn endpoint hostname>
_acme-challenge.<custom domain hostname> -> CNAME -> <custom domain hostname>.ak-acme-challenge.azureedge.net

<cdn endpoint hostname> にはCDNのエンドポイントを指定します。
例:cc9ada1caba64401990c40a3508fd000.azureedge.net

その後、CDNエンドポイントでカスタムドメインの追加をし、カスタムHTTPSを有効にします。
有効になるまで最大 6 ~ 8 時間かかるのでそれまで待機が必要です。
問題なく有効にできると以下の画像のようになります。

詳細:https://docs.microsoft.com/ja-jp/azure/cdn/cdn-custom-ssl?tabs=option-1-default-enable-https-with-a-cdn-managed-certificate#tlsssl-certificates

2021-12-17-Azure-Live-Streaming-002

Verizon

Verizonの場合は以下のレコードをCNAMEで登録します。
※Akamaiで設定したcdnverifyレコードを編集し、レコード値を書き換えればOKです。

cdnverify.<custom domain hostname> -> CNAME -> cdnverify.<cdn endpoint hostname>

その後、CDNエンドポイントでカスタムドメインの追加をし、カスタムHTTPSを有効にします。
有効になるまで最大 6 ~ 8 時間かかるのでそれまで待機が必要です。
問題なく有効にできると以下の画像のようになります。

2021-12-17-Azure-Live-Streaming-003

TraffcManager

TrafficManager用にCNAMEでレコード登録します。

<custom domain hostname> -> CNAME -> <trafficmanager hostname>

レコードについて補足

①cdnverify

AzureCDNにおける一時サブドメイン。AzureCDN上でカスタムドメインを構成するために用いられるもの。

②_acme-challenge ~ ak-acme-challenge.azureedge.net

AkamaiCDNを使用している際に、自動ドメイン検証を実施するようにするレコード。これがあれば証明書の更新も自動で実施される。

TrafficManagerで負荷分散

外部エンドポイントでAkamaiとVerizonを追加します。モニターの状態がオンラインになれば正常です。

2021-12-17-Azure-Live-Streaming-004

ちなみに構成設定は画像の通りです。

2021-12-17-Azure-Live-Streaming-005

配信テスト

適当に配信して、TrafficManagerから通信できているか確認します。

2021-12-17-Azure-Live-Streaming-006

MediaServiceのストリーミングエンドポイントのホスト名を、カスタムドメインの値に書き換えます。
書き換えた後も配信ができていればOKです。

2021-12-17-Azure-Live-Streaming-007

最後に

プライマリ側で障害が起きた際はTrafficManagerで切り替わるので問題が無いんですが、セカンダリ側に動画が無かったりするので完全な冗長とは言えません。その辺は別途、うまいことやってあげる必要があります。