Azure Media Services Migration Tool 非公式日本語ガイド (1)  - 出来ることまとめとツールのビルドとセットアップ

# 背景
2013 年頃より、Microsoft Azure のサービスとしてご愛顧いただいておりました、Azure Media Services がサービス停止となることが決まってしまいました。開発者が扱いやすい動画配信インフラとして好きなサービスだったので残念です…。

https://learn.microsoft.com/ja-jp/azure/media-services/latest/azure-media-services-retirement

サービス停止日は 2024 年 6 月 30 日なのですが、それまでに既存の Azure Media Services アカウントから別のサービスに動画データを移行していただく必要があります。

そのための移行支援ツールとして、[Azure Media Services Migration Tool](https://github.com/Azure/azure-media-migration) が OSS として公開されました。

https://github.com/Azure/azure-media-migration

この記事ならびに後続の記事では、Azure Media Services Migration Tool についてまとめていきます。

# このツールでできること
このツールで出来ること、ならびに Issue に登録されており今後出来る予定になることをここにまとめます。
2023/07/26 現在、主にマルチビットレートの VoD について、静的パッケージ化し他のサーバーでホストできる形にするところまでが対応されています。

## 現在提供されている機能
- Azure Media Services のエンコーダーで作成したアセット内に存在する、Multi-Bitrate のファイルを別の Azure ストレージアカウントにコピー
- Azure Media Services のエンコーダーで作成したアセット内に存在する、Multi-Bitrate の Smooth Streaming のマニフェストを解析し、その内容に基づいて CMAF+HLS ならびに MPEG-DASH のマニフェストを生成し静的パッケージ化
- Azure Media Services のアセット内に存在するストリーミング不可能な単独ファイルを単純に別の Azure ストレージアカウントにコピー
- 現状の移行ツールで移行可能なファイルかどうかの事前アセスメント

## 今後提供される予定の機能
- Azure Media Services で実施したライブ配信のアーカイブのアセットの移行
- ストレージが暗号化されている VoD コンテンツの移行
- Azure Media Services API を利用しない、Azure Storage Account からの直接移行

# Azure Media Services Migration Tool のセットアップ
Azure Media Services Migration Tool を利用開始するまでのセットアップ手順を以下にまとめます。

:::note warn
以下の手順については、ツールのセットアップが伴うため、Windows/MacOS/Linux のいずれの OS 環境の場合でも、OS の管理者権限のあるアカウントが必要です。
:::

:::note warn
Azure 内で利用するサービスについても、RBAC のアサインが必要なため、同様に所有者や共同作成者に準ずるような権限を持ったアカウントで Azure にアクセスする必要があります。
:::

## セットアップする必要があるツール
### .NET 6 SDK
Migration Tool は .NET 6 をベースに開発されており、またソースコードのみ提供されていますので、ビルドは自力で行う必要があります。そのために .NET 6 SDK が必要です。

https://dotnet.microsoft.com/ja-jp/download/dotnet/6.0

Windows 環境の場合、上記リンクの SDK 6.0.xxx （任意のバージョン番号、2023/7/26 時点では 6.0.412）の表の Windows - インストーラーの項目にある x64 のリンクからダウンロードするファイルを利用するのが良いでしょう。

インストーラーファイルをダウンロードしたら、インストーラーを PC で実行することで、.NET 6 SDK がセットアップされて、dotnet コマンドが利用できるようになります。

### Azure CLI
Migration Tool では、Azure CLI でログイン済みのクレデンシャルを流用して Azure Media Services ならびに Azure Storage にアクセスを行います。したがって、Azure CLI のセットアップも必要です。

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli

Windows 環境でのセットアップ方法は下記のドキュメントの通りです。

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli

Microsoft インストーラー (MSI) のタブを選択した状態で "Azure CLI の最新のリリース" という青いボタンを押すことで Azure CLI のインストーラーをダウンロード可能です。
ダウンロードしたインストーラーを実行し、セットアップを完了させたら、Azure CLI コマンドが利用可能になります。

## Azure 環境ならびに CLI の準備
### コマンドプロンプトの起動
まずは、`Windows` キー + `R` キー の組み合わせで「ファイル名を指定して実行」ダイアログを出し、`cmd` と入力して `Enter` キーを入力します。これでコマンドプロンプトが立ち上がります。

### Azure CLI へのログイン
コマンドプロンプトで以下のコマンドを入力します。

`az login`

ブラウザが自動的に立ち上がり、Azure のログイン画面が出てきますので、移行対象の Azure Media Services が存在するアカウントにログインします。

`az account list -o table` コマンドを実行し、表示されるテーブルから、移行対象の Azure Media Services が存在する Subscription を見つけて、その名前をメモしましょう。

次に `az account set --subscription ひとつ前の手順でメモした名前` とコマンドを入力し、操作対象の Azure Subscription を選択します。

### Azure 環境の準備
#### 移行先のストレージアカウントの準備
[Azure Portal](https://portal.azure.com/) から、移行先のストレージアカウントを作成しましょう。
汎用 v2 アカウントで、移行元の AMS のストレージと同じリージョンに作成するのがおススメです。

:::note warn
移行元と違うリージョンに移行先の Azure Storage Account を作ると、データ移行時に意図せぬデータ転送費用が掛かる場合がありますのでご注意ください。
:::

#### ストレージに対する RBAC アクセス権の設定
移行元のストレージ (AMS のアセットが入っているストレージ）と、移行先のストレージそれぞれで、以下の操作を行い、Azure CLI でログインしているユーザーに「ストレージ BLOB データ共同作成者」もしくは「ストレージ BLOB データ所有者」のロールを割り当てます。

:::note warn
Azure CLI でログインしているユーザーアカウントが、サブスクリプションの管理者アカウントであってもこの操作は必要です。
:::

1. ストレージアカウントの管理画面を開き、左ペインの「アクセス制御 (IAM)」をクリック
1. 右ペインに開く画面の上部にある「＋追加」のボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/6a4d118b-d0dc-ced0-f633-3a3d8284ec1a.png)
1. ポップアップしたメニューから、「ロールの割り当ての追加」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/e2f108dd-8e04-ee7e-b753-61913d832a3a.png)
1. 開いた画面から「ストレージ BLOB データ共同作成者」もしくは「ストレージ BLOB データ所有者」を検索し、選択した状態で「次へ」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/5585bc2e-2b5d-6493-5f79-aa134484bd3a.png)
1. 「メンバー」タブに移行するので、アクセスの割り当て先のチェックボックスで「ユーザー、グループ、またはサービスプリンシパル」を選択
1. 「＋メンバーを追加する」のリンクをクリックし、出てきた画面で Azure CLI にログインしているユーザーのアカウントを検索して「選択」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/ecfbb3a3-ced5-a6f5-6b68-5039a6bf29ef.png)
1. 「レビューと割り当て」ボタンをクリックしてレビュー画面に遷移し、問題なければさらに「レビューと割り当て」ボタンをクリックして RBAC ロールのアサインを完了する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/fe635590-19ee-6ae5-2358-359ddcc5cb16.png)

#### Azure Media Services アカウントに対する RBAC アクセス権の設定
Azure Media Services についても、Azure CLI にログインしているユーザーが適切な RBAC の権限を持っている必要があります。Azure CLI でログインしているユーザーが「所有者」ロールに所属しているか、もしくは「Media Services メディア オペレーター」ロールに所属しているか確認してください。

どちらにも所属していないようであれば、以下の手順でロールを割り当てます。

1. 移行対象の Media Services の管理画面を開き、左ペインの「アクセス制御 (IAM)」をクリック
1. 右ペインに開く画面の上部にある「＋追加」のボタンをクリックし、「ロールの割り当ての追加」をクリック
1. 開いた画面から「Media Services メディア オペレーター」を検索し、選択した状態で「次へ」ボタンをクリック
1. 「メンバー」タブに移行するので、アクセスの割り当て先のチェックボックスで「ユーザー、グループ、またはサービスプリンシパル」を選択
1. 「＋メンバーを追加する」のリンクをクリックし、出てきた画面で Azure CLI にログインしているユーザーのアカウントを検索して「選択」
1. 「レビューと割り当て」ボタンをクリックしてレビュー画面に遷移し、問題なければさらに「レビューと割り当て」ボタンをクリックして RBAC ロールのアサインを完了する

## Azure Media Services Migration Tool の入手
ここまでの準備が整ったら、Migration Tool のビルドを行います。

### ソースコードのダウンロード
下記の GitHub リポジトリから直接 Zip ファイルでダウンロードするか、`git clone` してソースコードを入手しましょう。

https://github.com/Azure/azure-media-migration

直接 Zip ファイルをダウンロードする場合には、上記リポジトリから緑色の「Code」というボタンをクリックし、"Download Zip" のボタンをクリックします。

### ソースコードのビルド
Zip ファイルを任意のディレクトリに解凍したら、コマンドプロンプトの `cd` コマンドでそのディレクトリまで移動します。

:::note information
分かりやすいように、C:¥AMSMigration ディレクトリなどの浅いディレクトリ構造にすることをお勧めします。
:::

Program.cs が存在するフォルダーに移動したら、以下の 2 つのコマンドを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/46c9a0e4-1e02-3bc1-9dce-43dd958196cb.png)

```terminal
dotnet build
dotnet publish
```

エラーなくビルドに成功したら、コマンドの最後に出力されているディレクトリに、ビルド済みの Azure Media Services Migration Tool が配置されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/0f31bb49-f47c-4649-68f5-e1af2a09e7fb.png)

上記のスクリーンショットの場合には、"C:\AMSMigration\bin\Debug\net6.0\publish\" ディレクトリです。
そのディレクトリまで移動して、以下のコマンドを入力してみます。

```console
AMSMigrate.exe -h
```

コマンド入力結果として、以下のような出力が返ってきたらビルド成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199379/689d8ec2-f712-16b0-cf2b-e8ab45d3d272.png)

## 次にやること
Azure Media Services Migration Tool を使って、対象のストレージアカウント内のアセットの、現状の移行の可能性についてアセスメントします。
この話については、長くなってしまうので続編として別のドキュメントにまとめる予定です。