CWL の requirements 一巡り: NetworkAccess
この記事は CWL Advent Calendar 2020 の15日目の記事です。
Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]。
今回は CWL v1.2 で定義されている NetworkAccess
について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。
対象読者
- CWL をかじったことがあるけど
requirements
はよくわからない人- つまり中級者以上が対象です。
- 初心者は CWL Advent Calendar 2020 の初日の記事へ Go!
例
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
を用いることで、ワークフローのユーザーや計算資源の管理者に注意を促すことができ、また処理系がよりわかりやすいエラーメッセージを出すことが期待できます。
-
つまり、Process requiremens を含むワークフローやツール定義は、全ての CWL 準拠のワークフロー実行処理系で動かせるわけではありません。詳細は別記事を参照してください。 ↩︎
-
CWL では
File
型のlocation
フィールドに URI (e.g.,http://...
やhttps://...
)を指定することが可能であるため、ワークフロー内にデータダウンロード用のステップを含めずに、処理系にダウンロードをまかせることが可能な場合があります。ただしfile
以外の URI scheme は optional であるため、処理系が目的の URI scheme をサポートしているか気を付ける必要があります。 ↩︎
Discussion