[アップデート] AWS Elemental MediaLiveでVPCからの入力がサポートされていました

AWS Elemental MediaLiveのInputがVPCをサポートしました。これまではグローバルIPアドレスでの接続が必要でしたが、VPCモードを設定するとMediaLiveにVPC内のプライベートIPアドレスで接続が可能です。
2019.04.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveでVPCからの入力(Input)がサポートされていました。

2019/03/05にポストされた内容となります。上記ポストでは2つの項目を紹介していますが、本エントリではVPC入力サポートについてのみを扱います。

AWS Elemental MediaLiveで映像入力を受け取るInputのEndpoint、これまでグローバルIPアドレスが前提でしたので、インターネット経由の接続もしくはDirect Connectのパブリック接続を使用して接続する必要がありました。今回のアップデートでVPCからの入力がサポートされ、InputのEndpointにはそのVPC内のプライベートIPアドレスが割り振られます。VPC内のリソースからAWS Elemental MediaLiveのInputへの接続は、VPC内のネットワークで完結することとなります。

AWS Elemental MediaLiveのInputをVPC Modeで作成してみる

では実際に、AWS Elemental MediaLiveのInputをVPC Modeで作成しています。今回はInput typeとしてRTMP(push)を選択しました。

Network modeでデフォルトのPublicからVPCを選択します。Select subnets and security groupsまたはEneter subnet and security groupsが選択できます。前者の場合はマネジメントコンソールで表示されている一覧からの選択、後者の場合はSubnet Group ID、Security Group IDの値を入力することで設定ができます。

今回はSelect subnets and security groupsを選び、マネジメントコンソールで表示されている一覧からSubnets、Security groupsを選択しました。EC2などと同様、Security GroupはSubnetの属するVPCに紐付いているものしか利用できないので注意しましょう。

なお、Network modeがPublicのときにはInput security groupの設定箇所もありましたが、VPCにするとこの箇所がなくなり、VPCのSecurity Group設定がこの役割を担っているということになりますね。

RoleとInput destinationsについても設定し、[Create]でInputを作成します。

作成後はこのように、選択したSubnetのCIDR内、空いているプライベートIPアドレスがEndpointに割り当てられます。

Network Interfaceも割り当てられていますね。もちろん、EC2のマネジメントコンソール側からも確認ができます。

VPC内のリソースからライブ配信してみる

VPC ModeのInputが作成できたので、VPC内のリソースからライブ配信を行ってみます。今回の構成としては、以下としました。

  • 自宅のWi-Fiに接続したiPhoneからZixi ON AIRを使って、nginx on EC2にRTMP配信
  • nginx on EC2でRTMPを転送して、MediaLiveのVPC Mode InputにRTMP配信
  • MediaLiveのDestinationにMediaStoreを指定し書き出されるm3u8にアクセスして配信の視聴確認

VPC内のEC2のみでのライブ配信を行う準備ができなかったため、AWS外のリソース(自宅のWi-Fiに接続したiPhone)からグローバルIPアドレスを持つnginx on EC2にRTMPでまずは配信を行います。nginx on EC2ではnginx-rtmp-moduleを使い、RTMPを転送するよう設定します。転送先をプライベートIPアドレスを持つMediaLiveのVPC Mode Inputとすることで、間接的にVPC内のリソースに配信エンコーダからの映像を伝送します。MediaLiveから先については、DestinationにMediaStoreを指定、検証目的のためClooudFrontは経由せずMediaStoreのリソースを直接参照して配信の視聴確認を行います。

まずはMediaLive側の準備です。先ほど作成したInputリソースに続き、Channelリソースを作成します。MediaLiveのChannelリソースについては、VPC ModeではないPublic Modeのときと変わりありません。Input attachmentsでVPC Modeで作成したInputをAttachしておきます。

続いてnginx on EC2の準備です。MediaLiveのVPC Mode Inputを作成したVPCと同じVPCにAmazon Linux 2を起動します。インスタンスタイプはt3.largeとしました。VPC Mode Input側にポート1935で接続できるよう、またZixi ON AIRからの接続元からもポート1935で接続できるよう、セキュリティグループを設定しておきます。続いて以下の手順でnginxのビルドとインストールを行います。手順は下記ページを参考にしました。

# nginxをダウンロード
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar zxf nginx-1.14.0.tar.gz

# nginx-rtmp-moduleのダウンロード
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip

# makeの際に必要となりそうなモジュールのインストール
sudo yum install -y gcc pcre-devel openssl openssl-devel

# ./configure & make & make install
cd /home/ec2-user/nginx-1.14.0
./configure --sbin-path=/usr/sbin/nginx \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --http-log-path=/var/log/nginx/access.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --prefix=/usr/local/nginx \
            --add-module=/home/ec2-user/nginx-rtmp-module-master
make
sudo make install

インストール完了後、/etc/nginx/nginx.confに下記内容を追記します。追記内容はnginx-rtmp-modulesのExample、「Forward live broadcast service」を参考にしました。

rtmp {
 server{
     listen 1935;
     chunk_size 4096;

     application [Application Name] {
           live on;
           record off;
           push rtmp://[VPC-Mode-Input-Endpoint]/[ApplicationName]/[Application\
Instance];
          }
    }
}

続いて下記の内容で/lib/systemd/system/nginx.serviceというファイルをします。これが起動ファイルになります。

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

以下コマンドでnginxを起動します。

sudo systemctl start nginx

MediaLiveのChannelもスタートさせ、iPhone上のZixi ON AIRから配信を行ってみます。Zixi ON AIRの配信先にはEC2のグローバルIPアドレスを設定する点に注意しましょう。配信の様子はいつもと変わりありませんが、VPC Modeでの配信ができていることが確認できました。

まとめ

AWS Elemental MediaLiveでアップデートされていた新機能、VPCからの入力サポートについて確認してみました。これまでMediaLiveのInputのEndpointはグローバルIPのみでしたが、今回のアップデートでVPC内ネットワークから直接MediaLiveのInputにアクセスできるようになりました。未検証ですが、Direct Connectのプライベート接続も利用できそうですね。MediaLiveの活用の幅がより広がるアップデートだと思います。引き続き、AWS Elemental MediaLiveをはじめとしたAWS Media Servicesの機能アップデートに注目していきたいと思います。