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
280
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
940
Other Decks in Technology
See All in Technology
Deep Data Security 機能解説
oracle4engineer
PRO
2
120
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
110
自宅LLMの話
jacopen
1
720
Lightning近況報告
kozy4324
0
220
AIチャット検索改善の3週間
kworkdev
PRO
2
170
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
200
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
0
140
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
190
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
470
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
130
入門!AWS Blocks
ysuzuki
1
190
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
770
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
190
Mind Mapping
helmedeiros
PRO
1
260
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Building AI with AI
inesmontani
PRO
1
1.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
400
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Believing is Seeing
oripsolob
1
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Code Review Best Practice
trishagee
74
20k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Cult of Friendly URLs
andyhume
79
6.9k
Discover your Explorer Soul
emna__ayadi
2
1.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ソリューションの拡大に期待!ぜひ活用していきましょう!
ご清聴、ありがとうございました。 あらたな仲間も絶賛募集中です。