初めに
BWA を Centos イメージにインストールして簡単に AWS Batch で動かしてみます。リファレンスファイルや FASTQ ファイルは S3 バケットに保存しておき、Batch ジョブでダウンロードします。
Docker イメージの作成
Centos イメージに BWA、AWS CLI v2 をインストールするイメージを作成します。
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 でマッピングを行うためのコマンドを記述します。
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」 を選択します。
「オンデマンド」を選択し、最小 vCPU 、最大 vCPU、必要な vCPU はそれぞれデフォルトのままにします。
こちらもデフォルトのままにします。
EC2 設定のところで、矢印で示した「設定の追加」をクリックします。イメージタイプには「Amazon Linux2」を選択します。なぜか空白のままですが、問題ありません。
その後「コンピューティング環境の作成」をクリックします。
ジョブ定義の作成
コンテナプロパティではイメージに ECR の URI を入力します。コマンドは Dockerfile の CMD
で指定したコマンド sh /bwa/run_bwa.sh
を入力します。
vCPU は「8」、メモリはデフォルトの「2048」を指定します。ジョブロールには S3 バケットに対するダウンロード・アップロード権限を付与したロールを指定します。実行ロールには ECR からイメージを Pull できる権限を付与したロールを指定します。
その後「作成」をクリックします。
ジョブキューの作成
ジョブキュー名を入力します。
コンピューティング環境の作成 で作成したコンピューティング環境を選択します。
その後「作成」をクリックします。
ジョブの送信
作成したジョブ定義から「新しいジョブを送信」をクリックします。
ジョブ定義、ジョブキューを指定します。
その後「送信」をクリックします。
注意点
ジョブの vCPU(コンテナに割り当てられる vCPU)が、コンピューティング環境で指定した EC2 インスタンスタイプの CPU を超えていると ジョブのステータスが RUNNABLE から動かなくなります。この記事ではインスタンスタイプを Optional にしていますので、任意の vCPU に対して AWS Batch により適切なインスタンスが起動し、ジョブは RUNNABLE で止まることはありません。
ジョブが成功したことを確認する
ジョブ送信後、ECS でコンテナタスクが実行されます。
インスタンスが起動しています。
タスクが終了するとインスタンスは削除されます。
ログを確認して、タスクが正常に完了したことを確認します。
S3 バケットに SAM ファイルがアップロードされていることを確認します。
参考記事