AGC提供のNextflowのHelloスクリプトの実行

2章では、作業ディレクトリ~/environmentにAmazon Genomics CLIをインストールしました。~/environment/amazon-genomics-cli/example/配下にはAmazon Genomics CLIで利用できる各ワークフロー言語の実行のサンプルコードが含まれています。本ハンズオンではそのうちのNextflowのワークフローを実行します。

Amazon Genomics CLIによるNextflowサンプルスクリプトの実行

以下のコマンドを実行し、Amazon Genomics CLIでの計算環境であるContextをデプロイしてください。

cd ~/environment/amazon-genomics-cli/examples/demo-nextflow-project
agc context deploy --context onDemandContext

Contextのデプロイには5~10分かかります。以下のように作成中の出力が表示されます。 agc-context-deploy-wait

この間に、講師の説明とともにAmazon Genomics CLIでの設定について見てみましょう。

左側のファイルブラウザより、~/environment/amazon-genomics-cli/examples/demo-nextflow-project/配下を見てください。 agc-directory-structure

agc-project.yamlをダブルクリックして開いてください。

agc-project-yaml

demo-nextflow-projectを見てみるとworkflowsディレクトリとagc-project.yamlからなります。このように、Amazon Genomics CLIでは複数のWorkflowをagc-project.yamlとともに1つのディレクトリでProjectという形で管理します。

YAMLファイルを見てみると、workflows配下にhellowordsrnaseqの3つが確認できます。このように、Amazon Genomics CLIでは、管理するワークフローをagc-project.yamlに記述します。具体的なワークフローの記述はsourceURLagc-project.yamlに相対パスとして表現します。

例えば、ワークフローhelloworkflows/hello配下のmain.nfnextflow.configがその定義となります。

また、計算環境を定義するcontextsについても見てみましょう。onDemandContextと名付けられたContextが確認できます。Amazon Genomics CLIを利用して計算環境をデプロイする際には、先に実行したように、agc-project.yamlのContextに計算環境に関する設定項目を記述し、この時に指定した名前を指定して、コマンドラインからデプロイします。

今回、Contextとして、onDemandContextに加え、spotContextが記述されています。この部分ではrequestSpotInstances: trueとしてスポットインスタンスを利用する設定をしています。このように、Amazon Genomics CLIではユーザーの皆様は、bool値を指定するだけで、スポットインスタンスの利用が行えるようになっています。

ここでAmazon Genomics CLIに関する設定の解説は一旦終了です。Cloud9のターミナルに戻ると、以下のように、Contextのデプロイが完了しているはずです。 agc-context-deploy-complete

続いて、helloワークフローをonDemandContextという名前のContext上で実行します。以下のコマンドを実行してください。

agc workflow run hello --context onDemandContext

以下のような出力が得られます。このように、Amazon Genomics CLIでワークフローを投入すると、ハッシュ値が返され、これを利用してワークフロー実行の詳細を取得します。このハッシュ値は後ほど利用しますので、コピーあるいはメモしておいてください。

agc-workflow-run-hello

ここで、ジョブのステータスを確認します。

agc workflow status

agc workflow run helloの実行後すぐには以下のようにジョブがキューイングされたことが確認できます。 workflow-queued しばらくすると、ジョブはINITIALIZINGを経てRUNNING状態となり、最終的にCOMPLETEへと移り変わります。 workflow-running workflow-complete

ここで、helloワークフローで実行していることを詳しく見てみます。

agc workflow run hello --context onDemandContextコマンドは、上で解説したagc-project.yamlに記載されているワークフローとContextを指定して、実行します。 実行する内容は、上記のコマンドの例では、sourceURLに記載のworkflows/helloディレクトリ以下に格納されたNextflowのファイルである、main.nfnextflow.configです。

次に、Nextflowのコードを見てみましょう。 まずは、main.nfをファイルブラウザにてダブルクリックして開いてください。 nextflow-hello

processにて、helloワークフローで実行する手順が記載されています。sayHelloと名付けられたこの手順は、inputscriptというブロックを持ちます。 inputを見ると、cheersから変数名をxとして入力されていることがわかります。このxについて、scriptブロックにてechoするシンプルなワークフローとなっています。 このように、Nextflowでは、processに対してChannelを利用して入力を行います。

次に、nextflow.configをファイルブラウザにてダブルクリックして開きます。 nextflow-hello-config

sayHelloの実行環境として、ubuntuコンテナを指定していることがわかります。

さて、実行したワークフローの詳細がわかったので、出力を確認してみましょう。<run-id>は上記手順でagc workflow runの戻り値として得られたハッシュ値をコピー&ペーストしてください。

agc workflow output <run-id>

以下のように、4つのsayHelloというジョブが作成されており、出力に使用されるS3バケットのURIが表示されることが確認できます。(ワークフローの実行ステータスがCOMPLETEでない場合には出力先S3バケットが表示されません。ステータスが変わるまで待ってから再度実行してください) agc-workflow-output

具体的にどのようなログが出力されたのかを確認してみましょう。

以下のコマンドを実行することで、各タスクの実行ログを見ることができます。<run-id>はご自身の環境で得られたハッシュ値に置き換えてください。

agc logs workflow hello --all-tasks -r <run-id>

以下のような出力が得られます。 agc-logs-workflow-hello

先程確認したmain.nfのコードから期待されるように、Channelに入力された4つの挨拶を元にしたHello worldの出力が得られたことが確認できました。

AWS Batchコンソール上での実行状況の確認

これまでは、Amazon Genomics CLI上でワークフローを実行し、ログなどを確認する手順を解説してきました。ここでは、Amazon genomics CLIが背後で利用している、AWS Batchのマネジメントコンソールからワークフローhelloの実行状況を確認してみます。

AWS管理コンソールに戻り、検索バーにてbatchと入力し、サービスにてBatchをクリックします。 search-batch

以下のようなダッシュボード画面に遷移します。 batch-console

ダッシュボードにて、ジョブキューの概要SUCCEEDEDにて5という表示をクリックします。 batch-click-succeeded

sayHello_からはじまる4つのジョブに加えて、agc-run-workflowというジョブの、計5つのジョブが実行されたことがわかります。以下の2点を確認しましょう。

  • sayHello_は4つの別々のジョブとして、AWS Batch上で実行されました。このように、NextflowでChannelを利用してジョブを並列にスケールさせることが手軽にできます。
  • agc-run-workflowはワークフローの実行を管理するジョブであり、Amazon Genomics CLIでNextflowを利用する場合には、ワークフロー実行時のみ存在します。

(Cromwellなどを利用する場合には、別途、AWS Fargate上にて永続的なワークフローエンジンが起動し、ジョブを管理します。そのため、ワークフローの実行頻度が少ない場合などではNextflowの方がコスト的には有利となります)

batch-hello-job-result

(参考) Nextflowのローカルでの開発

前の手順ではAmazon Genomics CLIを利用し、Nextflowで記述したワークフローをContext上で実行しました。この方法はスケーリングメリットがありますが、ジョブキューに投入するという性質上、開発段階での使用には適しません。nextflow runコマンドを利用することで、実行するmain.nfファイルをローカルで実行し、デバッグを行うことができます。 以下コマンドを実行し、helloワークフローをローカル実行します。

cd ~/environment/amazon-genomics-cli/examples/demo-nextflow-project/workflows/hello/
nextflow run main.nf

以下のように、先程確認したログ内容と一致する出力を素早く得ることができます。なお、並列にジョブが実行され、順序の制御はされていないため、Amazon Genomics CLIでの実行順と一致しない場合があります。 nextflow-local-exec

Helloワークフロー実行のまとめ

本章では以下のことを確認しました。

  • NextflowのDSL(Domain Specific Language)のhello worldコードと、AWS Batchと連携したジョブの実行について確認しました
  • Amazon Genomics CLIを通して、マネジメントコンソールなしに結果確認やログ確認などができることを確認しました