Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

S3とSNSで動画機能をつくる話

4,724 views

Published on

AWS S3 と SNSを使って動画機能(大きなバイナリのアップロード)を実現する話
Timers inc CTO
椎名アマド

Published in: Engineering
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

S3とSNSで動画機能をつくる話

  1. 1. S3とSNSで動画機能をつくる話 株式会社Timers CTO 椎名アマド
  2. 2. 椎名アマド 株式会社Timers Co-founder & CTO 28歳 趣味:サバゲー、PS4(FPS, Minecraft)、映画 創業: 2012/05
  3. 3. カップル専用アプリ Pairy
  4. 4. 子育て夫婦アプリ Famm
  5. 5. https://aws.amazon.com/jp/solutions/case-studies/timers/
  6. 6. 動画のはなし
  7. 7. 今までのバイナリ(写真)の投稿方法
  8. 8. Client Server AWS S3DB HTTP Req: Upload * [binary file] * [metadata] save [metadata] save [binary file] HTTP Response
  9. 9. バイナリが Client -> App -> S3 と 二度転送されるのはムダ (特に動画みたいな大きなバイナリの場合)
  10. 10. 直接ClientからS3にアップロードしよう
  11. 11. S3.putObject() SNS Notification (HTTP) S3 MetaData STS.getFederationToken() バイナリをS3にアップロード メタデータを渡したいから、 putObject()時にくっつける putObject()が完了したら AppにHTTP経由で通知 Clientに直接認証情報を 置かなくていいようにトークン発行 必要なもの
  12. 12. Client Server AWS S3DB save [metadata] S3 PutObject [binary file] (with metadata) [token] HTTP Req: getToken SNS notification [metadata] Push Notification
  13. 13. $result = $s3->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ContentType' => ‘video/mp4‘, 'ACL' => ‘private’, 'Metadata' => array( ‘video_date' => 1326190210, ) )); Client:メタデータ付きでputObject
  14. 14. S3:putObject()したらSNS通知
  15. 15. $head = $this->client->headObject(array( 'Bucket' => $bucket, 'Key' => $object )); $meta_data = $head['Metadata']; $video_date = $meta_data['video_date']; /* insert into DB */ $sql = “INSERT INTO video SET object_path=‘$object’, video_date=‘$video_date’”; $mysqli->query($sql); SNS通知されたRequest: メタデータを拾って、それをDBに保存
  16. 16. $policy = array( 'Statement' => array( 'Sid'=> ‘user1’, ’Effect'=>'Allow', 'Action'=> ‘s3:putObject’, ‘Resource’=> ‘arn:aws:s3:::bucket/user1/*’ )); $result = $sts->getFederationToken(array( 'Name'=> user1’, 'DurationSeconds' => 3600, 'Policy'=> json_encode($policy) )); Federation Token: 対象ユーザーのディレクトリ以下のみに putObject権限を付与
  17. 17. アップロード完了!
  18. 18. Client Server AWS S3DB save [metadata] S3 PutObject [binary file] (with metadata) [token] HTTP Req: getToken SNS notification [metadata] Push Notification
  19. 19. 動画投稿まわりで他に考えたところ
  20. 20. private objectには、 preSignedUrlを生成してアクセス 動画閲覧
  21. 21. 動画本体と全く同じロジック ※どの動画のサムネイルかがわかるように、 MetaDataに動画固有hashを追加 動画サムネイル
  22. 22. multipart-uploadはSNS通知が 個別でバラバラに来るから注意 ※サムネイルと同じくhashを追加することで 同一の動画であることを判別 multipart-upload
  23. 23. Thank you

×