Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story of releasing the Video distribution service in one month using AWS solutions
dehio3
April 27, 2021
Technology
1
990
AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story of releasing the Video distribution service in one month using AWS solutions
dehio3
April 27, 2021
Tweet
Share
More Decks by dehio3
See All by dehio3
GitHub Actionsで Terraformをplan&applyしてみた / I tried to plan and apply Terraform with GitHub Actions
tomohide_tanaka
5
3.3k
CircleCI Server運用のポイント / Point of CirlceCI Server operation
tomohide_tanaka
1
390
CircleCI_Serverの利用状況を可視化した話 / CircleCI Server Visualization of usage status
tomohide_tanaka
0
470
Other Decks in Technology
See All in Technology
Oracle Content Management サービス概要 (2022年5月版)
oracle4engineer
PRO
0
120
成長を続ける組織でのSRE戦略:プレモーテムによる信頼性の認識共有 SRE Next 2022
niwatakeru
7
2.7k
Unity Package Managerで自作パッケージを配布する方法
yunoda
0
200
Graph API について
miyakemito
0
290
Steps toward self-service operations in eureka
fukubaka0825
0
740
Poolにおける足を止めないシステム基盤構築
winebarrel
3
940
プロダクトグロースと技術のベースアップを両立させるRettyのアプリ開発スタイル / Achieve Product Growth and Tech Update
imaizume
1
290
Puny to Powerful PostgreSQL Rails Apps
andyatkinson
PRO
0
350
CTOのためのQAのつくりかた #scrumniigata / SigSQA How to create QA for CTOs and VPoEs
caori_t
0
310
BFFとmicroservicesアーキテクチャ
hirac1220
0
110
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
0
600
OSINT/GEOINT ワークショップ 20220514 古橋資料
furuhashilab
2
310
Featured
See All Featured
Pencils Down: Stop Designing & Start Developing
hursman
112
9.8k
Web Components: a chance to create the future
zenorocha
303
40k
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
Why You Should Never Use an ORM
jnunemaker
PRO
47
5.5k
Building a Scalable Design System with Sketch
lauravandoore
447
30k
Building Adaptive Systems
keathley
25
1.1k
Docker and Python
trallard
27
1.5k
Statistics for Hackers
jakevdp
781
210k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
920
The Invisible Side of Design
smashingmag
289
48k
Producing Creativity
orderedlist
PRO
333
37k
Visualization
eitanlees
124
11k
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ソリューションの拡大に期待!ぜひ活用していきましょう!
ご清聴、ありがとうございました。 あらたな仲間も絶賛募集中です。