🐓

CWL の requirements 一巡り: NetworkAccess

2020/12/15に公開

この記事は CWL Advent Calendar 2020 の15日目の記事です。

Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]

今回は CWL v1.2 で定義されている NetworkAccess について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。

対象読者

Conformance test #223: tests/networkaccess.cwl:

class: CommandLineTool
cwlVersion: v1.2
requirements:
  DockerRequirement:
    dockerPull: python:3
  NetworkAccess:
    networkAccess: true
inputs: []
outputs: []
baseCommand: python
arguments:
  - "-c"
  - valueFrom: |
      import urllib.request
      assert(urllib.request.urlopen("http://commonwl.org").code == 200)

一般的に、ネットワーク上にあるリソースを参照しないツールやワークフローのほうが再現性を確保しやすいと考えられます。実行時に自動的に必要なファイルのダウンロードを行うようなワークフローはネットワークに制約がある環境では動かなくなる可能性があるため、一層の注意が必要です[2]

NetworkAccess を用いることで、ワークフローのユーザーや計算資源の管理者に注意を促すことができ、また処理系がよりわかりやすいエラーメッセージを出すことが期待できます。

脚注
  1. つまり、Process requiremens を含むワークフローやツール定義は、全ての CWL 準拠のワークフロー実行処理系で動かせるわけではありません。詳細は別記事を参照してください。 ↩︎

  2. CWL では File 型の location フィールドに URI (e.g., http://...https://...)を指定することが可能であるため、ワークフロー内にデータダウンロード用のステップを含めずに、処理系にダウンロードをまかせることが可能な場合があります。ただし file 以外の URI scheme は optional であるため、処理系が目的の URI scheme をサポートしているか気を付ける必要があります。 ↩︎

Discussion