radikoを止めるな！(radish on aws)

タイトルは釣りです

# 概要

以下のradikoの仕様変更(実際はflash廃止による措置)により、radikoの録音ができなくなったため借り上げのレンタルVPS上で対応を試みたところ、OSがubuntu12のためか最新のffmpegが入らないということでAWSに移行することにしました

[radikoの録音ができなくなったための対応(2020/12)](https://qiita.com/gosshys/items/adefed215e86ffca0a05)

## やったこと、できたこと、注意書き

- AWSのECSにfargateのタスク定義を登録
- 指定時間に上で登録したfargateのタスク定義を起動してradikoを録音する
- 録音したm4aをS3の指定のバケットにアップロードする

※ **利用にはAWSの使用料金が発生するため、使い終わったら必ず設定を削除しましょう(S3にできたファイルも削除すること)**
※ **録音ファイルは個人の利用範囲にとどめましょう**
※ **自分はAWSを初めて触った初心者なので質問されても正確な答えはできないと思ってます**

## 参考

- [Fargateでradikoを録音してS3に保存するCloudFormation | intothelambda](https://intothelambda.com/blog/cloudformation-to-record-radiko-with-fargate/)
  - 基本はこのページを参考に古いところを手直しした感じになってます
- [uru2/radish： Live streaming radio recoder](https://github.com/uru2/radish)
- [gosshys/radish_on_aws： Run radsh on AWS](https://github.com/gosshys/radish_on_aws)
  - 今回作成した私のgithubリポジトリ

## 前提

- ローカルマシンでDockerが使える
- AWSにアカウントがある
- S3にバケットがある
- AWS CLIがある

# 手順

以下の手順を実施

- 私のリポジトリをcloneする
- AWSのECRにDockerイメージを登録する
- AWSのCloudFormationを使って、ECS上にradikoの録音タスクと録音スケジュールを設定する

## 私のリポジトリをcloneする

cloneしてローカルにリポジトリを持ってくる

```
git clone https://github.com/gosshys/radish_on_aws.git
```

cloneしたリポジトリに移動

```
cd radish_on_aws
```

## AWSのECRにDockerイメージを登録する

### ECRにDockerImageのリポジトリを作成する

名前は、`radish_on_aws`にしました。なんでもいいです。

```
aws ecr create-repository --repository-name radish_on_aws
```

#### 出力結果

```
REPOSITORY      2020-12-23T23:42:50+09:00       MUTABLE 999999999999    arn:aws:ecr:ap-northeast-1:999999999999:repository/radish_on_aws        radish_on_aws   999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws
IMAGESCANNINGCONFIGURATION      False
```

このコマンド実行後に出てくる`999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws`は、次の手順で使うので覚えておく。忘れたらAWSのECRのコンソールで確認するか、思い出す（ちなみに999999999999の部分はユーザーID)

### ECRにログインする

`999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws`の部分は、上の手順でリポジトリを作成したときに出てきたURI(`radish_on_aws`を変えた人はそこも変わっているので注意)

```
aws --region ap-northeast-1 ecr get-login-password | docker login --username AWS --password-stdin 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws
```

#### 出力結果

```
Login Succeeded
```

`Login Succeeded`とでてればOK

### Dockerファイルをbuildする

buidしたときのイメージ名を上の手順でも使用したURIにする(`999999999999`の部分は変える)

```
docker build . -t 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws
```

### DockerImageをECRのリポジトリにpushする

(`999999999999`の部分は変える)

```
docker push 999999999999.dkr.ecr.ap-northeast-1.amazonaws.com/radish_on_aws
```

## AWSのCloudFormationを使って、ECS上にradikoの録音タスクと録音スケジュールを設定する

### CloudFormationの設定ファイルの編集

gitリポジトリのcf.yamlをviなどで編集

```
vi cf.yaml
```

#### 編集ポイント

以下を自身の設定に変更してください

- 9行目：S3BucketName
- 12行目：ImageName

※あとは、176行目のcronの設定と195行目の放送局IDなどを余裕があれば編集する

### CloudFormationに登録

```
aws cloudformation create-stack --stack-name radish-on-aws --template-body file://cf.yaml --capabilities CAPABILITY_NAMED_IAM
```

network設定、role、ECSクラスタの作成、fargateのタスク定義とスケジュール設定などが実行されます

※稼働確認などはAWSのコンソールから、ECSやCloudWatch、S3などを見て確認します

#### CloudFormationから削除

稼働確認が終わったら消す(cronが5分間隔でうごくのでほっとくと無駄な料金が発生します)

```
aws cloudformation delete-stack --stack-name radish-on-aws
```

※s3上のファイルも残ってしまうと無駄なので削除してください

# その他

複数のスケジュールを登録するときは、TaskScheduleOneの部分をコピーして、TaskScheduleTwoなどとし、update-stackコマンドを叩きます

```
aws cloudformation update-stack --stack-name radish-on-aws --template-body file://cf.yaml --capabilities CAPABILITY_NAMED_IAM
```

s3からダウンロードしたファイルは、拡張子がmp3になることがあります(自分のmacの場合はそうでした)
拡張子をmp3からm4aに変えるとitunesで聴けます。