AWS Media Servicesの料金について

# 雑感

AWS Media Servicesを使ってみました。Qiitaの投稿とかみながらぽちぽちやっていましたが、UIがもう変わっていて、なかなか苦労します。配信スタートするまでに2時間ほど掛かりました……
最初はなかなかうまくいかず、同じ設定で全作り直ししたら配信できたりして、何が悪かったのか不明でした。アラートは上がるんですけど、何がアラートなのかをどこで見ることができるのか調べるのも面倒で試行錯誤していました……

M3U8のところで低遅延設定にしてみましたが、配信はなかなか不安定です。設定項目は膨大なので、これはかなり調整をしていかなとダメだなって感じています。AWS Elemental MediaPackageのChannelのEndpointの設定を以下の通りにした場合、

| Packager settings       |       Value |
|:-----------------|------------------:|
| Segment duration             |              1sec |
| Playlist window duration           |            5sec |

CDNをかませない状態での遅延は約9秒でした。配信側はWirecastの初期設定状態です。MediaLive、MediaPackage、Wirecastという3つの設定を試行錯誤していかないといけないんですね……
この設定だとMediaPackageのEndpointをVLCで視聴していても、たまに止まります。そして数秒してまた再生が再開する感じ。やっぱり5秒だとバッファ足りないのかなって思いました。

# 料金詳細
本題の料金について。これがまた良く分かりません。なので、ここに書いてみますので、間違っていましたらどなたかご指摘ください！

まず、配信のデータフローとしては以下の通りと認識しています。

Wirecast ---> MediaLive ---> MediaPackage ---> CDN(CloudFront) ---> Web Browser

というわけで、AWSの料金としてはMediaLive、MediaPackage、CloudFrontの料金が掛かることになるのだと思います。順に料金を確認していきます。前提として「リージョンはTOKYO」「アップはフルHD30fps」「ダウンは1280x720x30fps」「配信尺は60分」「視聴者は500人」とします。また、ギガやテラが1000なのか1024なのかは面倒なので、Googleの検索フォームで「3Mbps*60分」などで検索して出た数字をそのまま使っています

## MediaLive
料金テーブルは[こちら](https://aws.amazon.com/jp/medialive/pricing/)です。いっぱいありますが、前提の通りに抜き出しますと以下の通りとなります。

### 入力料金
エンコーダからPUSHされたストリームデータを受け取る部分の料金です。ここはトラフィック単価ではなく時間単価になっています。もちろんおおざっぱにビットレートで分けられていますが。

| HD画質×10Mbps未満×AVC入力 |
|:----------------:|
| 0.0069 USD/分 |
| 74 USD/月 |

一番使いそうな「HD画質」「10Mbps未満」「AVC入力」を選んでいます。料金ページの料金例を見る限りにおいては、1分単価と1カ月単価は合算されるのではなく、単なる長期割引みたいですね。24時間×365日LIVE配信などの場合は年間契約して月額払いができるみたいな感じかな？　今回は無視して1分単価のみチェックします。

**0.0069USD/分　×　60分　＝　0.414USD**

### 出力料金
受け取ったデータを様々な解像度×ビットレートに変換して出力する部分の料金です。この先は直接CDNでもOKなのかな？デフォルトではMediaPackageが受け取るみたいですが。

| HD画質×10Mbps未満×AVC出力×30fps以下 |
|:-----------------:|
| 0.0207 USD/分 |
| 222 USD/分 |

出力で重要なのが「**出力の料金の合計は、チャネルで生成されたすべての出力の合計です。**」という記述があり、料金例にもある通り、アウトプットが複数ある場合は、それぞれで料金を計算し最後に足し算しています。500kが10本の場合、合算して5Mが1本という計算ではなく、500kの金額の10倍ってことです。たとえば、MediaLiveのOutput設定で「HTTP live streaming」を選択した場合、デフォルトで以下のようなOutputsがプリセットされています。

| TN2224(HLS)       | ピクセル | ビットレート |
|:-----------------|:-----------------:|:------------------:|
| Output 1 | 416x234 | 200k |
| Output 2 | 480x270 | 400k |
| Output 3 | 640x360 | 800k |
| Output 4 | 768x432 | 1200k |
| Output 5 | 960x540 | 2000k |
| Output 6 | 1280x720 | 3300k |
| Output 7 | 1280x720 | 5000k |
| Output 8 | 1280x720 | 6500k |
| Output 9 | 1920x1080 | 8000k |
| Output 10 | webvtt | - |

すべて10Mbps以下ですが、このままの設定で配信すると、単純に料金10倍ってことになりますかね？このプリセットは削除していくこともできるのですが、とりあえずデフォルトのまま動かしたかったのでそのままいくこととします。

**0.0207USD/分/Ch　×　10ch　×　60分　＝　12.42USD**

### IDLE料金
料金表の最下部に「実行状態ではない各チャネルに対して日割り計算で 1 時間あたり 0.01 USD」という記述があります……　配信後すぐに削除すれば掛かりませんが、普通は配信設定は残しておくことも多いと思います。1日だけ配信すると残り平均して29日は未使用になります。

**0.01USD/時　×　24時間　×　29日　＝　6.96USD**

## MediaPackage
料金テーブルは[こちら](https://aws.amazon.com/jp/mediapackage/pricing/)です。こちらもいっぱいありますが、前提の通りに抜き出しますと以下の通りとなります。

### ストリームの取り込みに関する料金
MediaLiveから出力されたOutputsを受け取るための料金です。MediaLiveとは異なり、GB単価となっています。そのため、MediaLiveから出力されるファイルサイズを計算してみます。

### MediaLive 出力ファイルサイズ
200k　×　60分　＝　90MB
400k　×　60分　＝　180MB
800k　×　60分　＝　360MB
1200k　×　60分　＝　540MB
2000k　×　60分　＝　900MB
3300k　×　60分　＝　1.485GB
5000k　×　60分　＝　2.25GB
6500k　×　60分　＝　2.925GB
8000k　×　60分　＝　3.6GB
webvtt　×　60分　＝　無視
合計12.33GB

1TB以下ですので、料金表からその部分だけ抜き出します。

| 1TB/月まで |
|:----------------:|
| 0.088 USD/GB |

もう１つのポイントは、MediaPackageにはメインとバックアップの2系統があることです。常に2chで受信しますので、入力はちょうど2倍となります。

**0.088USD/GB　×　13GB　×　2　＝　2.288USD**

### 生成とパッケージ化に関する料金
これはCloudFrontなどのCDNに送出する部分の料金です。こちらもGB単価ですが、どのくらい送出されるかはCDNのヒット率に依存します。まず、視聴者の総受信データサイズを計算します。

#### 視聴者 受信ファイルサイズ
Outputsはwebvttを除いて9つありますが、平均として3Mbpsとした場合を計算します。
3Mbps　×　60分　×　500人　＝　675GB
この値が、CloudFrontとMediaPackageに効いてきます。

これが全てMediaPackageに来ても1TB未満ですから、料金表はこちら。

| 1TB/月まで |
|:----------------:|
| 0.176 USD/GB |

視聴者500人程度であればあまり高いキャッシュヒット率は望めません。とりあえず80%とします。その場合、MediaPackageに来るリクエストは20%ですから、675GBのうちの2割をMediaPackageが送出することになります。

**0.176USD/GB　×　675GB　×　0.2　＝　23.76USD**

## CloudFront
こちらはおなじみの料金表です。

### インターネットへのリージョンデータ転送送信
| 最初の10TB/月 |
|:----------------:|
| 0.140 USD/GB |

**0.140USD/GB　×　675GB　＝　94.5USD**

### HTTP メソッドのリクエスト料金
| HTTPS リクエスト |
|:----------------:|
| 0.0120 USD/10kReq |

5MBごとに1リクエストとします。

**0.0120 USD　×　（675GB÷5MB÷10000）　＝　0.162USD**

# 料金まとめ
全部足してみます。

| MediaLive入力 | MediaLive入力 | MediaLive IDLE | MediaPackage取込 | MediaPackage生成 | CloudFront転送 | CloudFrontリク |
|:----------------:|:----------------:|:----------------:|:----------------:|:----------------:|:----------------:|:----------------:|
| 0.414USD | 12.42USD | 6.96USD | 2.288USD | 23.76USD | 94.5USD | 0.162USD |

**合計：140.504USD**

結構高いですね……　一番高いのはCloudFrontですが、だいたいその4-5割増しになる感覚でしょうか。1ドル120円だと17,000円です。500人で割ると1人当たり34円です。

# Wowzaとの比較
比較対象として、WowzaをEC2で上げる場合を考えます。現状でEC2のMarketplaceにWowzaがありますので、その料金を確認します。稼働時間は前日＋当日の48時間のみとします。CDNを使う前提でベンダー推奨のm3.large×２とします。

15USD/月　＋　（0.549USD/時　×　48時間）　＝　41.352USD　×　2（Main/Backup）　＝　82.704USD

CloudFrontを使ってしまうと、Media Servicesの料金よりも高くなってしまいますが、うまくいかないときにも対応のしようがあります。フルマネージドで安いMedia Servicesと、自由に設定できて状況も良く分かるWowza/EC2にするか悩むところですね。