AWS Transit Gateway Multicast

マルチキャスト完全ガイド

ケーブルTV局のたとえで、1対多のグループ配信を直感的に理解する

マルチキャスト = チャンネル配信

1つのデータストリームを「登録した受信者だけ」に同時配信する通信方式。ケーブルTVの契約チャンネルと同じ仕組み。

Transit Gateway = TV局の中継局

VPC間のマルチキャストルーターとして機能し、複数のサブネットへ効率的にトラフィックを中継する。

IGMP = チャンネル契約の仕組み

ホストがマルチキャストグループへ参加(JOIN)・離脱(LEAVE)するためのプロトコル。IGMPv2のみサポート。

2つのモード: IGMP vs 静的

動的なIGMP方式と、AWS CLIで手動管理する静的方式の2つ。用途に応じて使い分ける。

1

ケーブルTV局で理解するマルチキャスト

3つの通信方式を「テレビの見方」で比較してみましょう

マルチキャスト = ケーブルTVの契約チャンネル配信

ケーブルTV局は番組を1回だけ送出し、契約している家庭だけが視聴できます。未契約の家庭には届きません。AWSマルチキャストもまったく同じ仕組みで、登録されたグループメンバーだけにデータを効率的に同時配信します。

ユニキャスト

電話(1対1通話)

Aさん → Bさん

1人の相手に専用回線で話す方式。確実だが、100人に同じ話をするには100回電話する必要がある。

ブロードキャスト

街頭スピーカー(1対全員)

Aさん → 全員

街中に放送を流す方式。全員に届くが、興味がない人にも強制的に聞こえてしまう。帯域の無駄遣い。

マルチキャスト

ケーブルTV(1対登録者)

Aさん → 契約者グループ

番組は1回だけ送出し、契約チャンネルの視聴者だけが受信。効率的かつ無駄がない。

ケーブルTV局のたとえ AWS マルチキャスト 役割
ケーブルTV局(中継局) Transit Gateway マルチキャストルーターとして配信を中継
放送エリア(配信区域) マルチキャストドメイン どのサブネットに配信するかの範囲を定義
チャンネル(スポーツ、映画など) マルチキャストグループ(IPアドレス) 受信したいデータの種類を区別
番組制作会社 マルチキャスト送信元(Source ENI) データを送出するEC2インスタンス
契約している家庭の視聴者 グループメンバー(Member ENI) データを受信するEC2インスタンス
チャンネル契約・解約の手続き IGMP JOIN / LEAVE グループへの参加・離脱を動的に管理
「まだ視聴していますか?」の確認はがき IGMP Query(2分ごと) TGWがメンバーシップを定期的に確認
2

アーキテクチャ全体像

Transit Gatewayがマルチキャストルーターとして機能する仕組み

Transit Gateway マルチキャスト アーキテクチャ図
Transit Gateway マルチキャストルーター 📡 マルチキャストドメイン VPC-A(送信元) Subnet-A 🎬 Source EC2 マルチキャスト送信 グループIP: 239.1.1.1 VPC-B(受信者) Subnet-B-1 🏠 Member EC2 ×2 Subnet-B-2 🏠 Member EC2 ×1 VPC-C(送受信) 🎬 Source Subnet-C-1 🏠 Member Subnet-C-2 📋 IGMP JOIN/LEAVE で動的管理 送信 配信 配信 凡例 送信トラフィック 配信トラフィック 送信元 (Source) 受信者 (Member)

📡 マルチキャストドメイン

ケーブルTVの「配信エリア」にあたります。どのサブネットがマルチキャスト配信に参加するかを定義するコンテナです。

  • 1つのサブネットは1つのドメインにのみ所属可能
  • 1つのTGWに複数ドメインを作成可能
  • IGMPサポートの有効/無効をドメインごとに設定
  • マルチキャスト有効の新しいTGWが必要

📺 マルチキャストグループ

ケーブルTVの「チャンネル」にあたります。マルチキャストグループIPアドレス(239.x.x.x等)で識別される送受信のまとまりです。

  • グループIPアドレスで識別(例: 239.1.1.1)
  • メンバーシップはENI単位で定義
  • Source(送信元)とMember(受信者)で構成
  • UDPプロトコルを使用(コネクションレス)
3

IGMP = チャンネル契約の仕組み

ホストがグループに参加・離脱するプロトコルの動作フロー

IGMPv2 動作フロー図
EC2 ホスト Transit Gateway 結果 ① IGMP JOIN 送信 JOIN メンバー登録 ✅ 配信開始 ② IGMP QUERY 2分ごと 🔄 メンバー確認 ③ JOIN で応答 応答 メンバーシップ更新 ✅ 配信継続 ④ IGMP LEAVE 送信 LEAVE メンバー削除 🛑 配信停止 ⚠️ 3回連続Query無応答 → メンバーシップ自動削除(ただし12時間Queryは継続)
1

JOIN: チャンネル契約

EC2ホストがマルチキャストグループに参加したいとき、IGMP JOINメッセージを送信します。TV局でいえば「スポーツチャンネルを契約します!」と申し込むイメージです。通常2〜3回のリトライが自動で行われます。

2

QUERY: 視聴確認はがき

Transit Gatewayは2分ごとにIGMP QUERYを全メンバーに送信し、「まだ視聴していますか?」と確認します。送信元IP 0.0.0.0、送信先IP 224.0.0.1、プロトコル番号2で送信されます。

3

応答: まだ見てます!

メンバーはQUERYに対してJOINメッセージで応答し、メンバーシップを更新します。3回連続で応答がないとメンバーシップが自動削除されますが、完全削除まで12時間は猶予があります。

4

LEAVE: チャンネル解約

ホストがグループを離脱する場合、IGMP LEAVEメッセージを送信します。「チャンネル解約します」と明示的に通知することで、即座にマルチキャスト配信が停止されます。

⚠️ IGMPv2 強制設定が必要

  • EC2インスタンスはデフォルトでIGMPv3が有効ですが、Transit GatewayはIGMPv2のみサポートします
  • IGMPv2を強制するコマンド: sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2
  • 永続化する場合は /etc/sysctl.conf に追記が必要です
  • 全JOINメッセージが失われた場合、ホストはグループに参加できません。アプリ側で再トリガーが必要です。
4

2つのモード: 静的 vs IGMP

ケーブルTVの「手動チャンネル割当」と「視聴者が自分で契約」の違い

📋 静的(Static)モード

TV局が手動でチャンネル契約を管理するイメージ

メンバー管理 AWS CLI / API で手動登録
Source の定義 静的に指定(必須)
IGMP 不要
IPv6 ✅ サポート
適用場面 固定メンバー構成
メンバーの役割 受信のみ

🔄 IGMP(動的)モード

視聴者が自分でチャンネルを契約・解約するイメージ

メンバー管理 ホストが自動的にJOIN/LEAVE
Source の定義 不要(メンバーが送信も可能)
IGMP IGMPv2 必須
IPv6 ❌ 非サポート
適用場面 動的メンバー変更が頻繁
メンバーの役割 送受信可能

📝 試験対策ポイント(ANS-C01)

  • 「IGMPを使用した動的グループ管理」が問われたら → IGMPv2のみサポートという制約を思い出す
  • 「IPv6マルチキャスト」が問われたら → 静的モードのみ対応
  • 「アプリケーション変更不要でマルチキャスト」→ IGMPモードを選択
  • 「マルチキャストのフラグメンテーション」→ TGWはフラグメント化されたパケットをドロップする
  • 「Direct Connect / VPN でマルチキャスト」→ 非サポート(VPCアタッチメントのみ)
5

必要なネットワーク設定

IGMPトラフィックとマルチキャストUDPの許可ルール

ネットワークACL: インバウンドルール(最小構成)

タイプ プロトコル 送信元 説明
カスタムプロトコル IGMP (2) 0.0.0.0/32 TGWからのIGMP Query を許可
カスタムUDP UDP 送信元ホストIP 受信マルチキャストトラフィックを許可

ネットワークACL: アウトバウンドルール(最小構成)

タイプ プロトコル 送信先 説明
カスタムプロトコル IGMP (2) 224.0.0.2/32 IGMP LEAVE メッセージ
カスタムプロトコル IGMP (2) マルチキャストグループIP IGMP JOIN メッセージ
カスタムUDP UDP マルチキャストグループIP 送信マルチキャストトラフィック

💡 セキュリティグループの注意点

マルチキャストの送信元と送信先が同じVPC内にある場合でも、セキュリティグループ参照(ソースSGの指定)は使用できません。IPアドレスベースのルールで許可を設定する必要があります。また、Nitro以外のインスタンスを使用する場合は「送信元/送信先チェック」を無効にしてください。

6

設定手順とコード例

AWS CLIとCloudFormationでのマルチキャスト設定

# 1. マルチキャスト有効のTransit Gatewayを作成
aws ec2 create-transit-gateway \
    --description "Multicast TGW" \
    --options "MulticastSupport=enable"

# 2. マルチキャストドメインを作成(IGMPサポート有効)
aws ec2 create-transit-gateway-multicast-domain \
    --transit-gateway-id tgw-0123456789abcdef0 \
    --options "Igmpv2Support=enable,StaticSourcesSupport=disable"

# 3. サブネットをマルチキャストドメインに関連付け
aws ec2 associate-transit-gateway-multicast-domain \
    --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \
    --transit-gateway-attachment-id tgw-attach-xxxxx \
    --subnet-ids subnet-xxxxx

# 4. (静的モードの場合)送信元を登録
aws ec2 register-transit-gateway-multicast-group-sources \
    --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \
    --group-ip-address "239.1.1.1" \
    --network-interface-ids eni-source-xxxxx

# 5. (静的モードの場合)メンバーを登録
aws ec2 register-transit-gateway-multicast-group-members \
    --transit-gateway-multicast-domain-id tgw-mcast-domain-xxxxx \
    --group-ip-address "239.1.1.1" \
    --network-interface-ids eni-member-xxxxx
# CloudFormation テンプレート(YAML)
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Transit Gateway Multicast Setup'

Resources:
  MulticastTGW:
    Type: AWS::EC2::TransitGateway
    Properties:
      Description: "Multicast-enabled TGW"
      MulticastSupport: enable

  MulticastDomain:
    Type: AWS::EC2::TransitGatewayMulticastDomain
    Properties:
      TransitGatewayId: !Ref MulticastTGW
      Options:
        Igmpv2Support: enable
        StaticSourcesSupport: disable

  DomainAssociation:
    Type: AWS::EC2::TransitGatewayMulticastDomainAssociation
    Properties:
      TransitGatewayMulticastDomainId: !Ref MulticastDomain
      TransitGatewayAttachmentId: !Ref TGWAttachment
      SubnetId: !Ref PrivateSubnet
# EC2インスタンスでのIGMPv2強制設定

# 1. 現在のIGMPバージョンを確認
cat /proc/sys/net/ipv4/conf/eth0/force_igmp_version
# → 0(デフォルト: IGMPv3)

# 2. IGMPv2を強制
sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2

# 3. 永続化(再起動後も有効にする場合)
echo "net.ipv4.conf.eth0.force_igmp_version=2" | \
    sudo tee -a /etc/sysctl.conf

# 4. 設定確認
sudo sysctl net.ipv4.conf.eth0.force_igmp_version
# → 2

# 5. マルチキャストグループに参加(テスト用)
# socat を使用した例
socat UDP4-RECVFROM:5001,ip-add-membership=239.1.1.1:eth0,reuseaddr -

# 6. マルチキャスト送信テスト(送信元から)
echo "Hello Multicast" | socat - UDP4-DATAGRAM:239.1.1.1:5001
7

主なユースケース

マルチキャストが活躍する代表的なシナリオ

金融データの同時配信

株価、為替レートなどのリアルタイム市場データを、複数のトレーディングシステムへ同時に配信。ユニキャストでは帯域がN倍必要だが、マルチキャストなら1ストリームで済む。

ストリーミングメディア配信

社内向けライブ動画配信やビデオ会議のマルチキャスト配信。帯域を大幅に節約しながら、大人数への同時配信を実現する。

分散システムの状態同期

クラスタ間での設定変更の一斉通知、キャッシュの無効化通知、サービスディスカバリーなど。全ノードに同時に情報を到達させる。

ソフトウェア更新の一斉配布

数百台のEC2インスタンスへのパッチ配布やファームウェア更新。マルチキャストならネットワーク負荷を最小限に抑えつつ全台に同時配信可能。

⚠️ 不向きなケース

  • 高頻度取引(HFT): Transit Gatewayマルチキャストはレイテンシに敏感な用途には不向き。パフォーマンス要件は事前にAWSチームと確認してください。
  • Direct Connect / VPN経由: オンプレミスからのマルチキャストはサポートされていません。VPCアタッチメントのみ対応。
  • Transit Gateway Connect: Connectアタッチメント経由のマルチキャストルーティングは非サポート。
8

IGMP対応マルチキャストの利点

動的グループ管理がもたらすメリット

動的なグループ管理

ホストが自律的にJOIN/LEAVEするため、管理者の手動操作が不要。スケールアウト時にも自動でメンバー追加される。

アプリケーション変更不要

既存のマルチキャスト対応アプリケーションをそのままAWSに移行可能。標準的なIGMPv2プロトコルに準拠。

リアルタイムの追跡

TGWが2分ごとにメンバーシップを確認し、離脱したホストを自動検出。常に最新のメンバーリストを維持する。

帯域幅の効率化

1つのストリームを複数メンバーに同時配信するため、ユニキャストのN倍通信と比較して大幅な帯域節約を実現。

9

よくある質問(FAQ)

いいえ、できません。マルチキャストをサポートするには、作成時にマルチキャストを有効にした新しいTransit Gatewayが必要です。既存のTGWに後からマルチキャスト機能を追加することはできないため、新規作成してVPCアタッチメントを移行する必要があります。
Transit GatewayはIGMPv2のみをサポートしています。EC2インスタンスはデフォルトでIGMPv3が有効なので、sudo sysctl net.ipv4.conf.eth0.force_igmp_version=2 で明示的にv2を強制する必要があります。
いいえ、1つのサブネットは1つのマルチキャストドメインにのみ関連付け可能です。複数ドメインへの所属が必要な場合は、サブネットを分割して設計してください。
いいえ。マルチキャストのルーティングは、Direct Connect、Site-to-Site VPN、ピアリングアタッチメント、Transit Gateway Connectアタッチメントではサポートされていません。VPCアタッチメント間のみで動作します。
いいえ、Nitro以外のインスタンスをマルチキャスト送信元にすることはできません。受信者(メンバー)としては使用可能ですが、その場合は「送信元/送信先チェック」を無効にする必要があります。
Transit Gatewayはマルチキャストパケットのフラグメント化をサポートしていません。フラグメント化されたパケットはドロップされます。送信するデータのサイズがMTUを超えないよう注意し、アプリケーション側でパケットサイズを制御してください。

まとめ

📡 マルチキャスト

1つのストリームを登録済みメンバーに同時配信。UDPベースのコネクションレス通信で帯域を効率化。

🔀 Transit Gateway

VPC間のマルチキャストルーター。マルチキャストドメインでサブネットを束ね、グループIPで配信先を制御。

📋 IGMP

JOIN/LEAVE/QUERYで動的にグループメンバーシップを管理。IGMPv2のみサポート。2分ごとのQuery確認。

Transit Gateway(中継局)+ マルチキャストドメイン(配信エリア)+ IGMP(契約管理)= 効率的な1対多配信

Created by SSuzuki1063

AWS SAP Learning Resources