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