2章では、作業ディレクトリ~/environment
にAmazon Genomics CLIをインストールしました。~/environment/amazon-genomics-cli/example/
配下には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分かかります。以下のように作成中の出力が表示されます。
この間に、講師の説明とともにAmazon Genomics CLIでの設定について見てみましょう。
左側のファイルブラウザより、~/environment/amazon-genomics-cli/examples/demo-nextflow-project/
配下を見てください。
agc-project.yaml
をダブルクリックして開いてください。
demo-nextflow-project
を見てみるとworkflows
ディレクトリとagc-project.yaml
からなります。このように、Amazon Genomics CLIでは複数のWorkflowをagc-project.yaml
とともに1つのディレクトリでProjectという形で管理します。
YAMLファイルを見てみると、workflows
配下にhello
、words
、rnaseq
の3つが確認できます。このように、Amazon Genomics CLIでは、管理するワークフローをagc-project.yaml
に記述します。具体的なワークフローの記述はsourceURL
でagc-project.yaml
に相対パスとして表現します。
例えば、ワークフローhello
はworkflows/hello
配下のmain.nf
とnextflow.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のデプロイが完了しているはずです。
続いて、helloワークフローをonDemandContextという名前のContext上で実行します。以下のコマンドを実行してください。
agc workflow run hello --context onDemandContext
以下のような出力が得られます。このように、Amazon Genomics CLIでワークフローを投入すると、ハッシュ値が返され、これを利用してワークフロー実行の詳細を取得します。このハッシュ値は後ほど利用しますので、コピーあるいはメモしておいてください。
ここで、ジョブのステータスを確認します。
agc workflow status
agc workflow run hello
の実行後すぐには以下のようにジョブがキューイングされたことが確認できます。
しばらくすると、ジョブは
INITIALIZING
を経てRUNNING
状態となり、最終的にCOMPLETE
へと移り変わります。
ここで、helloワークフローで実行していることを詳しく見てみます。
agc workflow run hello --context onDemandContext
コマンドは、上で解説したagc-project.yaml
に記載されているワークフローとContextを指定して、実行します。
実行する内容は、上記のコマンドの例では、sourceURL
に記載のworkflows/hello
ディレクトリ以下に格納されたNextflowのファイルである、main.nf
とnextflow.config
です。
次に、Nextflowのコードを見てみましょう。
まずは、main.nf
をファイルブラウザにてダブルクリックして開いてください。
process
にて、helloワークフローで実行する手順が記載されています。sayHello
と名付けられたこの手順は、input
とscript
というブロックを持ちます。
input
を見ると、cheers
から変数名をx
として入力されていることがわかります。このx
について、script
ブロックにてecho
するシンプルなワークフローとなっています。
このように、Nextflowでは、process
に対してChannel
を利用して入力を行います。
次に、nextflow.config
をファイルブラウザにてダブルクリックして開きます。
sayHello
の実行環境として、ubuntuコンテナを指定していることがわかります。
さて、実行したワークフローの詳細がわかったので、出力を確認してみましょう。<run-id>
は上記手順でagc workflow run
の戻り値として得られたハッシュ値をコピー&ペーストしてください。
agc workflow output <run-id>
以下のように、4つのsayHelloというジョブが作成されており、出力に使用されるS3バケットのURIが表示されることが確認できます。(ワークフローの実行ステータスがCOMPLETEでない場合には出力先S3バケットが表示されません。ステータスが変わるまで待ってから再度実行してください)
具体的にどのようなログが出力されたのかを確認してみましょう。
以下のコマンドを実行することで、各タスクの実行ログを見ることができます。<run-id>
はご自身の環境で得られたハッシュ値に置き換えてください。
agc logs workflow hello --all-tasks -r <run-id>
以下のような出力が得られます。
先程確認したmain.nf
のコードから期待されるように、Channelに入力された4つの挨拶を元にしたHello worldの出力が得られたことが確認できました。
これまでは、Amazon Genomics CLI上でワークフローを実行し、ログなどを確認する手順を解説してきました。ここでは、Amazon genomics CLIが背後で利用している、AWS Batchのマネジメントコンソールからワークフローhelloの実行状況を確認してみます。
AWS管理コンソールに戻り、検索バーにてbatchと入力し、サービスにてBatchをクリックします。
以下のようなダッシュボード画面に遷移します。
ダッシュボードにて、ジョブキューの概要のSUCCEEDEDにて5
という表示をクリックします。
sayHello_
からはじまる4つのジョブに加えて、agc-run-workflow
というジョブの、計5つのジョブが実行されたことがわかります。以下の2点を確認しましょう。
sayHello_
は4つの別々のジョブとして、AWS Batch上で実行されました。このように、NextflowでChannel
を利用してジョブを並列にスケールさせることが手軽にできます。agc-run-workflow
はワークフローの実行を管理するジョブであり、Amazon Genomics CLIでNextflowを利用する場合には、ワークフロー実行時のみ存在します。(Cromwellなどを利用する場合には、別途、AWS Fargate上にて永続的なワークフローエンジンが起動し、ジョブを管理します。そのため、ワークフローの実行頻度が少ない場合などでは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での実行順と一致しない場合があります。
本章では以下のことを確認しました。