Docker コンテナで動く Amazon Genomics CLI 実行環境の作り方紹介

2023.03.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Genomics CLI(agcコマンド)の実行環境の作り方を紹介します。同じ実行環境を配布できるように実行環境は Docker コンテナを使用します。

Inventory icons created by Freepik - Flaticon

実行環境の構築に必要なファイル類

以下のリポジトリに保存してあります。M1 Mac(ARM)仕様の部分が一部ありますので x86-64 ユーザーが参考にされる場合は本文もご確認ください。

bigmuramura/container-genomics-cli: Running amazon genomics cli on Docker

コンテナへログインするまでの手順早見

docker-compose build --no-cache
docker-compose up -d
docker-compose exec agc bash

実行環境を作っていく

Amazon Genomics CLI の実行環境を作成するために確認するべきドキュメントは以下のリンクになります。以下のリンクの情報を元に Docker ファイを作成します。

以下の方針でコンテナ環境を作成します

  • Amazon Genomics CLI のバージョン管理ができること
  • Node.js のバージョン管理ができること
  • Amazon Genomics CLI を実行するコンテナ内の作業で必要になりそうなコマンドも使えるようにしておく
    • AWS CLI や、jq コマンドなど

コンテナイメージの選定

前提条件を確認し、特定の OS の中で Node.js のインストール必須でした。node のベースイメージで ubuntu / debian 系のイメージを使用しているものを採用しました。

node - Official Image | Docker Hub

Amazon Genomics CLI のアップデートにより、要求される Node.js のバージョンが上がれば node のベースイメージを変更して更新する運用にします。

Amazon Genomics CLI のバージョン選択

aptコマンドなどのパッケージ管理コマンドでインストールできます。ですが、私の端末が M1 Mac(ARM)ということもありソースからビルドすることにしました。

Releases · aws/amazon-genomics-cli

最新のリリースバージョンのソースコードをダウンロードしてビルドする運用にしました。Amazon Genomics CLI のバージョン管理はここで行います。

その他あると便利なもの

Amazon Genomics CLI を使って作業しているとaws s3コマンドを使いたい場面が訪れます。そのため AWS CLI コマンドを利用できるようにしておきます。あとは私がfishシェルユーザーなのでfishシェルを使えるようにします。

Docker ファイル作成

マルチステージビルドするつもりではじめたのですが思いの外ビルドするものがありませんでした。Amazon Genomics CLI のインストールは参考になるかと思いますのでお好みで変更してください。また、AWS CLI のソースコードは ARM 用のものをダウンロードしています。x86-64環境の場合は該当するソースコードをダウンロードするように変更してください。

Amazon Genomics CLI のコマンドことagcコマンドは$HOME/bin配下にインストールされます。ENVでパスを通しておくと使い勝手が良くなります。

Dockerfile

FROM debian:stable as builder

WORKDIR /tmp

RUN apt-get update && apt-get install -y \
	curl \
	unzip \
	wget

# AWS CLI v2(ARM版) のソースコードダウンロード
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
# Amazon Genomics CLI のソースコードダウンロード
RUN wget "https://github.com/aws/amazon-genomics-cli/releases/download/v1.6.0/amazon-genomics-cli-1.6.0.zip" -O "agc.zip"
RUN unzip agc.zip
RUN rm *.zip

FROM node:19.8.1-buster-slim

COPY --from=builder /tmp/ /tmp/
RUN /tmp/aws/install
RUN /tmp/amazon-genomics-cli/install.sh
RUN apt-get update && apt-get install -y \
	git \
	jq \
	fish \
	vim \
	&& apt-get clean \
	&& rm -rf /var/lib/apt/lists/*

ENV PATH $PATH:/root/bin
RUN echo $PATH

docker-compose ファイル作成

込み入ったことはしていなく、Dockerfile の指定とカレントディレクトリを/workspaseとしてコンテナ側にマウントして、ワークフロー定義で使用するディレクトリや、ファイルをローカルからとコンテナからどちらかもアクセスできるようにしてあります。

docker-compose.yml

version: '3'

services:
  agc:
    build:
      context: ./genomics-cli
      dockerfile: Dockerfile
    volumes:
      - .:/workspace:cached
      - ~/.aws:/root/.aws
    tty: true

genomics-cliディレクトリ配下にDockerfileを保存しています。ディレクトリ構成やファイルはGitHub のリポジトリも参考にしてください。

.
├── docker-compose.yml
└── genomics-cli
    └── Dockerfile

agc コマンドを使ってみる

Amazon Genomics CLI のバージョン変更で Dockerfile を変更することを考慮して--no-chacheオプションを付けた例を示します。ただし、ビルドに時間がかかるため必要ないときは--no-chacheを指定しない方が良いです。

docker-compose build --no-cache
docker-compose up -d
docker-compose exec agc bash

コンテナが正常にビルド、起動できれば以下の様なプロンプトが表示されます。

root@25df23063fa9:/#

agcコマンドが利用できるか、パスは通っているか確認するためにagc --versionでバージョン情報が返ってくるかチェックしましょう。

コンテナ内

# agc --version
agc version: 1.6.0
# aws --version
aws-cli/2.11.4 Python/3.11.2 Linux/5.15.78-0-virt exe/aarch64.debian.10 prompt/off

agcコマンドで AWS 環境を操作するにはコンテナ内から AWS アカウントへの認証情報が必要になります。私は Assume Role で一時的な権限を取得してコンテナ内に貼り付けて利用しています。

コンテナ内

export AWS_DEFAULT_REGION="ap-northeast-1"
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_SESSION_TOKEN=

aws s3 lsなどでコンテナから AWS アカウントへアクセスできているか確認できれば問題ありません。

以上で Amazon Genomics CLI の実行環境構築完了です。

テスト用のデモファイル

Amazon Genomics CLI version 1.6.0 のソースコードと一緒にデモ用のサンプルコードが同梱されています。/tmp配下に残してありますので動作確認の際は/workspace配下にコピーしてお使い頂ければと思います。

# ll /tmp/amazon-genomics-cli/examples/
total 28K
drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-cwl-project/
drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-nextflow-project/
drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-snakemake-project/
drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-wdl-project/
drwxr-xr-x 9 root root 4.0K Dec 29 21:35 gatk-best-practices-project/
drwxr-xr-x 8 root root 4.0K Dec 29 21:35 gatk-best-practices-project-miniwdl/
drwxr-xr-x 3 root root 4.0K Dec 29 21:35 nf-core-project/

ちなみにデモ用のサンプルコードは以下のドキュメントで Hello world で動作確認する際に使います。

Hello world | Amazon Genomics CLI

おわりに

Amazon Genomics CLI の実行環境をコンテナで作成しローカル環境を汚さないようにしました。ワークフロー定義はローカル端末で編集し、AWS へデプロイや、ジョブを実行するときはコンテナからagcコマンドを使うことを想定しています。

実行例

# agc workflow run hello --context myContext
2023-03-18T04:25:45Z ?  Running workflow. Workflow name: 'hello', InputsFile: '', OptionFile: '', Context: 'myContext'
2a359bd1-248a-433d-84a3-55419a8a1036