Microsoft Genomicsを使ってみた

# はじめに
Microsoft Genomicsの[クイックスタート](https://docs.microsoft.com/ja-jp/azure/genomics/quickstart-run-genomics-workflow-portal) をやってみた際に少し分かりにくいポイント・詰まりやすいポイントがあったので、一通りの使い方を自分なりにまとめました。

# Microsoft Genomics とは

DNAシーケンサーで得られたFASTAQファイル、BAMファイル等を対象に、クラウド上で[Burrows-Wheeler Aligner (BWA)](http://bio-bwa.sourceforge.net/)や[Scalable Nucleotide Alignment Program (SNAP)](http://snap.cs.berkeley.edu/)による配列のマッピング、 [Genome Analysis Toolkit (GATK)](https://gatk.broadinstitute.org/) による変異検出等のゲノム解析を行ってくれるサービス

シーケンサーで得られた配列データをAzure Storage上に置いたまま解析ができ、また解析ツールの環境構築やコンピューターリソースの管理を行う手間がいらず便利

参考：
[Microsoft Genomics](https://azure.microsoft.com/ja-jp/services/genomics/)
[マイクロソフト、ゲノム研究用クラウドツールの一般提供開始を発表](https://news.microsoft.com/ja-jp/2018/03/02/blog-cloud-based-tools-for-genomics/)

# 前提条件
- Azureアカウントと有効なサブスクリプション
- Python 2.7.12以上が入った環境  
※Microsoft GenomicsのPythonクライアントはPython 3と互換性がありません (2020.5.24現在)

pyenvを使用して複数のPythonバージョンを切り分けて使いたい場合は下記記事を参照してください。macOS, Linux, Windows (WSL)環境に対応しています。
[HomebrewのインストールからpyenvでPythonのAnaconda環境構築までメモ](https://qiita.com/aical/items/2d066801a7464a676994)

# Microsoft Genomicsのセットアップ
## アカウントの作成
Azure Portalで「Genomics」と検索して[Genomicsアカウントの作成ページ](https://portal.azure.com/#create/Microsoft.Genomics)へ行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/6faef1cf-78c9-16f2-d7c9-7a3a7cb5aead.png)


必要事項を入力し、作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/92e3313f-79cb-ff6b-db91-61f265c2f0eb.png)



## 構成ファイルのダウンロード
再度「Genomics」と検索し、Genomics アカウントのページへ行きます。

先ほど作成した Genomics アカウントを選択して、「アクセス キー」に移動し、構成ファイルをダウンロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/f5342763-4375-0742-287f-bcb09decf9ea.png)
`config.txt` としてダウンロードされます。

## Pythonクライアントのインストール
Python 2.7.12以上がインストールされている環境でMicrosoft GenomicsのPython クライアントをインストールします。

```bash
$ pip install msgen
```

  
※もし特に何もいじっていないLinux, WSL環境でインストールしたい場合は下記コマンドを実行してみてください (管理者権限が必要です)

```bash
sudo apt-get install -y build-essential libssl-dev libffi-dev libpython-dev python-dev python-pip
sudo pip install --upgrade --no-deps msgen
sudo pip install msgen
```

以下のコマンドでMicrosoft GenomicsのPythonクライアントの動作を確認できます。

```bash
$ msgen list -f ./config.txt
```
(config.txtへのファイルパスを指定してください)

無事にインストールされていて、config.txtファイルが認識されていれば次のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/7f095e79-d992-3c84-3cf1-623d4496a226.png)


# ストレージの準備
## ストレージアカウントの作成
入力ファイルと出力ファイルを格納するAzure Storageアカウントを作成します。
Azure Portalから、「ストレージアカウント」と検索し作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/09e5e66e-a91a-b96e-48d8-713893085047.png)

展開するリージョン (場所)はGenomicsアカウントと同じ場所にすることでデータ移動料金や待ち時間を短縮します。
「確認および作成」を選択してストレージアカウントを作成します。

アカウントを作成したら、ストレージアカウント画面左側より「アクセス キー」を選択し、アクセスキー情報を保存しておきます (ブラウザの別タブでアクセスキーのページを開いておくと便利です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/99591bed-185b-276e-7d94-23c82c05ce1c.png)


## Blob コンテナーの作成
ストレージアカウントのページへいき、左側メニューからコンテナーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/311339c0-ccbd-b420-23a3-402b794dec2a.png)

上部の「＋コンテナー」を選択し、新しいコンテナーを作成します。
入力ファイル保管用と出力ファイル保管用に二つのコンテナーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/040b5297-4d5c-0b81-b3b2-198ef3f6512e.png)

ここではそれぞれ`input-files`, `output-files` という名前にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/4e0556fa-d42b-a99d-655c-74953e8dec52.png)



# 入力データのストレージアカウントへのアップロード
## 入力データの準備
今回はクイックスタートでサンプルデータとして提供されている以下のデータを使用します。
https://msgensampledata.blob.core.windows.net/small/chr21_1.fq.gz
https://msgensampledata.blob.core.windows.net/small/chr21_2.fq.gz
名前から察するに[ヒトの21番染色体](https://en.wikipedia.org/wiki/Chromosome_21)のシーケンスデータですね。

これらをダウンロードして保存しておきます（容量大きいので注意）

## Azure Portal上でのアップロード
ストレージアカウントへのアップロード方法は多数存在 (Azure Storage Explorer, AzCopyコマンド, etc.)しますが、今回はシンプルにPortal上でのアップロードを行います。
※コマンドライン環境下でのアップロードを行いたい場合はAzCopyコマンド等の使用を検討してください。

先ほど作成した`input-files` ストレージコンテナーの管理画面へ行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/235bd555-f21d-543f-75de-a2376d235f37.png)

画面中央上部の「アップロード」を選択し、先ほどダウンロードした
`chr21_1.fq.gz`, `chr21_2.fq.gz` のファイルをそれぞれ選択してアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/4dfc8911-64b7-3943-f335-d802b0f601c8.png)

両方ともしっかりアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/52df5a8d-71a7-da8f-cd1e-202488615a40.png)

アップロードが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/76fb4aef-c0cf-dd81-31b6-1b217647f470.png)


# Microsoft Genomics ワークフローを実行する
## configファイルの編集
冒頭でダウンロードした`config.txt` ファイルを開きます。(筆者はVSCodeで開いていますがメモ帳等でも結構です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/134b249e-f5bb-a5af-26ce-25f211bece86.png)
デフォルトではヒトリファレンスゲノムはhg19を使用するようになっています。
GATKはb37, hg38, hg38 (alt 分析なし), hg19の[4つのヒトリファレンスゲノムに対応](https://docs.microsoft.com/ja-jp/azure/genomics/frequently-asked-questions-genomics#what-genome-references-can-i-use)しているようです。
参考：[ヒトのリファレンスゲノムについて](https://gatkforums.broadinstitute.org/gatk/discussion/11010/human-genome-reference-builds-grch38-hg38-b37-hg19), [(日本語解説記事)](https://www.kimoton.com/entry/20190330/1553931781)



※もし[GATK4](https://gatk.broadinstitute.org/)を実行したい場合は、`process_name`パラメーターを`gatk4`に設定します。

画像下部の箇所にストレージキーの情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/ea11c051-255b-8ad8-62b3-77c3e47ef3d5.png)

ファイルを保存します。

## ワークフローの送信
Microsoft Genomics Pythonクライアントを使用し、以下のフォーマットでワークフローを送信します。

```bash
$ msgen submit -f [full path to your config file] -b1 [name of your first paired end read] -b2 [name of your second paired end read]
```

筆者の環境では以下のようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/154132f8-d07c-58b0-04f8-c89363904812.png)

`Message: Successfully submitted` と表示されていればワークフローの送信は成功です。

以下のコマンドでワークフローの状態を確認できます。

```bash
$ msgen list -f ./config.txt
```

このように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/9e5a08d9-4d1c-f662-1f80-dec4890159df.png)

適宜状態を確認し、以下のようなStatusになったら実行完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/0e3636fe-8e71-23ae-3f4c-0d1c61336877.png)

ワークフローの実行が完了すると、先ほど作成したAzure Storage アカウントの出力コンテナー内に出力ファイルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57724/71a40538-839b-fad3-0dc4-249322c38639.png)

出力先にあるファイルたち

- logs.zip：ツールの実行ログたち
- BAMファイル：シーケンサーから出力されたリードをリファレンス配列にマッピングした結果
- .bam.baiファイル：BAMのインデックス情報
- [VCF (variant call format)ファイル](http://kazumaxneo.hatenablog.com/entry/2017/06/02/140208)：今回のヒト21番染色体のシーケンスデータをヒトリファレンスゲノムにマッピングした結果得られた、ゲノムの変異情報 (リファレンスゲノムと異なる部分が抽出されている)が保存されたファイル  

詳しい情報：[ファイルフォーマットについて](http://array.cell-innovator.com/?p=3014)

# Next Steps
得られたBAMやVCFファイルをもとに可視化を行えます。

例えばこちらを参照
[bamとvcfの可視化分析ツール bam.iobio.ioとvcf.iobio.io](http://kazumaxneo.hatenablog.com/entry/2018/07/07/012419)

分かりやすくかっこいい図が出せます。
![image](https://cdn-ak.f.st-hatena.com/images/fotolife/k/kazumaxneo/20180707/20180707011210.png)
(上記記事より転載)