Amazon Web Services ブログ
Amazon ChimeSDK と Amazon IVS で RubyKaigi を数日で構築するには
本投稿は、Cookpad のシニアソフトウェアエンジニアで、RubyKaigi オーガナイザーでもある Sorah Fukumori 氏による寄稿です。本稿での意見は第三者によるものであり、この記事の内容及び正確さについて AWS は責任を負いません。
RubyKaigi は日本で開催されている、プログラミング言語 Ruby に関する世界最大級の国際カンファレンスです。長引く COVID-19 の影響で、私たちはオフラインでの開催を諦め、オンラインでの開催を決定しました。2020 年、RubyKaigi Takeout 2020 と称し無料で広く使われているオンラインビデオサイトを使用して初のバーチャルカンファレンスを開催しました。そして、 2 回目のバーチャルカンファレンスとなる今年の RubyKaigi Takeout 2021 では、私たちのニーズにあったバーチャルカンファレンスソリューションを構築し、有料で開催することを決定しました。
自分たちでバーチャル会場を用意するのは参加者に有料のチケットを購入してもらうためでもありますが、RubyKaigi 独自の要件を満たすためにも必要でした。例えば、オフラインの RubyKaigi にもみられるユニークな体験を再現する UI の構築やリアルタイムの日本語から英語への翻訳、英語のみの文字起こし、日本語および英語での共有チャットチャンネルなどです。
RubyKaigi 運営チームのほとんどの仕事は、空いている時間にボランティアとして行われるため、バーチャル会場を作成する時間は限られていました。わたしは業務で主に AWS を利用しているため、AWS に関する専門的な知識と経験があり、AWS サービスは安定したパフォーマンスとコスト効率を達成するのに役立つと感じていたので、AWS サービスを可能な限り使用することに決めました。
ソリューションの概観
RubyKaigi Takeout 2021 の要件を考えたときに幾つかの選択肢が思いつきましたが、最終的には Amazon Chime SDK messaging 、Amazon Interactive Video Service (IVS) 、AWS Elemental MediaLive 、Amazon Transcribe 、Amazon CloudFront を使った構成に決めました。
Amazon Chime SDK messaging を選択したのは、私たちがチャットに求めている機能全てが提供されており、簡単に作り始めることができるからです。他の選択肢は、複雑さ、コスト、統合の難しさに欠点がありました。Amazon Chime SDK が AWS サービスの一部であるということは私にとって非常に重要な意味があります。なぜなら、たとえ Amazon Chime SDK について事前に詳しく知らなかったとしても、その安定性とセキュリティを信頼できるからです。
ライブビデオ配信では、AWS Elemental MediaLive を送出用に、Amazon IVS を配信用に採用しました。AWS Elemental MediaLive はライブビデオと事前に録画されたビデオを切り替えることができ、Amazon IVS には、シンプルな JWT ベースの再生認証と video.js と連携できる最先端の技術が使われた Player SDK for Web があるので、これらのサービスの組み合わせはうまく機能しました。そして、2 つのトラックメインで利用する 2 ライブチャンネルに加え、いずれか 1 トラックに対して翻訳を提供するためのチャンネルで合計 3 つのライブチャンネルを設定しました。
そして、私たちは英語の字幕をつけるために、Amazon Transcribe を Amazon Chime SDK と AWS Elemental MediaLive との連携を構築しました。音声ストリームを MPEG2-TS UDP ストリームとして VPC に送るよう AWS Elemental MediaLive チャンネルを設定して、Amazon Elastic Compute Cloud (EC2) インスタンスで音声ストリームを Amazon Transcribe のストリーミング API に送信、結果を字幕専用の Amazon Chime SDK messaging チャンネルに翻訳結果を送り続けるようにしました。Amazon Transcribe が専門用語を正しく認識できるように、独自のカスタム語彙ファイルを登録しました。
また、Amazon Chime SDK messaging 上のシステムユーザーからのメッセージや、Amazon IVS の埋め込みメタデータを、React の useSWR ライブラリと組み合わせ、更新されたページコンテンツをリアルタイムでプッシュするようにしました。この取り組みによって、API サーバーへのリクエストを減らすことができ、さらに残りのほとんどのリクエストは Amazon CloudFront でキャッシュできます。予測できないオリジンへの負荷に対応するために実装されたこの技術によって、結果的にコスト効率とシステム全体の安定性が向上しました。
API サーバーは Ruby on Rails で構築し、私たちのチームで管理している既存のアプリケーションと運用を統合するため Heroku 上にデプロイしました。
ソリューション
RubyKaigi Takeout 2021 には、25 の国と地域から 1,000 人弱が参加しましたが、バーチャル会場自体のシステム停止や不安定動作は確認されませんでした。
準備段階では、参加者数を見積もる必要がありましたが、バーチャルカンファレンスで参加者の行動を評価するのに十分なデータがなくどれだけトラフィックがあるかは不明瞭でした。Amazon CloudFront 、Amazon IVS 、Amazon Chime SDK for messaging を使うことによって、システムの停止や不安定な挙動なくカンファレンスを、余剰なリソースを確保せず、高いコスト効率で開催することができました。
私たちのバーチャル会場のソースコードは https://github.com/ruby-no-kai/takeout-app で公開されています。
結論
RubyKaigi Takeout 2021 は、Amazon Chime SDK messaging 、Amazon IVS 、AWS Elemental MediaLive 、Amazon Transcribe と Amazon CloudFront で構築された独自のバーチャル会場で開催されました。このバーチャル会場はわずか 14 日間で構築されました。わたしにとって使い慣れていない AWS サービスもありましたが、 AWS Identity Management (IAM) サービス認証や AWS SDK などの一般的な概念と基盤は、バーチャル会場を素早く構築するのに役立ちました。
著者
Sorah Fukumori は、Cookpad の Japan SRE チームと Global Corporate Engineering チームで働くシニアソフトウェアエンジニアです。テックカンファレンス RubyKaigi のオーガナイザーでもあり、趣味で非営利の BGP ネットワークを運用しています。 (Rubyist and Rustacean wannabe.)
翻訳はソリューションアーキテクトの寺山怜志が担当しました。原文はこちらです。