AWS HealthOmics が Nextflow 26.04 をサポートしたので Hello World で試してみた

AWS HealthOmics が Nextflow 26.04 をサポートしたので Hello World で試してみた

2026.06.13

はじめに

2026 年 6 月、AWS HealthOmics が Nextflow 26.04.0 をサポートしました。v26.04.0 には strict(v2)構文パーサのデフォルト化、record types、ワークフロー出力サマリー、agent logging mode といった変更が含まれています。Hello World ワークフローを HealthOmics のプライベートワークフローで試してみました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/aws-healthomics-nextflow-version-26-04/

確認結果

最小の Hello World ワークフローを実行し、26.04.0 が指定どおりに動くことを確認しました。確認できたのは次の 3 点です。

  • run のステータスが COMPLETED になった
  • publishDir に置いたファイルが成果物として S3 に書き出された
  • 実際に使われた Nextflow バージョンが 26.04.0 だった

バージョン指定の要点

  • manifest.nextflowVersion = '26.04.0'(完全一致)で指定すれば 26.04.0 が選ばれる
  • '>=24' のような範囲指定は優先順位の影響で 26.04 が選ばれない(後述)
  • 26.04.0 は strict v2 構文パーサがデフォルト。レガシー構文を使うには StartRun で syntaxVersionv1 に設定する

AWS HealthOmics の Nextflow

AWS HealthOmics のプライベートワークフローは、Nextflow・WDL・CWL で記述したゲノム解析ワークフローをサーバーレスで実行できるマネージドサービスです。

現在のサポートバージョン

HealthOmics の Nextflow サーポートバージョン状況です(2026 年 6 月時点)

バージョン DSL 備考
v22.04.01 DSL1・DSL2 DSL1 が使える唯一のバージョン
v23.10.0 DSL2 デフォルト(バージョン未指定時)
v24.10.8 DSL2
v25.10.0 DSL2
v26.04.0 DSL2 新サポート。strict v2 構文パーサがデフォルト

バージョン指定の方法と優先順位

バージョンは nextflow.configmanifest.nextflowVersion で指定します。ファイル末尾に書くのは、インクルードした別 config に上書きされないようにするためです。

// nextflow.config(ファイル末尾に記載する)
manifest.nextflowVersion = '26.04.0'

範囲指定するときの注意事項

HealthOmics は範囲指定の場合、優先順位(高い順に v23.10.0 > v22.04.0 > v24.10.8 > v25.10.0 > v26.04.0)で最も優先度の高いバージョンを選択します。例として '>=24' を指定すると、v24.10.8・v25.10.0・v26.04.0 が候補になりますが、HealthOmics は v24.10.8 を選んでしまいます。

26.04.0 を確実に使うには次のいずれかの方法を取ります。! プレフィックスは指定範囲に一致しない場合は例外を発生させてすぐに失敗させるオプションです。

// 完全一致(推奨)
manifest.nextflowVersion = '26.04.0'

// バージョン不一致時に run を即失敗させる場合
manifest.nextflowVersion = '!>=26.04.0'

26.04.0 の strict v2 構文パーサ

26.04.0 では strict(v2)構文パーサがデフォルトになりました。レガシー(v1)構文で書かれた既存ワークフローはそのままだと壊れます。

レガシー(v1)構文を使う場合は、StartRun の engineSettings で指定します。

// --engine-settings '{"syntaxVersion": "v1"}'

既存ワークフローを 26.04.0 に移行する際は Nextflow のアップグレードガイドを参照してください。

https://nextflow.io/docs/latest/migrations/26-04.html

今回の構成

ワークフロー実行には、事前に用意しておく前提リソースと、本記事の手順(CLI)で作成するリソースがあります。リージョンは us-east-1 を使います。残念ながら、東京リージョンはまだ対応していません。

リソース 用途 区分
S3 バケット run の出力先(--output-uri 事前準備
IAM サービスロール HealthOmics が S3・CloudWatch Logs・ECR にアクセスするためのロール 事前準備
ECR プライベートリポジトリ Hello World 用の ubuntu イメージ格納先 事前準備
ECR リポジトリポリシー HealthOmics サービスプリンシパルからの image pull 許可 事前準備
HealthOmics private workflow Nextflow ワークフロー定義 本記事の手順(CLI)
HealthOmics run ワークフローの実行インスタンス 本記事の手順(CLI)

前提リソースを用意する

ワークフローを実行する前に、S3 バケット(run の出力先)・IAM サービスロール(HealthOmics が S3・CloudWatch Logs・ECR にアクセスするためのロール)・ECR プライベートリポジトリ(ubuntu イメージ格納先)を用意しておきます。以下は今回の検証時の値です。

  • ECR リポジトリ URI: <account-id>.dkr.ecr.us-east-1.amazonaws.com/healthomics-nf2604-hello
  • サービスロール ARN: arn:aws:iam::<account-id>:role/healthomics-nf2604-service-role
  • S3 出力バケット名: healthomics-nf2604-verify-<account-id>

コンテナイメージを ECR に用意する

今回は ubuntu イメージを ECR プライベートリポジトリに用意し、process.container にはその ECR イメージ URI を指定します。

ECR へのログインとイメージの push 手順です。HealthOmics の実行環境は amd64 で、ARM コンテナには対応していません。Apple Silicon など ARM マシンで作業すると docker pull が既定で ARM 版イメージを取得してしまうため、--platform amd64 を付けて amd64 イメージを明示的に取得します。amd64 マシンで作業する場合は既定で amd64 になるため、このオプションは省略できます。

# ECR にログイン
aws ecr get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin \
  <account-id>.dkr.ecr.us-east-1.amazonaws.com

# ubuntu:24.04 を amd64 で pull して ECR 用にタグ付け
docker pull --platform amd64 ubuntu:24.04

docker tag ubuntu:24.04 \
  <account-id>.dkr.ecr.us-east-1.amazonaws.com/healthomics-nf2604-hello:24.04

# ECR に push
docker push \
  <account-id>.dkr.ecr.us-east-1.amazonaws.com/healthomics-nf2604-hello:24.04

push 後にイメージが登録されていることを確認します。

aws ecr describe-images \
  --repository-name healthomics-nf2604-hello \
  --region us-east-1
実行結果
tags: ["24.04"]
digest: sha256:023f8a753c22258c9fe2d0005a7d28258038da7d620e9f93e9ad78aa266f9f11
mediaType: application/vnd.oci.image.manifest.v1+json (単一 amd64 manifest)

Nextflow ワークフローを 26.04 指定で作成する

ワークフロー定義は main.nfnextflow.config の 2 ファイルです。

main.nf

単一の process が ubuntu コンテナ上で echo を実行し、結果を hello.txt に書き出すワークフローです。container にはさきほど push した ECR イメージの URI を指定します。出力を S3 にエクスポートするには process に publishDir '/mnt/workflow/pubdir', mode: 'copy' を指定し、そのディレクトリにファイルを置きます。実際の解析では BAM・VCF・レポートといった成果物をこの仕組みで S3 に永続化します。今回の hello.txt はその最小例です。

process sayHello {
    container '<account-id>.dkr.ecr.us-east-1.amazonaws.com/healthomics-nf2604-hello:24.04'

    publishDir '/mnt/workflow/pubdir', mode: 'copy'

    output:
    path 'hello.txt'

    script:
    """
    echo 'Hello World from AWS HealthOmics with Nextflow 26.04' > hello.txt
    cat hello.txt
    """
}

workflow {
    sayHello()
}

26.04.0 では DSL2 がデフォルトのため、nextflow.enable.dsl=2 の宣言は不要です。この記述で strict v2 構文としてパースされ、検証でもエラーなく実行できました。

nextflow.config

26.04.0 を完全一致で指定します。

manifest.nextflowVersion = '26.04.0'

zip 化とワークフロー登録

2 ファイルをまとめて zip にしてから aws omics create-workflow で登録します。

# ワークフロー定義を zip 化
zip -j workflow.zip main.nf nextflow.config

# ワークフローを登録
aws omics create-workflow \
  --name healthomics-nf2604-hello \
  --engine NEXTFLOW \
  --main main.nf \
  --definition-zip fileb://workflow.zip \
  --region us-east-1
実行結果
{
    "arn": "arn:aws:omics:us-east-1:<account-id>:workflow/7635166",
    "id": "7635166",
    "status": "CREATING",
    "uuid": "24cf48e1-33c0-acdc-203f-d1e22b916250"
}

返却された id を使って、ステータスが ACTIVE になるまで待ちます。

aws omics get-workflow \
  --id 7635166 \
  --region us-east-1

数秒で ACTIVE になります。

実行結果
{
    "id": "7635166", "name": "healthomics-nf2604-hello", "status": "ACTIVE",
    "engine": "NEXTFLOW", "main": "main.nf"
}

ワークフローを実行する

ワークフローが ACTIVE になったら aws omics start-run で run を起動します。

aws omics start-run \
  --workflow-id 7635166 \
  --role-arn arn:aws:iam::<account-id>:role/healthomics-nf2604-service-role \
  --name nf2604-hello-run \
  --output-uri s3://healthomics-nf2604-verify-<account-id>/runs/ \
  --storage-type STATIC \
  --storage-capacity 1200 \
  --region us-east-1
実行結果
{
    "arn": "arn:aws:omics:us-east-1:<account-id>:run/7647325",
    "id": "7647325",
    "status": "PENDING",
    "uuid": "accf48ed-6d14-3faf-c338-85688ee3619a",
    "runOutputUri": "s3://healthomics-nf2604-verify-<account-id>/runs/7647325",
    "networkingMode": "RESTRICTED"
}

今回は STATIC ストレージの挙動を確認するため、あえて --storage-type STATIC を明示しました。STATIC の最小容量は 1200 GiB で、それ以降は 2400 GiB 単位で増やせます。

実行結果を確認する

run の出力は 2 つの経路に分かれます。CloudWatch Logs にはタスクのログ(echo の出力)が記録され、S3 には publishDir で永続ストレージに成果物(hello.txt)が書き出されます。前者は実行ログ、後者は解析成果物という役割の違いがあり、それぞれを確認します。

run ステータスの遷移を確認する

PENDINGSTARTINGRUNNINGSTOPPINGCOMPLETED の順でステータスが変わります。

aws omics get-run \
  --id 7647325 \
  --region us-east-1

statusCOMPLETEDengineVersion26.04.0 になっていることを確認します。

実行結果
{
    "status": "COMPLETED",
    "engineVersion": "26.04.0",
    "creationTime": "2026-06-04T08:58:19.535820+00:00",
    "startTime": "2026-06-04T09:08:58.023000+00:00",
    "stopTime": "2026-06-04T09:17:50.164310+00:00",
    "runOutputUri": "s3://healthomics-nf2604-verify-<account-id>/runs/7647325",
    "uuid": "accf48ed-6d14-3faf-c338-85688ee3619a"
}

使用された Nextflow バージョンを確認する

1 つ目は先ほどの get-runengineVersion、もう 1 つが Nextflow 自身が出力する logs/engine.log の冒頭バナーです。前者は HealthOmics が返すメタデータ、後者は Nextflow エンジンが起動時に記録されます。

S3 から engine.log を取得します。

aws s3 cp s3://healthomics-nf2604-verify-<account-id>/runs/7647325/logs/engine.log -
実行結果(抜粋)
Launching `main.nf` [adoring_williams] - revision: 32ce96864a
  Version: 26.04.0 build 0
  Created: 28-11-2025 10:27 UTC (10:27 GMT)
  Runtime: Groovy 4.0.31 on OpenJDK 64-Bit Server VM 21.0.11+10-LTS
  Main: /mnt/workflow/definition/main.nf
[c7/6f8291] Submitted process > sayHello

バナーの Version: 26.04.0 build 0 が、Nextflow エンジン側から見た実行バージョンです。これが get-runengineVersion26.04.0)と一致しており、指定した 26.04.0 で実行されたと確認できます。

CloudWatch Logs を確認する

ロググループ /aws/omics/WorkflowLog のタスクログストリーム(run/<run-id>/task/<taskId>)に echo 出力が記録されます。

aws logs describe-log-streams \
  --log-group-name /aws/omics/WorkflowLog \
  --log-stream-name-prefix "run/7647325" \
  --region us-east-1

タスクログストリームの内容を取得します。

aws logs get-log-events \
  --log-group-name /aws/omics/WorkflowLog \
  --log-stream-name "run/7647325/task/9900644" \
  --start-from-head \
  --region us-east-1
実行結果
Task started
Hello World from AWS HealthOmics with Nextflow 26.04
Task succeeded

S3 output を確認する

start-runoutputUri に指定したパスの配下に、<run-id>/ プレフィックスで出力が書き出されます。publishDir に置いたファイルは pubdir/ に、engine ログは logs/ に保存されます。

aws s3 ls s3://healthomics-nf2604-verify-<account-id>/runs/7647325/ --recursive
実行結果
runs/7647325/logs/engine.log          (1731 B)
runs/7647325/pubdir/hello.txt          (53 B)

pubdir/hello.txt の中身が、ワークフローで書き出した文字列と一致することを確認します。

aws s3 cp s3://healthomics-nf2604-verify-<account-id>/runs/7647325/pubdir/hello.txt -
実行結果
Hello World from AWS HealthOmics with Nextflow 26.04

これで冒頭に挙げた 3 点をすべて確認できました。

まとめ

AWS HealthOmics で Nextflow 26.04.0 を指定して Hello World を動かす最小手順を確認しました。

おわりに

最近、HealthOmics のアップデートをキャッチアップできていなかったのでコツコツ試して追いかけていきます。

参考

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事