Batch で Nextflow パイプラインを実行してジョブをオーケストレート

このチュートリアルでは、Batch で Nextflow パイプラインを実行する方法について説明します。具体的には、このチュートリアルでは RNA-Seq を使用して短いリードデータからゲノムの特徴を定量化する Nextflow のサンプル rnaseq-nf ライフ サイエンス パイプラインを実行します。

このチュートリアルは、Batch で Nextflow を使用する Batch ユーザーを対象としています。

Nextflow は、バイオインフォマティクス ワークフローをオーケストレートするためのオープンソース ソフトウェアです。

目標

このチュートリアルを完了すると、次のことができるようになります。

  • Cloud Shell に Nextflow をインストールします。
  • Cloud Storage バケットを作成する。
  • Nextflow パイプラインを構成する。
  • Batch で Nextflow を使用してサンプル パイプラインを実行する。
  • パイプラインの出力を表示します。
  • 次のいずれかを行って、追加料金が発生しないようにクリーンアップします。
    • プロジェクトを削除する。
    • リソースを個別に削除する。

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

  • Batch
  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーの方は、無料トライアルをご利用いただける場合があります。

このチュートリアルで作成されるリソースにかかる費用は、クリーンアップを含むすべての手順を適切なタイミングで完了した場合、通常 1 ドル未満です。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。

  3. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  4. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  5. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  6. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  7. Batch、Cloud Storage、Compute Engine、Logging の各 API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  8. Google Cloud CLI をインストールします。

  9. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  10. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  11. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  12. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  13. Batch、Cloud Storage、Compute Engine、Logging の各 API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    gcloud services enable batch.googleapis.com compute.googleapis.com logging.googleapis.com storage.googleapis.com
  14. このチュートリアルで使用する有効なネットワーキング構成を持つ Virtual Private Cloud(VPC)ネットワークがプロジェクトにあることを確認します。

    このチュートリアルでは、default ネットワークを使用していることを前提としています。デフォルトでは、 Google Cloud リソースは default ネットワークを使用します。このネットワークは、このチュートリアルで必要なネットワーク アクセスを提供します。

  15. このチュートリアルの Batch ジョブの実行に必要な権限を持つサービス アカウントがプロジェクトに 1 つ以上存在することを確認します。

    デフォルトでは、ジョブは Compute Engine のデフォルトのサービス アカウントを使用します。このアカウントには編集者(roles/editor)の IAM ロールが自動的に付与され、このチュートリアルに必要なすべての権限がすでに含まれています。

    ジョブのサービス アカウントに Batch サービス エージェントが Batch ジョブのリソースを作成およびアクセスするために必要な権限を付与するには、ジョブのサービス アカウントに次の IAM ロールを付与するように管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    管理者は、カスタムロールや他の事前定義ロールを使用して、必要な権限をジョブのサービス アカウントに付与することもできます。

  16. このチュートリアルで必要な権限があることを確認します。

    このチュートリアルを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。

  17. Nextflow をインストールします。

    curl -s -L https://github.com/nextflow-io/nextflow/releases/download/v23.04.1/nextflow | bash
    

    出力例を以下に示します。

    N E X T F L O W
    version 23.04.1 build 5866
    created 15-04-2023 06:51 UTC
    cite doi:10.1038/nbt.3820
    http://nextflow.io
    
    Nextflow installation completed. Please note:
    - the executable file `nextflow` has been created in the folder: ...
    - you may complete the installation by moving it to a directory in your $PATH
    

Cloud Storage バケットを作成する

Nextflow パイプラインの一時ファイルと出力ファイルを保存する Cloud Storage バケットを作成するには、 Google Cloud コンソールまたはコマンドラインを使用します。

コンソール

Google Cloud コンソールを使用して Cloud Storage バケットを作成する手順は次のとおりです。

  1. Google Cloud コンソールで [バケット] ページに移動します。

    [バケット] に移動

  2. [ 作成] をクリックします。

  3. [バケットの作成] ページで、バケットのグローバルに一意の名前を入力します。

  4. [作成] をクリックします。

  5. [公開アクセスの防止] ウィンドウで [確認] をクリックします。

gcloud

Google Cloud CLI を使用して Cloud Storage バケットを作成するには、gcloud storage buckets create コマンドを使用します。

gcloud storage buckets create gs://BUCKET_NAME

BUCKET_NAME は、バケットのグローバルに一意の名前に置き換えます。

リクエストが成功した場合、出力は次のようになります。

Creating gs://BUCKET_NAME/...
   ```

Nextflow を構成する

Batch で実行するように Nextflow パイプラインを構成するには、コマンドラインで次の手順を行います。

  1. サンプル パイプライン リポジトリのクローンを作成します。

    git clone https://github.com/nextflow-io/rnaseq-nf.git
    
  2. rnaseq-nf フォルダに移動します。

    cd rnaseq-nf
    
  3. nextflow.config ファイルを開きます。

    nano nextflow.config
    

    このファイルには、次の google-batch セクションが含まれている必要があります。

    'google-batch' {
        params.transcriptome = 'gs://rnaseq-nf/data/ggal/transcript.fa'
        params.reads = 'gs://rnaseq-nf/data/ggal/gut_{1,2}.fq'
        params.multiqc = 'gs://rnaseq-nf/multiqc'
        process.executor = 'google-batch'
        process.container = 'docker.io/nextflow/rnaseq-nf:v1.3.1'
        /*
         * replace with your own bucket!
         */
        workDir = 'gs://BUCKET_NAME/WORK_DIRECTORY'
        google.region  = 'REGION'
    }
    
  4. [google-batch] セクションで、次の操作を行います。

    1. BUCKET_NAME は、前の手順で作成した Cloud Storage バケットの名前に置き換えます。

    2. WORK_DIRECTORY は、パイプラインがログと出力を保存するために使用できる新しいフォルダの名前に置き換えます。

      たとえば、「workDir」と入力します。

    3. REGION は、使用するリージョンに置き換えます。

      たとえば、「us-central1」と入力します。

    4. google.region フィールドの後に、次のフィールドを追加します。

      1. google.project フィールドを追加します。

        google.project = 'PROJECT_ID'
        

        PROJECT_ID は、現在の Google Cloud プロジェクトのプロジェクト ID に置き換えます。

      2. Compute Engine のデフォルトのサービス アカウントをジョブのサービス アカウントとして使用していない場合は、google.batch.serviceAccountEmail フィールドを追加します。

        google.batch.serviceAccountEmail = 'SERVICE_ACCOUNT_EMAIL'
        

        SERVICE_ACCOUNT_EMAIL は、このチュートリアル用に準備したジョブのサービス アカウントのメールアドレスに置き換えます。

  5. 編集内容を保存する手順は次のとおりです。

    1. Control+S キーを押します。

    2. Y」と入力します。

    3. Enter キーを押します。

パイプラインを実行する

コマンドラインを使用して、サンプル Nextflow パイプラインを実行します。

../nextflow run nextflow-io/rnaseq-nf -profile google-batch

パイプラインは、前の手順で指定した設定を使用して小さなデータセットを実行します。このオペレーションが完了するまでに 10 分ほどかかることがあります。

パイプラインの実行が完了すると、出力は次のようになります。

N E X T F L O W  ~  version 23.04.1
Launching `https://github.com/nextflow-io/rnaseq-nf` [crazy_curry] DSL2 - revision: 88b8ef803a [master]
 R N A S E Q - N F   P I P E L I N E
 ===================================
 transcriptome: gs://rnaseq-nf/data/ggal/transcript.fa
 reads        : gs://rnaseq-nf/data/ggal/gut_{1,2}.fq
 outdir       : results

Uploading local `bin` scripts folder to gs://example-bucket/workdir/tmp/53/2847f2b832456a88a8e4cd44eec00a/bin
executor >  google-batch (4)
[67/71b856] process > RNASEQ:INDEX (transcript)     [100%] 1 of 1 ✔
[0c/2c79c6] process > RNASEQ:FASTQC (FASTQC on gut) [100%] 1 of 1 ✔
[a9/571723] process > RNASEQ:QUANT (gut)            [100%] 1 of 1 ✔
[9a/1f0dd4] process > MULTIQC                       [100%] 1 of 1 ✔

Done! Open the following report in your browser --> results/multiqc_report.html

Completed at: 20-Apr-2023 15:44:55
Duration    : 10m 13s
CPU hours   : (a few seconds)
Succeeded   : 4

パイプラインの出力を表示する

パイプラインの実行が完了すると、出力ファイル、ログ、エラー、一時ファイルが Cloud Storage バケットの WORK_DIRECTORY フォルダ内の results/qc_report.html ファイルに保存されます。

Cloud Storage バケットの WORK_DIRECTORY フォルダにあるパイプラインの出力ファイルを確認するには、 Google Cloud コンソールまたはコマンドラインを使用します。

コンソール

Google Cloud コンソールを使用してパイプラインの出力ファイルを確認する手順は次のとおりです。

  1. Google Cloud コンソールで [バケット] ページに移動します。

    [バケット] に移動

  2. [名前] 列で、前の手順で作成したバケットの名前をクリックします。

  3. [バケットの詳細] ページで、WORK_DIRECTORY フォルダを開きます。

ワークフローで実行したタスクごとにフォルダがあります。各フォルダには、実行されたコマンド、出力ファイル、パイプラインによって作成された一時ファイルが格納されます。

gcloud

gcloud CLI を使用してパイプラインの出力ファイルを確認するには、gcloud storage ls コマンドを使用します。

gcloud storage ls gs://BUCKET_NAME/WORK_DIRECTORY

以下を置き換えます。

  • BUCKET_NAME: 前の手順で作成したバケットの名前。

  • WORK_DIRECTORY: nextflow.config ファイルで指定したディレクトリ。

出力には、パイプラインで実行されたタスクごとにフォルダが表示されます。各フォルダには、実行されたコマンド、出力ファイル、パイプラインによって作成された一時ファイルが格納されます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

課金をなくす最も簡単な方法は、現在のプロジェクトを削除することです。

現在のプロジェクトを削除するには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

gcloud

    Google Cloud プロジェクトを削除します。

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

現在のプロジェクトを引き続き使用する場合は、このチュートリアルで使用したリソースを個別に削除します。

バケットの削除

このチュートリアルで使用したバケットが不要になった場合は、バケットを削除します。

バケット内の出力ファイルを削除する

パイプラインの実行が完了すると、出力ファイルが作成されて Cloud Storage バケットの WORK_DIRECTORY フォルダに保存されます。

Cloud Storage の料金を現在のGoogle Cloud アカウントに減らすには、 Google Cloud コンソールまたはコマンドラインを使用して、パイプラインの出力ファイルを含むフォルダを削除します。

コンソール

Google Cloud コンソールを使用して Cloud Storage バケットから WORK_DIRECTORY フォルダとすべての出力ファイルを削除するには、次の操作を行います。

  1. Google Cloud コンソールで [バケット] ページに移動します。

    [バケット] に移動

  2. [名前] 列で、前の手順で作成したバケットの名前をクリックします。

  3. [バケットの詳細] ページで、WORK_DIRECTORY フォルダを含む行を選択し、次の操作を行います。

    1. [削除] をクリックします。

    2. 確定するには、「DELETE」と入力して [削除] をクリックします。

gcloud

gcloud CLI を使用して Cloud Storage バケットから WORK_DIRECTORY フォルダとすべての出力ファイルを削除するには、--recursive フラグで gcloud storage rm コマンドを実行します。

gcloud storage rm gs://BUCKET_NAME/WORK_DIRECTORY \
      --recursive

以下を置き換えます。

  • BUCKET_NAME: 前の手順で指定したバケットの名前。

  • WORK_DIRECTORY: 前の手順で指定したパイプライン出力ファイルを保存するディレクトリ。

次のステップ