flvファイルをS3へアーカイブ

#はじめに
streampackのメンバーになって2ヶ月目のrisakoです。
今回の記事は、理解に苦しんだ仕組みの一つである「S3へのアーカイブ」をテーマにしました！
これから、S3で動画配信をしてみたいと思っている方のヒントになれば幸いです。

#S3とは？

S3 は`Simple Storage Service` の略称のことをいう。
クラウド型オブジェクトストレージサービスで、東京リージョン・スタンダードストレージの場合、1GBあたり0.025ドルで利用できる。
公式には99.999999999%の耐久性で、安さと高可用性を兼ね備えている。

###イメージ

今回は、点線で囲まれている部分について説明します。

![s３.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/98d97cbb-5f2d-a2fd-d708-03887b672eb4.jpeg)

出典：https://qiita.com/khagi/items/1e88f21b027b115a4ac7

#nginx.confの編集

flvファイルを作成できるようにnginx.conf内に追記する。
下記の設定をすることで、flvファイルを作成できるようになる。


```
                application live {
                        live on;
                        record all;
                        record_path /var/video_recordings_flv;
　　　　　　　　　　　　　　 record_unique on;
                 }
```

今回の設定では
`record all` オーディオ、ビデオ共に全てをレコードする
`record_path` flvファイルの場所を指定する。今回は、`/var/video_recordings_flv`にflvファイルが保存されるように指定。
`record_unique on`常に新しい状態のファイルに更新される設定。デフォルトではoffになっている。

###確認
OBSで配信した動画ファイルが指定した場所に作成できているか確認する。

```
#ls -l /var/video_recordings_flv/
total 6144
-rw-r--r-- 1 nobody nobody 6289402 Jul 17 19:09 test-1563416738.flv
```
作成できているので、このファイルをS3にアップロードする。

#S3へのアップロード

AWS CLI でアップロードを行う。
事前準備として、`#aws configure` でアクセスキー・シークレットキー・リージョン名・出力形式を入力する。この作業をしていないと、`Unable to locate credentials. You can configure credentials by running "aws configure".`このようなエラーで怒られてしまうので注意。

###確認
OBSで配信し、指定の場所に作成できているflvファイルをaws s3コマンドでアップロードしてみる。
作成されているflvファイルが`test-1563416738.flv`なので、まずは、これをアップロードしてみる。

```
＃aws s3 cp test-1563416738.flv s3://<S3バケット名>/
```


【S3上でアップロードがされているか確認する】
![スクリーンショット 2019-07-18 12.06.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/a92ce9ab-dbf9-66e8-ae08-06d9e094ce51.png)

##incrontabを使ってアップロードする

|作業|コマンド|
|---|---|
|インストール|yum --enablerepo=epel install incron|
|起動|/etc/init.d/incrond start|
|停止|/etc/init.d/incrond stop|


###スクリプト作成

スクリプトに書き込むための権限変更を行います。

```
#chmod 755 aws_test.sh

#ls -l
total 4
-rwxr-xr-x 1 root root    0 Jul 18 14:54 aws_test.sh
```

　　　
作成したスクリプト内を変更。

```

#!/bin/bash

aws s3 sync /var/video_recordings_flv s3://<S3バケット名>/
```

反映させます。

```
#aws_test.sh
```

###incrontab設定


```
#incrontab -e

/var/video_recordings_flv IN_MOVED_TO,IN_CREATE,IN_CLOSE_WRITE,IN_NO_LOOP /root/bin/aws_test.sh


#incrontab -d 


#incrontab -l
/var/video_recordings_flv IN_CREATE,IN_CLOSE_WRITE,IN_MOVED_TO,IN_NO_LOOP /root/bin/aws_test.sh
```

##OBSで配信・確認


```
#tail -f /var/log/cron 

Jul 18 17:17:23 ip-10-15-0-165 incrond[4135]: (root) CMD (/root/bin/aws_test.sh)


#ls /var/video_recordings_flv/
test-1563358109.flv  test-1563419519.flv  test-1563433417.flv  test-1563437843.flv
```

###S3上での確認

![スクリーンショット 2019-07-18 17.20.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/15a8683a-22e3-b819-6d3b-4f51250c30ee.png)

`/var/video_recording_flv/` の配下に作成されているflvファイル名と、S3上にアップロードされているファイル名が一致していることから、正しくアップロードできていることが確認できます。


#最後に

S3へのアーカイブは手順さえ理解してしまえば、簡単にアーカイブできるということがわかりました。
これからS3を駆使してstreampackのメンバーとして頑張っていきます！

#参考
「HLSライブストリーミングサーバーs3配信」
https://qiita.com/khagi/items/1e88f21b027b115a4ac7

「AWS CLIでS3を操作するコマンド一覧」
https://qiita.com/uhooi/items/48ef6ef2b34162988295