s3とsnsで動画機能をつくる話

23
S3 と SNS とととととととととと とととと Timers CTO ととととと

Upload: ahmad-shiina

Post on 11-Jan-2017

4.189 views

Category:

Engineering


0 download

TRANSCRIPT

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

S3 と SNS で動画機能をつくる話株式会社 Timers CTO椎名アマド

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

椎名アマド株式会社 Timers Co-founder & CTO 28 歳趣味:サバゲー、 PS4(FPS, Minecraft) 、映画創業: 2012/05

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

カップル専用アプリ Pairy

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

子育て夫婦アプリ Famm

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

https://aws.amazon.com/jp/solutions/case-studies/timers/

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

動画のはなし

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

今までのバイナリ(写真)の投稿方法

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

Client Server AWS S3DB

HTTP Req: Upload* [binary file]* [metadata]

save [metadata]

save [binary file]

HTTP Response

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

バイナリが Client -> App -> S3 と二度転送されるのはムダ(特に動画みたいな大きなバイナリの場合)

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

直接 Client から S3 にアップロードしよう

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

S3.putObject()

SNS Notification (HTTP)

S3 MetaData

STS.getFederationToken()

バイナリを S3 にアップロード

メタデータを渡したいから、putObject() 時にくっつける

putObject() が完了したらApp に HTTP 経由で通知

Client に直接認証情報を置かなくていいようにトークン発行

必要なもの

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

Client Server AWS S3DB

save [metadata]

S3 PutObject [binary file] (with metadata)

[token]HTTP Req: getToken

SNS notification[metadata]

Push Notification

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

$result = $s3->putObject(array( 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ContentType' => ‘video/mp4‘, 'ACL' => ‘private’, 'Metadata' => array( ‘video_date' => 1326190210, )));

Client :メタデータ付きで putObject

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

S3 : putObject() したら SNS 通知

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

$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 に保存

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

$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 権限を付与

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

アップロード完了!

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

Client Server AWS S3DB

save [metadata]

S3 PutObject [binary file] (with metadata)

[token]HTTP Req: getToken

SNS notification[metadata]

Push Notification

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

動画投稿まわりで他に考えたところ

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

private object には、preSignedUrl を生成してアクセス

動画閲覧

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

動画本体と全く同じロジック※ どの動画のサムネイルかがわかるように、MetaData に動画固有 hash を追加

動画サムネイル

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

multipart-upload は SNS 通知が個別でバラバラに来るから注意※ サムネイルと同じく hash を追加することで同一の動画であることを判別

multipart-upload

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

Thank you