AWS Batch でゲノムマッピングをしてみる

# 初めに

BWA を Centos イメージにインストールして簡単に AWS Batch で動かしてみます。リファレンスファイルや FASTQ ファイルは S3 バケットに保存しておき、Batch ジョブでダウンロードします。

# Docker イメージの作成

Centos イメージに BWA、AWS CLI v2 をインストールするイメージを作成します。

```Dockerfile:Dockerfile
FROM centos

RUN yum install -y git make gcc zlib-devel unzip \
 && git clone https://github.com/lh3/bwa.git \
 && cd bwa \
 && make \
 && cp bwa *.pl /usr/bin \
 && curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
 && unzip awscliv2.zip \
 && ./aws/install -i /usr/local/aws-cli -b /usr/bin \
 && rm -f awscliv2.zip

COPY run_bwa.sh /bwa/run_bwa.sh

CMD sh /bwa/run_bwa.sh
```

こちらはコンテナで実行するシェルスクリプトです。BWA でマッピングを行うためのコマンドを記述します。

```sh:run_bwa.sh
echo 'mapping START'
mkdir /fa_files
mkdir /fq_files
mkdir /sam_files

# リファレンスファイルのダウンロード
aws s3 cp s3://my-gwf-bucket/fa_files/chr5.fa /fa_files/chr5.fa
# インデックスの作成
bwa index /fa_files/chr5.fa

# FASTQ ファイルをダウンロード
aws s3 cp s3://my-gwf-bucket/fq_files/paired_1.fq /fq_files/paired_1.fq
aws s3 cp s3://my-gwf-bucket/fq_files/paired_2.fq /fq_files/paired_2.fq

# マッピング
bwa mem -t 8 -o /sam_files/output.sam /fa_files/chr5.fa /fq_files/paired_1.fq /fq_files/paired_2.fq
# 作成した SAM ファイルをアップロード
aws s3 cp /sam_files/output.sam s3://my-gwf-bucket/sam_files/output.sam
```

Docker イメージが完成したら ECR に Push します。

# AWS Batch の手順

## コンピューティング環境の作成

「マネージド型」を選択し、サービスロールは 「Batch service-linked role」 を選択します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/84cc7058-b673-0b13-d2e4-a42a57d23ec7.png)

「オンデマンド」を選択し、最小 vCPU 、最大 vCPU、必要な vCPU はそれぞれデフォルトのままにします。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/0954d207-6e43-80f5-ebe3-a85e9605a7b8.png)

こちらもデフォルトのままにします。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/336dae07-7a7a-ccac-9223-fea08c8ce07e.png)

EC2 設定のところで、矢印で示した「設定の追加」をクリックします。イメージタイプには「Amazon Linux2」を選択します。なぜか空白のままですが、問題ありません。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6291104c-1bff-97f9-ed2a-57c7c85fcb0b.png)

その後「コンピューティング環境の作成」をクリックします。

## ジョブ定義の作成

「EC2」を選択し、ジョブの試行は「1」を入力します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/c86488cd-4b49-1c68-c20f-16a79ca63aa2.png)

コンテナプロパティではイメージに ECR の URI を入力します。コマンドは Dockerfile の `CMD` で指定したコマンド `sh /bwa/run_bwa.sh` を入力します。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/44b05271-0e2e-b620-00ab-a63fdfd57410.png)

vCPU は「8」、メモリはデフォルトの「2048」を指定します。ジョブロールには S3 バケットに対するダウンロード・アップロード権限を付与したロールを指定します。実行ロールには ECR からイメージを Pull できる権限を付与したロールを指定します。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/243cfff1-4607-867c-1f55-38f20f01a297.png)

その後「作成」をクリックします。

## ジョブキューの作成

ジョブキュー名を入力します。

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/99d5f0ee-794c-807d-df4a-850956afaa69.png)

**コンピューティング環境の作成** で作成したコンピューティング環境を選択します。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/12e9b676-8fa5-867a-4cab-a922a1d9f3f1.png)

その後「作成」をクリックします。

## ジョブの送信

作成したジョブ定義から「新しいジョブを送信」をクリックします。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/bc7e2ecf-5439-e8dc-8656-da3624d0b547.png)

ジョブ定義、ジョブキューを指定します。

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/3c8122e3-566b-dbec-8888-55f3ea0c086a.png)

その後「送信」をクリックします。

### 注意点

ジョブの vCPU（コンテナに割り当てられる vCPU）が、コンピューティング環境で指定した EC2 インスタンスタイプの CPU を超えていると ジョブのステータスが RUNNABLE から動かなくなります。この記事ではインスタンスタイプを Optional にしていますので、任意の vCPU に対して AWS Batch により適切なインスタンスが起動し、ジョブは RUNNABLE で止まることはありません。

## ジョブが成功したことを確認する

ジョブ送信後、ECS でコンテナタスクが実行されます。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/0ec64167-327d-ca78-0ff6-a5f814d7363c.png)

インスタンスが起動しています。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/60b22c9b-0df0-999c-3ab7-2949a73c4b31.png)

タスクが終了するとインスタンスは削除されます。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5809cd48-aaa2-4029-0714-1ce7431c1f92.png)

ログを確認して、タスクが正常に完了したことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f09b735c-16fa-02b8-170a-866ae608b9a4.png)

S3 バケットに SAM ファイルがアップロードされていることを確認します。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/cc6d1ebc-57da-d3ad-9c74-7c47950aadad.png)

## 参考記事

https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/create-job-definition.html

https://docs.aws.amazon.com/batch/latest/userguide/compute_environment_parameters.html#compute_environment_compute_resources

https://qiita.com/quryu/items/e713fefb645b0283580a