AWS MediaStore ライフサイクルポリシーで要らんファイルはサヨウナラ

# 2019/11/7追記

2019/10 に `seconds_since_create` が追加された模様

https://docs.aws.amazon.com/ja_jp/mediastore/latest/ug/policies-object-lifecycle-components.html

---



早いものでもう3月もおしまいですね。
年度末ですよ奥さん！
streampack の木村です。


去年の暮れの話ですが、ファイル削除に難がある MediaStore にライフサイクルポリシーが実装されました。
これにより指定した日数経過後に残ったファイル達を勝手に消去してくれます。

**AWS Elemental MediaStore が削除ライフサイクルポリシーをサポート**

https://aws.amazon.com/jp/about-aws/whats-new/2018/12/aws-elemental-mediastore-now-supports-delete-lifecycle-policies/



それでは早速コンテナ `test1` 配下のサブフォルダー `destA` と `destB` 配下のファイルを作成後24時間（1日）で消す設定を入れてみようと思います。

<img width="1126" alt="スクリーンショット 2019-03-19 14.36.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/0c625402-5c6b-d9ae-43ab-0490a207348f.png">


# やり方

<font color="Red">どうやらマネージメントコンソール上からは設定できない模様。</font>
AWS CLI の `MediaStore` コマンドで実施します。

ただし、AWS CLI v2 はなぜか mediastore コマンドの `put-lifecycle-policy` が実装されておりません。（2019/3/19 現在）


```
$ aws --version
aws-cli/2.0.0dev0 Python/2.7.10 Darwin/17.7.0 botocore/1.12.48


MEDIASTORE()                                                      MEDIASTORE()



NAME
       mediastore -

DESCRIPTION
       An AWS Elemental MediaStore container is a namespace that holds folders
       and objects. You use a container endpoint to create, read,  and  delete
       objects.

AVAILABLE COMMANDS
       o create-container

       o delete-container

       o delete-container-policy

       o delete-cors-policy

       o describe-container

       o get-container-policy

       o get-cors-policy

       o help

       o list-containers

       o put-container-policy

       o put-cors-policy



                                                                  MEDIASTORE()
```

なので v1 (1.16.126) でやります！

## Life Cycle Policy ファイル作成

ライフサイクルポリシーファイルをテキストで作成します。
ファイル名は何でも可。

```LiveEventsLifecyclePolicy.json
{
    "rules": [
         {
            "definition": {
                "path": [
                    {"prefix": "destA/"},
                    {"prefix": "destB/"}
                ],
                "days_since_create": [
                    {"numeric": [">" , 1]}
                ]
            },
            "action": "EXPIRE"
        }
    ]
}
```

`path` で対象となるサブフォルダーを指定。
`days_since_create` で作成後から削除までの日数を指定します。
尚、`日`単位となるので注意です。


## mediastore コマンド

さてコマンドを叩きますよ。

### 削除ポリシー設定

`put-lifecycle-policy` オプションでポリシーを設定します。


```
aws mediastore put-lifecycle-policy --container-name test1 --lifecycle-policy file://LiveEventsLifecyclePolicy.json
``` 

`--container-name` で `test1` を。

`--lifecycle-policy` で上で作ったファイル `LiveEventsLifecyclePolicy.json` を指定しています。

ここは各自の環境に応じてご変更下さい。

### ポリシー確認

`get-lifecycle-policy` で現在コンテナに設定しているポリシーを確認します。

```
$ aws mediastore get-lifecycle-policy --container-name test1 --output text
{
    "rules": [
         {
            "definition": {
                "path": [
                    {"prefix": "destA/"},
                    {"prefix": "destB/"}
                ],
                "days_since_create": [
                    {"numeric": [">" , 1]}
                ]
            },
            "action": "EXPIRE"
        }
    ]
}
```

ちゃんと反映されていますね。

### ポリシー削除

参考までにもしポリシーを消す場合は以下で削除可能です。

```
aws mediastore delete-lifecycle-policy --container-name test1
```

# HLS ファイル作成

MediaLive から MediaStore にストリームを流し込んでみます。

<img width="1134" alt="スクリーンショット 2019-03-19 16.10.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/5d758d2a-60e0-b653-8a29-987de4a11e82.png">

# 1日経過後

そのまま翌日までほーちしてファイルがどうなったか確認します。

<img width="901" alt="スクリーンショット 2019-03-22 22.02.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/172426/f0d91ae4-2af1-0535-c15a-50fb44835f2b.png">

はい、綺麗さっぱり無くなりました！

また一つ便利な機能が追加されました。
欲を言えば時間単位で消せるようになると更に嬉しいところです。