Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story ...
Search
dehio3
April 27, 2021
Technology
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story of releasing the Video distribution service in one month using AWS solutions
dehio3
April 27, 2021
More Decks by dehio3
See All by dehio3
とっ散らかったログバケットを S3バッチオペレーションで整理整頓 / Organizing disordered log buckets using S3 Batch Operations
tomohide_tanaka
0
290
40代エンジニアの生活の変化とキャリアの歩み
tomohide_tanaka
0
1.6k
GitHub Actionsで Terraformをplan&applyしてみた / I tried to plan and apply Terraform with GitHub Actions
tomohide_tanaka
6
6.4k
CircleCI Server運用のポイント / Point of CirlceCI Server operation
tomohide_tanaka
1
660
CircleCI_Serverの利用状況を可視化した話 / CircleCI Server Visualization of usage status
tomohide_tanaka
0
950
Other Decks in Technology
See All in Technology
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
Retriever と Reranker、結局どうする?
kazuaki
2
670
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
440
20260801_スクフェス大阪
kgnkhkr
1
1.2k
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
320
Digitization部 紹介資料
sansan33
PRO
2
7.7k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
520
新しい SLO が良い感じにハマっている話
z63d
4
2.1k
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
470
TypeScript入門 2026
recruitengineers
PRO
1
330
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
330
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Utilizing Notion as your number one productivity tool
mfonobong
4
510
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Accessibility Awareness
sabderemane
1
170
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
680
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Music & Morning Musume
bryan
47
7.3k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Transcript
© 2021 CoDMON Inc. 株式会社コドモン AWS Startup Tech Meetup Online
#4 AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話
© 2021 CoDMON Inc. 田中 知英 @dehio3 株式会社コドモン SREチーム •
職歴 ◦ PA(音響屋)からITに転職 ◦ SIer、ASP (アフィリエイト)でインフラ ◦ 2020年10月にコドモンにJoin • 好きなAWSサービス ◦ Route53,S3,Lambda 自己紹介 2
© 2021 CoDMON Inc. agenda • コドモンの紹介 • コドモンのシステム構成 •
AWSソリューションについて • AWSソリューション利用時の課題と対策 • まとめ 3
コドモンの紹介
Mission
多様な機能で、こども施設で働く先生の働き方改革や パパママの子育て支援を行う クラウド型ICTシステム。 ・保育料支払い支援 ・こどもの成長管理 ・写真アルバム (※新サービス展開予定) など…
・成長記録 ・指導案の記録 ・保護者との コミュニケーション など… 利用者数 0144,620 名 利用者数 698,790 名 Product 先生向けの機能 保護者向けの機能
Account 8,000 施設以上 で導入開始へ。 . 4 . 4 . 4
. 4 . 4 . 4 . 4 8000 目標達成!
8 3月に動画配信機能をリリース 日頃の子供の様子を写真だ けでなく、動画でも保護者 へ伝えたい 緊急事態宣言でイベントへ の参加できない保護者へ動 画を見せたい
コドモンのシステム構成
© 2021 CoDMON Inc. AWS Cloud 10 施設 保護者 システム構成概要
施設向け管理サイト 保護者向けアプリ
© 2021 CoDMON Inc. 導入した動画配信機能の要件 • 施設から保護者への連絡を行う「お知らせ配信機能」に動画ファイルを添付し 保護者へ配信したい • 卒園、入園シーズンに施設が活用できるように3月までにリリースする!!
11 施設 保護者
© 2021 CoDMON Inc. 動画配信機能の要件 • 「お知らせ一斉配信」という施設から保護者へのお知らせ機能へ添付対象に、 動画ファイルを追加する • 卒園、入園シーズンで施設が活用できるように3月までにリリースする!!
12 施設 保護者 しかし機能導入に際し課題が・・ • コドモンでの動画機能の提供は初めてで、社 内でのノウハウがない! • スピード重視だが、IaCを推進しているため、 AWSコンソールから手動作成だけは避けた い!
AWSソリューション
© 2021 CoDMON Inc. 14 AWSソリューション https://aws.amazon.com/jp/solutions
© 2021 CoDMON Inc. AWSソリューション 15 構成概要の説明 CFnテンプレートと ソースコードが提供
© 2021 CoDMON Inc. 16 AWSソリューション/ビデオオンデマンド ビデオオンデマンドソリューションの実装
© 2021 CoDMON Inc. 17 AWSソリューション/ビデオオンデマンド ビデオオンデマンドソリューションの実装 「Video on Demand
on AWS」を利用
© 2021 CoDMON Inc. 18 AWSソリューション/Video on Demand on AWS
選定理由① AWS Step Functionsにて処理を制御し ている為、処理のカスタマイズが可能
© 2021 CoDMON Inc. 19 AWSソリューション/Video on Demand on AWS
選定理由② DynamoDBに情報を保存する構成の為、アプ リケーションから動画の情報を参照可能
© 2021 CoDMON Inc. ビデオオンデマンドCFnテンプレートで作成 AWS Cloud 20 施設 保護者
動画配信構成イメージ
© 2021 CoDMON Inc. ビデオオンデマンドCFnテンプレートで作成 AWS Cloud 21 施設 保護者
動画配信構成予想図 しかし、 プロダクトで利用するにはいくつかの課題が・・
AWSソリューション利用時の課題と対策
© 2021 CoDMON Inc. AWS Cloud 23 施設 保護者 動画配信構成予想図
課題① 無音動画が配信できない
© 2021 CoDMON Inc. 課題①無音動画が配信できない • 課題 ◦ 無音動画アップロードすると処理がエラーになり配信できない 24
mediaconvert.createJob • AWSソリューションの実装 ◦ MediaConvertのJobTemplateはLambdaで生成 ◦ Inputsに「AudioSelectors」で固定で記述 ◦ 音声データ存在する前提になっている 入力元,出力先のS3バケットや動画の出力形式などをJSONで指定 https://github.com/awslabs/video-on-demand-on-aws/blob/master/source/encode/index.js
© 2021 CoDMON Inc. 課題①無音動画が配信できない • 解決策を探るために前段の取り込み処理を調査 1. S3のイベントからオブジェクトのパス情報などを取得 2.
mediainfoにてアップロードされた動画ファイルを解析 3. 解析データをDynamoDBへ保存 25 https://github.com/awslabs/video-on-demand-on-aws/blob/master/source/mediainfo/lambda_function.py ① ② ③
© 2021 CoDMON Inc. 課題①無音動画が配信できない • 対策 ◦ encode処理のLambda(nodejs)を修正 ▪
DynamoDBのmediainfo解析情報から音声データの情報を取得 ▪ 音声データ有無でJobTemplateから「AudioSelectors」を削除 26
© 2021 CoDMON Inc. AWSソリューションでは、テストコードも提供されている為、 修正とテストのハードルが低いのが利点!! source/encode ├── index.js ←コードを修正
├── lib │ ├── error.js │ └── index.spec.js ←テストコード └── package.json 課題①無音動画が配信できない • 対策 ◦ encode処理のLambda(nodejs)を修正 ▪ DynamoDBのmediainfo解析情報から音声データの情報を取得 ▪ 音声データ有無でJobTemplateから「AudioSelectors」を削除 27
© 2021 CoDMON Inc. AWS Cloud 28 施設 保護者 動画配信構成予想図
課題② 動画コンテンツへのアクセス制限がない
© 2021 CoDMON Inc. 課題②動画コンテンツへのアクセス制限がない • 課題 ◦ 動画はプライベートコンテンツの為アクセスを制限したいが、URLを知っ ていれば誰でも動画を視聴することができてしまう
• AWSソリューションの実装 ◦ CloudFront経由でS3のファイルを配信しているが、CloudFrontでのアク セス制限機能は設定されていない 29
© 2021 CoDMON Inc. 課題②動画コンテンツへのアクセス制限がない • 対策 ◦ CloudFrontの署名付きアクセス機能を利用 ◦
HLS形式は動画ファイルが複数に分割されるので、「署名付きURL」では なく「署名付き Cookie」によるアクセス制限を実装 30 署名付き URL と署名付き Cookie の選択
© 2021 CoDMON Inc. 課題②動画コンテンツへのアクセス制限がない • 対策 ◦ CloudFrontの署名付きアクセス機能を利用 ◦
HLS形式は動画ファイルが複数に分割されるので、「署名付きURL」では なく「署名付き Cookie」によるアクセス制限を実装 31 署名付き URL と署名付き Cookie の選択 アプリケーションの実装上の問題で、Cookieを保持できない事が発覚!!
© 2021 CoDMON Inc. 課題②動画コンテンツへのアクセス制限がない • 対策2 ◦ Lambda@Edgeで署名付きURLのレスポンスを動的に返す ◦
プレイリスト(.m3u8)への署名付きURLリクエストをLambda@Edgeで受 け、動画ファイル(.ts)情報に署名情報を追加したレスポンスを返す 32 lambda@Edge 署名付きURL *.m3u8?Policy=***** .m3u8 .ts #EXTINF:40, 6049e3a17174c_720p_30Hz_2.0Mbps_00001.ts? #EXTINF:30, 6049e3a17174c_720p_30Hz_2.0Mbps_00002.ts? プレイリスト取得 動画ファイル取得 #EXTINF:40, 6049e3a17174c_720p_30Hz_2.0Mbps_00001.ts?Policy=***** #EXTINF:30, 6049e3a17174c_720p_30Hz_2.0Mbps_00002.ts?Policy=***** *.ts?Policy=*****
© 2021 CoDMON Inc. AWS Cloud 33 施設 保護者 動画配信構成予想図
課題③ イベントの通知
© 2021 CoDMON Inc. 課題③イベントの通知 • 課題 ◦ イベントとエラーの通知先がメールなので可読性が悪い •
AWSソリューションの実装 ◦ SNSのサブスクリプションとしてEメールが使用 ◦ CFnテンプレート実行時に指定したアドレスが登録 34
© 2021 CoDMON Inc. 課題③イベントの通知 • 対応① ◦ slack通知用のLambdaを作成し、サブスクリプション先に追加 ◦
必要な情報のみを整形して通知 ◦ Slackで他部署もサービス利用状況を把握 35 https://aws.amazon.com/jp/about-aws/whats-new/2021/04/aws-chatbot-now-expa nds-coverage-of-aws-services-monitored-through-amazon-eventbridge/
© 2021 CoDMON Inc. 課題③イベントの通知 • 対応② ◦ サブスクリプション先にDatadogイベントストリームを追加 ◦
イベントの文言からエラーイベントを監視通知 36 Datadogにも同じイベント飛ばす理由 - サービス監視はDatadogに集約 - サービス全体のリソースとの相関把握
© 2021 CoDMON Inc. AWS Cloud 37 施設 保護者 動画配信構成予想図
課題④ インフラのコード管理
© 2021 CoDMON Inc. 課題④インフラのコード管理 • 課題 ◦ コドモンは本番、ステージ、開発の3環境で運用している ◦
既存インフラは「Terraform」+「GitHub Actions」でデプロイを自動化 しており、CFnでも同様にデプロイまで自動化したい • AWSソリューションの実装 ◦ ビルドシェル(build-s3-dist.sh)が提供 ◦ S3へアップロードするCFnテンプレートの生成と、Lambdaコードのアー カイブファイル群を生成 38
© 2021 CoDMON Inc. build-s3-dist.sh 課題④インフラのコード管理 • ビルドシェル(build-s3-dist.sh)を利用したデプロイの流れ ◦ CFnテンプレート内のバケット名やリソースのプレフィックなどを、ユー
ザーの指定した値に置換したCFnテンプレートを作成 39 video-on-demand-on-aws .template video-on-demand-on-aws. yaml copy & sed create package S3 upload create stack 以下は手動 ・S3アップロード ・スタックの作成 https://github.com/awslabs/video-on-demand-on-aws/blob/master/deployment/build-s3-dist.sh
© 2021 CoDMON Inc. 課題④インフラのコード管理 • 対応①環境固有の値をパラメータ化し複数環境対応 ◦ CloudFrontの「PublicKeyId」や「Aliases」などいくつか固有値が発生 ◦
パラメータとして定義することで、スタック作成時に動的に値を渡せるよ うに修正 40 create stack dev_parameter.json dev create stack dev_parameter.json stg create stack prd_parameter.json prd $ aws cloudformation deploy --parameter-overrides file://<env>_paramter.json video-on-demand-on-aws .template
© 2021 CoDMON Inc. deploy.sh <env> ①build-s3-dist.sh 課題④インフラのコード管理 • 対応②deploy.shの作成
◦ 一連の処理を実行するシェルを作成 ◦ 引数に環境名を与えることで、呼び出すパラメータを変更 41 video-on-demand-on-aws .template video-on-demand-on-aws. yaml copy & sed create package ②aws s3 cp ③aws cloudformation deploy <env>_parameter.json
© 2021 CoDMON Inc. 課題④インフラのコード管理 • 対応③CI/CD対応 ◦ CircleCIにてdeploy.shを実行するワークフローを定義 ◦
ブランチ毎に環境変数を定義し環境毎に自動デプロイ 42 deploy.sh develop staging production dev stg prd $dev $stg $prd workflows: version: 2 build-flow: jobs: - deploy: filters: branches: only: develop context: - aws-dev-circleci - slack-notice - deploy: filters: branches: only: staging context: - aws-stg-circleci - slack-notice - deploy: filters: branches: only: main context: - aws-prd-circleci - slack-notice
© 2021 CoDMON Inc. 43 最終的な構成
© 2021 CoDMON Inc. AWS Cloud 44 lambda@Edge 施設 保護者
動画配信リリース時構成図
© 2021 CoDMON Inc. AWS Cloud 45 施設 保護者 動画配信構成イメージ
© 2021 CoDMON Inc. AWS Cloud 46 lambda@Edge 施設 保護者
動画配信リリース時構成図
まとめ
© 2021 CoDMON Inc. 48 まとめ AWSソリューションは開発速度を早めるのに最適なツール • テストコードも用意されてるので、テスト実装が容易できる •
CFnテンプレートで提供されているのIaC、CI/CDも実装しやすい • 初学者向けの学習用途としても活用できる 今後のAWSソリューションの拡大に期待!ぜひ活用していきましょう!
ご清聴、ありがとうございました。 あらたな仲間も絶賛募集中です。