AWS HealthOmics プライベートワークフロー作成時のよくあるつまづきポイント解説

2024.05.26

AWS HealthOmics のプライベートワークフロー作成時の注意点を解説します。特に間違いやすいワークフロー定義ファイルの ZIP 圧縮を厚めに説明します。

つまづきポイント

ワークフローエンジンは Nextflow を例にします。

  1. ZIP 圧縮時のディレクトリ構成
  2. 実行結果の保存先 S3 バケットへアクセス権限を持つサービスロール

ZIP 圧縮時のディレクトリ構成

プライベートワークフローを作成する際、.nfファイルを ZIP 圧縮してアップロードする必要があります。しかし、ディレクトリ構成を誤るとエラーが発生します。エラーの詳細は以下のブログで説明しています。

今回はエラーを回避するために、適切な圧縮コマンドのオプションを紹介します。

ディレクトリ構成

以下のようなディレクトリ構成を ZIP 圧縮します。

$ tree
.
├── nextflow-hello
│   └── main.nf
└── parameter.template.json

圧縮方法

nextflow-helloディレクトリを ZIP 圧縮します。.jsonファイルを圧縮する必要はありません。ポイントは-rjオプションの指定です。

$ zip -rj nextflow-hello.zip ./nextflow-hello/
  adding: main.nf (deflated 43%)

-rj オプションの説明

-rオプションはディレクトリを再帰的に圧縮するためのもので、-jオプションはディレクトリ構造を無視してファイルを ZIP のルートに配置します。この組み合わせにより、nextflow-helloディレクトリ内のファイルを ZIP のルートに配置できます。

圧縮後の確認

.nfファイルが ZIP のルート直下にあれば問題ありません。

$ zipinfo -lht nextflow-hello.zip
Archive:  nextflow-hello.zip
Zip file size: 377 bytes, number of entries: 1
-rw-r--r--  3.0 unx      374 tx      213 defN 24-May-26 11:49 main.nf
1 file, 374 bytes uncompressed, 213 bytes compressed:  43.0%

補足

以下は Nextflow のサンプルワークフローです。パラメータで与えた文字列を返すだけの Hello World 的なサンプルです。

ワークフロー本文

main.nfファイルの内容です。

nextflow.enable.dsl = 2

params.message = null

if (!params.message) exit 1, "required parameter 'message' missing"

process Greet {
    publishDir '/mnt/workflow/pubdir'
    input:
        val message

    output:
        path "output", emit: output_file

    script:
        """
        echo "${message}" | tee output
        """
}

workflow {
    Greet(params.message)
}

パラメータファイル

parameter.template.jsonファイルの内容です。

{
    "message": {"description": "(string) message to use"}
}

実行結果の保存先 S3 バケットへアクセス権限を持つサービスロール

既存のサービスロールを利用する前提です。新規作成の場合は考慮不要です。

ワークフローの出力結果を保存する S3 バケットのアクセス権限が、サービスロールに正しく設定されている必要があります。

プライベートワークフローの作成

出力結果の保存先の S3 バケットの指定する箇所があります。

サービスロールに指定したロールに、対象の S3 バケットへのアクセス権限がないとワークフロー実行時に失敗します。プライベートワークフローの作成自体はできてしまうため、注意が必要です。

IAM ポリシーの確認

サービスロールのポリシーに、指定した S3 バケットへのアクセス権限が含まれていることを確認します。

まとめ

AWS HealthOmics のプライベートワークフローを作成する際には、ZIP 圧縮時のディレクトリ構成と S3 バケットのアクセス権限に注意が必要です。

おわりに

基本的なポイントを忘れがちなので備忘録として書き残しました。ちなみに久々にプライベートワークフローを作成したらハマりました。