Amazon Omics Workflows の対応言語に CWL が追加されたのでワークフローを実行してみた

2023.07.04

Amazon Omics Workflows の対応言語に Common Workflow Language (CWL) が追加されました。今回のアップデートにより現在のワークフロー言語の対応状況は WDL, Nextflow, CWL の3種類となりました。

なにができるようになったのか?

Omics Workflows は特定のワークフロー言語で記述したワークフローを実行できるマネージドな HPC サービスです。ワークフローの対応言語に CWL が追加されたことにより、オンプレミス環境で CWL で記述したワークフローの資産を流用して Amazon Omics を利用したマネージドなクラウドゲノム解析基盤への移行しやすくなりました。

また、CWL ユーザーが Amazon Omics を利用する動機にもなったのではないでしょうか。

従来 CWL をサポートしている AWS サービスは Amazon Genomics CLI のみでしたが、新たに Amazon Omics も移行先の選択肢の1つとなりました。

CWL で記述したワークフローを Omics Workflows で実行してみる

CWL のワークフローを準備する

変数messageの内容をechoで標準出力に返すワークフローを準備しました。変数の内容は Omics Workflows ではパラメータとしてジョブ実行時に値を書き換えができます。ここではmessageのデフォルトの値はHello Worldとしています。

hello_world.cwl

cwlVersion: v1.2
class: CommandLineTool

baseCommand: echo

# The inputs for this process.
inputs:
  message:
    type: string
    # A default value that can be overridden, e.g. --message "Hola mundo"
    default: "Hello World"
    # Bind this message value as an argument to "echo".
    inputBinding:
      position: 1
outputs: []

CWL ではパラメータ定義用の JSON ファイルが不要になっていました。WDL, Nextflow ではパラメータ定義として今回の例ですとmessageはパラメータで受け取るという JSON ファイルを作成が必要になります。Omics Workflows のお作法で手間ではあったのですが CWL では改善されていました。

A parameter template is not required for workflows written in CWL. Omics auto-detects all the workflow inputs for CWL workflows.

Parameter templates - Amazon Omics

Omics Workflows にプライベートワークフローとして作成したワークフロー定義を登録するためには ZIP で圧縮する必要があります。

$ zip hello.zip hello_world.cwl

CWL で記述したワークフローのファイル(.cwl)を1つだけ圧縮したhello.zipを作成しました。

$ zipinfo -lht hello.zip
Archive:  hello.zip
Zip file size: 395 bytes, number of entries: 1
-rw-r--r--  3.0 unx      332 tx      215 defN 23-Jul-03 18:58 hello_world.cwl
1 file, 332 bytes uncompressed, 215 bytes compressed:  35.2%

以前、ディレクトリの階層により Omics Workflows の実行に失敗したことがありました。ワークフローの定義ファイル(.cwl)はディレクトリ直下にある今回の構成になっていれば問題ありません。

Omics Workflows の操作

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

プライベートワークフローを作成します。ローカルで作成したhello.zipをアップロードしました。ここでも CWL のパラメータについて説明がありました。パラメータ(変数の指定)の設定はワークフロー定義ファイルから自動的にパースしてくれるので設定不要とのことです。

When a workflow is created using the CWL language, the parameter names and descriptions can be automatically parsed from the workflow definition file when you select Create workflow. Select Skip to review and create workflow if you want to use the inputs in the CWL workflow definition file. Select Next to input different parameter information.

CWL 用のパラメータトグルが用意されています。デフォルトで選択されていました。

確認画面を経てプライベートワークフローの登録を完了します。

作成したワークフローの実行

登録したプライベートワークフローを実行します。

パラメータタブを確認してみるとmessageが登録されていました。ワークフロー定義からパラメータ値を解釈して自動登録されています。

自動登録されたパラメータの JSON ファイルをダウンロードできたので確認してみました。この JSON ファイルを手動で作成しなくて済むようになったのは大きいです。

workflow-parameters.json

{
	"message": {
		"description": "",
		"optional": false
	}
}

実行の設定します。出力先の S3 バケットを指定していますが、今回のワークフローは標準出力にパラメータの値を返すだけなので何も出力されません。

ここでパラメータを入力します。Konnichihaに書き換えてみました。

そのまま進めます。

ワークフローを実行します。

経過観察

左ペインの実行から、ワークフローが開始したことがわかります。

Runnigに遷移しました。

Completed表示になり完了しました。

実行結果確認

実行 ID をクリックすると詳細画面が開きます。経過観察していたステータスの流れは CloudWatch Logs から追うことができます。

UNIX タイムスタンプなので変換すると開始から終了まで約30分かかりました。

  • 開始: 2023/07/03 23:06:31
  • 完了: 2023/07/03 23:33:45
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   timestamp   |                                                                      message                                                                      |
|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------|
| 1688393191927 | {"runStatus":"PENDING","logMessage":"CREATING_RUN","message":"Creating your workflow run."}                                                       |
| 1688393193556 | {"runStatus":"STARTING","logMessage":"STARTING_RUN","message":"Provisioning infrastructure for your workflow run."}                               |
| 1688393558457 | {"runStatus":"STARTING","logMessage":"SET_WORKFLOW_TIMEOUT","message":"Your workflow will be timed out after: 10080 minutes."}                    |
| 1688393855959 | {"runStatus":"RUNNING","logMessage":"RUNNING_WORKFLOW","message":"Your workflow is now running."}                                                 |
| 1688393978771 | {"runStatus":"RUNNING","logMessage":"STARTING_TASK","message":"Starting workflow run task: arn:aws:omics:us-east-1:123456789012:task/8582788"}    |
| 1688394130031 | {"runStatus":"RUNNING","logMessage":"RUNNING_TASK","message":"Running workflow run task: arn:aws:omics:us-east-1:123456789012:task/8582788"}      |
| 1688394167445 | {"runStatus":"RUNNING","logMessage":"TASK_COMPLETED","message":"Workflow run task: arn:aws:omics:us-east-1:123456789012:task/8582788 completed."} |
| 1688394349794 | {"runStatus":"RUNNING","logMessage":"EXPORTING_FILES","message":"Exporting your workflow run output."}                                            |
| 1688394495750 | {"runStatus":"RUNNING","logMessage":"EXPORT_COMPLETED","message":"Completed export of workflow run output."}                                      |
| 1688394516411 | {"runStatus":"STOPPING","logMessage":"STOPPING_RUN","message":"Deprovisioning infrastructure for your workflow run."}                             |
| 1688394825974 | {"runStatus":"COMPLETED","logMessage":"RUN_COMPLETED","message":"Workflow run successfully completed."}                                           |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

タスクタブからリンクのある CloudWatch Logs は実行ログを確認できます。

標準出力に内容を確認するとKonnichihaの文字を確認できました。

-------------------------------------------------------
|   timestamp   |               message               |
|---------------|-------------------------------------|
| 1688394129700 | + echo Task hello_world.cwl started |
| 1688394129701 | + cd /mnt/workflow/tmpdir/1dx3odte  |
| 1688394129701 | Task hello_world.cwl started        |
| 1688394129702 | + bash command                      |
| 1688394129709 | Konnichiha                          |
| 1688394129710 | + sync                              |
| 1688394129715 | + EXIT_CODE=0                       |
| 1688394129716 | + '[' 0 -eq 0 ']'                   |
| 1688394129716 | + echo Task succeeded               |
| 1688394129716 | Task succeeded                      |
| 1688394129716 | + exit 0                            |
-------------------------------------------------------

CWL で記述したワークフロー定義も Omics Workflows で実行できることを確認できました。

おわりに

CWL はパラメータ定義ファイルを自作しないで済むのが良い改善でした。Omics Workflows で動かすために必要な作業であって利用者としてはただただ手間な作業でした。WDL, Nextflow も同様の改善が入って欲しいところです。

Omics Workflows はオーバヘッドが大きく Hellow World を実行するだけでも30分もかかり、ちょっとした検証するのにも時間かかります。数時間かかる処理を流すときはオーバヘッドも小さくみえると思いますので良いのですが、簡単な処理を実行するときも30分以上は時間がかかることは念頭においてください。

参考