はじめに
こんにちは ! 株式会社スタートアップテクノロジー テックリード、 AWS Serverless HERO の松井です !
今回は、以前 Amazon Interactive Video Service (IVS) と AWS Amplify を使って自分だけのオリジナル配信サイトを作る ! の記事でもご紹介したオリジナル配信サイトにも利用できる、 Amazon Interactive Video Service (IVS) の配信視聴者数のリアルタイム取得と表示ができる機能を、 AWS Cloud Development Kit (AWS CDK) を使って、 コマンド一発で構築する方法をご紹介します !
Amazon IVS を使うと、簡単に自分のオリジナル配信サイトを構築できますが、配信視聴者数などの付随した情報をリアルタイムにクライアント側に表示しようとすると、それなりにアーキテクチャの設計・構築が必要になり、少し大変です。今回ご紹介する方法を使うと、非常に簡単にそれが実現できます !
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
1. アーキテクチャ
以前、 「Amazon Interactive Video Service (IVS) と AWS Amplify を使って自分だけのオリジナル配信サイトを作る !」 の記事でご紹介した部分も含めて、今回構築する配信サイトの視聴者数の取得、保存、表示する機能のアーキテクチャです。例として以前の記事の内容と併せてご紹介していますが、 IVS を使った配信サイトであれば今回の内容を流用することが可能です !

動作の流れ
- Amazon EventBridge で、AWS Lambda の関数を定期呼出します (毎分 1 回)。
- 呼び出しされた Lambda 関数は、 IVS に取得者数を問い合わせします。
- Lambda 関数が、取得した視聴者数を Amazon DynamoDB に保存します。
- 単純に視聴者数を取得・表示するだけならデータを永続化する必要はありませんが、下記の様な場合が考えられるので保存しておくと便利です。
- 視聴者数データを別の用途に利用したい
- 過去期間の視聴者数の増減に応じて、表示の仕方を変えたい (視聴者数が増加傾向なら盛り上がってることを表す表示をしたい、など)
- 単純に視聴者数を取得・表示するだけならデータを永続化する必要はありませんが、下記の様な場合が考えられるので保存しておくと便利です。
- Lambda 関数が、視聴者数を Amazon DynamoDB から過去の一定期間 (5 分) 分も含めて取得します。
- Lambda 関数が、 DynamoDB から取得した 5 分間の視聴者数を、 IVS に Timed Metadata* として送信します。
- 配信視聴クライアント (Web ブラウザ) 側で、受け取った Timed Metadata* を処理して、1 分ごとの視聴者数をリアルタイムで表示します。
*Timed Metadata : 任意の時間指定データをクライアント側に送信できる IVS の機能。
2. 必要要件
3. AWS Cloud9 セットアップ
resize.sh へ記述
作成した resize.sh に、下記を記述して保存します。
#!/bin/bash
# Specify the desired volume size in GiB as a command line argument. If not specified, default to 20 GiB.
SIZE=${1:-20}
# Get the ID of the environment host Amazon EC2 instance.
INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/')
# Get the ID of the Amazon EBS volume associated with the instance.
VOLUMEID=$(aws ec2 describe-instances \
--instance-id $INSTANCEID \
--query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \
--output text \
--region $REGION)
# Resize the EBS volume.
aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE
# Wait for the resize to finish.
while [ \
"$(aws ec2 describe-volumes-modifications \
--volume-id $VOLUMEID \
--filters Name=modification-state,Values="optimizing","completed" \
--query "length(VolumesModifications)"\
--output text)" != "1" ]; do
sleep 1
done
#Check if we're on an NVMe filesystem
if [[ -e "/dev/xvda" && $(readlink -f /dev/xvda) = "/dev/xvda" ]]
then
# Rewrite the partition table so that the partition takes up all the space that it can.
sudo growpart /dev/xvda 1
# Expand the size of the file system.
# Check if we're on AL2
STR=$(cat /etc/os-release)
SUB="VERSION_ID=\"2\""
if [[ "$STR" == *"$SUB"* ]]
then
sudo xfs_growfs -d /
else
sudo resize2fs /dev/xvda1
fi
else
# Rewrite the partition table so that the partition takes up all the space that it can.
sudo growpart /dev/nvme0n1 1
# Expand the size of the file system.
# Check if we're on AL2
STR=$(cat /etc/os-release)
SUB="VERSION_ID=\"2\""
if [[ "$STR" == *"$SUB"* ]]
then
sudo xfs_growfs -d /
else
sudo resize2fs /dev/nvme0n1p1
fi
fi
resize.sh を実行
下記コマンドを実行し、作成した resize.sh を実行します (これ以降、コマンドを実行する際は Cloud9 環境のターミナルで実行してください)。 正常終了すれば、拡張完了です。
bash resize.sh 20
4. リポジトリのクローンと解説
5. 各リソースのデプロイ
6. 配信視聴者数の表示
7. リソースの削除
8. まとめ
いかがでしたでしょうか ? Amazon IVS の Timed Metadata を使えば、任意のデータを IVS 側からクライアントに対して送信することができ、双方向のインタラクションを可能にしてくれます ! 今回の様な配信視聴者数の表示だけでなく、
- アンケート機能
- 配信内容や配信者の情報表示のリアルタイム更新
などの機能も実現できるので、今回の内容を参考にぜひ色々と試してみてください !
Happy Coding !
筆者プロフィール
松井 英俊 (まつい ひでとし)
株式会社スタートアップテクノロジー テックリード
JAWS-UG 浜松支部 運営メンバー
JAWS DAYS 2021 re:Connect、JAWS PANKRATION 2021 -Up till Down- では実行委員を務め、配信サイトを構築した。
2021 年 6 月、 AWS Serverless HERO に選ばれる。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages