Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story of releasing the Video distribution service in one month using AWS solutions

dehio3
April 27, 2021

AWSソリューションを活用して 1ヶ月で動画配信機能をリリースした話 / The story of releasing the Video distribution service in one month using AWS solutions

dehio3

April 27, 2021
Tweet

More Decks by dehio3

Other Decks in Technology

Transcript

  1. © 2021 CoDMON Inc.
    株式会社コドモン
    AWS Startup Tech Meetup
    Online #4
    AWSソリューションを活用して
    1ヶ月で動画配信機能をリリースした話

    View Slide

  2. © 2021 CoDMON Inc.
    田中 知英  @dehio3
    株式会社コドモン SREチーム
    ● 職歴
    ○ PA(音響屋)からITに転職
    ○ SIer、ASP (アフィリエイト)でインフラ
    ○ 2020年10月にコドモンにJoin
    ● 好きなAWSサービス
    ○ Route53,S3,Lambda
    自己紹介
    2

    View Slide

  3. © 2021 CoDMON Inc.
    agenda
    ● コドモンの紹介
    ● コドモンのシステム構成
    ● AWSソリューションについて
    ● AWSソリューション利用時の課題と対策
    ● まとめ
    3

    View Slide

  4. コドモンの紹介

    View Slide

  5. Mission

    View Slide

  6. 多様な機能で、こども施設で働く先生の働き方改革や


    パパママの子育て支援を行う クラウド型ICTシステム。

    ・保育料支払い支援
    ・こどもの成長管理
    ・写真アルバム
    (※新サービス展開予定)
    など…
    ・成長記録
    ・指導案の記録
    ・保護者との
    コミュニケーション
    など…
     利用者数
    0144,620 名
    利用者数
    698,790 名
    Product
    先生向けの機能 保護者向けの機能

    View Slide

  7. Account
    8,000 施設以上
    で導入開始へ。
    . 4 . 4 . 4 . 4 . 4 . 4 . 4
    8000
    目標達成!

    View Slide

  8. 8
    3月に動画配信機能をリリース
    日頃の子供の様子を写真だ
    けでなく、動画でも保護者
    へ伝えたい
    緊急事態宣言でイベントへ
    の参加できない保護者へ動
    画を見せたい

    View Slide

  9. コドモンのシステム構成

    View Slide

  10. © 2021 CoDMON Inc.
    AWS Cloud
    10
    施設
    保護者
    システム構成概要
    施設向け管理サイト
    保護者向けアプリ

    View Slide

  11. © 2021 CoDMON Inc.
    導入した動画配信機能の要件
    ● 施設から保護者への連絡を行う「お知らせ配信機能」に動画ファイルを添付し
    保護者へ配信したい
    ● 卒園、入園シーズンに施設が活用できるように3月までにリリースする!!
    11
    施設 保護者

    View Slide

  12. © 2021 CoDMON Inc.
    動画配信機能の要件
    ● 「お知らせ一斉配信」という施設から保護者へのお知らせ機能へ添付対象に、
    動画ファイルを追加する
    ● 卒園、入園シーズンで施設が活用できるように3月までにリリースする!!
    12
    施設 保護者
    しかし機能導入に際し課題が・・
    ● コドモンでの動画機能の提供は初めてで、社
    内でのノウハウがない!
    ● スピード重視だが、IaCを推進しているため、
    AWSコンソールから手動作成だけは避けた
    い!

    View Slide

  13. AWSソリューション

    View Slide

  14. © 2021 CoDMON Inc. 14
    AWSソリューション
    https://aws.amazon.com/jp/solutions

    View Slide

  15. © 2021 CoDMON Inc.
    AWSソリューション
    15
    構成概要の説明
    CFnテンプレートと
    ソースコードが提供

    View Slide

  16. © 2021 CoDMON Inc. 16
    AWSソリューション/ビデオオンデマンド
    ビデオオンデマンドソリューションの実装

    View Slide

  17. © 2021 CoDMON Inc. 17
    AWSソリューション/ビデオオンデマンド
    ビデオオンデマンドソリューションの実装
    「Video on Demand on AWS」を利用

    View Slide

  18. © 2021 CoDMON Inc. 18
    AWSソリューション/Video on Demand on AWS
    選定理由①
    AWS Step Functionsにて処理を制御し
    ている為、処理のカスタマイズが可能

    View Slide

  19. © 2021 CoDMON Inc. 19
    AWSソリューション/Video on Demand on AWS
    選定理由②
    DynamoDBに情報を保存する構成の為、アプ
    リケーションから動画の情報を参照可能

    View Slide

  20. © 2021 CoDMON Inc.
    ビデオオンデマンドCFnテンプレートで作成
    AWS Cloud
    20
    施設
    保護者
    動画配信構成イメージ

    View Slide

  21. © 2021 CoDMON Inc.
    ビデオオンデマンドCFnテンプレートで作成
    AWS Cloud
    21
    施設
    保護者
    動画配信構成予想図
    しかし、
    プロダクトで利用するにはいくつかの課題が・・

    View Slide

  22. AWSソリューション利用時の課題と対策

    View Slide

  23. © 2021 CoDMON Inc.
    AWS Cloud
    23
    施設
    保護者
    動画配信構成予想図
    課題①
    無音動画が配信できない

    View Slide

  24. © 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

    View Slide

  25. © 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



    View Slide

  26. © 2021 CoDMON Inc.
    課題①無音動画が配信できない
    ● 対策
    ○ encode処理のLambda(nodejs)を修正
    ■ DynamoDBのmediainfo解析情報から音声データの情報を取得
    ■ 音声データ有無でJobTemplateから「AudioSelectors」を削除
    26

    View Slide

  27. © 2021 CoDMON Inc.
    AWSソリューションでは、テストコードも提供されている為、
    修正とテストのハードルが低いのが利点!!
    source/encode
    ├── index.js ←コードを修正
    ├── lib
    │ ├── error.js
    │ └── index.spec.js ←テストコード
    └── package.json
    課題①無音動画が配信できない
    ● 対策
    ○ encode処理のLambda(nodejs)を修正
    ■ DynamoDBのmediainfo解析情報から音声データの情報を取得
    ■ 音声データ有無でJobTemplateから「AudioSelectors」を削除
    27

    View Slide

  28. © 2021 CoDMON Inc.
    AWS Cloud
    28
    施設
    保護者
    動画配信構成予想図
    課題②
    動画コンテンツへのアクセス制限がない

    View Slide

  29. © 2021 CoDMON Inc.
    課題②動画コンテンツへのアクセス制限がない
    ● 課題
    ○ 動画はプライベートコンテンツの為アクセスを制限したいが、URLを知っ
    ていれば誰でも動画を視聴することができてしまう
    ● AWSソリューションの実装
    ○ CloudFront経由でS3のファイルを配信しているが、CloudFrontでのアク
    セス制限機能は設定されていない
    29

    View Slide

  30. © 2021 CoDMON Inc.
    課題②動画コンテンツへのアクセス制限がない
    ● 対策
    ○ CloudFrontの署名付きアクセス機能を利用
    ○ HLS形式は動画ファイルが複数に分割されるので、「署名付きURL」では
    なく「署名付き Cookie」によるアクセス制限を実装
    30
    署名付き URL と署名付き Cookie の選択

    View Slide

  31. © 2021 CoDMON Inc.
    課題②動画コンテンツへのアクセス制限がない
    ● 対策
    ○ CloudFrontの署名付きアクセス機能を利用
    ○ HLS形式は動画ファイルが複数に分割されるので、「署名付きURL」では
    なく「署名付き Cookie」によるアクセス制限を実装
    31
    署名付き URL と署名付き Cookie の選択
     アプリケーションの実装上の問題で、Cookieを保持できない事が発覚!!

    View Slide

  32. © 2021 CoDMON Inc.
    課題②動画コンテンツへのアクセス制限がない
    ● 対策2
    [email protected]で署名付きURLのレスポンスを動的に返す
    ○ プレイリスト(.m3u8)への署名付きURLリクエストを[email protected]で受
    け、動画ファイル(.ts)情報に署名情報を追加したレスポンスを返す
    32
    [email protected]
    署名付き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=*****

    View Slide

  33. © 2021 CoDMON Inc.
    AWS Cloud
    33
    施設
    保護者
    動画配信構成予想図
    課題③
    イベントの通知

    View Slide

  34. © 2021 CoDMON Inc.
    課題③イベントの通知
    ● 課題
    ○ イベントとエラーの通知先がメールなので可読性が悪い
    ● AWSソリューションの実装
    ○ SNSのサブスクリプションとしてEメールが使用
    ○ CFnテンプレート実行時に指定したアドレスが登録
    34

    View Slide

  35. © 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/

    View Slide

  36. © 2021 CoDMON Inc.
    課題③イベントの通知
    ● 対応②
    ○ サブスクリプション先にDatadogイベントストリームを追加
    ○ イベントの文言からエラーイベントを監視通知
    36
    Datadogにも同じイベント飛ばす理由
    - サービス監視はDatadogに集約
    - サービス全体のリソースとの相関把握

    View Slide

  37. © 2021 CoDMON Inc.
    AWS Cloud
    37
    施設
    保護者
    動画配信構成予想図
    課題④
    インフラのコード管理

    View Slide

  38. © 2021 CoDMON Inc.
    課題④インフラのコード管理
    ● 課題
    ○ コドモンは本番、ステージ、開発の3環境で運用している
    ○ 既存インフラは「Terraform」+「GitHub Actions」でデプロイを自動化
    しており、CFnでも同様にデプロイまで自動化したい
    ● AWSソリューションの実装
    ○ ビルドシェル(build-s3-dist.sh)が提供
    ○ S3へアップロードするCFnテンプレートの生成と、Lambdaコードのアー
    カイブファイル群を生成
    38

    View Slide

  39. © 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

    View Slide

  40. © 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://_paramter.json
    video-on-demand-on-aws
    .template

    View Slide

  41. © 2021 CoDMON Inc.
    deploy.sh
    ①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
    _parameter.json

    View Slide

  42. © 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

    View Slide

  43. © 2021 CoDMON Inc. 43
    最終的な構成

    View Slide

  44. © 2021 CoDMON Inc.
    AWS Cloud
    44
    [email protected]
    施設
    保護者
    動画配信リリース時構成図

    View Slide

  45. © 2021 CoDMON Inc.
    AWS Cloud
    45
    施設
    保護者
    動画配信構成イメージ

    View Slide

  46. © 2021 CoDMON Inc.
    AWS Cloud
    46
    [email protected]
    施設
    保護者
    動画配信リリース時構成図

    View Slide

  47. まとめ

    View Slide

  48. © 2021 CoDMON Inc. 48
    まとめ
    AWSソリューションは開発速度を早めるのに最適なツール
    ● テストコードも用意されてるので、テスト実装が容易できる
    ● CFnテンプレートで提供されているのIaC、CI/CDも実装しやすい
    ● 初学者向けの学習用途としても活用できる
     今後のAWSソリューションの拡大に期待!ぜひ活用していきましょう!

    View Slide

  49. ご清聴、ありがとうございました。
    あらたな仲間も絶賛募集中です。

    View Slide