Amazon Web Services ブログ

Amazon Genomics CLI がオープンソースとなって一般提供を開始

70 年に満たない期間の中で、DNA の二重らせん構造という史上最大の発見の 1 つから、研究はさらに進められました。現在では、DNA は、塩基と呼ばれる 4 種類の化合物で構成される、ねじれたはしごのようなものであることがわかっています。これら 4 つの塩基は通常大文字で識別されます。すなわち、アデニン (A)、グアニン (G)、シトシン (C)、チミン (T) です。二重らせん構造が提唱された理由の一つは、これらの化合物がはしごの両側にあるとき、A は常に T と結合し、C は常に G と結合するということです。

テーブルの上ではしごを広げると、「文字」からなる 2 つの塩基配列を目にすることになります。そして、両側には同じ遺伝情報があります。例えば、次のように 2 つの配列 (AGCTTCGA) が結合されています。

A – T
G – C
C – G
T – A

これらの文字の配列は非常に長くなることがあります。例えば、ヒトゲノムは 30 億文字を超えるコードで構成され、ヒトのすべての細胞の生物学的な設計図として機能します。ヒトのゲノムに含まれる情報は、個人、さらには人類全体の健康を向上させるために、高度にパーソナライズされた治療法を生み出すために利用することができます。同様に、ゲノムデータは、感染症の追跡、診断の改善、さらにはエピデミック、食品病原体、および毒素の追跡にも利用できます。これは環境ゲノミクスの新興分野です。

ゲノムデータの利用のためにはゲノム配列決定が必要です。最近の技術の進歩により、大規模な個人のグループに対して、かつてないほど迅速かつ費用対効果の高い方法でゲノム配列決定を行うことが可能となっています。今後 5 年間でゲノミクスデータセットは増加し、配列決定された 10 億を超えるゲノムを含むようになると推定されています。

ゲノミクスデータ解析の仕組み
ゲノミクスデータ解析では、特定の手順またはワークフローとしてオーケストレートされる必要があるさまざまなツールを利用します。ワークフローの開発、共有、および実行を容易にするために、ゲノミクスおよびバイオインフォマティクスのコミュニティは、WDLNextflowCWLSnakemake などの特殊なワークフロー定義言語を開発しました。

しかし、このプロセスではペタバイト規模の生ゲノムデータが生成されるため、ゲノミクスおよびライフサイエンスのエキスパートは、このような巨大な規模のデータを処理するためにコンピューティングリソースとストレージリソースをスケールするのに苦労しています。

データを処理して迅速に答えを得るには、コンピューティング、ストレージ、ネットワーキングなどのクラウドリソースを解析ツールと連携するように構成する必要があります。その結果、科学者や研究者は、ゲノミクス分野におけるイノベーションへの貢献ではなく、インフラストラクチャのデプロイやオープンソースのゲノム解析ツールの変更に貴重な時間を費やさなければならないことがよくあります。

Amazon Genomics CLI について
数か月前、当社は、AWS においてペタバイト規模でゲノミクスデータをより簡単に処理できるようにするツールである Amazon Genomics CLIプレビューを共有しました。2021 年 9 月 27 日、Amazon Genomics CLI がオープンソースプロジェクトとなり一般利用が可能となったことをお知らせします。開始点として、公開されているワークフローとともにこの CLI を利用し、その結果を踏まえて解析を進めることができます。

Amazon Genomics CLI は、クラウドインフラストラクチャのデプロイを簡素化および自動化します。これにより、使いやすいコマンドラインインターフェイスを提供して、お客様が AWS でゲノミクスワークフローを迅速にセットアップおよび実行できるようにします。クラウドにおけるゲノミクスのワークフローの設定と実行での手間のかかる作業を排することにより、ソフトウェアデベロッパーや研究者は、クラウドリソースを自動的にプロビジョン、設定、およびスケールして、より迅速かつ費用対効果の高い集団レベルの遺伝学の研究、創薬サイクルなどを実現できます。

Amazon Genomics CLI を利用することで、最適化されたクラウドインフラストラクチャでワークフローを実行できます。具体的には、CLI は次のとおりです。

  • ゲノミクスワークフローエンジンの改善を含んでおり、より良好に AWS と統合できます。これにより、オープンソースツールを手動で変更したり、効率的に実行できるように大規模にチューニングしたりする負担が軽減されます。これらのツールは、Amazon Elastic Container Service (Amazon ECS)Amazon DynamoDBAmazon Elastic File System (Amazon EFS)、および Amazon Simple Storage Service (Amazon S3) 間でシームレスに機能し、EC2 スポットインスタンスなどの機能を使用して、コンピューティングとストレージをスケールしながら、同時にコストを最適化するのに役立ちます。
  • ストレージとコンピューティング容量のプロビジョニング、ゲノミクスワークフローエンジンのデプロイ、ワークフローの実行に使用されるクラスターのチューニングなど、最も時間のかかるタスクを排します。
  • ワークロードに基づいてクラウドリソースを自動的に増減します。これにより、容量を過剰に購入したり、購入量が不足したりするリスクを排除できます。
  • リソースにタグを付けて、AWS のコストと使用状況レポートなどのツールを使用して、複数の AWS のサービスにまたがって実行されるゲノミクスデータ解析に関連するコストを理解できるようにします。

Amazon Genomics CLI の利用は、次の 3 つの主要な概念に基づいています。

ワークフロー – これらは、WDL や Nextflow などの言語で記述されたバイオインフォマティクスのワークフローです。単一のスクリプトファイルとすることも、複数のファイルのパッケージとすることもできます。これらのワークフロースクリプトファイルはワークフロー定義であり、定義が記述されているワークフロー言語などの追加のメタデータと組み合わせて、適切なコンピューティングリソースでワークフローを実行するために CLI によって使用されるワークフロー仕様を形成します。

コンテキスト – コンテキストは、ワークフローエンジンの設定とデプロイ、データアクセスポリシーの作成、および大規模なオペレーションのための (AWS Batch を使用して管理される) コンピューティングクラスターの調整といった、時間のかかるタスクをカプセル化および自動化します。

プロジェクト – プロジェクトは、ワークフロー、データセット、およびそれらの処理に使用されるコンテキストをリンクします。ユーザーの観点からは、プロジェクトは、同じ問題に関連するリソース、または同じチームによって使用されるリソースを処理します。

ここからは、実際にどのように機能するのかを見ていきましょう。

Amazon Genomics CLI を利用する
Amazon Genomics CLI をノートパソコンにインストールする手順を実行します。これで、agc コマンドを使用してゲノムワークロードを管理できるようになりました。次のコマンドを実行すると、利用可能なオプションが表示されます。

$ agc --help

初めて使用するときには、AWS アカウントをアクティブ化します。

$ agc account activate

これにより、Amazon Genomics CLI の運用に必要なコアインフラストラクチャが作成されます。これには、S3 バケット、仮想プライベートクラウド (VPC)、および DynamoDB テーブルが含まれます。S3 バケットは耐久性のあるメタデータのために使用され、VPC はコンピューティングリソースを分離するために使用されます。

オプションで、自分の VPC を利用できます。AWS Command Line Interface (CLI) のために自分の名前付きプロファイルの 1 つを使用することもできます。このようにして、Amazon Genomics CLI によって使用される AWS リージョンと AWS アカウントをカスタマイズできます。

メールアドレスをローカル設定で構成します。これは CLI によって作成されたリソースにタグを付けるために使用されます。

$ agc configure email me@example.net

Amazon Genomics CLI インストールによって含まれるサンプルフォルダには、いくつかのデモプロジェクトがあります。これらのプロジェクトは、CromwellNextflow など、さまざまなエンジンを使用します。demo-wdl-project フォルダ内の agc-project.yaml ファイルには、Demo プロジェクトのためのワークフロー、データ、およびコンテキストが記述されています。

---
name: Demo
schemaVersion: 1
workflows:
  hello:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/hello
  read:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/read
  haplotype:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/haplotype
  words-with-vowels:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/words
data:
  - location: s3://gatk-test-data
    readOnly: true
  - location: s3://broad-references
    readOnly: true
contexts:
  myContext:
    engines:
      - type: wdl
        engine: cromwell

  spotCtx:
    requestSpotInstances: true
    engines:
      - type: wdl
        engine: cromwell

このプロジェクトには、4 つのワークフロー (helloreadwords-with-vowels、および haplotype) があります。このプロジェクトは、2 つの S3 バケットへの読み取り専用アクセス権を有しており、2 つのコンテキストを使用してワークフローを実行できます。どちらのコンテキストも Cromwell エンジンを使用します。1 つのコンテキスト (spotCtx) では、Amazon EC2 スポットインスタンスを使用してコストを最適化します。

demo-wdl-project フォルダで、Amazon Genomics CLI を使用して spotCtx コンテキストをデプロイします。

$ agc context deploy -c spotCtx

数分後、コンテキストの準備が整い、ワークフローを実行できるようになりました。コンテキストを開始すると、1 時間あたり約 0.40 USD のベースラインコストが発生します。これらのコストには、ワークフローを実行するために作成されたリソースは含まれません。これらのリソースは、特定のユースケースによって異なります。コンテキストでは、requestSpotInstances フラグを設定に追加することによって、オプションでスポットインスタンスを使用できます。

CLI を使用して、プロジェクトのコンテキストのステータスを表示します。

$ agc context status

INSTANCE spotCtx STARTED true

ここで、このプロジェクトに含まれるワークフローを見てみましょう。

$ agc workflow list

2021-09-24T11:15:29+01:00 𝒊  Listing workflows.
WORKFLOWNAME haplotype
WORKFLOWNAME hello
WORKFLOWNAME read
WORKFLOWNAME words-with-vowels

最もシンプルなワークフローは hello です。hello.wdl ファイルの内容は、プログラミング言語をご存知であれば、大部分を理解できるでしょう。

version 1.0
workflow hello_agc {
    call hello {}
}
task hello {
    command { echo "Hello Amazon Genomics CLI!" }
    runtime {
        docker: "ubuntu:latest"
    }
    output { String out = read_string( stdout() ) }
}

hello ワークフローは、コマンドの出力内容を出力する単一のタスク (hello) を定義します。タスクは特定のコンテナイメージ (ubuntu:latest) で実行されます。出力は、プロセスが出力を書き込むことができるデフォルトのファイル記述子である標準出力 (stdout) から取得されます。

ワークフローの実行は非同期プロセスです。CLI からワークフローを送信すると、完全にクラウドで処理されます。一度に複数のワークフローを実行できます。基盤となるコンピューティングリソースは自動的にスケールされ、利用した分の料金のみを支払います。

CLI を使用して、hello ワークフローを開始します。

$ agc workflow run hello -c spotCtx

2021-09-24T13:03:47+01:00 𝒊  Running workflow.Workflow name: 'hello', Arguments: '', Context: 'spotCtx'
fcf72b78-f725-493e-b633-7dbe67878e91

ワークフローは正常に送信されました。最後の行はワークフロー実行 ID です。この ID を使用して、特定のワークフロー実行を参照できます。ここで、ワークフローのステータスを確認します。

$ agc workflow status

2021-09-24T13:04:21+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	fcf72b78-f725-493e-b633-7dbe67878e91	true	RUNNING	2021-09-24T12:03:53Z	hello

hello ワークフローはまだ実行中です。数分後、もう一度確認します。

$ agc workflow status

2021-09-24T13:12:23+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	fcf72b78-f725-493e-b633-7dbe67878e91	true	COMPLETE	2021-09-24T12:03:53Z	hello

ワークフローは終了しました。これで完了です。ワークフローログを見ます。

$ agc logs workflow hello

2021-09-24T13:13:08+01:00 𝒊  Showing the logs for 'hello'
2021-09-24T13:13:12+01:00 𝒊  Showing logs for the latest run of the workflow.Run id: 'fcf72b78-f725-493e-b633-7dbe67878e91'
Fri, 24 Sep 2021 13:07:22 +0100	download: s3://agc-123412341234-eu-west-1/scripts/1a82f9a96e387d78ae3786c967f97cc0 to tmp/tmp.498XAhEOy/batch-file-temp
Fri, 24 Sep 2021 13:07:22 +0100	*** LOCALIZING INPUTS ***
Fri, 24 Sep 2021 13:07:23 +0100	download: s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/script to agc-024700040865-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/script
Fri, 24 Sep 2021 13:07:23 +0100	*** COMPLETED LOCALIZATION ***
Fri, 24 Sep 2021 13:07:23 +0100	Hello Amazon Genomics CLI!
Fri, 24 Sep 2021 13:07:23 +0100	*** DELOCALIZING OUTPUTS ***
Fri, 24 Sep 2021 13:07:24 +0100	upload: ./hello-rc.txt to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-rc.txt
Fri, 24 Sep 2021 13:07:25 +0100	upload: ./hello-stderr.log to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stderr.log
Fri, 24 Sep 2021 13:07:25 +0100	upload: ./hello-stdout.log to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stdout.log
Fri, 24 Sep 2021 13:07:25 +0100	*** COMPLETED DELOCALIZATION ***
Fri, 24 Sep 2021 13:07:25 +0100	*** EXITING WITH RETURN CODE ***
Fri, 24 Sep 2021 13:07:25 +0100	0

ログでは、想定どおり、ワークフローによって出力される Hello Amazon Genomics CLI! メッセージを確認できます。

また、上記のログの情報を使用して、S3 の hello-stdout.log の内容を確認することもできます。

aws s3 cp s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stdout.log -

Hello Amazon Genomics CLI!

うまくいきました! ここからは、より複雑なワークフローを見ていきましょう。プロジェクトを変更する前に、Demo プロジェクトのコンテキストを破棄します。

$ agc context destroy -c spotCtx

gatk-best-practices-project フォルダには、プロジェクトで使用可能なワークフローが一覧表示されます。

$ agc workflow list

2021-09-24T11:41:14+01:00 𝒊  Listing workflows.
WORKFLOWNAME	bam-to-unmapped-bams
WORKFLOWNAME	cram-to-bam
WORKFLOWNAME	gatk4-basic-joint-genotyping
WORKFLOWNAME	gatk4-data-processing
WORKFLOWNAME	gatk4-germline-snps-indels
WORKFLOWNAME	gatk4-rnaseq-germline-snps-indels
WORKFLOWNAME	interleaved-fastq-to-paired-fastq
WORKFLOWNAME	paired-fastq-to-unmapped-bam
WORKFLOWNAME	seq-format-validation

agc-project.yaml ファイルでは、gatk4-data-processing ワークフローは同じ名前のローカルディレクトリをポイントしています。これは、そのディレクトリの内容です。

$ ls gatk4-data-processing

MANIFEST.json
processing-for-variant-discovery-gatk4.hg38.wgs.inputs.json
processing-for-variant-discovery-gatk4.wdl

このワークフローは、バリアントの発見に重点を置いたゲノム解析ツールキットである GATK4 を使用して、ハイスループットのシーケンシングデータを処理します。

ディレクトリには MANIFEST.json ファイルが含まれています。マニフェストファイルには、実行するメインワークフローが格納されているファイル (ディレクトリに WDL ファイルが複数ある場合があります) と、入力パラメータとオプションがある場所が記述されています。マニフェストファイルの内容は次のとおりです。

{
  "mainWorkflowURL": "processing-for-variant-discovery-gatk4.wdl",
  "inputFileURLs": [
    "processing-for-variant-discovery-gatk4.hg38.wgs.inputs.json"
  ],
  "optionFileURL": "options.json"
}

gatk-best-practices-project フォルダに、ワークフローを実行するコンテキストを作成します。

$ agc context deploy -c spotCtx

その後、gatk4-data-processing ワークフローを開始します。

$ agc workflow run gatk4-data-processing -c spotCtx

2021-09-24T12:08:22+01:00 𝒊  Running workflow.Workflow name: 'gatk4-data-processing', Arguments: '', Context: 'spotCtx'
630e2d53-0c28-4f35-873e-65363529c3de

数時間後、ワークフローは終了しました。

$ agc workflow status

2021-09-24T14:06:40+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	630e2d53-0c28-4f35-873e-65363529c3de	true	COMPLETE	2021-09-24T11:08:28Z	gatk4-data-processing

ログを見てみます。

$ agc logs workflow gatk4-data-processing

...
Fri, 24 Sep 2021 14:02:32 +0100	*** DELOCALIZING OUTPUTS ***
Fri, 24 Sep 2021 14:03:45 +0100	upload: ./NA12878.hg38.bam to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bam
Fri, 24 Sep 2021 14:03:46 +0100	upload: ./NA12878.hg38.bam.md5 to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bam.md5
Fri, 24 Sep 2021 14:03:47 +0100	upload: ./NA12878.hg38.bai to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bai
Fri, 24 Sep 2021 14:03:48 +0100	upload: ./GatherBamFiles-rc.txt to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-rc.txt
Fri, 24 Sep 2021 14:03:49 +0100	upload: ./GatherBamFiles-stderr.log to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-stderr.log
Fri, 24 Sep 2021 14:03:50 +0100	upload: ./GatherBamFiles-stdout.log to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-stdout.log
Fri, 24 Sep 2021 14:03:50 +0100	*** COMPLETED DELOCALIZATION ***
Fri, 24 Sep 2021 14:03:50 +0100	*** EXITING WITH RETURN CODE ***
Fri, 24 Sep 2021 14:03:50 +0100	0

結果は、アカウントのアクティベーション中に作成された S3 バケットに書き込まれています。バケットの名前はログに表示されていますが、AWS Systems Manager によってパラメータとして保存されていることもわかります。次のコマンドを実行することで、環境変数に保存できます。

$ export AGC_BUCKET=$(aws ssm get-parameter \
  --name /agc/_common/bucket \
  --query 'Parameter.Value' \
  --output text)

AWS Command Line Interface (CLI) を使用して、S3 バケットの結果を調査し、ワークフローの出力を取得できるようになりました。

結果を見る前に、コンテキストを停止して不要なリソースを削除します。これにより、すべてのコンピューティングリソースが破棄されますが、S3 のデータは保持されます。

$ agc context destroy -c spotCtx

異なるコンテキストの設定と追加のワークフローの実行に関する追加の例は、GitHub のドキュメントに記載されています。

利用可能なリージョンと料金
Amazon Genomics CLIオープンソースのツールであり、AWS GovCloud (米国) と中国にあるリージョンを除くすべての AWS リージョンで今すぐご利用いただけます。AWS Genomics CLI の利用にコストはかかりません。CLI によって作成された AWS リソースの料金はお支払いいただきます。

Amazon Genomics CLI を使用すると、インフラストラクチャの設計ではなく、科学に注力できます。これにより、より迅速に稼働し、研究、開発、およびワークロードのテストが可能となります。数千の並列ワークフローにスケールする本稼働ワークロードについて、当社では、AWS Step Functions などの追加の Amazon のサービスを活用するための推奨される方法をご提示できます。詳細については、当社のアカウントチームまでお問い合わせください

Danilo

原文はこちらです。