

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HealthOmics でのプライベートワークフローの作成
<a name="workflows-setup"></a>

*プライベートワークフロー*は、ワークフローを作成する前に作成および設定するさまざまなリソースによって異なります。
+ **Workflow definition file:** WDL、Nextflow、または で記述されたワークフロー定義ファイルCWL。ワークフロー定義は、ワークフローを使用する実行の入力と出力を指定します。また、コンピューティングやメモリの要件など、ワークフローの実行タスクと実行タスクの仕様も含まれています。ワークフロー定義ファイルは `.zip`形式である必要があります。詳細については、[「ワークフロー定義ファイル](workflow-definition-files.md)」を参照してください。
  + [Amazon Q CLI ](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)を使用して、WDL、Nextflow、CWL でワークフロー定義ファイルを構築および検証できます。詳細については、GitHub の[「Amazon Q CLI のプロンプトの例](getting-started.md#omics-q-prompts)[」およびHealthOmics エージェント生成 AI チュートリアル](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai)」を参照してください。
+ **(Optional) Parameter template file:** で記述されたパラメータテンプレートファイルJSON。ファイルを作成して実行パラメータを定義するか、HealthOmics がパラメータテンプレートを生成します。詳細については、[HealthOmics ワークフローのパラメータテンプレートファイル](parameter-templates.md)」を参照してください。
+ **Amazon ECR container images:** ワークフローのプライベート Amazon ECR リポジトリを作成します。プライベートリポジトリにコンテナイメージを作成するか、サポートされているアップストリームレジストリの内容を Amazon ECR プライベートリポジトリと同期します。
+ **(Optional) Sentieon licenses:** プライベートワークフローでSentieonソフトウェアを使用するSentieonライセンスをリクエストします。

必要に応じて、ワークフローの作成前または作成後に、ワークフロー定義で linter を実行できます。この**linter**トピックでは、HealthOmics で使用できる linters について説明します。

**Topics**
+ [HealthOmics ワークフローと Git ベースのリポジトリの統合](workflows-git-integration.md)
+ [HealthOmics のワークフロー定義ファイル](workflow-definition-files.md)
+ [HealthOmics ワークフローのパラメータテンプレートファイル](parameter-templates.md)
+ [プライベートワークフローのコンテナイメージ](workflows-ecr.md)
+ [HealthOmics ワークフロー README ファイル](workflows-readme.md)
+ [プライベートワークフローの Sentieon ライセンスのリクエスト](private-workflows-subscribe.md)
+ [HealthOmics のワークフローlinters](workflows-linter.md)
+ [HealthOmics ワークフローオペレーション](creating-private-workflows.md)

# HealthOmics ワークフローと Git ベースのリポジトリの統合
<a name="workflows-git-integration"></a>

ワークフロー (またはワークフローバージョン) を作成するときは、ワークフロー定義を指定して、ワークフロー、実行、タスクに関する情報を指定します。HealthOmics は、ワークフロー定義を .zip アーカイブ (ローカルまたは Amazon S3 バケットに保存) として、またはサポートされている Git ベースのリポジトリから取得できます。

HealthOmics と Git ベースのリポジトリを統合すると、次の機能が有効になります。
+ パブリック、プライベート、セルフマネージドインスタンスからの直接ワークフローの作成。
+ リポジトリからのワークフロー README ファイルとパラメータテンプレートの統合。
+ GitHub、GitLab、Bitbucket リポジトリのサポート。

Git ベースのリポジトリを使用することで、ワークフロー定義ファイルと入力パラメータテンプレートファイルをダウンロードし、.zip アーカイブを作成し、アーカイブを S3 にステージングする手動手順を回避できます。これにより、次のようなシナリオのワークフロー作成が簡素化されます。

1. nf-core などの一般的なオープンソースワークフローをすばやく使い始める必要があります。HealthOmics は、GitHub の nf-core リポジトリからすべてのワークフロー定義と入力パラメータテンプレートファイルを自動的に取得し、これらのファイルを使用して新しいワークフローを作成します。

1. GitHub のパブリックワークフローを使用しており、いくつかの新しい更新が利用可能になりました。GitHub で更新されたワークフロー定義をソースとして使用して、新しい HealthOmics ワークフローバージョンを簡単に作成できます。ワークフローのユーザーは、元のワークフローまたは作成した新しいワークフローバージョンを選択できます。

1. チームは、公開されていない独自のパイプラインを構築しています。プライベート git リポジトリにコードを保持し、このワークフロー定義を HealthOmics ワークフローに使用します。チームは、反復ワークフロー開発ライフサイクルの一環としてワークフロー定義を頻繁に更新します。必要に応じて、プライベートリポジトリから新しいワークフローバージョンを簡単に作成できます。

**Topics**
+ [サポートされている Git ベースのリポジトリ](#workflows-git-supported)
+ [外部コードリポジトリへの接続を設定する](#workflows-git-connections)
+ [セルフマネージドリポジトリへのアクセス](#workflows-git-self-managed)
+ [外部コードリポジトリに関連するクォータ](#workflows-git-quotas)
+ [必要な IAM 許可](#workflows-git-permissions)

## サポートされている Git ベースのリポジトリ
<a name="workflows-git-supported"></a>

HealthOmics は、次の Git ベースのプロバイダーのパブリックリポジトリとプライベートリポジトリをサポートしています。
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics は、次の Git ベースのプロバイダーのセルフマネージドリポジトリをサポートしています。
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics は、GitHub、GitLab、Bitbucket のクロスアカウント接続の使用をサポートしています。AWS Resource Access Manager を使用して共有アクセス許可を設定します。例については、*「 CodePipeline ユーザーガイド*」の[「共有接続](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html)」を参照してください。

## 外部コードリポジトリへの接続を設定する
<a name="workflows-git-connections"></a>

AWS CodeConnection を使用してワークフローを Git ベースのリポジトリに接続します。HealthOmics は、この接続を使用してソースコードリポジトリにアクセスします。

**注記**  
AWS CodeConnections サービスは、il-central-1 リージョンでは使用できません。このリージョンでは、リポジトリからワークフローまたはワークフローバージョンを作成するようにサービス us-east-1 を設定します。

### 接続を作成する
<a name="workflows-git-connection-create"></a>

接続を作成する前に、*「 デベロッパーコンソールツールユーザーガイド*」の[「接続の設定](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html)」の手順に従います。

接続を作成するには、「 *デベロッパーコンソールツールユーザーガイド*」の[「接続の作成](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html)」の手順に従います。

### 接続の認可を設定する
<a name="workflows-git-connection-create"></a>

プロバイダーの OAuth フローを使用して接続を承認する必要があります。使用`AVAILABLE`する前に、接続ステータスが であることを確認します。

例については、ブログ記事[「How to Create an AWS HealthOmics Workflows from Content in Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git)」を参照してください。

## セルフマネージドリポジトリへのアクセス
<a name="workflows-git-self-managed"></a>

GitLab セルフマネージドリポジトリへの接続を設定するには、ホストの作成時に管理者の個人用アクセストークンを使用します。後続の接続作成は、顧客のアカウントで Oauth にアクセスします。

次の例では、GitLab セルフマネージドリポジトリへの接続を設定します。

1. 管理者ユーザーの個人用アクセストークンへのアクセスを設定します。

   GitLab セルフマネージドリポジトリで PAT を設定するには、*GitLab Docs *の[「個人用アクセストークン](https://docs.gitlab.com/user/profile/personal_access_tokens/)」を参照してください。

1. ホストを作成する

   1. **CodePipeline>Settings>Connections** に移動します。

   1. **ホスト** タブを選択し、**ホストの作成** を選択します。

   1. 以下のフィールドを設定します。
      + ホストの名前を入力する
      + プロバイダータイプで、**GitLab セルフマネージド** を選択します。
      + **ホスト URL** を入力する 
      + ホストが VPC で定義されている場合は、VPC 情報を入力します。

   1. **Create Host** を選択します。これにより、ホストが PENDING 状態で作成されます。

   1. セットアップを完了するには、**ホストのセットアップ**を選択します。

   1. 管理者ユーザーの個人用アクセストークン (PAT) を入力し、**続行**を選択します。

1. 接続を作成するには

   1. **Connections タブ**で Create **Connections** を選択します。

   1. プロバイダータイプで、**GitLab セルフマネージド**を選択します。

   1. **Connection Settings>Enter Connection Name** に、以前に作成したホスト URL を入力します。

   1. GitLab セルフマネージドインスタンスに VPC 経由でのみアクセスできる場合は、VPC の詳細を設定します。

   1. **保留中の接続の更新**を選択します。モーダルウィンドウは GitLab ログインページにリダイレクトします。

   1. お客様のアカウントのユーザー名とパスワードを入力し、認可プロセスを完了します。

   1.  初めてセットアップする場合は、**AWS Connector for Gitlab セルフマネージドを承認する** を選択します。

## 外部コードリポジトリに関連するクォータ
<a name="workflows-git-quotas"></a>

HealthOmics と外部コードリポジトリの統合の場合、リポジトリ、各リポジトリファイル、および各 README ファイルの最大サイズがあります。詳細については、「[HealthOmics ワークフローの固定サイズクォータ](fixed-quotas.md#fixed-quotas-workflows)」を参照してください。

## 必要な IAM 許可
<a name="workflows-git-permissions"></a>

アイデンティティベースの IAM ポリシーに次のアクションを追加します。

```
   "codeconnections:CreateConnection",
   "codeconnections:GetConnection",
   "codeconnections:GetHost",
   "codeconnections:ListConnections",
   "codeconnections:UseConnection"
```

# HealthOmics のワークフロー定義ファイル
<a name="workflow-definition-files"></a>

ワークフロー定義を使用して、ワークフロー、実行、および実行内のタスクに関する情報を指定します。ワークフロー定義言語を使用して、1 つ以上のファイルにワークフロー定義を作成します。HealthOmics は、WDL、Nextflow、または CWL で記述されたワークフロー定義をサポートしています。

HealthOmics は、WDL ワークフロー定義に対して次の選択肢をサポートしています。
+ WDL – 仕様に準拠した WDL エンジンを提供します。
+ WDL lenient – Cromwell から移行されたワークフローを処理するように設計されています。お客様の Cromwell ディレクティブといくつかの非準拠ロジックをサポートしています。詳細については、「[WDL lenient での暗黙的な型変換](workflow-languages-wdl.md#workflow-wdl-type-conversion)」を参照してください。

各ワークフロー言語の詳細については、以下の言語固有の詳細なセクションを参照してください。

ワークフロー定義では、次のタイプの情報を指定します。
+ **Language version** – ワークフロー定義の言語とバージョン。
+ **Compute and memory** – ワークフロー内のタスクのコンピューティングとメモリの要件。
+ **Inputs** – ワークフロータスクへの入力の場所。詳細については、「[HealthOmics 実行入力](workflows-run-inputs.md)」を参照してください。
+ **Outputs** – タスクが生成する出力を保存する場所。
+ **Task resources** – 各タスクのコンピューティングとメモリの要件。
+ **Accelerators** – アクセラレーターなど、タスクに必要なその他のリソース。

**Topics**
+ [HealthOmics ワークフロー定義の要件](workflow-defn-requirements.md)
+ [HealthOmics ワークフロー定義言語のバージョンサポート](workflows-lang-versions.md)
+ [HealthOmics タスクのコンピューティングとメモリの要件](memory-and-compute-tasks.md)
+ [HealthOmics ワークフロー定義のタスク出力](workflows-task-outputs.md)
+ [HealthOmics ワークフロー定義のタスクリソース](task-resources.md)
+ [HealthOmics ワークフロー定義のタスクアクセラレーター](task-accelerators.md)
+ [WDL ワークフロー定義の詳細](workflow-languages-wdl.md)
+ [Nextflow ワークフロー定義の詳細](workflow-definition-nextflow.md)
+ [CWL ワークフロー定義の詳細](workflow-languages-cwl.md)
+ [ワークフロー定義の例](workflow-definition-examples.md)

# HealthOmics ワークフロー定義の要件
<a name="workflow-defn-requirements"></a>

HealthOmics ワークフロー定義ファイルは、次の要件を満たしている必要があります。
+ タスクでは、入出力パラメータ、Amazon ECR コンテナリポジトリ、メモリや CPU 割り当てなどのランタイム仕様を定義する必要があります。
+ IAM ロールに必要なアクセス許可があることを確認します。<a name="lower"></a>
  + ワークフローは、Amazon S3 などの AWS リソースからの入力データにアクセスできます。
  + ワークフローは、必要に応じて外部リポジトリサービスにアクセスできます。
+ ワークフロー定義で出力ファイルを宣言します。中間実行ファイルを出力場所にコピーするには、それらをワークフロー出力として宣言します。
+ 入力場所と出力場所は、ワークフローと同じリージョンにある必要があります。
+ HealthOmics ストレージワークフロー入力は `ACTIVE`ステータスである必要があります。HealthOmics は `ARCHIVED`ステータスの入力をインポートせず、ワークフローが失敗します。Amazon S3 オブジェクト入力の詳細については、「」を参照してください[HealthOmics 実行入力](workflows-run-inputs.md)。
+ ZIP アーカイブに単一のワークフロー定義または「main」という名前のファイルが含まれている場合、ワークフロー**main**の場所はオプションです。<a name="lower"></a>
  + パスの例: `workflow-definition/main-file.wdl`
+ Amazon S3 またはローカルドライブからワークフローを作成する前に、ワークフロー定義ファイルとサブワークフローなどの依存関係の zip アーカイブを作成します。
+ ワークフロー内の Amazon ECR コンテナを Amazon ECR アクセス許可を検証するための入力パラメータとして宣言することをお勧めします。

Nextflow に関するその他の考慮事項:
+ **/bin**

  Nextflow ワークフロー定義には、実行可能スクリプトを含む /bin フォルダが含まれる場合があります。このパスには、タスクへの読み取り専用アクセスと実行可能アクセスがあります。これらのスクリプトに依存するタスクは、適切なスクリプトインタプリタで構築されたコンテナを使用する必要があります。ベストプラクティスは、インタプリタを直接呼び出すことです。例えば、次のようになります。

  ```
  process my_bin_task {
     ...
     script:
        """
        python3 my_python_script.py
        """
  }
  ```
+ **includeConfig**

  Nextflow ベースのワークフロー定義には、パラメータ定義の抽象化やリソースプロファイルの処理に役立つ nextflow.config ファイルを含めることができます。複数の環境で Nextflow パイプラインの開発と実行をサポートするには、includeConfig ディレクティブを使用してグローバル設定に追加する HealthOmics 固有の設定を使用します。移植性を維持するには、次のコードを使用して HealthOmics で実行されている場合にのみ ファイルを含めるようにワークフローを設定します。

  ```
  // at the end of the nextflow.config file
  if ("$AWS_WORKFLOW_RUN") {
      includeConfig 'conf/omics.config'
  }
  ```
+ **Reports**

  HealthOmics は、エンジンが生成したダグ、トレース、実行レポートをサポートしていません。GetRun と GetRunTask API コールの組み合わせを使用して、トレースレポートと実行レポートに代わるものを生成できます。

CWL に関するその他の考慮事項:
+ **Container image uri interpolation**

  HealthOmics では、DockerRequirement の dockerPull プロパティをインライン javascript 式にすることができます。 DockerRequirement 例えば、次のようになります。

  ```
  requirements:
    DockerRequirement:
      dockerPull: "$(inputs.container_image)"
  ```

  これにより、ワークフローへの入力パラメータとしてコンテナイメージ URIs を指定できます。
+ **Javascript expressions**

  Javascript 式は`strict mode`準拠している必要があります。
+ **Operation process**

  HealthOmics は CWL オペレーションプロセスをサポートしていません。

# HealthOmics ワークフロー定義言語のバージョンサポート
<a name="workflows-lang-versions"></a>

HealthOmics は、Nextflow、WDL、または CWL で記述されたワークフロー定義ファイルをサポートしています。以下のセクションでは、これらの言語の HealthOmics バージョンサポートについて説明します。

**Topics**
+ [WDL バージョンのサポート](#workflows-lang-versions-WDL)
+ [CWL バージョンのサポート](#workflows-lang-versions-CWL)
+ [Nextflow バージョンのサポート](#workflows-lang-versions-nextflow)

## WDL バージョンのサポート
<a name="workflows-lang-versions-WDL"></a>

HealthOmics は、WDL 仕様のバージョン 1.0、1.1、および開発バージョンをサポートしています。

すべての WDL ドキュメントには、準拠する仕様のどのバージョン (メジャーとマイナー) を指定するためのバージョンステートメントが含まれている必要があります。バージョンの詳細については、[「WDL バージョニング](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)」を参照してください。

WDL 仕様のバージョン 1.0 および 1.1 は、 `Directory`タイプをサポートしていません。入力または出力に `Directory`タイプを使用するには、ファイルの最初の行**development**でバージョンを に設定します。

```
version development  # first line of .wdl file
     ... remainder of the file ...
```

## CWL バージョンのサポート
<a name="workflows-lang-versions-CWL"></a>

HealthOmics は、CWL 言語のバージョン 1.0、1.1、および 1.2 をサポートしています。

CWL ワークフロー定義ファイルで言語バージョンを指定できます。CWL の詳細については、[「CWL ユーザーガイド](https://github.com/common-workflow-language/user_guide)」を参照してください。

## Nextflow バージョンのサポート
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics は、3 つの Nextflow 安定バージョンをサポートしています。Nextflow は通常、6 か月ごとに安定したバージョンをリリースします。HealthOmics は毎月の「エッジ」リリースをサポートしていません。

HealthOmics は各バージョンでリリースされた機能をサポートしていますが、プレビュー機能はサポートしていません。

### サポートバージョン
<a name="workflows-versions-nextflow-list"></a>

HealthOmics は、次の Nextflow バージョンをサポートしています。
+ Nextflow v22.04.01 DSL 1 および DSL 2
+ Nextflow v23.10.0 DSL 2 (デフォルト)
+ Nextflow v24.10.8 DSL 2

ワークフローをサポートされている最新バージョン (v24.10.8) に移行するには、[Nextflow アップグレードガイド](https://nextflow.io/docs/latest/migrations/24-10.html)に従います。

Nextflow 移行ガイドの以下のセクションで説明するように、Nextflow v23 から v24 に移行するときに重大な変更があります。
+ [ 24.04 の重大な変更](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [ 24.10 の重大な変更](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Nextflow バージョンを検出して処理する
<a name="workflows-versions-processing"></a>

HealthOmics は、指定した DSL バージョンと Nextflow バージョンを検出します。これらの入力に基づいて、実行する最適な Nextflow バージョンを自動的に決定します。

#### DSL バージョン
<a name="workflows-versions-p1"></a>

HealthOmics は、ワークフロー定義ファイルでリクエストされた DSL バージョンを検出します。たとえば、 を指定できます`nextflow.enable.dsl=2`。

HealthOmics はデフォルトで DSL 2 をサポートしています。ワークフロー定義ファイルで指定されている場合、DSL 1 との下位互換性があります。
+ DSL 2 を指定した場合、Nextflow v22.04.0 または v24.10.8 を指定しない限り、HealthOmics は Nextflow v23.10.0 を実行します。
+ DSL 1 を指定した場合、HealthOmics は Nextflow v22.04 DSL1 (DSL 1 を実行する唯一のサポートされているバージョン) を実行します。
+ DSL バージョンを指定しない場合、または HealthOmics が何らかの理由で DSL 情報を解析できない場合 (ワークフロー定義ファイルの構文エラーなど）、HealthOmics はデフォルトで DSL 2 になり、Nextflow v23.10.0 を実行します。
+ 最新の Nextflow バージョンとソフトウェア機能を利用するためにワークフローを DSL 1 から DSL 2 にアップグレードするには、[「DSL 1 からの移行](https://nextflow.io/docs/latest/dsl1.html)」を参照してください。

#### Nextflow バージョン
<a name="workflows-versions-p2"></a>

HealthOmics は、このファイルを指定すると、Nextflow 設定ファイル (nextflow.config) でリクエストされた Nextflow バージョンを検出します。含まれている設定による予期しない上書きを避けるため、ファイルの最後に `nextflowVersion`句を追加することをお勧めします。詳細については、[「Nextflow 設定](https://nextflow.io/docs/latest/config.html)」を参照してください。

次の構文を使用して、Nextflow バージョンまたはバージョンの範囲を指定できます。

```
   // exact match
   manifest.nextflowVersion = '1.2.3'   
            
   // 1.2 or later (excluding 2 and later)
   manifest.nextflowVersion = '1.2+'         
            
   // 1.2 or later
   manifest.nextflowVersion = '>=1.2'
            
   // any version in the range 1.2 to 1.5
   manifest.nextflowVersion = '>=1.2, <=1.5' 
            
   // use the "!" prefix to stop execution if the current version 
   // doesn't match the required version.
   manifest.nextflowVersion = '!>=1.2'
```

HealthOmics は Nextflow バージョン情報を次のように処理します。
+ **=** を使用して HealthOmics がサポートする正確なバージョンを指定する場合、HealthOmics はそのバージョンを使用します。
+ **\$1** を使用して正確なバージョンまたはサポートされていないバージョンの範囲を指定すると、HealthOmics は例外を発生させ、実行に失敗します。バージョンリクエストに厳密に対応し、リクエストにサポートされていないバージョンが含まれている場合は、このオプションを使用することを検討してください。
+ バージョンの範囲を指定すると、範囲に v24.10.8 が含まれていない限り、HealthOmics はその範囲内でサポートされている最新バージョンを使用します。この場合、HealthOmics は以前のバージョンを優先します。たとえば、範囲が v23.10.0 と v24.10.8 の両方をカバーする場合、HealthOmics は v23.10.0 を選択します。
+ リクエストされたバージョンがない場合、またはリクエストされたバージョンが有効でないか、何らかの理由で解析できない場合:
  + DSL 1 を指定した場合、HealthOmics は Nextflow v22.04 を実行します。
  + それ以外の場合、HealthOmics は Nextflow v23.10.0 を実行します。

 HealthOmics が各実行に使用した Nextflow バージョンに関する次の情報を取得できます。
+ 実行ログには、HealthOmics が実行に使用した実際の Nextflow バージョンに関する情報が含まれています。
+ HealthOmics は、リクエストされたバージョンと直接一致しない場合、または指定したバージョンとは異なるバージョンを使用する必要がある場合に、実行ログに警告を追加します。
+ **GetRun** API オペレーションへのレスポンスには、HealthOmics が実行に使用した実際の Nextflow バージョンを含むフィールド (`engineVersion`) が含まれます。例：

  ```
  "engineVersion":"22.04.0"
  ```

# HealthOmics タスクのコンピューティングとメモリの要件
<a name="memory-and-compute-tasks"></a>

HealthOmics は、オミクスインスタンスでプライベートワークフロータスクを実行します。HealthOmics には、さまざまなタイプのタスクに対応するためのさまざまなインスタンスタイプが用意されています。各インスタンスタイプには、固定メモリと vCPU 設定 (および高速コンピューティングインスタンスタイプの固定 GPU 設定) があります。オミクスインスタンスの使用コストは、インスタンスタイプによって異なります。詳細については、[HealthOmics の料金](https://aws.amazon.com/healthomics/pricing/)ページを参照してください。

ワークフロー内のタスクでは、ワークフロー定義ファイルに必要なメモリと vCPUsを指定します。ワークフロータスクを実行すると、HealthOmics はリクエストされたメモリと vCPUs。たとえば、タスクに 64 GiB のメモリと 8 vCPUs が必要な場合、HealthOmics は を選択します`omics.r.2xlarge`。

インスタンスタイプを確認し、ニーズに最適なインスタンスに合わせてリクエストされた vCPUsとメモリサイズを設定することをお勧めします。タスクコンテナは、インスタンスタイプに追加の vCPUsとメモリがある場合でも、ワークフロー定義ファイルで指定した vCPUsの数とメモリサイズを使用します。

次のリストには、vCPU とメモリの割り当てに関する追加情報が含まれています。
+ コンテナリソースの割り当てはハード制限です。タスクのメモリが不足した場合、または追加の vCPUsを使用しようとすると、タスクはエラーログを生成して終了します。
+ コンピューティングまたはメモリの要件を指定しない場合、HealthOmics は 1 vCPU **omics.c.large** と 1 GiB のメモリを持つ設定を選択し、デフォルトに設定します。
+ リクエストできる最小設定は、1 vCPU と 1 GiB のメモリです。
+ サポートされているインスタンスタイプを超える vCPUs、メモリ、または GPUs を指定すると、HealthOmics はエラーメッセージをスローし、ワークフローは検証に失敗します。
+ 小数単位を指定すると、HealthOmics は最も近い整数に切り上げられます。
+ HealthOmics は、管理エージェントとログ記録エージェント用に少量のメモリ (5%) を予約するため、タスク内のアプリケーションで常に完全なメモリ割り当てが利用できるとは限りません。
+ HealthOmics は、指定したコンピューティング要件とメモリ要件に合わせてインスタンスタイプに一致し、ハードウェア世代が混在する場合があります。このため、同じタスクのタスク実行時間に若干の差異が生じる可能性があります。

これらのトピックでは、HealthOmics がサポートするインスタンスタイプについて詳しく説明します。

**Topics**
+ [標準インスタンスタイプ](#workflow-task-standard-instances)
+ [コンピューティング最適化インスタンス](#workflow-task-compute-optimized-instances)
+ [メモリ最適化インスタンス](#workflow-task-memory-optimized-instances)
+ [高速コンピューティングインスタンス](#workflow-task-accelerated-computing-instances)

**注記**  
 標準インスタンス、コンピューティングインスタンス、メモリ最適化インスタンスの場合、インスタンスのスループットを向上させる必要がある場合は、インスタンスの帯域幅サイズを増やします。vCPUs (サイズ 4xl 以下) の Amazon EC2 インスタンスでは、スループットがバーストする可能性があります。Amazon EC2 インスタンスのスループットの詳細については、[Amazon EC2 の使用可能なインスタンス帯域幅](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth)」を参照してください。

## 標準インスタンスタイプ
<a name="workflow-task-standard-instances"></a>

標準インスタンスタイプの場合、設定はコンピューティング能力とメモリのバランスを目指しています。

HealthOmics は、米国西部 (オレゴン) および米国東部 (バージニア北部) のリージョンで 32xlarge および 48xlarge インスタンスをサポートしています。


| インスタンス | vCPUs の数 | メモリ | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiB | 
| omics.m.xlarge | 4 | 16 GiB | 
| omics.m.2xlarge | 8 | 32 GiB | 
| omics.m.4xlarge | 16 | 64 GiB | 
| omics.m.8xlarge | 32 | 128 GiB | 
| omics.m.12xlarge | 48 | 192 GiB | 
| omics.m.16xlarge | 64 | 256 GiB | 
| omics.m.24xlarge | 96 | 384 GiB | 
| omics.m.32xlarge | 128 | 512 GiB | 
| omics.m.48xlarge | 192 | 768 GiB | 

## コンピューティング最適化インスタンス
<a name="workflow-task-compute-optimized-instances"></a>

コンピューティング最適化インスタンスタイプの場合、設定はコンピューティング能力が高く、メモリが少なくなります。

HealthOmics は、米国西部 (オレゴン) および米国東部 (バージニア北部) のリージョンで 32xlarge および 48xlarge インスタンスをサポートしています。


| インスタンス | vCPUs の数 | メモリ | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| omics.c.2xlarge | 8 | 16 GiB | 
| omics.c.4xlarge | 16 | 32 GiB | 
| omics.c.8xlarge | 32 | 64 GiB | 
| omics.c.12xlarge | 48 | 96 GiB | 
| omics.c.16xlarge | 64 | 128 GiB | 
| omics.c.24xlarge | 96 | 192 GiB | 
| omics.c.32xlarge | 128 | 256 GiB | 
| omics.c.48xlarge | 192 | 384 GiB | 

## メモリ最適化インスタンス
<a name="workflow-task-memory-optimized-instances"></a>

メモリ最適化インスタンスタイプの場合、設定はコンピューティング能力が低く、メモリが多くなります。

HealthOmics は、米国西部 (オレゴン) および米国東部 (バージニア北部) のリージョンで 32xlarge および 48xlarge インスタンスをサポートしています。


| インスタンス | vCPUs の数 | メモリ | 
| --- | --- | --- | 
| omics.r.large | 2 | 16 GiB | 
| omics.r.xlarge | 4 | 32 GiB | 
| omics.r.2xlarge | 8 | 64 GiB | 
| omics.r.4xlarge | 16 | 128 GiB | 
| omics.r.8xlarge | 32 | 256 GiB | 
| omics.r.12xlarge | 48 | 384 GiB | 
| omics.r.16xlarge | 64 | 512 GiB | 
| omics.r.24xlarge | 96 | 768 GiB | 
| omics.r.32xlarge | 128 | 1024 GiB | 
| omics.r.48xlarge | 192 | 1536 GiB | 

## 高速コンピューティングインスタンス
<a name="workflow-task-accelerated-computing-instances"></a>

必要に応じて、ワークフロー内のタスクごとに GPU リソースを指定して、HealthOmics がタスクに高速コンピューティングインスタンスを割り当てるようにすることができます。ワークフロー定義ファイルで GPU 情報を指定する方法については、「」を参照してください[HealthOmics ワークフロー定義のタスクアクセラレーター](task-accelerators.md)。

複数のインスタンスタイプをサポートするタスクアクセラレーターを指定すると、HealthOmics は可用性に基づいてインスタンスタイプを選択します。複数のインスタンスタイプが使用可能な場合、HealthOmics は低コストのインスタンスを優先します。ただし、nvidia-t4-a10g-l4 タスクアクセラレーターは例外であり、 はリージョンで使用できる最新世代のインスタンスを優先します。

G4 インスタンスは、イスラエル (テルアビブ) リージョンではサポートされていません。G5 インスタンスは、アジアパシフィック (シンガポール) リージョンではサポートされていません。



**Topics**
+ [G6 および G6e インスタンスタイプ](#workflow-task-accelerated-accelerated-g6)
+ [G4 および G5 インスタンス](#workflow-task-accelerated-accelerated-g45)

### G6 および G6e インスタンスタイプ
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics は、次の G6 高速コンピューティングインスタンス設定をサポートしています。すべての omics.g6 インスタンスは Nvidia L4 GPUs を使用します。

HealthOmics は、米国西部 (オレゴン) および米国東部 (バージニア北部) のリージョンで G6 および G6e インスタンスをサポートしています。


| インスタンス | vCPUs の数 | メモリ | GPUs の数 | GPU メモリ | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g6.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g6.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g6.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g6.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g6.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g6.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

すべての omics.g6e インスタンスは Nvidia L40s GPUs を使用します。


| インスタンス | vCPUs の数 | メモリ | GPUs の数 | GPU メモリ | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4xlarge | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8xlarge | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12xlarge | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16xlarge | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24xlarge | 96 | 768 GiB | 4 | 192 GiB | 

### G4 および G5 インスタンス
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics は、次の G4 および G5 高速コンピューティングインスタンス設定をサポートしています。

すべての omics.g5 インスタンスは Nvidia Tesla A10G GPUs を使用します。


| インスタンス | vCPUs の数 | メモリ | GPUs の数 | GPU メモリ | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g5.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g5.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g5.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g5.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g5.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

すべての omics.g4dn インスタンスは Nvidia Tesla T4 GPUsを使用します。


| インスタンス | vCPUs の数 | メモリ | GPUs の数 | GPU メモリ | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xlarge | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xlarge | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn.12xlarge | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 

# HealthOmics ワークフロー定義のタスク出力
<a name="workflows-task-outputs"></a>

ワークフロー定義でタスク出力を指定します。デフォルトでは、ワークフローが完了すると HealthOmics はすべての中間タスクファイルを破棄します。中間ファイルをエクスポートするには、出力として定義します。

コールキャッシュを使用する場合、HealthOmics は出力として定義した中間ファイルを含め、タスク出力をキャッシュに保存します。

以下のトピックでは、各ワークフロー定義言語のタスク定義の例を示します。

**Topics**
+ [WDL のタスク出力](#workflow-task-outputs-wdl)
+ [Nextflow のタスク出力](#workflow-task-outputs-nextflow)
+ [CWL のタスク出力](#workflow-task-outputs-cwl)

## WDL のタスク出力
<a name="workflow-task-outputs-wdl"></a>

WDL で記述されたワークフロー定義については、最上位のワークフロー**outputs**セクションで出力を定義します。

Omics

**Topics**
+ [STDOUT のタスク出力](#task-outputs-wdl-stdout)
+ [STDERR のタスク出力](#task-outputs-wdl-stderr)
+ [ファイルへのタスク出力](#task-outputs-wdl-file)
+ [ファイルの配列へのタスク出力](#task-outputs-wdl-files)

### STDOUT のタスク出力
<a name="task-outputs-wdl-stdout"></a>

この例では、STDOUT コンテンツをタスク出力ファイルにエコー`SayHello`する という名前のタスクを作成します。WDL **stdout**関数は、STDOUT コンテンツ (この例では、入力文字列 **Hello World\$1**) をファイル にキャプチャします**stdout\$1file**。

HealthOmics はすべての STDOUT コンテンツのログを作成するため、出力はタスクの他の STDERR ログ情報とともに CloudWatch Logs にも表示されます。

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stdout_file = SayHello.stdout_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" 
        echo "Current date: $(date)"
        echo "This message was printed to STDOUT"
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stdout_file = stdout()
    }
}
```

### STDERR のタスク出力
<a name="task-outputs-wdl-stderr"></a>

この例では、STDERR コンテンツをタスク出力ファイルにエコー`SayHello`する という名前のタスクを作成します。WDL **stderr**関数は、STDERR コンテンツ (この例では、入力文字列 **Hello World\$1**) をファイル にキャプチャします**stderr\$1file**。

HealthOmics はすべての STDERR コンテンツのログを作成するため、出力はタスクの他の STDERR ログ情報とともに CloudWatch Logs に表示されます。

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stderr_file = SayHello.stderr_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" >&2
        echo "Current date: $(date)" >&2
        echo "This message was printed to STDERR" >&2
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stderr_file = stderr()
    }
}
```

### ファイルへのタスク出力
<a name="task-outputs-wdl-file"></a>

この例では、SayHello タスクは 2 つのファイル (message.txt と info.txt) を作成し、これらのファイルを名前付き出力 (message\$1file と info\$1file) として明示的に宣言します。

```
version 1.0
workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File message_file = SayHello.message_file
        File info_file = SayHello.info_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        # Create message file
        echo "~{message}" > message.txt
        
        # Create info file with date and additional information
        echo "Current date: $(date)" > info.txt
        echo "This message was saved to a file" >> info.txt
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File message_file = "message.txt"
        File info_file = "info.txt"
    } 
}
```

### ファイルの配列へのタスク出力
<a name="task-outputs-wdl-files"></a>

この例では、`GenerateGreetings`タスクはファイルの配列をタスク出力として生成します。タスクは、入力配列 のメンバーごとに 1 つの挨拶ファイルを動的に生成します`names`。ファイル名はランタイムまでわからないため、出力定義は WDL glob() 関数を使用してパターン に一致するすべてのファイルを出力します`*_greeting.txt`。

```
version 1.0
 workflow HelloArray {
    input {
        Array[String] names = ["World", "Friend", "Developer"]
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call GenerateGreetings {
        input:
            names = names,
            container = ubuntu_container
    }

    output {
        Array[File] greeting_files = GenerateGreetings.greeting_files
    }
}

task GenerateGreetings {
    input {
        Array[String] names
        String container
    }

    command  <<<
        # Create a greeting file for each name
        for name in ~{sep=" " names}; do
            echo "Hello, $name!" > ${name}_greeting.txt
        done
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        Array[File] greeting_files = glob("*_greeting.txt")
    }       
 }
```

## Nextflow のタスク出力
<a name="workflow-task-outputs-nextflow"></a>

Nextflow で記述されたワークフロー定義の場合、タスクコンテンツを出力 Amazon S3 バケットにエクスポートする **publishDir** ディレクティブを定義します。**publishDir** 値を に設定します`/mnt/workflow/pubdir`。

HealthOmics がファイルを Amazon S3 にエクスポートするには、ファイルがこのディレクトリにある必要があります。

タスクが後続のタスクへの入力として使用する出力ファイルのグループを生成する場合は、これらのファイルをディレクトリにグループ化し、そのディレクトリをタスク出力として出力することをお勧めします。個々のファイルを列挙すると、基盤となるファイルシステムで I/O ボトルネックが発生する可能性があります。例:

```
process my_task {
      ...
      // recommended
      output "output-folder/", emit: output
      
      // not recommended
      // output "output-folder/**", emit: output
      ...
  }
```

## CWL のタスク出力
<a name="workflow-task-outputs-cwl"></a>

CWL で記述されたワークフロー定義では、タスクを使用して`CommandLineTool`タスク出力を指定できます。以下のセクションでは、さまざまなタイプの出力を定義する`CommandLineTool`タスクの例を示します。

**Topics**
+ [STDOUT のタスク出力](#task-outputs-cwl-stdout)
+ [STDERR のタスク出力](#task-outputs-cwl-stderr)
+ [ファイルへのタスク出力](#task-outputs-cwl-file)
+ [ファイルの配列へのタスク出力](#task-outputs-cwl-files)

### STDOUT のタスク出力
<a name="task-outputs-cwl-stdout"></a>

この例では、STDOUT コンテンツを という名前のテキスト出力ファイルにエコーする`CommandLineTool`タスクを作成します**output.txt**。たとえば、次の入力を指定すると、結果のタスク出力は **output.txt** ファイル内の **Hello World\$1** になります。

```
{
    "message": "Hello World!"
}
```

`outputs` ディレクティブは、出力名を **example\$1out**に、タイプを に指定します`stdout`。ダウンストリームタスクがこのタスクの出力を消費するには、出力を と呼びます`example_out`。

HealthOmics はすべての STDERR および STDOUT コンテンツのログを作成するため、出力はタスクの他の STDERR ログ情報とともに CloudWatch Logs にも表示されます。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: echo
stdout: output.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
outputs:
  example_out:
    type: stdout

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### STDERR のタスク出力
<a name="task-outputs-cwl-stderr"></a>

この例では、STDERR コンテンツを という名前のテキスト出力ファイルにエコーする`CommandLineTool`タスクを作成します**stderr.txt**。タスクは、 が (STDOUT ではなく) STDERR に`echo`書き込む`baseCommand`ように を変更します。

`outputs` ディレクティブは、出力名を **stderr\$1out**に、タイプを に指定します`stderr`。

HealthOmics はすべての STDERR および STDOUT コンテンツのログを作成するため、出力はタスクの他の STDERR ログ情報とともに CloudWatch Logs に表示されます。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [bash, -c]
stderr: stderr.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
      shellQuote: true
      valueFrom: "echo $(self) >&2"
outputs:
  stderr_out:
    type: stderr

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### ファイルへのタスク出力
<a name="task-outputs-cwl-file"></a>

この例では、入力ファイルから圧縮された tar アーカイブを作成する`CommandLineTool`タスクを作成します。アーカイブの名前を入力パラメータ (archive\$1name) として指定します。

**outputs** ディレクティブは、`archive_file`出力タイプが であることを指定し`File`、入力パラメータへの参照を使用して出力ファイルに`archive_name`バインドします。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, cfz]
inputs:
  archive_name:
    type: string
    inputBinding:
      position: 1
  input_files:
    type: File[]
    inputBinding:
      position: 2
      
outputs:
  archive_file:
    type: File
    outputBinding:
      glob: "$(inputs.archive_name)"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### ファイルの配列へのタスク出力
<a name="task-outputs-cwl-files"></a>

この例では、`CommandLineTool`タスクは `touch` コマンドを使用してファイルの配列を作成します。コマンドは、`files-to-create`入力パラメータの文字列を使用してファイルに名前を付けます。コマンドはファイルの配列を出力します。配列には、`glob`パターンに一致する作業ディレクトリ内のすべてのファイルが含まれます。この例では、すべてのファイルに一致するワイルドカードパターン (「\$1」) を使用しています。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: touch
inputs:
  files-to-create:
    type:
      type: array
      items: string
    inputBinding:
      position: 1
outputs:
  output-files:
    type:
      type: array
      items: File
    outputBinding:
      glob: "*"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

# HealthOmics ワークフロー定義のタスクリソース
<a name="task-resources"></a>

ワークフロー定義で、タスクごとに以下を定義します。
+ タスクのコンテナイメージ。詳細については、「[プライベートワークフローのコンテナイメージ](workflows-ecr.md)」を参照してください。
+ タスクに必要な CPUsとメモリの数。詳細については、「[HealthOmics タスクのコンピューティングとメモリの要件](memory-and-compute-tasks.md)」を参照してください。

HealthOmics は、タスクごとのストレージ仕様を無視します。HealthOmics は、実行内のすべてのタスクがアクセスできる実行ストレージを提供します。詳細については、「[HealthOmics ワークフローでストレージタイプを実行する](workflows-run-types.md)」を参照してください。

------
#### [ WDL ]

```
task my_task {
   runtime {
      container: "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
      cpu: 2
      memory: "4 GB"
   }
   ...
}
```

WDL ワークフローの場合、HealthOmics はサービスエラーのために失敗したタスクに対して最大 2 回の再試行を試みます (API リクエストは 5XX HTTP ステータスコードを返します）。タスクの再試行の詳細については、「」を参照してください[タスクの再試行](monitoring-runs.md#run-status-task-retries)。

WDL 定義ファイルでタスクに次の設定を指定することで、再試行動作をオプトアウトできます。

```
runtime {
   preemptible: 0
}
```

------
#### [ NextFlow ]

```
process my_task {
   container "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
   cpus 2
   memory "4 GiB"
   ...
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: CommandLineTool
requirements:
    DockerRequirement:
        dockerPull: "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
    ResourceRequirement:
        coresMax: 2
        ramMax: 4000 # specified in mebibytes
```

------

# HealthOmics ワークフロー定義のタスクアクセラレーター
<a name="task-accelerators"></a>

ワークフロー定義では、オプションでタスクの GPU アクセラレーター仕様を指定できます。HealthOmics は、次のアクセラレーター仕様の値と、サポートされているインスタンスタイプをサポートしています。


| アクセラレーター仕様 | Healthomics インスタンスタイプ | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-a10g | G4 と G5 | 
| nvidia-tesla-a10g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5、G6 | 
| nvidia-l4-a10g | G5 と G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40s | G6e | 

複数のインスタンスタイプをサポートするアクセラレータータイプを指定すると、HealthOmics は使用可能な容量に基づいてインスタンスタイプを選択します。両方のインスタンスタイプが使用可能な場合、HealthOmics は低コストのインスタンスを優先します。ただし、使用可能な最新世代のインスタンスを優先する nvidia-t4-a10g-l4 タスクアクセラレーターは例外です。

インスタンスタイプの詳細については、「」を参照してください[高速コンピューティングインスタンス](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances)。

次の例では、ワークフロー定義で をアクセラレーター`nvidia-l4`として指定します。

------
#### [ WDL ]

```
task my_task {
 runtime {
    ...
    acceleratorCount: 1
    acceleratorType: "nvidia-l4"
 }
 ...
}
```

------
#### [ NextFlow ]

```
process my_task {
 ...
 accelerator 1, type: "nvidia-l4"
 ...
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: CommandLineTool
requirements:
  ...
  cwltool:CUDARequirement:
      cudaDeviceCountMin: 1
      cudaComputeCapability: "nvidia-l4"
      cudaVersionMin: "1.0"
```

------

# WDL ワークフロー定義の詳細
<a name="workflow-languages-wdl"></a>

以下のトピックでは、HealthOmics の WDL ワークフロー定義で使用できるタイプとディレクティブについて詳しく説明します。

**Topics**
+ [WDL lenient での暗黙的な型変換](#workflow-wdl-type-conversion)
+ [input.json の名前空間定義](#workflow-wdl-namespace-defn)
+ [WDL のプリミティブ型](#workflow-wdl-primitive-types)
+ [WDL の複雑なタイプ](#workflow-wdl-complex-types)
+ [WDL のディレクティブ](#workflow-wdl-directives)
+ [WDL のタスクメタデータ](#workflow-wdl-task-metadata)
+ [WDL ワークフロー定義の例](#wdl-example)

## WDL lenient での暗黙的な型変換
<a name="workflow-wdl-type-conversion"></a>

HealthOmics は、input.json ファイルとワークフロー定義で暗黙的な型変換をサポートしています。暗黙的な型キャストを使用するには、ワークフローを作成するときにワークフローエンジンを WDL lenient として指定します。WDL lenient は、Cromwell から移行されたワークフローを処理するように設計されています。お客様の Cromwell ディレクティブといくつかの非準拠ロジックをサポートしています。

WDL lenient は、WDL の制限[された例外](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)のリストで、以下の項目の型変換をサポートしています。
+ Int に浮動します。この場合、強制によって精度が失われることはありません (1.0 は 1 にマップされます）。
+ Int/Float への文字列。強制によって精度が失われることはありません。
+ W が Y に強制され、X が Z に強制される場合、[W, X] を配列[Pair[Y, Z]] にマッピングします。
+ Array[Pair[W, X]] を Map[Y, Z] に。W が Y に強制され、X が Z に強制される場合 (1.0 マップが 1 など）。

暗黙的な型キャストを使用するには、ワークフローまたはワークフローバージョンを作成するときに、ワークフローエンジンを WDL\$1LENIENT として指定します。

コンソールでは、ワークフローエンジンパラメータの名前は **Language** です。API では、ワークフローエンジンパラメータに **engine** という名前が付けられます。詳細については、[プライベートワークフローを作成する](create-private-workflow.md)または[ワークフローバージョンを作成する](workflows-version-create.md)を参照してください。

## input.json の名前空間定義
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics は input.json で完全修飾変数をサポートしています。たとえば、ワークフロー **SumWorkflow** で number1 と number2 という名前の 2 つの入力変数を宣言するとします。

```
workflow SumWorkflow {
  input {
    Int number1
    Int number2
  }
}
```

 input.json では、完全修飾変数として使用できます。

```
{
    "SumWorkflow.number1": 15,
    "SumWorkflow.number2": 27
}
```

## WDL のプリミティブ型
<a name="workflow-wdl-primitive-types"></a>

次の表は、WDL の入力が一致するプリミティブタイプにどのようにマッピングされるかを示しています。HealthOmics では型強制のサポートが制限されているため、明示的な型を設定することをお勧めします。


**プリミティブ型**  

| WDL タイプ | JSON タイプ | WDL の例 | JSON キーと値の例 | 注意事項 | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | 値は小文字で、引用符で囲まない必要があります。 | 
| Int | integer | Int i | "i": 7 | 引用符で囲まない必要があります。 | 
| Float | number | Float f | "f": 42.2 | 引用符で囲まない必要があります。 | 
| String | string | String s | "s": "characters" | URI である JSON 文字列は、インポートする WDL ファイルにマッピングする必要があります。 | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 および HealthOmics ストレージ URIs は、ワークフローに提供される IAM ロールがこれらのオブジェクトへの読み取りアクセス権を持っている限りインポートされます。他の URI スキームはサポートされていません (file://、https://、 などftp://)。URI は オブジェクトを指定する必要があります。ディレクトリにすることはできません。つまり、 で終わることはできません/。 | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | Directory タイプは WDL 1.0 または 1.1 に含まれていないため、WDL ファイルの ヘッダーversion developmentに を追加する必要があります。URI は Amazon S3 URI で、プレフィックスが '/' で終わる必要があります。ディレクトリのすべてのコンテンツは、1 回のダウンロードとしてワークフローに再帰的にコピーされます。には、ワークフローに関連するファイルのみを含めるDirectory必要があります。 | 

## WDL の複雑なタイプ
<a name="workflow-wdl-complex-types"></a>

次の表は、WDL の入力が一致する複雑な JSON タイプにどのようにマッピングされるかを示しています。WDL の複雑な型は、プリミティブ型で構成されるデータ構造です。リストなどのデータ構造は配列に変換されます。


**複合型**  

| WDL タイプ | JSON タイプ | WDL の例 | JSON キーと値の例 | 注意事項 | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | 配列のメンバーは、WDL 配列タイプの形式に従う必要があります。 | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | ペアの各値は、一致する WDL タイプの JSON 形式を使用する必要があります。 | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | マップの各エントリは、一致する WDL タイプの JSON 形式を使用する必要があります。 | 
| Struct | object | <pre>struct SampleBamAndIndex { <br />  String sample_name <br />  File bam <br />  File bam_index <br />} SampleBamAndIndex b_and_i</pre>  |  <pre>"b_and_i": { <br />   "sample_name": "NA12878", <br />   "bam": "s3://amzn-s3-demo-bucket1/NA12878.bam", <br />   "bam_index": "s3://amzn-s3-demo-bucket1/NA12878.bam.bai" <br />}           </pre>  | 構造体メンバーの名前は、JSON オブジェクトキーの名前と完全に一致する必要があります。各値は、一致する WDL タイプの JSON 形式を使用する必要があります。 | 
| Object | 該当なし | 該当なし | 該当なし | WDL Objectタイプは古いため、いずれの場合Structも に置き換える必要があります。 | 

## WDL のディレクティブ
<a name="workflow-wdl-directives"></a>

HealthOmics は、HealthOmics がサポートするすべての WDL バージョンで次のディレクティブをサポートしています。

### GPU リソースを設定する
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics は、サポートされているすべての [GPU インスタンス](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html)**acceleratorCount**でランタイム属性 **acceleratorType**と をサポートします。HealthOmics は**gpuCount**、アクセラレーターと同じ機能を持つ **gpuType**および という名前のエイリアスもサポートしています。WDL 定義に両方のディレクティブが含まれている場合、HealthOmics はアクセラレーター値を使用します。

次の例は、これらのディレクティブを使用する方法を示しています。

```
runtime {
    gpuCount: 2
    gpuType: "nvidia-tesla-t4"
}
```

### サービスエラーのタスク再試行を設定する
<a name="workflow-wdl-task-retry"></a>

HealthOmics は、サービスエラー (5XX HTTP ステータスコード) のために失敗したタスクに対して最大 2 回の再試行をサポートします。最大再試行回数 (1 または 2) を設定し、サービスエラーの再試行をオプトアウトできます。デフォルトでは、HealthOmics は最大 2 回の再試行を試みます。

次の例では`preemptible`、 がサービスエラーの再試行をオプトアウトするように を設定します。

```
{
  preemptible: 0 
}
```

HealthOmics でのタスクの再試行の詳細については、「」を参照してください[タスクの再試行](monitoring-runs.md#run-status-task-retries)。

### メモリ不足のタスク再試行を設定する
<a name="workflow-wdl-retries"></a>

HealthOmics は、メモリ不足 (コンテナ終了コード 137、4XX HTTP ステータスコード) のために失敗したタスクの再試行をサポートしています。HealthOmics は、再試行するたびにメモリの量を 2 倍にします。

デフォルトでは、HealthOmics はこのタイプの障害を再試行しません。`maxRetries` ディレクティブを使用して、最大再試行回数を指定します。

次の例では、 を 3 `maxRetries`に設定するため、HealthOmics はタスクの完了を最大 4 回試行します (最初の試行と 3 回の再試行）。

```
runtime {
    maxRetries: 3
}
```

**注記**  
メモリ不足のタスク再試行には、GNU findutils 4.2.3\$1 が必要です。デフォルトの HealthOmics イメージコンテナには、このパッケージが含まれています。WDL 定義でカスタムイメージを指定する場合は、そのイメージに GNU findutils 4.2.3\$1 が含まれていることを確認してください。

### リターンコードを設定する
<a name="workflow-wdl-directive-returnCodes"></a>

**returnCodes** 属性は、タスクが正常に実行されたことを示すリターンコードまたは一連のリターンコードを指定するメカニズムを提供します。WDL エンジンは、WDL 定義の**ランタイム**セクションで指定したリターンコードを尊重し、それに応じてタスクのステータスを設定します。

```
runtime {
    returnCodes: 1
}
```

HealthOmics は、returnCodes と同じ機能を持つ **continueOnReturnCode** という名前のエイリアスもサポートしています。 **returnCodes** 両方の属性を指定すると、HealthOmics は **returnCodes** 値を使用します。

## WDL のタスクメタデータ
<a name="workflow-wdl-task-metadata"></a>

HealthOmics は、WDL タスクに対して次のメタデータオプションをサポートしています。

### volatile 属性を使用してタスクレベルのキャッシュを無効にする
<a name="workflow-wdl-volatile-attribute"></a>

**volatile** 属性を使用すると、WDL ワークフロー内の特定のタスクのコールキャッシュを無効にすることができます。タスクが揮発性としてマークされると、実行に対してキャッシュが有効になっている場合でも、常に実行され、キャッシュされた結果は使用されません。

タスク定義の**メタ**セクションに **volatile** 属性を追加します。

```
task my_volatile_task {
    meta {
        volatile: true
    }
    
    input {
        String input_file
    }
    
    command {
        echo "Processing ${input_file}" > output.txt
    }
    
    output {
        File result = "output.txt"
    }
}
```

## WDL ワークフロー定義の例
<a name="wdl-example"></a>

次の例は、WDL `BAM`で から `CRAM` に変換するためのプライベートワークフロー定義を示しています。`CRAM` から `BAM` ワークフローへの は 2 つのタスクを定義し、`genomes-in-the-cloud`コンテナのツールを使用します。この例は、一般公開されています。

次の例は、Amazon ECR コンテナをパラメータとして含める方法を示しています。これにより、HealthOmics は実行を開始する前にコンテナへのアクセス許可を検証できます。

```
{
   ...
   "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710"
}
```

次の例は、ファイルが Amazon S3 バケットにある場合に、実行で使用するファイルを指定する方法を示しています。

```
{
    "input_cram": "s3://amzn-s3-demo-bucket1/inputs/NA12878.cram",
    "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict",
    "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta",
    "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai",
    "sample_name": "NA12878"
}
```

シーケンスストアからファイルを指定する場合は、次の例に示すように、シーケンスストアの URI を使用して を指定します。

```
{
    "input_cram": "omics://429915189008.storage.us-west-2.amazonaws.com/111122223333/readSet/4500843795/source1",
    "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict",
    "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta",
    "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai",
    "sample_name": "NA12878"
}
```

その後、次の例に示すように、WDL でワークフローを定義できます。

```
 version 1.0
workflow CramToBamFlow {
    input {
        File ref_fasta
        File ref_fasta_index
        File ref_dict
        File input_cram
        String sample_name
        String gotc_docker = "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-
cloud:latest"
    }
    #Converts CRAM to SAM to BAM and makes BAI.
    call CramToBamTask{
         input:
            ref_fasta = ref_fasta,
            ref_fasta_index = ref_fasta_index,
            ref_dict = ref_dict,
            input_cram = input_cram,
            sample_name = sample_name,
            docker_image = gotc_docker,
     }
     #Validates Bam.
     call ValidateSamFile{
        input:
           input_bam = CramToBamTask.outputBam,
           docker_image = gotc_docker,
     }
     #Outputs Bam, Bai, and validation report to the FireCloud data model.
     output {
         File outputBam = CramToBamTask.outputBam
         File outputBai = CramToBamTask.outputBai
         File validation_report = ValidateSamFile.report
      }
}
#Task definitions.
task CramToBamTask {
    input {
       # Command parameters
       File ref_fasta
       File ref_fasta_index
       File ref_dict
       File input_cram
       String sample_name
       # Runtime parameters
       String docker_image
    }
   #Calls samtools view to do the conversion.
   command {
       set -eo pipefail

       samtools view -h -T ~{ref_fasta} ~{input_cram} |
       samtools view -b -o ~{sample_name}.bam -
       samtools index -b ~{sample_name}.bam
       mv ~{sample_name}.bam.bai ~{sample_name}.bai
    }
    
    #Runtime attributes:
    runtime {
        docker: docker_image
    }

    #Outputs a BAM and BAI with the same sample name
     output {
         File outputBam = "~{sample_name}.bam"
         File outputBai = "~{sample_name}.bai"
    }
}

#Validates BAM output to ensure it wasn't corrupted during the file conversion.
task ValidateSamFile {
   input {
      File input_bam
      Int machine_mem_size = 4
      String docker_image
   }
   String output_name = basename(input_bam, ".bam") + ".validation_report"
   Int command_mem_size = machine_mem_size - 1
   command {
       java -Xmx~{command_mem_size}G -jar /usr/gitc/picard.jar \
       ValidateSamFile \
       INPUT=~{input_bam} \
       OUTPUT=~{output_name} \
       MODE=SUMMARY \
       IS_BISULFITE_SEQUENCED=false
    }
    runtime {
    docker: docker_image
    }
   #A text file is generated that lists errors or warnings that apply.
    output {
        File report = "~{output_name}"
    }
}
```

# Nextflow ワークフロー定義の詳細
<a name="workflow-definition-nextflow"></a>

HealthOmics は Nextflow DSL1 と DSL2 をサポートしています。詳細については、「[Nextflow バージョンのサポート](workflows-lang-versions.md#workflows-lang-versions-nextflow)」を参照してください。

Nextflow DSL2 は Groovy プログラミング言語に基づいているため、パラメータは動的であり、型強制は Groovy と同じルールを使用して可能です。入力 JSON によって提供されるパラメータと値は、ワークフローのパラメータ (`params`) マップで使用できます。

**Topics**
+ [nf-schema プラグインと nf-validation プラグインを使用する](#schema-and-validation-plugins-nextflow)
+ [ストレージ URIs](#storage-uris-nextflow)
+ [Nextflow ディレクティブ](#workflow-nexflow-directives)
+ [タスクコンテンツのエクスポート](#exporting-task-content-nextflow)

## nf-schema プラグインと nf-validation プラグインを使用する
<a name="schema-and-validation-plugins-nextflow"></a>

**注記**  
プラグインの HealthOmics サポートの概要:  
v22.04 – プラグインのサポートなし
v23.10 – と をサポート `nf-schema` `nf-validation`
v24.10 – をサポート `nf-schema`

HealthOmics は Nextflow プラグインに対して次のサポートを提供します。
+ Nextflow v23.10 の場合、HealthOmics は nf-validation@1.1.1 プラグインをプリインストールします。
+ Nextflow v23.10 以降では、HealthOmics は nf-schema@2.3.0 プラグインをプリインストールします。
+ ワークフローの実行中に追加のプラグインを取得することはできません。HealthOmics は、 `nextflow.config` ファイルで指定した他のプラグインバージョンを無視します。
+ Nextflow v24 以降では、 `nf-schema`は廃止された`nf-validation`プラグインの新しいバージョンです。詳細については、Nextflow GitHub リポジトリの[「nf-schema](https://github.com/nextflow-io/nf-schema)」を参照してください。

## ストレージ URIs
<a name="storage-uris-nextflow"></a>

Amazon S3 または HealthOmics URI を使用して Nextflow ファイルまたはパスオブジェクトを構築すると、読み取りアクセスが付与されている限り、一致するオブジェクトがワークフローで使用できるようになります。Amazon S3 URIs では、プレフィックスまたはディレクトリを使用できます。例については「[Amazon S3 入力パラメータ形式](workflows-run-inputs.md#s3-run-input-formats)」を参照してください。

HealthOmics は、Amazon S3 URI または HealthOmics Storage URI での glob URIs。 URIs HealthOmics `path` または `file`チャネルの作成には、ワークフロー定義で Glob パターンを使用します。予想される動作と正確なケースについては、「」を参照してください[Nextflow Amazon S3 入力での Glob パターンの処理](workflows-run-inputs.md#wd-nextflow-s3-formats)。

## Nextflow ディレクティブ
<a name="workflow-nexflow-directives"></a>

Nextflow ディレクティブは、Nextflow 設定ファイルまたはワークフロー定義で設定します。次のリストは、HealthOmics が構成設定を適用するために使用する優先順位を、優先順位の低いものから最も高いものまで示しています。

1. 設定ファイルのグローバル設定。

1. ワークフロー定義のタスクセクション。

1. 設定ファイル内のタスク固有のセレクタ。

**Topics**
+ [を使用したタスク再試行戦略 `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [を使用したタスクの再試行 `maxRetries`](#workflow-nexflow-task-retry)
+ [を使用してタスクの再試行をオプトアウトする `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [`time` ディレクティブを使用したタスク期間](#time-directive-nextflow)

### を使用したタスク再試行戦略 `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

`errorStrategy` ディレクティブを使用して、タスクエラーの戦略を定義します。デフォルトでは、タスクがエラー表示 (ゼロ以外の終了ステータス) で戻ると、タスクは停止し、HealthOmics は実行全体を終了します。`errorStrategy` を に設定すると`retry`、HealthOmics は失敗したタスクを 1 回再試行します。再試行回数を増やすには、「」を参照してください[を使用したタスクの再試行 `maxRetries`](#workflow-nexflow-task-retry)。

```
process {
    label 'my_label'
    errorStrategy 'retry'

    script:
    """
    your-command-here
    """
}
```

HealthOmics が実行中にタスクの再試行を処理する方法については、「」を参照してください[タスクの再試行](monitoring-runs.md#run-status-task-retries)。

### を使用したタスクの再試行 `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

デフォルトでは、HealthOmics は失敗したタスクの再試行を試行しないか、 を設定すると 1 回の再試行を試行します`errorStrategy`。最大再試行回数を増やすには、 を `errorStrategy` に設定`retry`し、 `maxRetries`ディレクティブを使用して最大再試行回数を設定します。

次の例では、グローバル設定で最大再試行回数を 3 に設定します。

```
process {
    errorStrategy = 'retry'
    maxRetries = 3
}
```

次の例は、ワークフロー定義のタスクセクション`maxRetries`で を設定する方法を示しています。

```
process myTask {
    label 'my_label'
    errorStrategy 'retry'
    maxRetries 3
    
    script:
    """
    your-command-here
    """
}
```

次の例は、名前またはラベルセレクタに基づいて、Nextflow 設定ファイルでタスク固有の設定を指定する方法を示しています。

```
process {
    withLabel: 'my_label' {
        errorStrategy = 'retry'
        maxRetries = 3
    }

    withName: 'myTask' {
        errorStrategy = 'retry'
        maxRetries = 3
    }
}
```

### を使用してタスクの再試行をオプトアウトする `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

Nextflow v23 および v24 では、サービスエラー (5XX HTTP ステータスコード) が原因でタスクが失敗した場合、HealthOmics はタスクの再試行をサポートします。デフォルトでは、HealthOmics は失敗したタスクを最大 2 回再試行します。

サービスエラーのタスク再試行をオプトアウト`omicsRetryOn5xx`するように を設定できます。HealthOmics でのタスクの再試行の詳細については、「」を参照してください[タスクの再試行](monitoring-runs.md#run-status-task-retries)。

次の例では、タスクの再試行をオプトアウトするように グローバル設定`omicsRetryOn5xx`で を設定します。

```
process {
    omicsRetryOn5xx = false
}
```

次の例は、ワークフロー定義のタスクセクション`omicsRetryOn5xx`で を設定する方法を示しています。

```
process myTask {
    label 'my_label'
    omicsRetryOn5xx = false
    
    script:
    """
    your-command-here
    """
}
```

次の例は、名前またはラベルセレクタに基づいて、Nextflow 設定ファイルでタスク固有の設定`omicsRetryOn5xx`として を設定する方法を示しています。

```
process {
    withLabel: 'my_label' {
        omicsRetryOn5xx = false
    }

    withName: 'myTask' {
        omicsRetryOn5xx = false
    }
}
```

### `time` ディレクティブを使用したタスク期間
<a name="time-directive-nextflow"></a>

HealthOmics は、実行の最大期間を指定するための調整可能なクォータを提供します (「」を参照[HealthOmics サービスクォータ](service-quotas.md))。Nextflow v23 および v24 ワークフローでは、Nextflow `time`ディレクティブを使用して最大タスク期間を指定することもできます。

新しいワークフロー開発中、最大タスク期間を設定すると、実行可能なタスクと長時間実行されるタスクをキャッチするのに役立ちます。

Nextflow 時間ディレクティブの詳細については、Nextflow リファレンスの[「時間ディレクティブ](https://www.nextflow.io/docs/latest/reference/process.html#process-time)」を参照してください。

HealthOmics は、Nextflow 時間ディレクティブに対して次のサポートを提供します。

1. HealthOmics は、時間ディレクティブの 1 分の詳細度をサポートします。60 秒から最大実行期間の値までの値を指定できます。

1. 60 未満の値を入力すると、HealthOmics はそれを 60 秒に切り上げます。60 を超える値の場合、HealthOmics は最も近い分に切り下げます。

1. ワークフローがタスクの再試行をサポートしている場合、HealthOmics はタイムアウトするとタスクを再試行します。

1. タスクがタイムアウト (または最後の再試行がタイムアウト) すると、HealthOmics はタスクをキャンセルします。このオペレーションの期間は 1～2 分です。

1. タスクのタイムアウト時に、HealthOmics は実行ステータスとタスクステータスを失敗に設定し、実行中の他のタスク (開始中、保留中、または実行中ステータスのタスクの場合) をキャンセルします。HealthOmics は、タイムアウト前に完了したタスクから指定された S3 出力場所に出力をエクスポートします。

1. タスクが保留中のステータスに費やした時間は、タスク期間にはカウントされません。

1. 実行が実行グループの一部であり、実行グループがタスクタイマーよりも早くタイムアウトした場合、実行とタスクは失敗したステータスに移行します。

タイムアウト期間は、、`ms`、、`m``h`または の 1 `s`つ以上の単位を使用して指定します`d`。

次の例は、Nextflow 設定ファイルでグローバル設定を指定する方法を示しています。グローバルタイムアウトを 1 時間 30 分に設定します。

```
process {
    time = '1h30m'
}
```

次の例は、ワークフロー定義のタスクセクションでタイムディレクティブを指定する方法を示しています。この例では、タイムアウトを 3 日、5 時間、4 分に設定します。この値は、設定ファイルのグローバル値よりも優先されますが、設定ファイルの `my_label`のタスク固有の時間ディレクティブよりも優先されません。

```
process myTask {
    label 'my_label'
    time '3d5h4m'
        
    script:
    """
    your-command-here
    """
}
```

次の例は、名前またはラベルセレクタに基づいて、Nextflow 設定ファイルでタスク固有の時間ディレクティブを指定する方法を示しています。この例では、グローバルタスクのタイムアウト値を 30 分に設定します。タスクには 2 時間の値を設定し`myTask`、ラベルが のタスクには 3 時間の値を設定します`my_label`。セレクターに一致するタスクの場合、これらの値はグローバル値とワークフロー定義の値よりも優先されます。

```
process {
    time = '30m'
    
    withLabel: 'my_label' {
        time = '3h'  
    }

    withName: 'myTask' {
        time = '2h'  
    }
}
```

## タスクコンテンツのエクスポート
<a name="exporting-task-content-nextflow"></a>

Nextflow で記述されたワークフローの場合、タスクコンテンツを出力 Amazon S3 バケットにエクスポートする **publishDir** ディレクティブを定義します。次の例に示すように、**publishDir** 値を に設定します`/mnt/workflow/pubdir`。Amazon S3 にファイルをエクスポートするには、ファイルがこのディレクトリにある必要があります。

```
 nextflow.enable.dsl=2
              
  workflow {
    CramToBamTask(params.ref_fasta, params.ref_fasta_index, params.ref_dict, params.input_cram, params.sample_name)
    ValidateSamFile(CramToBamTask.out.outputBam)
  }
  
  process CramToBamTask {
    container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud"
  
    publishDir "/mnt/workflow/pubdir"
  
    input:
        path ref_fasta
        path ref_fasta_index
        path ref_dict
        path input_cram
        val sample_name
  
    output:
        path "${sample_name}.bam", emit: outputBam
        path "${sample_name}.bai", emit: outputBai
  
    script:
    """
        set -eo pipefail
  
        samtools view -h -T $ref_fasta $input_cram |
        samtools view -b -o ${sample_name}.bam -
        samtools index -b ${sample_name}.bam
        mv ${sample_name}.bam.bai ${sample_name}.bai
    """
  }
  
  process ValidateSamFile {
    container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud"
  
    publishDir "/mnt/workflow/pubdir"
  
    input:
        file input_bam
  
    output:
        path "validation_report"
  
    script:
    """
        java -Xmx3G -jar /usr/gitc/picard.jar \
        ValidateSamFile \
        INPUT=${input_bam} \
        OUTPUT=validation_report \
        MODE=SUMMARY \
        IS_BISULFITE_SEQUENCED=false
    """
  }
```

# CWL ワークフロー定義の詳細
<a name="workflow-languages-cwl"></a>

Common Workflow Language または CWL で記述されたワークフローは、WDL および Nextflow で記述されたワークフローと同様の機能を提供します。Amazon S3 または HealthOmics ストレージ URIs を入力パラメータとして使用できます。

サブワークフローの secondaryFile で入力を定義する場合は、メインワークフローに同じ定義を追加します。

HealthOmics ワークフローはオペレーションプロセスをサポートしていません。CWL ワークフローのオペレーションプロセスの詳細については、[CWL ドキュメント](https://www.commonwl.org/user_guide/topics/operations.html)を参照してください。

ベストプラクティスは、使用するコンテナごとに個別の CWL ワークフローを定義することです。固定 Amazon ECR URI を使用して dockerPull エントリをハードコードしないことをお勧めします。

**Topics**
+ [HealthOmics を使用するように CWL ワークフローを変換する](#workflow-cwl-convert)
+ [を使用してタスクの再試行をオプトアウトする `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [ワークフローステップをループする](#workflow-cwl-loop)
+ [メモリを増やしてタスクを再試行する](#workflow-cwl-out-of-memory-retry)
+ [例](#workflow-cwl-examples)

## HealthOmics を使用するように CWL ワークフローを変換する
<a name="workflow-cwl-convert"></a>

既存の CWL ワークフロー定義を HealthOmics を使用するように変換するには、次の変更を行います。
+ すべての Docker コンテナ URIs Amazon ECR URIs。
+ すべてのワークフローファイルがメインワークフローで入力として宣言され、すべての変数が明示的に定義されていることを確認します。
+ すべての JavaScript コードが厳格モードの苦情であることを確認します。

## を使用してタスクの再試行をオプトアウトする `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics は、サービスエラー (5XX HTTP ステータスコード) が原因でタスクが失敗した場合、タスクの再試行をサポートします。デフォルトでは、HealthOmics は失敗したタスクを最大 2 回再試行します。HealthOmics でのタスクの再試行の詳細については、「」を参照してください[タスクの再試行](monitoring-runs.md#run-status-task-retries)。

サービスエラーのタスク再試行をオプトアウトするには、ワークフロー定義で `omicsRetryOn5xx` ディレクティブを設定します。このディレクティブは、要件またはヒントに基づいて定義できます。移植性のヒントとして ディレクティブを追加することをお勧めします。

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

要件はヒントを上書きします。タスク実装が、囲みワークフローの要件によっても提供されるヒントでリソース要件を提供する場合、囲み要件が優先されます。

ワークフローの異なるレベルに同じタスク要件が表示される`hints`場合、HealthOmics は からの最も具体的なエントリを使用します `requirements` ( にエントリがない場合は )`requirements`。次のリストは、HealthOmics が構成設定を適用するために使用する優先順位を、優先順位の低いものから最も高いものまで示しています。
+ ワークフローレベル
+ ステップレベル
+ ワークフロー定義のタスクセクション

次の例は、ワークフローのさまざまなレベルで `omicsRetryOn5xx`ディレクティブを設定する方法を示しています。この例では、ワークフローレベルの要件がワークフローレベルのヒントを上書きします。タスクレベルとステップレベルの要件設定は、ヒント設定を上書きします。

```
class: Workflow
# Workflow-level requirement and hint
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false  # The value in requirements overrides this value 

steps:
  task_step:
    # Step-level requirement
    requirements:
      ResourceRequirement:
        omicsRetryOn5xx: false
    # Step-level hint
    hints:
      ResourceRequirement:
        omicsRetryOn5xx: false
    run:
      class: CommandLineTool
      # Task-level requirement
      requirements:
        ResourceRequirement:
          omicsRetryOn5xx: false
      # Task-level hint
      hints:
        ResourceRequirement:
          omicsRetryOn5xx: false
```

## ワークフローステップをループする
<a name="workflow-cwl-loop"></a>

HealthOmics はワークフローステップのループをサポートしています。ループを使用して、指定された条件が満たされるまでワークフローステップを繰り返し実行できます。これは、タスクを複数回、または特定の結果が得られるまで繰り返す必要がある反復プロセスに役立ちます。

**注:** ループ機能には CWL バージョン 1.2 以降が必要です。1.2 より前のバージョンの CWL を使用するワークフローは、ループオペレーションをサポートしていません。

CWL ワークフローでループを使用するには、ループ要件を定義します。次の例は、ループ要件設定を示しています。

```
requirements:
  - class: "http://commonwl.org/cwltool#Loop"
    loopWhen: $(inputs.counter < inputs.max)
    loop:
      counter:
        loopSource: result
        valueFrom: $(self)
    outputMethod: last
```

`loopWhen` フィールドは、ループが終了するタイミングを制御します。この例では、カウンターが最大値より小さい限り、ループは続行されます。`loop` フィールドは、反復間で入力パラメータを更新する方法を定義します。は、前の反復のどの出力を次の反復にフィードするか`loopSource`を指定します。に設定された `outputMethod`フィールドは、最終イテレーションの出力のみ`last`を返します。

## メモリを増やしてタスクを再試行する
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics out-of-memoryタスクの失敗の自動再試行をサポートしています。タスクがコード 137 (out-of-memory) で終了すると、HealthOmics は指定された乗数に基づいてメモリ割り当てを増やした新しいタスクを作成します。

**注記**  
HealthOmics はout-of-memory障害を最大 3 回再試行するか、メモリ割り当てが 1536 GiB に達するまで、いずれかの制限に達するまで再試行します。

次の例は、out-of-memory再試行を設定する方法を示しています。

```
hints:
  ResourceRequirement:
    ramMin: 4096
  http://arvados.org/cwl#OutOfMemoryRetry:
    memoryRetryMultiplier: 2.5
```

out-of-memoryが原因でタスクが失敗した場合、HealthOmics は式 を使用して再試行メモリ割り当てを計算します`previous_run_memory × memoryRetryMultiplier`。上記の例では、4096 MB のメモリを持つタスクが失敗した場合、再試行は 4096 × 2.5 = 10,240 MB のメモリを使用します。

`memoryRetryMultiplier` パラメータは、再試行に割り当てる追加のメモリの量を制御します。
+ **デフォルト値:** 値を指定しない場合、デフォルト値は になります `2` (メモリが 2 倍になります）。
+ **有効な範囲:** より大きい正の数である必要があります`1`。無効な値の場合、4XX 検証エラーが発生します。
+ **有効な最小値:** 意味のあるメモリの増加を確保し`1.5`、過剰な再試行を防ぐために、 `1` と の間の値は自動的に に増加`1.5`します。

## 例
<a name="workflow-cwl-examples"></a>

以下は、CWL で記述されたワークフローの例です。

```
cwlVersion: v1.2
class: Workflow

inputs:
in_file:
type: File
secondaryFiles: [.fai]

out_filename: string
docker_image: string


outputs:
copied_file:
type: File
outputSource: copy_step/copied_file

steps:
copy_step:
in:
  in_file: in_file
  out_filename: out_filename
  docker_image: docker_image
out: [copied_file]
run: copy.cwl
```

次のファイルは、`copy.cwl`タスクを定義します。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: cp

inputs:
in_file:
type: File
secondaryFiles: [.fai]
inputBinding:
  position: 1

out_filename:
type: string
inputBinding:
  position: 2
docker_image:
type: string

outputs:
copied_file:
type: File
outputBinding:
    glob: $(inputs.out_filename)

requirements:
InlineJavascriptRequirement: {}
DockerRequirement:
dockerPull: "$(inputs.docker_image)"
```

以下は、GPU 要件を使用して CWL で記述されたワークフローの例です。

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: ["/bin/bash", "docm_haplotypeCaller.sh"]
$namespaces:
cwltool: http://commonwl.org/cwltool#
requirements:
cwltool:CUDARequirement:
cudaDeviceCountMin: 1
cudaComputeCapability: "nvidia-tesla-t4" 
cudaVersionMin: "1.0"
InlineJavascriptRequirement: {}
InitialWorkDirRequirement:
listing:
- entryname: 'docm_haplotypeCaller.sh'
  entry: |
          nvidia-smi --query-gpu=gpu_name,gpu_bus_id,vbios_version --format=csv   

inputs: []
outputs: []
```

# ワークフロー定義の例
<a name="workflow-definition-examples"></a>

次の例は、WDL、Nextflow、CWL で同じワークフロー定義を示しています。

------
#### [ WDL ]

```
version 1.1

task my_task {
   runtime { ... }
   inputs {
       File input_file
       String name
       Int threshold
   }
   
   command <<<
   my_tool --name ~{name} --threshold ~{threshold} ~{input_file}
   >>>
   
   output {
       File results = "results.txt"
   }
}

workflow my_workflow {
   inputs {
       File input_file
       String name
       Int threshold = 50
   }
   
   call my_task {
       input:
          input_file = input_file,
          name = name,
          threshold = threshold
   }
   outputs {
       File results = my_task.results
   }
}
```

------
#### [ Nextflow ]

```
nextflow.enable.dsl = 2

params.input_file = null
params.name = null
params.threshold = 50

process my_task {
   // <directives>
   
   input:
     path input_file
     val name
     val threshold
   
   output:
     path 'results.txt', emit: results
   
   script:
     """
     my_tool --name ${name} --threshold ${threshold} ${input_file}
     """
     
   
}

workflow MY_WORKFLOW {
   my_task(
       params.input_file,
       params.name,
       params.threshold
   )
}

workflow {
   MY_WORKFLOW()
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: Workflow

requirements:
    InlineJavascriptRequirement: {}

inputs:
   input_file: File
   name: string
   threshold: int

outputs:
    result:
        type: ...
        outputSource: ...

steps:
    my_task:
        run:
            class: CommandLineTool
            baseCommand: my_tool
            requirements:
                ...
            inputs:
                name:
                    type: string
                    inputBinding:
                        prefix: "--name"
                threshold:
                    type: int
                    inputBinding:
                        prefix: "--threshold"
                input_file:
                    type: File
                    inputBinding: {}
            outputs:
                results:
                    type: File
                    outputBinding:
                        glob: results.txt
```

------

# HealthOmics ワークフローのパラメータテンプレートファイル
<a name="parameter-templates"></a>

パラメータテンプレートは、ワークフローの入力パラメータを定義します。入力パラメータを定義して、ワークフローの柔軟性と汎用性を高めることができます。たとえば、参照ゲノムファイルの Amazon S3 の場所のパラメータを定義できます。パラメータテンプレートは、Git ベースのリポジトリサービスまたはローカルドライブを通じて提供できます。その後、ユーザーはさまざまなデータセットを使用してワークフローを実行できます。

ワークフローのパラメータテンプレートを作成するか、HealthOmics がパラメータテンプレートを自動的に生成できます。

パラメータテンプレートは JSON ファイルです。ファイルでは、各入力パラメータは、ワークフロー入力の名前と一致する名前付きオブジェクトです。実行を開始するときに、すべての必須パラメータの値を指定しない場合、実行は失敗します。

入力パラメータオブジェクトには、次の属性が含まれます。
+ **description** – この必須属性は、コンソールが**実行開始**ページに表示する文字列です。この説明は実行メタデータとしても保持されます。
+ **optional** – このオプション属性は、入力パラメータがオプションかどうかを示します。**optional** フィールドを指定しない場合、入力パラメータは必須です。

次のパラメータテンプレートの例は、入力パラメータを指定する方法を示しています。

```
{
  "myRequiredParameter1": {
     "description": "this parameter is required",
  },
  "myRequiredParameter2": {
     "description": "this parameter is also required",
     "optional": false
  },
  "myOptionalParameter": {
     "description": "this parameter is optional",
     "optional": true
  }
}
```

## パラメータテンプレートの生成
<a name="parameter-parsing"></a>

HealthOmics は、ワークフロー定義を解析して入力パラメータを検出することでパラメータテンプレートを生成します。ワークフローのパラメータテンプレートファイルを指定すると、ファイルのパラメータによって、ワークフロー定義で検出されたパラメータが上書きされます。

以下のセクションで説明するように、CWL、WDL、Nextflow エンジンの解析ロジックには若干の違いがあります。

**Topics**
+ [CWL のパラメータ検出](#parameter-parsing-cwl)
+ [WDL のパラメータ検出](#parameter-parsing-wdl)
+ [Nextflow のパラメータ検出](#parameter-parsing-nextflow)

### CWL のパラメータ検出
<a name="parameter-parsing-cwl"></a>

CWL ワークフローエンジンでは、解析ロジックは次の仮定を行います。
+ NULL 対応タイプは、オプションの入力パラメータとしてマークされます。
+ NULL でサポートされていないタイプは、必須の入力パラメータとしてマークされます。
+ デフォルト値を持つパラメータは、オプションの入力パラメータとしてマークされます。
+ 説明は、`main`ワークフロー定義の `label`セクションから抽出されます。を指定`label`しない場合、説明は空白になります (空の文字列）。

次の表は、CWL 補間の例を示しています。各例のパラメータ名は です`x`。パラメータが必要な場合は、 パラメータの値を指定する必要があります。パラメータがオプションの場合、値を指定する必要はありません。

この表は、プリミティブ型の CWL 補間の例を示しています。


| Input | 入出力の例 | 必須 | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 または 2 または ... | あり | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | デフォルト値は 2 です。有効な入力は 1 または 2 または ... | なし | 
|  <pre>x:               <br />  type: int?</pre>  | 有効な入力は None または 1 または 2 または ... です。 | なし | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | デフォルト値は 2 です。有効な入力は None または 1 または 2 または ... です。 | なし | 

次の表は、複雑なタイプの CWL 補間の例を示しています。複合型はプリミティブ型のコレクションです。


| Input | 入出力の例 | 必須 | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] または [1,2,3]  | あり | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | なしまたは [] または [1,2,3]  | なし | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] または [なし、3、なし〕  | あり | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [None] または None または [1,2,3] または [None, 3] ですが [] ではありません  | なし | 

### WDL のパラメータ検出
<a name="parameter-parsing-wdl"></a>

WDL ワークフローエンジンでは、解析ロジックは次の前提になります。
+ NULL 対応タイプは、オプションの入力パラメータとしてマークされます。
+ nullable 以外のサポート対象タイプの場合：
  + リテラルまたは式が割り当てられた入力変数は、オプションパラメータとしてマークされます。例:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + 入力パラメータに値または式が割り当てられていない場合は、必須パラメータとしてマークされます。
+ 説明は、`main`ワークフロー定義`parameter_meta`の から抽出されます。を指定`parameter_meta`しない場合、説明は空白になります (空の文字列）。詳細については、[パラメータメタデータ](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections)の WDL 仕様を参照してください。

次の表は、WDL 補間の例を示しています。各例のパラメータ名は です`x`。パラメータが必要な場合は、 パラメータの値を指定する必要があります。パラメータがオプションの場合、値を指定する必要はありません。

この表は、プリミティブ型の WDL 補間の例を示しています。


| Input | 入出力の例 | 必須 | 
| --- | --- | --- | 
| Int x | 1 または 2 または ... | あり | 
| Int x = 2 | 2 | なし | 
| Int x = 1\$12 | 3 | なし | 
| Int x = y\$1z | y\$1z | なし | 
| Int? x | なし、1 または 2 または ... | あり | 
| Int? x = 2 | なしまたは 2 | なし | 
| Int? x = 1\$12 | なしまたは 3 | なし | 
| Int? x = y\$1z | なしまたは y\$1z | なし | 

次の表は、複雑なタイプの WDL 補間の例を示しています。複合型はプリミティブ型のコレクションです。


| Input | 入出力の例 | 必須 | 
| --- | --- | --- | 
| 配列[Int] x | [1,2,3] または [] | あり | 
| 配列[Int]\$1 x | [1]、ただし [] ではない | あり | 
| Array[Int]? x | なしまたは [] または [1,2,3] | なし | 
| 配列[Int?] x | [] または [なし、3、なし〕 | あり | 
| Array[Int?]=? x | [None] または None または [1,2,3] または [None, 3] ですが [] ではありません | なし | 
| 構造体サンプル \$1文字列 a、Int y\$1 後続の入力: サンプル mySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | あり | 
| 構造体サンプル \$1文字列 a、Int y\$1 後の入力: Sample? mySample |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | なし | 

### Nextflow のパラメータ検出
<a name="parameter-parsing-nextflow"></a>

Nextflow の場合、HealthOmics は`nextflow_schema.json`ファイルを解析してパラメータテンプレートを生成します。ワークフロー定義にスキーマファイルが含まれていない場合、HealthOmics はメインワークフロー定義ファイルを解析します。

**Topics**
+ [スキーマファイルの解析](#parameter-parsing-nextflow-schema)
+ [メインファイルの解析](#parameter-parsing-nextflow-main)
+ [ネストされたパラメータ](#parameter-parsing-nextflow-nested)
+ [Nextflow 補間の例](#parameter-parsing-nextflow-examples)

#### スキーマファイルの解析
<a name="parameter-parsing-nextflow-schema"></a>

解析を正しく機能させるには、スキーマファイルが次の要件を満たしていることを確認してください。
+ スキーマファイルは という名前`nextflow_schema.json`で、メインワークフローファイルと同じディレクトリにあります。
+ スキーマファイルは、次のいずれかのスキーマで定義されている有効な JSON です。
  + [json-schema.org/draft/2020-12/schema](https://json-schema.org/draft/2020-12/schema)。
  + [json-schema.org/draft-07/schema](https://json-schema.org/draft-07/schema)。

HealthOmics は`nextflow_schema.json`ファイルを解析してパラメータテンプレートを生成します。
+ スキーマで定義されているすべての **properties** を抽出します。
+ プロパティで使用可能な**description**場合は、 プロパティを含めます。
+ プロパティの **required**フィールドに基づいて、各パラメータがオプションか必須かを識別します。

次の例は、定義ファイルと生成されたパラメータファイルを示しています。

```
{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "$defs": {
        "input_options": {
            "title": "Input options",
            "type": "object",
            "required": ["input_file"],
            "properties": {
                "input_file": {
                    "type": "string",
                    "format": "file-path",
                    "pattern": "^s3://[a-z0-9.-]{3,63}(?:/\\S*)?$",
                    "description": "description for input_file"
                },
                "input_num": {
                    "type": "integer",
                    "default": 42,
                    "description": "description for input_num"
                }
            }
        },
        "output_options": {
            "title": "Output options",
            "type": "object",
            "required": ["output_dir"],
            "properties": {
                "output_dir": {
                    "type": "string",
                    "format": "file-path",
                    "description": "description for output_dir",
                }
            }
        }
    },
    "properties": {
        "ungrouped_input_bool": {
            "type": "boolean",
            "default": true
        }
    },
    "required": ["ungrouped_input_bool"],
    "allOf": [
        { "$ref": "#/$defs/input_options" },
        { "$ref": "#/$defs/output_options" }
    ]
}
```

生成されたパラメータテンプレート：

```
{
    "input_file": {
        "description": "description for input_file",
        "optional": False
    },
    "input_num": {
        "description": "description for input_num",
        "optional": True
    },
    "output_dir": {
        "description": "description for output_dir",
        "optional": False
    },
    "ungrouped_input_bool": {
        "description": None,
        "optional": False
    }
}
```

#### メインファイルの解析
<a name="parameter-parsing-nextflow-main"></a>

ワークフロー定義に `nextflow_schema.json` ファイルが含まれていない場合、HealthOmics はメインワークフロー定義ファイルを解析します。

HealthOmics は、メインワークフロー定義ファイルと `nextflow.config` ファイルにある`params`式を分析します。デフォルト値`params`を持つすべての はオプションとしてマークされます。

解析を正しく機能させるには、次の要件に注意してください。
+ HealthOmics は、メインワークフロー定義ファイルのみを解析します。すべてのパラメータを確実にキャプチャするには、すべてのサブモジュールとインポートされたワークフローに**params**ワイヤスルーすることをお勧めします。
+ 設定ファイルはオプションです。定義する場合は、名前を付け`nextflow.config`、メインワークフロー定義ファイルと同じディレクトリに配置します。

次の例は、定義ファイルと生成されたパラメータテンプレートを示しています。

```
params.input_file = "default.txt"
params.threads = 4
params.memory = "8GB"

workflow {
    if (params.version) {
        println "Using version: ${params.version}"
    }
}
```

生成されたパラメータテンプレート：

```
{
    "input_file": {
        "description": None,
        "optional": True
    },
    "threads": {
        "description": None,
        "optional": True
    },
    "memory": {
        "description": None,
        "optional": True
    },
    "version": {
        "description": None,
        "optional": False
    }
}
```

nextflow.config で定義されているデフォルト値の場合、HealthOmics は、次の例に示すように`params {}`、 内で宣言された`params`割り当てとパラメータを収集します。割り当てステートメントでは、 はステートメントの左側に表示される`params`必要があります。

```
params.alpha = "alpha"
params.beta = "beta"

params {
    gamma = "gamma"
    delta = "delta"
}

env {
   // ignored, as this assignment isn't in the params block
   VERSION = "TEST"  
}

// ignored, as params is not on the left side
interpolated_image = "${params.cli_image}"
```

生成されたパラメータテンプレート：

```
{
    // other params in your main workflow defintion
    "alpha": {
        "description": None,
        "optional": True
    },
    "beta": {
        "description": None,
        "optional": True
    },
    "gamma": {
        "description": None,
        "optional": True
    },
    "delta": {
        "description": None,
        "optional": True
    }
}
```

#### ネストされたパラメータ
<a name="parameter-parsing-nextflow-nested"></a>

`nextflow_schema.json` と の両方がネストされたパラメータ`nextflow.config`を許可します。ただし、HealthOmics パラメータテンプレートでは、最上位のパラメータのみが必要です。ワークフローでネストされたパラメータを使用する場合は、そのパラメータの入力として JSON オブジェクトを指定する必要があります。

##### スキーマファイルにネストされたパラメータ
<a name="parameter-parsing-schema-nested"></a>

HealthOmics は、`nextflow_schema.json`ファイルの解析**params**時にネストされた をスキップします。たとえば、次の`nextflow_schema.json`ファイルを定義します。

```
{
    "properties": {
        "input": {
            "properties": {
                "input_file": { ... },
                "input_num": { ... }
            }
        },
        "input_bool": { ... }
    }
}
```

HealthOmics は、パラメータテンプレートを生成する`input_num`ときに `input_file`と を無視します。

```
{
    "input": {
        "description": None,
        "optional": True
    },
    "input_bool": {
        "description": None,
        "optional": True
    }
}
```

このワークフローを実行すると、HealthOmics は次のような `input.json` ファイルを想定します。

```
{
   "input": {
       "input_file": "s3://bucket/obj",
       "input_num": 2
   },
   "input_bool": false
}
```

##### 設定ファイルにネストされたパラメータ
<a name="parameter-parsing-config-nested"></a>

HealthOmics は、`nextflow.config`ファイルにネストされた **params** を収集せず、解析中にスキップします。たとえば、次の`nextflow.config`ファイルを定義します。

```
params.alpha = "alpha"
  params.nested.beta = "beta"
  
  params {
      gamma = "gamma"
      group {
          delta = "delta"
      }
  }
```

HealthOmics は、パラメータテンプレートを生成する`params.group.delta`ときに `params.nested.beta`と を無視します。

```
{
    "alpha": {
        "description": None,
        "optional": True
    },
    "gamma": {
        "description": None,
        "optional": True
    }
}
```

#### Nextflow 補間の例
<a name="parameter-parsing-nextflow-examples"></a>

次の表は、メインファイル内のパラメータの Nextflow 補間の例を示しています。


| パラメータ | 必須 | 
| --- | --- | 
| params.input\$1file | あり | 
| params.input\$1file = "s3://bucket/data.json" | なし | 
| params.nested.input\$1file | 該当なし | 
| params.nested.input\$1file = "s3://bucket/data.json" | 該当なし | 

次の表は、 `nextflow.config` ファイル内のパラメータの Nextflow 補間の例を示しています。


| パラメータ | 必須 | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | なし | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | いいえ | 
|  <pre>params {<br />   nested {<br />     input_file = "s3://bucket/data.json"    <br />   }<br />}</pre>  | 該当なし | 
|  <pre>input_file = params.input_file</pre>  | 該当なし | 

# プライベートワークフローのコンテナイメージ
<a name="workflows-ecr"></a>

HealthOmics は、Amazon ECR プライベートリポジトリでホストされているコンテナイメージをサポートしています。コンテナイメージを作成し、プライベートリポジトリにアップロードできます。Amazon ECR プライベートレジストリをプルスルーキャッシュとして使用して、アップストリームレジストリのコンテンツを同期することもできます。

Amazon ECR リポジトリは、サービスを呼び出すアカウントと同じ AWS リージョンに存在する必要があります。ソースイメージリポジトリに適切なアクセス許可がある限り、別の がコンテナイメージを所有 AWS アカウント できます。詳細については、「[クロスアカウント Amazon ECR アクセスのポリシー](permissions-ecr.md#permissions-cross-account)」を参照してください。

実行を開始する前にアクセスを検証できるように、Amazon ECR コンテナイメージ URIs をワークフローのパラメータとして定義することをお勧めします。また、リージョンパラメータを変更することで、新しいリージョンでワークフローを簡単に実行できます。

**注記**  
HealthOmics は ARM コンテナをサポートしておらず、パブリックリポジトリへのアクセスもサポートしていません。

HealthOmics が Amazon ECR にアクセスするための IAM アクセス許可の設定については、「」を参照してください[HealthOmics リソースのアクセス許可](permissions-resource.md)。

**Topics**
+ [サードパーティーのコンテナレジストリとの同期](#ecr-pull-through)
+ [Amazon ECR コンテナイメージの一般的な考慮事項](#ecr-considerations)
+ [HealthOmics ワークフローの環境変数](#ecr-env-vars)
+ [Amazon ECR コンテナイメージでの Java の使用](#ecr-java-considerations)
+ [Amazon ECR コンテナイメージにタスク入力を追加する](#ecr-tasks)

## サードパーティーのコンテナレジストリとの同期
<a name="ecr-pull-through"></a>

Amazon ECR プルスルーキャッシュルールを使用して、サポートされているアップストリームレジストリ内のリポジトリを Amazon ECR プライベートリポジトリと同期できます。詳細については、*「Amazon ECR ユーザーガイド*[」の「アップストリームレジストリの同期](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html)」を参照してください。

プルスルーキャッシュは、キャッシュの作成時にプライベートレジストリにイメージリポジトリを自動的に作成し、アップストリームイメージに変更があるとキャッシュされたイメージと自動的に同期します。

HealthOmics は、次のアップストリームレジストリのプルスルーキャッシュをサポートしています。
+ Amazon ECR Public
+ Kubernetes コンテナイメージレジストリ
+ Quay
+ Docker Hub 
+ Microsoft Azure コンテナレジストリ
+ GitHub コンテナレジストリ 
+ GitLab コンテナレジストリ 

HealthOmics は、アップストリーム Amazon ECR プライベートリポジトリのプルスルーキャッシュをサポートしていません。

Amazon ECR プルスルーキャッシュを使用する利点は次のとおりです。

1. コンテナイメージを Amazon ECR に手動で移行したり、サードパーティーリポジトリから更新を同期したりする必要はありません。

1. ワークフローは、プライベートリポジトリ内の同期されたコンテナイメージにアクセスします。これは、パブリックレジストリから実行時にコンテンツをダウンロードするよりも信頼性が高くなります。

1. Amazon ECR プルスルーキャッシュは予測可能な URI 構造を使用するため、HealthOmics サービスは Amazon ECR プライベート URI をアップストリームレジストリ URI に自動的にマッピングできます。ワークフロー定義の URI 値を更新して置き換える必要はありません。

**Topics**
+ [プルスルーキャッシュの設定](#ecr-pull-through-configure)
+ [レジストリマッピング](#ecr-pull-through-registry-mapping)
+ [イメージマッピング](#ecr-pull-through-mapping-format)

### プルスルーキャッシュの設定
<a name="ecr-pull-through-configure"></a>

Amazon ECR は、各リージョン AWS アカウント の のレジストリを提供します。ワークフローを実行する予定のリージョンと同じリージョンに Amazon ECR 設定を作成してください。

以下のセクションでは、プルスルーキャッシュの設定タスクについて説明します。

**Topics**
+ [プルスルーキャッシュルールを作成する](#create-ecr-ptc)
+ [アップストリームレジストリのレジストリアクセス許可](#reg-ecr-ptc)
+ [リポジトリ作成テンプレート](#repo-create-templates-ptc)
+ [ワークフローを作成します](#reg-mapping-ecr-ptc)

#### プルスルーキャッシュルールを作成する
<a name="create-ecr-ptc"></a>

キャッシュするイメージを持つアップストリームレジストリごとに Amazon ECR プルスルーキャッシュルールを作成します。ルールは、アップストリームレジストリと Amazon ECR プライベートリポジトリ間のマッピングを指定します。

認証を必要とするアップストリームレジストリの場合は、AWS Secrets Manager を使用して認証情報を指定します。

**注記**  
アクティブな実行がプライベートリポジトリを使用している間は、プルスルーキャッシュルールを変更しないでください。実行が失敗するか、より重要なことに、予期しないイメージを使用してパイプラインが発生する可能性があります。

詳細については、*「Amazon Elastic Container Registry ユーザーガイド*」の[「プルスルーキャッシュルールの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html)」を参照してください。

##### コンソールを使用してプルスルーキャッシュルールを作成する
<a name="create-ecr-ptc-console"></a>

プルスルーキャッシュを設定するには、Amazon ECR コンソールを使用して以下の手順を実行します。

1. Amazon ECR コンソールを開きます: https://console.aws.amazon.com/ecr

1. 左側のメニューから、**プライベートレジストリ**で**機能と設定**を展開し、**プルスルーキャッシュ**を選択します。

1. **プルスルーキャッシュ**ページから、**ルールの追加**を選択します。

1. **アップストリームレジストリ**パネルで、プライベートレジストリと同期するアップストリームレジストリを選択し、次**へ**を選択します。

1. アップストリームレジストリで認証が必要な場合、コンソールは認証情報を含む SageMaker AI シークレットを指定する新しいページを開きます。[**次へ**] を選択します。

1. **名前空間の指定** の**キャッシュ名前空間**パネルで、特定のリポジトリプレフィックスを使用するか、プレフィックスなしでプライベートリポジトリを作成するかを選択します。プレフィックスを使用する場合は、**キャッシュリポジトリ**プレフィックスでプレフィックス名を指定します。

1. **アップストリーム名前空間**パネルで、特定のリポジトリプレフィックスを使用してアップストリームリポジトリからプルするか、プレフィックスなしでプルするかを選択します。プレフィックスを使用する場合は、**アップストリームリポジトリ**プレフィックスでプレフィックス名を指定します。

   **名前空間サンプル**パネルには、プルリクエストの例、アップストリーム URL、作成されたキャッシュリポジトリの URL が表示されます。

1. [**次へ**] を選択します。

1. 設定を確認し、**作成**を選択してルールを作成します。

詳細については、[「プルスルーキャッシュルールを作成する (AWS マネジメントコンソール)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console)」を参照してください。

##### CLI を使用してプルスルーキャッシュルールを作成する
<a name="create-ecr-ptc-cli"></a>

Amazon ECR **create-pull-through-cache-rule** コマンドを使用して、プルスルーキャッシュルールを作成します。認証を必要とするアップストリームレジストリの場合は、認証情報を Secrets Manager シークレットに保存します。

以下のセクションでは、サポートされている各アップストリームレジストリの例を示します。

##### Amazon ECR Public の場合
<a name="ecr-ptc-cli-public-ecr"></a>

次の例では、Amazon ECR パブリックレジストリのプルスルーキャッシュルールを作成します。リポジトリプレフィックス `ecr-public` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `ecr-public/upstream-repository-name` を持ちます。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix ecr-public \
     --upstream-registry-url public.ecr.aws \
     --region us-east-1
```

##### Kubernetes コンテナレジストリの場合
<a name="ecr-ptc-cli-kubernetes"></a>

次の例では、Kubernetes パブリックレジストリのプルスルーキャッシュルールを作成します。リポジトリプレフィックス `kubernetes` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `kubernetes/upstream-repository-name` を持ちます。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix kubernetes \
     --upstream-registry-url registry.k8s.io \
     --region us-east-1
```

##### Quay の場合
<a name="ecr-ptc-cli-quay"></a>

次の例では、Quay パブリックレジストリのプルスルーキャッシュルールを作成します。リポジトリプレフィックス `quay` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `quay/upstream-repository-name` を持ちます。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix quay \
     --upstream-registry-url quay.io \
     --region us-east-1
```

##### Docker Hub の場合
<a name="ecr-ptc-cli-docker-hub"></a>

次の例では、Docker Hub レジストリのプルスルーキャッシュルールを作成します。リポジトリプレフィックス `docker-hub` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `docker-hub/upstream-repository-name` を持ちます。Docker Hub の認証情報が含まれているシークレットの完全な Amazon リソースネーム (ARN) を指定する必要があります。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix docker-hub \
     --upstream-registry-url registry-1.docker.io \
     --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \
     --region us-east-1
```

##### GitHub コンテナレジストリの場合
<a name="ecr-ptc-cli-public-github"></a>

次の例では、GitHub コンテナレジストリ用のプルスルーキャッシュルールを作成します。リポジトリプレフィックス `github` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `github/upstream-repository-name` を持ちます。GitHub コンテナレジストリの認証情報が含まれているシークレットの完全な Amazon リソースネーム (ARN) を指定する必要があります。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix github \
     --upstream-registry-url ghcr.io \
     --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \
     --region us-east-1
```

##### Microsoft Azure コンテナレジストリの場合
<a name="ecr-ptc-cli-azure"></a>

次の例では、Microsoft Azure コンテナレジストリ用のプルスルーキャッシュルールを作成します。リポジトリプレフィックス `azure` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `azure/upstream-repository-name` を持ちます。Microsoft Azure コンテナレジストリの認証情報が含まれているシークレットの完全な Amazon リソースネーム (ARN) を指定する必要があります。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix azure \
     --upstream-registry-url myregistry.azurecr.io \
     --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \
     --region us-east-1
```

##### GitLab コンテナレジストリの場合
<a name="ecr-ptc-cli-gitlab"></a>

次の例では、GitLab コンテナレジストリ用のプルスルーキャッシュルールを作成します。リポジトリプレフィックス `gitlab` を指定します。この結果、プルスルーキャッシュルールを使用して作成された各リポジトリは命名スキーム `gitlab/upstream-repository-name` を持ちます。GitLab コンテナレジストリの認証情報が含まれているシークレットの完全な Amazon リソースネーム (ARN) を指定する必要があります。

```
aws ecr create-pull-through-cache-rule \
     --ecr-repository-prefix gitlab \
     --upstream-registry-url registry.gitlab.com \
     --credential-arn arn:aws:secretsmanager:us-east-1:111122223333:secret:ecr-pullthroughcache/example1234 \
     --region us-east-1
```

詳細については、*「Amazon ECR* [ ユーザーガイド」の「プルスルーキャッシュルール (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) の作成」を参照してください。

**get-run-task** CLI コマンドを使用して、特定のタスクに使用されるコンテナイメージに関する情報を取得できます。

```
 aws omics get-run-task --id 1234567 --task-id <task_id> 
```

出力には、コンテナイメージに関する以下の情報が含まれます。

```
 "imageDetails": {
    "image": "string",
    "imageDigest": "string",
    "sourceImage": "string", 
          ...
 }
```

#### アップストリームレジストリのレジストリアクセス許可
<a name="reg-ecr-ptc"></a>

レジストリアクセス許可を使用して、HealthOmics がプルスルーキャッシュを使用し、コンテナイメージを Amazon ECR プライベートレジストリにプルできるようにします。実行で使用されるコンテナを提供する Amazon ECR レジストリポリシーをレジストリに追加します。

次のポリシーは、HealthOmics サービスが指定されたプルスルーキャッシュプレフィックス (複数可) を使用してリポジトリを作成し、これらのリポジトリへのアップストリームプルを開始するアクセス許可を付与します。

1. Amazon ECR コンソールから、左側のメニューの**プライベートレジストリ**で**レジストリのアクセス許可**を展開し、**ステートメントの生成**を選択します。

1. 右上で、JSON を選択します。次のようなポリシーを入力します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowPTCinRegPermissions",
               "Effect": "Allow",
               "Principal": {
                   "Service": "omics.amazonaws.com"
               },
               "Action": [
                   "ecr:CreateRepository",
                   "ecr:BatchImportUpstreamImage"
               ],
               "Resource": [
                   "arn:aws:ecr:us-east-1:123456789012:repository/ecr-public/*",
                   "arn:aws:ecr:us-east-1:123456789012:repository/docker-hub/*"
               ] 
           }
       ]
   }
   ```

------

#### リポジトリ作成テンプレート
<a name="repo-create-templates-ptc"></a>

HealthOmics でプルスルーキャッシュを使用するには、Amazon ECR リポジトリにリポジトリ作成テンプレートが必要です。テンプレートは、ユーザーまたは Amazon ECR がアップストリームレジストリのプライベートリポジトリを作成するときの設定を定義します。

各テンプレートには、Amazon ECR が新しいリポジトリを特定のテンプレートに一致させるために使用するリポジトリ名前空間プレフィックスが含まれています。テンプレートは、リソースベースのアクセスポリシー、タグのイミュータビリティ、暗号化、ライフサイクルポリシーなど、すべてのリポジトリ設定の構成を指定します。

詳細については、[「Amazon Elastic Container Registry ユーザーガイド」の「リポジトリ作成テンプレート](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html)」を参照してください。 **

リポジトリ作成テンプレートを作成する方法:

1. Amazon ECR コンソールから、左側のメニューの**プライベートレジストリ**で**機能と設定**を展開し、**リポジトリ作成テンプレート**を選択します。

1. **[テンプレートを作成]** をクリックします。

1. **テンプレートの詳細**で、**プルスルーキャッシュ**を選択します。

1. このテンプレートを特定のプレフィックスに適用するか、別のテンプレートと一致しないすべてのリポジトリに適用するかを選択します。

   **特定のプレフィックス**を選択した場合は、**プレフィックス**に名前空間プレフィックス値を入力します。PTC ルールの作成時にこのプレフィックスを指定しました。

1. [**次へ**] を選択します。

1. **リポジトリ作成設定の追加**ページで、**リポジトリのアクセス許可**を入力します。サンプルポリシーステートメントのいずれかを使用するか、次の例のようなものを入力します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PTCRepoCreationTemplate",
               "Effect": "Allow",
               "Principal": {
                   "Service": "omics.amazonaws.com"
               },
               "Action": [
                   "ecr:BatchGetImage",
                   "ecr:GetDownloadUrlForLayer"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 必要に応じて、ライフサイクルポリシーやタグなどのリポジトリ設定を追加できます。Amazon ECR は、指定されたプレフィックスを使用するプルスルーキャッシュ用に作成されたすべてのコンテナイメージにこれらのルールを適用します。

1. [**次へ**] を選択します。

1. 設定を確認し、**次へ**を選択します。

#### ワークフローを作成します
<a name="reg-mapping-ecr-ptc"></a>

新しいワークフローまたはワークフローバージョンを作成するときは、レジストリマッピングを確認し、必要に応じて更新します。詳細については、「[プライベートワークフローを作成する](create-private-workflow.md)」を参照してください。

### レジストリマッピング
<a name="ecr-pull-through-registry-mapping"></a>

プライベート Amazon ECR レジストリのプレフィックスとアップストリームレジストリ名の間でマッピングするレジストリマッピングを定義します。

Amazon ECR レジストリマッピングの詳細については、[「Amazon ECR でのプルスルーキャッシュルールの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html)」を参照してください。

次の例は、Docker Hub、Quay、Amazon ECR Public へのレジストリマッピングを示しています。

```
{
    "registryMappings": [
        {
            "upstreamRegistryUrl": "registry-1.docker.io",
            "ecrRepositoryPrefix": "docker-hub"
        },
        {
            "upstreamRegistryUrl": "quay.io",
            "ecrRepositoryPrefix": "quay"
        },
        {
            "upstreamRegistryUrl": "public.ecr.aws",
            "ecrRepositoryPrefix": "ecr-public"
        }
    ]
}
```

### イメージマッピング
<a name="ecr-pull-through-mapping-format"></a>

プライベート Amazon ECR ワークフローで定義されているイメージ名とアップストリームレジストリのイメージ名の間でマッピングするイメージマッピングを定義します。

イメージマッピングは、プルスルーキャッシュをサポートするレジストリで使用できます。HealthOmics がプルスルーキャッシュをサポートしていないアップストリームレジストリでイメージマッピングを使用することもできます。アップストリームレジストリをプライベートリポジトリと手動で同期する必要があります。

Amazon ECR イメージマッピングの詳細については、[「Amazon ECR でのプルスルーキャッシュルールの作成](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html)」を参照してください。

次の例は、プライベート Amazon ECR イメージからパブリックゲノミクスイメージと最新の Ubuntu イメージへのマッピングを示しています。

```
{
    "imageMappings": [
        {
            "sourceImage": "public.ecr.aws/aws-genomics/broadinstitute/gatk:4.6.0.2",
            "destinationImage": "123456789012.dkr.ecr.us-east-1.amazonaws.com/broadinstitute/gatk:4.6.0.2"
        },
        {
            "sourceImage": "ubuntu:latest",
            "destinationImage": "123456789012.dkr.ecr.us-east-1.amazonaws.com/custom/ubuntu:latest",
        }
    ]
}
```

## Amazon ECR コンテナイメージの一般的な考慮事項
<a name="ecr-considerations"></a>
+ アーキテクチャ

  HealthOmics は x86\$164 コンテナをサポートしています。ローカルマシンが Apple Mac などの ARM ベースである場合は、次のようなコマンドを使用して x86\$164 コンテナイメージを構築します。

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ エントリポイントとシェル

  HealthOmics ワークフローエンジンは、ワークフロータスクで使用されるコンテナイメージへのコマンドオーバーライドとして bash スクリプトを挿入します。したがって、コンテナイメージは、bash シェルがデフォルトになるように、指定された ENTRYPOINT なしで構築する必要があります。
+ マウントされたパス

  共有ファイルシステムは /tmp でコンテナタスクにマウントされます。この場所でコンテナイメージに組み込まれているデータまたはツールはすべて上書きされます。

  ワークフロー定義は、/mnt/workflow の読み取り専用マウントを介してタスクで使用できます。
+ イメージのサイズ

  コンテナイメージの最大サイズ[HealthOmics ワークフローの固定サイズクォータ](fixed-quotas.md#fixed-quotas-workflows)については、「」を参照してください。

## HealthOmics ワークフローの環境変数
<a name="ecr-env-vars"></a>

HealthOmics は、コンテナで実行されているワークフローに関する情報を含む環境変数を提供します。これらの変数の値は、ワークフロータスクのロジックで使用できます。

すべての HealthOmics ワークフロー変数は`AWS_WORKFLOW_`、 プレフィックスで始まります。このプレフィックスは、保護された環境変数プレフィックスです。ワークフローコンテナの独自の変数にこのプレフィックスを使用しないでください。

HealthOmics には、次のワークフロー環境変数が用意されています。

**AWS\$1REGION**  
この変数は、コンテナが実行されているリージョンです。

**AWS\$1WORKFLOW\$1RUN**  
この変数は、現在の実行の名前です。

**AWS\$1WORKFLOW\$1RUN\$1ID**  
この変数は、現在の実行の実行識別子です。

**AWS\$1WORKFLOW\$1RUN\$1UUID**  
この変数は、現在の実行の実行 UUID です。

**AWS\$1WORKFLOW\$1TASK**  
この変数は現在のタスクの名前です。

**AWS\$1WORKFLOW\$1TASK\$1ID**  
この変数は、現在のタスクのタスク識別子です。

**AWS\$1WORKFLOW\$1TASK\$1UUID**  
この変数は、現在のタスクのタスク UUID です。

次の例は、各環境変数の一般的な値を示しています。

```
AWS Region: us-east-1
Workflow Run: arn:aws:omics:us-east-1:123456789012:run/6470304
Workflow Run ID: 6470304
Workflow Run UUID: f4d9ed47-192e-760e-f3a8-13afedbd4937
Workflow Task: arn:aws:omics:us-east-1:123456789012:task/4192063
Workflow Task ID: 4192063
Workflow Task UUID: f0c9ed49-652c-4a38-7646-60ad835e0a2e
```

## Amazon ECR コンテナイメージでの Java の使用
<a name="ecr-java-considerations"></a>

ワークフロータスクで GATK などの Java アプリケーションを使用する場合は、コンテナの次のメモリ要件を考慮してください。
+ Java アプリケーションはスタックメモリとヒープメモリを使用します。デフォルトでは、最大ヒープメモリはコンテナで使用可能なメモリの合計に対する割合です。このデフォルトは特定の JVM ディストリビューションと JVM バージョンに依存するため、JVM の関連ドキュメントを参照するか、Java コマンドラインオプション (「-Xmx」など) を使用してヒープメモリの最大数を明示的に設定してください。
+ JVM スタックにもメモリが必要なため、最大ヒープメモリをコンテナのメモリ割り当ての 100% に設定しないでください。メモリは、JVM ガベージコレクターおよびコンテナで実行されているその他のオペレーティングシステムプロセスにも必要です。
+ GATK などの一部の Java アプリケーションでは、ネイティブメソッド呼び出しや、メモリマッピングファイルなどのその他の最適化を使用できます。これらの手法には、JVM 最大ヒープパラメータによって制御されない「オフヒープ」で実行されるメモリ割り当てが必要です。

  Java アプリケーションがオフヒープメモリを割り当てることを知っている (または疑っている) 場合は、タスクメモリ割り当てにオフヒープメモリ要件が含まれていることを確認してください。

  これらのオフヒープ割り当てによってコンテナのメモリが不足した場合、JVM はこのメモリを制御しないため、通常 Java **OutOfMemory** エラーは表示されません。

## Amazon ECR コンテナイメージにタスク入力を追加する
<a name="ecr-tasks"></a>

ワークフロータスクの実行に必要なすべての実行可能ファイル、ライブラリ、スクリプトを、タスクの実行に使用される Amazon ECR イメージに追加します。

ベストプラクティスは、タスクコンテナイメージの外部にあるスクリプト、バイナリ、ライブラリを使用しないことです。これは、`nf-core`ワークフローパッケージの一部として`bin`ディレクトリを使用するワークフローを使用する場合に特に重要です。このディレクトリはワークフロータスクで使用できますが、読み取り専用ディレクトリとしてマウントされます。このディレクトリに必要なリソースはタスクイメージにコピーし、実行時またはタスクに使用されるコンテナイメージの構築時に使用できるようにする必要があります。

HealthOmics がサポートするコンテナイメージの最大サイズ[HealthOmics ワークフローの固定サイズクォータ](fixed-quotas.md#fixed-quotas-workflows)については、「」を参照してください。

# HealthOmics ワークフロー README ファイル
<a name="workflows-readme"></a>

ワークフローの手順、図、重要な情報を含む README.md ファイルをアップロードできます。各ワークフローバージョンは 1 つの README ファイルをサポートしており、いつでも更新できます。

**README の要件は次のとおりです。**
+ README ファイルはマークダウン (.md) 形式である必要があります
+ 最大ファイルサイズ: 500 KiB

**Topics**
+ [既存の README を使用する](#workflows-add-readme)
+ [レンダリング条件](#workflows-rendering-readme)

## 既存の README を使用する
<a name="workflows-add-readme"></a>

Git リポジトリからエクスポートREADMEs には、通常リポジトリの外部では機能しない相対リンクが含まれています。HealthOmics Git 統合は、これらをコンソールで適切にレンダリングするための絶対リンクに自動的に変換するため、手動で URL を更新する必要がなくなります。

Amazon S3 またはローカルドライブからインポートREADMEs の場合、イメージとリンクはパブリック URLs を使用するか、適切なレンダリングのために相対パスを更新する必要があります。

**注記**  
HealthOmics コンソールに表示するには、イメージをパブリックにホストする必要があります。GitHub Enterprise Server または GitLab Self-Managed リポジトリに保存されているイメージはレンダリングできません。

## レンダリング条件
<a name="workflows-rendering-readme"></a>

HealthOmics コンソールは、絶対パスを使用してパブリックにアクセス可能なイメージとリンクを補間します。プライベートリポジトリから URLsレンダリングするには、ユーザーがリポジトリにアクセスできる必要があります。カスタムドメインを使用する GitHub Enterprise Serverまたは GitLab Self-Managedリポジトリの場合、HealthOmics は相対リンクを解決したり、これらのプライベートリポジトリに保存されているイメージをレンダリングしたりすることはできません。

次の表は、 AWS コンソールの README ビューでサポートされているマークダウン要素を示しています。


| 要素 | AWS コンソール | 
| --- | --- | 
| アラート | はい、ただしアイコンなし | 
| バッジ | はい | 
| 基本的なテキストフォーマット | はい | 
| [コードブロック](https://www.markdownguide.org/basic-syntax/#code-blocks) | はい。ただし、[構文の強調表示](https://www.markdownguide.org/extended-syntax/#syntax-highlighting)とコピーボタンの機能はありません。 | 
| 折りたたみ可能なセクション | はい | 
| [見出し](https://www.markdownguide.org/basic-syntax/#headings) | はい | 
| [イメージ形式](https://www.markdownguide.org/basic-syntax/#images-1) | はい | 
| [イメージ (クリック可能)](https://www.markdownguide.org/basic-syntax/#linking-images) | はい | 
| [改行](https://www.markdownguide.org/basic-syntax/#line-breaks) | はい | 
| Mermaid の図 | グラフを開き、グラフの位置を移動し、コードをコピーできるのは のみです | 
| 見積もり | はい | 
| [サブスクリプト](https://www.markdownguide.org/extended-syntax/#subscript)と[スーパースクリプト](https://www.markdownguide.org/extended-syntax/#superscript) | はい | 
| [テーブル](https://www.markdownguide.org/extended-syntax/#tables) | はい。ただし、テキストの整列はサポートされていません | 
| テキストの整列 | はい | 

### イメージ URL とリンク URLs
<a name="workflows-urls-readme"></a>

ソースプロバイダーに応じて、ページとイメージの基本 URLs を次の形式で構成します。
+ `{username}`: リポジトリがホストされているユーザー名。
+ `{repo}`: リポジトリ名。
+ `{ref}`: ソースリファレンス (ブランチ、タグ、コミット ID)。
+ `{path}`: リポジトリ内のページまたはイメージへのファイルパス。


| ソースプロバイダー | ページ URL | イメージ URL | 
| --- | --- | --- | 
| GitHub | https://github.com/\$1username\$1/\$1repo\$1/blob/\$1ref\$1/\$1path\$1 |  `https://github.com/{username}/{repo}/blob/{ref}/{path}?raw=true` `https://raw.githubusercontent.com/{username}/{repo}/{ref}/{path}`  | 
| GitLab | https://gitlab.com/\$1username\$1/\$1repo\$1/-/blob/\$1ref\$1/\$1path\$1 | https://gitlab.com/\$1username\$1/\$1repo\$1/-/raw/\$1ref\$1/\$1path\$1 | 
| Bitbucket | https://bitbucket.org/\$1username\$1/\$1repo\$1/src/\$1ref\$1/\$1path\$1 | https://bitbucket.org/\$1username\$1/\$1repo\$1/raw/\$1ref\$1/\$1path\$1 | 

GitHub、GitLab、および は、パブリックリポジトリにリンクするページ URL とイメージ URLs の両方Bitbucketをサポートします。次の表は、プライベートリポジトリのイメージ URL とリンク URLs のレンダリングに対する各ソースプロバイダーのサポートを示しています。


| プライベートリポジトリのサポート | ソースプロバイダー | ページ URL | イメージ URL | 
| --- | --- | --- | --- | 
| GitHub | リポジトリにアクセスできる場合のみ | いいえ | 
| GitLab | リポジトリにアクセスできる場合のみ | いいえ | 
| Bitbucket | リポジトリにアクセスできる場合のみ | いいえ | 

# プライベートワークフローの Sentieon ライセンスのリクエスト
<a name="private-workflows-subscribe"></a>

プライベートワークフローで Sentieon ソフトウェアを使用している場合は、Senieon ライセンスが必要です。Sentieon ソフトウェアのライセンスをリクエストしてセットアップするには、次の手順に従います。
+ Sentieon ライセンスをリクエストする 
  + ソフトウェアライセンスをリクエストするには、Sentieon サポートグループ (support@sentieon.com) に E メールを送信します。
    + E メールに AWS 正規ユーザー ID を入力します。
    + [ 以下の手順に従って](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)、 AWS 正規ユーザー ID を見つけます。
+ HealthOmics サービスロールを更新して、リージョン内の Sentieon ライセンスサーバープロキシと Sentieon Omics バケットへのアクセスを許可します。次の例では、 へのアクセスを許可します`us-east-1`。必要に応じて、このテキストを自分のリージョンに置き換えます。

------
#### [ JSON ]

****  

  ```
  {
             "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:GetObjectAcl",
                  "s3:GetObject"
              ],
              "Resource": [
                  "arn:aws:s3:::omics-ap-us-east-1/*",
                  "arn:aws:s3:::sentieon-omics-license-us-east-1/*"
              ]
          }
      ]
   }
  ```

------
+ Sentieon ライセンスサーバープロキシにアクセスするための AWS サポートケースを生成します。
  + サポートケースを作成するには、[support.console.aws.amazon.com に移動します。](https://support.console.aws.amazon.com)
  + サポートケースで AWS アカウント と リージョンを指定します。アカウントがライセンスサーバープロキシの許可リストに追加されます。
+ Sentieon コンテナと Sentieon ライセンススクリプトを使用してプライベートワークフローを構築します。
  + プライベートワークフロー内で Sentieon ツールを使用するその他の手順については、GitHub の[Sentieon-Amazon-Omics](https://github.com/Sentieon/sentieon-amazon-omics)」を参照してください。
+ Sentieon ソフトウェアバージョン 202112.07 以降では、HealthOmics ライセンスサーバープロキシがサポートされています。202112.07 より前のバージョンの Sentieon ソフトウェアを使用するには、Sentieon サポートにお問い合わせください。

# HealthOmics のワークフローlinters
<a name="workflows-linter"></a>

ワークフローを作成したら、最初の実行を開始する前に、ワークフローで linter を実行することをお勧めします。linter は、実行が失敗する原因となるエラーを検出します。

WDL の場合、ワークフローを作成すると HealthOmics は自動的に linter を実行します。linter 出力は、**get-workflow**レスポンスの `statusMessage`フィールドで使用できます。次の CLI コマンドを使用してステータス出力を取得します (作成した WDL ワークフローのワークフロー ID を使用します）。

```
aws omics get-workflow 
   —id 123456 
   —query 'statusMessage'
```

HealthOmics には、ワークフローを作成する前にワークフロー定義で実行できる linter が用意されています。HealthOmics に移行する既存のパイプラインでこれらの linters を実行します。
+ **WDL** – [WDL linter を実行するためのパブリック Amazon ECR ](https://gallery.ecr.aws/aws-genomics/healthomics-linter)イメージ。
+ **Nextflow** – [Nextflow の Linter ルール]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow)を実行するためのパブリック Amazon ECR イメージ。この linter のソースコードには、[GitHub](https://github.com/awslabs/linter-rules-for-nextflow) からアクセスできます。
+ **CWL** – 利用できません

# HealthOmics ワークフローオペレーション
<a name="creating-private-workflows"></a>

プライベートワークフローを作成するには、以下が必要です。
+  **Workflow definition file:** WDL、Nextflow、または で記述されたワークフロー定義ファイルCWL。ワークフロー定義は、ワークフローを使用する実行の入力と出力を指定します。また、コンピューティングやメモリの要件など、ワークフローの実行タスクと実行タスクの仕様も含まれています。ワークフロー定義ファイルは `.zip`形式である必要があります。詳細については、HealthOmics の[ワークフロー定義ファイル](workflow-definition-files.md)」を参照してください。
  + [Amazon Q CLI ](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)を使用して、WDL、Nextflow、CWL でワークフロー定義ファイルを構築および検証できます。詳細については、GitHub の[「Amazon Q CLI のプロンプトの例](getting-started.md#omics-q-prompts)[」およびHealthOmics エージェント生成 AI チュートリアル](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai)」を参照してください。
+  **(Optional) Parameter template file:** で記述されたパラメータテンプレートファイルJSON。ファイルを作成して実行パラメータを定義するか、HealthOmics がパラメータテンプレートを生成します。詳細については、[HealthOmics ワークフローのパラメータテンプレートファイル](parameter-templates.md)」を参照してください。
+ **Amazon ECR container images:** ワークフローで使用されるコンテナごとにプライベート Amazon ECR リポジトリを作成します。ワークフロー用のコンテナイメージを作成してプライベートリポジトリに保存するか、サポートされているアップストリームレジストリの内容を ECR プライベートリポジトリと同期します。
+  **(Optional) Sentieon licenses:** プライベートワークフローでSentieonソフトウェアを使用するSentieonライセンスをリクエストします。

4 MiB (圧縮) を超えるワークフロー定義ファイルの場合、ワークフローの作成時に次のいずれかのオプションを選択します。
+ Amazon Simple Storage Service フォルダにアップロードし、場所を指定します。
+ 外部リポジトリ (最大サイズ 1 GiB) にアップロードし、リポジトリの詳細を指定します。

ワークフローを作成したら、 `UpdateWorkflow`オペレーションを使用して次のワークフロー情報を更新できます。
+ 名前
+ 説明
+ デフォルトのストレージタイプ
+ デフォルトのストレージ容量 (ワークフロー ID を使用)
+ README.md ファイル

ワークフロー内のその他の情報を変更するには、新しいワークフローまたはワークフローバージョンを作成します。

ワークフローのバージョニングを使用して、ワークフローを整理および構造化します。バージョンは、反復ワークフロー更新の導入を管理するのにも役立ちます。バージョンの詳細については、「[ワークフローバージョンを作成する](workflows-version-create.md)」を参照してください。

**Topics**
+ [プライベートワークフローを作成する](create-private-workflow.md)
+ [プライベートワークフローを更新する](update-private-workflow.md)
+ [プライベートワークフローを削除する](delete-private-workflow.md)
+ [ワークフローのステータスを確認する](using-get-workflow.md)
+ [ワークフロー定義からゲノムファイルを参照する](create-ref-files.md)

# プライベートワークフローを作成する
<a name="create-private-workflow"></a>

HealthOmics コンソール、 AWS CLI コマンド、またはいずれかの AWS SDKs を使用してワークフローを作成します。

**注記**  
ワークフロー名に個人を特定できる情報 (PII) を含めないでください。これらの名前は CloudWatch ログに表示されます。

ワークフローを作成すると、HealthOmics は汎用一意識別子 (UUID) をワークフローに割り当てます。ワークフロー UUID は、ワークフローとワークフローバージョン全体で一意なグローバル一意識別子 (ガイド) です。データ出所の目的で、ワークフロー UUID を使用してワークフローを一意に識別することをお勧めします。

ワークフロータスクで外部ツール (実行可能ファイル、ライブラリ、スクリプト) を使用している場合は、これらのツールをコンテナイメージに構築します。コンテナイメージをホストするには、次のオプションがあります。
+ ECR プライベートレジストリでコンテナイメージをホストします。このオプションの前提条件:
  + ECR プライベートリポジトリを作成するか、既存のリポジトリを選択します。
  + の説明に従って ECR リソースポリシーを設定します[Amazon ECR のアクセス許可](permissions-ecr.md)。
  + コンテナイメージをプライベートリポジトリにアップロードします。
+ コンテナイメージを、サポートされているサードパーティーレジストリのコンテンツと同期します。このオプションの前提条件:
  + ECR プライベートレジストリで、アップストリームレジストリごとにプルスルーキャッシュルールを設定します。詳細については、「[イメージマッピング](workflows-ecr.md#ecr-pull-through-mapping-format)」を参照してください。
  + の説明に従って ECR リソースポリシーを設定します[Amazon ECR のアクセス許可](permissions-ecr.md)。
  + リポジトリ作成テンプレートを作成します。テンプレートは、Amazon ECR がアップストリームレジストリのプライベートリポジトリを作成するタイミングの設定を定義します。
  + ワークフロー定義のコンテナイメージ参照を ECR キャッシュ名前空間に再マッピングするためのプレフィックスマッピングを作成します。

ワークフローを作成するときは、ワークフロー、実行、タスクに関する情報を含むワークフロー定義を指定します。HealthOmics は、ローカルまたは Amazon S3 バケットに保存されている .zip アーカイブとして、またはサポートされている Git ベースのリポジトリからワークフロー定義を取得できます。

**Topics**
+ [コンソールを使用したワークフローの作成](#console-create-workflows)
+ [CLI を使用したワークフローの作成](#api-create-workflows)
+ [SDK を使用したワークフローの作成](#sdk-create-workflows)

## コンソールを使用したワークフローの作成
<a name="console-create-workflows"></a>

**ワークフローを作成するステップ**

1. [HealthOmics コンソール](https://console.aws.amazon.com/omics/)を開きます。

1.  必要に応じて、左側のナビゲーションペイン (≡) を開きます。**プライベートワークフロー**を選択します。

1. **プライベートワークフロー**ページで、**ワークフローの作成**を選択します。

1. **ワークフローの定義**ページで、次の情報を入力します。

   1. **ワークフロー名**: このワークフロー固有の名前。ワークフロー名を設定して、 AWS HealthOmics コンソールと CloudWatch ログで実行を整理することをお勧めします。

   1. **説明** (オプション): このワークフローの説明。

1. **ワークフロー定義**パネルで、次の情報を指定します。

   1. **ワークフロー言語** (オプション): ワークフローの仕様言語を選択します。それ以外の場合、HealthOmics はワークフロー定義から言語を決定します。

   1. **ワークフロー定義ソース**では、Git ベースのリポジトリ、Amazon S3 の場所、またはローカルドライブから定義フォルダをインポートすることを選択します。

      1. **リポジトリサービスからのインポート**の場合:
**注記**  
HealthOmics は、、GitHub、GitLab、、 のパブリックリポジトリとプライベートリポジトリをサポートしていますBitbucketGitHub self-managedGitLab self-managed。

         1. **接続**を選択して、 AWS リソースを外部リポジトリに接続します。接続を作成するには、「」を参照してください[外部コードリポジトリに接続する](setting-up-new.md#setting-up-omics-repository)。
**注記**  
TLV リージョンのお客様は、ワークフローを作成するにはIAD、 (us-east-1) リージョンで接続を作成する必要があります。

         1. **完全なリポジトリ ID** で、リポジトリ ID を user-name/repo-name として入力します。このリポジトリ内のファイルにアクセスできることを確認します。

         1. **ソースリファレンス** (オプション) に、リポジトリソースリファレンス (ブランチ、タグ、またはコミット ID) を入力します。ソース参照が指定されていない場合、HealthOmics はデフォルトのブランチを使用します。

         1. **ファイルパターンを除外** で、特定のフォルダ、ファイル、または拡張子を除外するファイルパターンを入力します。これにより、リポジトリファイルをインポートする際のデータサイズを管理できます。最大 50 パターンがあり、パターンは [glob パターン構文](https://fossil-scm.org/home/doc/tip/www/globs.md)に従う必要があります。例えば、次のようになります。

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. **S3 から定義フォルダを選択する**:

         1. zip 形式のワークフロー定義フォルダを含む Amazon S3 の場所を入力します。Amazon S3 バケットは、ワークフローと同じリージョンにある必要があります。

         1. アカウントが Amazon S3 バケットを所有していない場合は、S3 バケット所有者の AWS アカウント ID にバケット所有者のアカウント ID を入力します。 **S3 ** この情報は、HealthOmics がバケットの所有権を検証できるようにするために必要です。

      1. **ローカルソースから定義フォルダを選択する**:

         1. 圧縮ワークフロー定義フォルダのローカルドライブの場所を入力します。

   1. **メインワークフロー定義ファイルパス** (オプション): 圧縮されたワークフロー定義フォルダまたはリポジトリから ファイルへの`main`ファイルパスを入力します。ワークフロー定義フォルダにファイルが 1 つしかない場合、またはメインファイルの名前が「main」の場合、このパラメータは必要ありません。

1. **README ファイル** (オプション) パネルで、**README ファイルのソース**を選択し、次の情報を指定します。
   + **リポジトリサービスからインポート**するには、**README ファイルパス**にリポジトリ内の README ファイルへのパスを入力します。
   + **S3 からファイルを選択する**には、S3 の **README ファイルに S3**README ファイルの Amazon S3 URI を入力します。
   + **ローカルソースからファイルを選択**: **README で - オプション**で、**ファイルを選択** を選択して、アップロードするマークダウン (.md) ファイルを選択します。

1. **デフォルトの実行ストレージ設定**パネルで、このワークフローを使用する実行のデフォルトの実行ストレージタイプと容量を指定します。

   1. **実行ストレージタイプ**: 一時実行ストレージのデフォルトとして静的ストレージと動的ストレージのどちらを使用するかを選択します。デフォルトは静的ストレージです。

   1. **Run storage capacity** (オプション): 静的実行ストレージタイプでは、このワークフローに必要なデフォルトの実行ストレージ量を入力できます。このパラメータのデフォルト値は 1200 GiB です。実行を開始するときに、これらのデフォルト値を上書きできます。

1. **タグ** (オプション): 最大 50 個のタグをこのワークフローに関連付けることができます。

1. [**次へ**] を選択します。

1. **ワークフローパラメータの追加** (オプション) ページで、**パラメータソース**を選択します。

   1. **ワークフロー定義ファイルから解析**する場合、HealthOmics はワークフロー定義ファイルからワークフローパラメータを自動的に解析します。

   1. **Git リポジトリからパラメータテンプレートを提供するには**、リポジトリからパラメータテンプレートファイルへのパスを使用します。

   1. **ローカルソースから JSON ファイルを選択する** で、パラメータを指定するローカルソースからJSONファイルをアップロードします。

   1. **ワークフローパラメータを手動で入力**するには、パラメータ名と説明を手動で入力します。

1. **パラメータプレビュー**パネルでは、このワークフローバージョンのパラメータを確認または変更できます。JSON ファイルを復元すると、ローカルで行った変更はすべて失われます。

1. [**次へ**] を選択します。

1. **コンテナ URI の再マッピング**ページで、**マッピングルール**パネルで、ワークフローの URI マッピングルールを定義できます。

   **マッピングファイルのソース**で、次のいずれかのオプションを選択します。
   + **なし** – マッピングルールは必要ありません。
   + **S3 から JSON ファイルを選択する** – マッピングファイルの S3 の場所を指定します。
   + **ローカルソースから JSON ファイルを選択する** – ローカルデバイスのマッピングファイルの場所を指定します。
   + **マッピングを手動で入力する** – **マッピング**パネルにレジストリマッピングとイメージマッピングを入力します。

1.  コンソールに**マッピング**パネルが表示されます。マッピングソースファイルを選択した場合、コンソールにはファイルの値が表示されます。

   1. **レジストリマッピング**では、マッピングを編集したり、マッピングを追加したりできます (最大 20 個のレジストリマッピング）。

      各レジストリマッピングには、次のフィールドが含まれます。
      + **アップストリームレジストリ URL** – アップストリームレジストリの URI。
      + **ECR リポジトリプレフィックス** – Amazon ECR プライベートリポジトリで使用するリポジトリプレフィックス。
      + (オプション) **アップストリームリポジトリプレフィックス** – アップストリームレジストリ内のリポジトリのプレフィックス。
      + (オプション) **ECR アカウント ID** – アップストリームコンテナイメージを所有するアカウントのアカウント ID。

   1. **イメージマッピング**では、イメージマッピングを編集したり、マッピングを追加したりできます (最大 100 個のイメージマッピング）。

      各イメージマッピングには、次のフィールドが含まれます。
      + **ソースイメージ** – アップストリームレジストリ内のソースイメージの URI を指定します。
      + **送信先イメージ** – プライベート Amazon ECR レジストリ内の対応するイメージの URI を指定します。

1. [**次へ**] を選択します。

1. ワークフロー設定を確認し、**ワークフローの作成**を選択します。

## CLI を使用したワークフローの作成
<a name="api-create-workflows"></a>

ワークフローファイルとパラメータテンプレートファイルがローカルマシンにある場合は、次の CLI コマンドを使用してワークフローを作成できます。

```
aws omics create-workflow  \
  --name "my_workflow"   \
  --definition-zip fileb://my-definition.zip \
  --parameter-template file://my-parameter-template.json
```

`create-workflow` オペレーションは次のレスポンスを返します。

```
{
  "arn": "arn:aws:omics:us-west-2:....",
  "id": "1234567",
  "status": "CREATING",
  "tags": {
      "resourceArn": "arn:aws:omics:us-west-2:...."
  },
  "uuid": "64c9a39e-8302-cc45-0262-2ea7116d854f"
}
```

### ワークフローの作成時に使用するオプションパラメータ
<a name="other-create-parameters"></a>

ワークフローを作成するときに、任意のオプションパラメータを指定できます。構文の詳細については、AWS HealthOmics API リファレンスの[CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)」を参照してください。

**Topics**
+ [ワークフロー定義の Amazon S3 の場所を指定する](#create-defn-uri-parameter)
+ [Git ベースのリポジトリからワークフロー定義を使用する](#create-defn-uri-git)
+ [Readme ファイルを指定する](#specify-readme-file)
+ [**main** 定義ファイルを指定する](#create-main-parameter)
+ [実行ストレージタイプを指定する](#create-run-storage-parameter)
+ [GPU 設定を指定する](#create-accelerator-parameter)
+ [プルスルーキャッシュマッピングパラメータを設定する](#create-prefix-mapping-parameters)

#### ワークフロー定義の Amazon S3 の場所を指定する
<a name="create-defn-uri-parameter"></a>

ワークフロー定義ファイルが Amazon S3 フォルダにある場合は、次の例に示すように、 `definition-uri`パラメータを使用して場所を指定します。アカウントが Amazon S3 バケットを所有していない場合は、所有者の AWS アカウント ID を指定します。

```
aws omics create-workflow  \
  --name Test  \
  --definition-uri s3://omics-bucket/workflow-definition/  \
  --owner-id  123456789012 
    ...
```

#### Git ベースのリポジトリからワークフロー定義を使用する
<a name="create-defn-uri-git"></a>

サポートされている Git ベースのリポジトリからワークフロー定義を使用するには、リクエストで `definition-repository`パラメータを使用します。リクエストに複数の入力ソースが含まれていると失敗するため、他の`definition`パラメータを指定しないでください。

`definition-respository` パラメータには、次のフィールドが含まれます。
+ **connectionArn** – AWS リソースを外部リポジトリに接続するコード接続の ARN。
+ **fullRepositoryId** – リポジトリ ID を として入力します`owner-name/repo-name`。このリポジトリ内のファイルにアクセスできることを確認します。
+ **sourceReference** (オプション) – リポジトリ参照タイプ (BRANCH、TAG、または COMMIT) と値を入力します。

  ソースリファレンスを指定しない場合、HealthOmics はデフォルトブランチで最新のコミットを使用します。
+ **excludeFilePatterns** (オプション) – 特定のフォルダ、ファイル、または拡張子を除外するファイルパターンを入力します。これにより、リポジトリファイルをインポートする際のデータサイズを管理できます。最大 50 個のパターンを指定します。パターンは [glob パターン構文](https://fossil-scm.org/home/doc/tip/www/globs.md)に従う必要があります。例えば、次のようになります。
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Git ベースのリポジトリからワークフロー定義を指定する場合は、 `parameter-template-path` を使用してパラメータテンプレートファイルを指定します。このパラメータを指定しない場合、HealthOmics はパラメータテンプレートなしでワークフローを作成します。

次の例は、Git ベースのプライベートリポジトリからのコンテンツに関連するパラメータを示しています。

```
aws omics create-workflow \
    --name custom-variant \
    --description "Custom variant calling pipeline" \
    --engine "WDL" \
    --definition-repository '{
            "connectionArn": "arn:aws:codeconnections:us-east-1:123456789012:connection/abcd1234-5678-90ab-cdef-1234567890ab",
            "fullRepositoryId": "myorg/my-genomics-workflows",
            "sourceReference": {
                "type": "BRANCH",            
                "value": "main"        
            },        
            "excludeFilePatterns": ["tests/**", "*.log"]   
      }' \
    --main "workflows/variant-calling/main.wdl" \
    --parameter-template-path "parameters/variant-calling-params.json" \
    --readme-path "docs/variant-calling-README.md" \
    --storage-type "DYNAMIC" \
```

その他の例については、ブログ記事「How [ to Create an AWS HealthOmics Workflows from Content in Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git)」を参照してください。

#### Readme ファイルを指定する
<a name="specify-readme-file"></a>

README ファイルの場所は、次のいずれかのパラメータを使用して指定できます。
+ **readme-markdown** – ローカルマシン上の文字列入力またはファイル。
+ **readme-uri** – S3 に保存されているファイルの URI。
+ **readme-path ** – リポジトリ内の README ファイルへのパス。

readme-path は **definition-respository** と組み合わせてのみ使用してください。README パラメータを指定しない場合、HealthOmics はルートレベルの README.md ファイルをリポジトリにインポートします (存在する場合）。

次の例は、readme-path と readme-uri を使用して README ファイルの場所を指定する方法を示しています。

```
# Using README from repository
aws omics create-workflow \
    --name "documented-workflow" \
    --definition-repository '...' \
    --readme-path "docs/workflow-guide.md"

# Using README from S3
aws omics create-workflow \
    --name "s3-readme-workflow" \
    --definition-repository '...' \
    --readme-uri "s3://my-bucket/workflow-docs/readme.md"
```

詳細については、「[HealthOmics ワークフロー README ファイル](workflows-readme.md)」を参照してください。

#### **main** 定義ファイルを指定する
<a name="create-main-parameter"></a>

複数のワークフロー定義ファイルを含める場合は、 `main`パラメータを使用してワークフローのメイン定義ファイルを指定します。

```
aws omics create-workflow  \
  --name Test  \
  --main multi_workflow/workflow2.wdl  \
    ...
```

#### 実行ストレージタイプを指定する
<a name="create-run-storage-parameter"></a>

デフォルトの実行ストレージタイプ (DYNAMIC または STATIC) を指定し、ストレージ容量 (静的ストレージに必要) を実行できます。実行ストレージタイプの詳細については、「」を参照してください[HealthOmics ワークフローでストレージタイプを実行する](workflows-run-types.md)。

```
aws omics create-workflow  \
  --name my_workflow   \
  --definition-zip fileb://my-definition.zip \
  --parameter-template file://my-parameter-template.json   \
  --storage-type 'STATIC'  \
  --storage-capacity 1200  \
```

#### GPU 設定を指定する
<a name="create-accelerator-parameter"></a>

アクセラレーターパラメータを使用して、高速コンピューティングインスタンスで実行されるワークフローを作成します。次の例は、 `accelerators`パラメータの使用方法を示しています。ワークフロー定義で GPU 設定を指定します。「[高速コンピューティングインスタンス](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances)」を参照してください。

```
aws omics create-workflow --name workflow name \
   --definition-uri s3://amzn-s3-demo-bucket1/GPUWorkflow.zip \
   --accelerators GPU
```

#### プルスルーキャッシュマッピングパラメータを設定する
<a name="create-prefix-mapping-parameters"></a>

Amazon ECR プルスルーキャッシュマッピング機能を使用している場合は、デフォルトのマッピングを上書きできます。コンテナ設定パラメータの詳細については、「」を参照してください[プライベートワークフローのコンテナイメージ](workflows-ecr.md)。

次の例では、 ファイルにこのコンテンツ`mappings.json`が含まれています。

```
{
    "registryMappings": [
        {
            "upstreamRegistryUrl": "registry-1.docker.io",
            "ecrRepositoryPrefix": "docker-hub"
        },
        {
            "upstreamRegistryUrl": "quay.io",
            "ecrRepositoryPrefix": "quay",
            "accountId": "123412341234"
        },
        {

            "upstreamRegistryUrl": "public.ecr.aws",
            "ecrRepositoryPrefix": "ecr-public"
        }
    ],
    "imageMappings": [{
            "sourceImage": "docker.io/library/ubuntu:latest",
            "destinationImage": "healthomics-docker-2/custom/ubuntu:latest",
            "accountId": "123412341234"
        },
        {
            "sourceImage": "nvcr.io/nvidia/k8s/dcgm-exporter",
            "destinationImage": "healthomics-nvidia/k8s/dcgm-exporter"
        }
    ]
}
```

create-workflow コマンドでマッピングパラメータを指定します。

```
aws omics create-workflow  \
     ...
--container-registry-map-file file://mappings.json
    ...
```

マッピングパラメータファイルの S3 の場所を指定することもできます。

```
aws omics create-workflow  \
     ...
--container-registry-map-uri s3://amzn-s3-demo-bucket1/test.zip
    ...
```

## SDK を使用したワークフローの作成
<a name="sdk-create-workflows"></a>

ワークフローは、いずれかの SDKsを使用して作成できます。次の例は、Python SDK を使用してワークフローを作成する方法を示しています。

```
import boto3

omics = boto3.client('omics')

with open('definition.zip', 'rb') as f:
   definition = f.read()

response = omics.create_workflow(
   name='my_workflow',
   definitionZip=definition,
   parameterTemplate={ ... }
)
```

# プライベートワークフローを更新する
<a name="update-private-workflow"></a>

HealthOmics コンソール、 AWS CLI コマンド、またはいずれかの AWS SDKs を使用してワークフローを更新できます。

**注記**  
ワークフロー名に個人を特定できる情報 (PII) を含めないでください。これらの名前は CloudWatch ログに表示されます。

**Topics**
+ [コンソールを使用したワークフローの更新](#console-update-workflows)
+ [CLI を使用したワークフローの更新](#api-update-workflows)
+ [SDK を使用したワークフローの更新](#sdk-update-workflows)

## コンソールを使用したワークフローの更新
<a name="console-update-workflows"></a>

**ワークフローを更新するステップ**

1. [HealthOmics コンソール](https://console.aws.amazon.com/omics/)を開きます。

1.  必要に応じて、左側のナビゲーションペイン (≡) を開きます。**プライベートワークフロー**を選択します。

1. **プライベートワークフロー**ページで、更新するワークフローを選択します。

1. **ワークフロー**ページで、次の操作を行います。
   + ワークフローにバージョンがある場合は、必ず**デフォルトバージョン**を選択してください。
   + **アクション**リストから**選択した編集**を選択します。

1. **ワークフローの編集**ページで、次の値のいずれかを変更できます。
   + **ワークフロー名**。
   + **ワークフローの説明**。
   + ワークフローのデフォルトの **Run ストレージタイプ**。
   + デフォルトの **Run ストレージ容量** (実行ストレージタイプが静的ストレージの場合）。デフォルトの実行ストレージ設定の詳細については、「」を参照してください[コンソールを使用したワークフローの作成](create-private-workflow.md#console-create-workflows)。

1. 変更を保存するには、**[変更を保存]** を選択します。

## CLI を使用したワークフローの更新
<a name="api-update-workflows"></a>

次の例に示すように、ワークフロー名と説明を更新できます。デフォルトの実行ストレージタイプ (STATIC または DYNAMIC) を変更し、ストレージ容量 (静的ストレージタイプの場合) を実行することもできます。実行ストレージタイプの詳細については、「」を参照してください[HealthOmics ワークフローでストレージタイプを実行する](workflows-run-types.md)。

```
aws omics update-workflow    \
  --id 1234567    \
  --name my_workflow      \
  --description "updated workflow"    \
  --storage-type 'STATIC'    \
  --storage-capacity 1200
```

`update-workflow` リクエストに対するレスポンスを受信しません。

## SDK を使用したワークフローの更新
<a name="sdk-update-workflows"></a>

ワークフローは、いずれかの SDKs を使用して更新できます。

次の例は、Python SDK を使用してワークフローを更新する方法を示しています。

```
import boto3

omics = boto3.client('omics')

response = omics.update_workflow(
   name='my_workflow',
   description='updated workflow'
)
```

# プライベートワークフローを削除する
<a name="delete-private-workflow"></a>

ワークフローが不要になった場合は、HealthOmics コンソール、 AWS CLI コマンド、またはいずれかの AWS SDKs を使用してワークフローを削除できます。次の条件を満たすワークフローを削除できます。
+ ステータスは ACTIVE または FAILED です。
+ アクティブな共有はありません。
+ すべてのワークフローバージョンを削除しました。

ワークフローを削除しても、ワークフローを使用している進行中の実行には影響しません。

**Topics**
+ [コンソールを使用したワークフローの削除](#console-delete-workflows)
+ [CLI を使用したワークフローの削除](#api-delete-workflows)
+ [SDK を使用したワークフローの削除](#sdk-delete-workflows)

## コンソールを使用したワークフローの削除
<a name="console-delete-workflows"></a>

**ワークフローを削除するには**

1. [HealthOmics コンソール](https://console.aws.amazon.com/omics/)を開きます。

1.  必要に応じて、左側のナビゲーションペイン (≡) を開きます。**プライベートワークフロー**を選択します。

1. **プライベートワークフロー**ページで、削除するワークフローを選択します。

1. **ワークフロー**ページで、**アクション**リストから**選択した削除**を選択します。

1. **ワークフローの削除**モーダルで、「確認」と入力して削除を確認します。

1. **[削除]** を選択します。

## CLI を使用したワークフローの削除
<a name="api-delete-workflows"></a>

次の例は、 AWS CLI コマンドを使用してワークフローを削除する方法を示しています。この例を実行するには、 を、削除するワークフローの `workflow id` ID に置き換えます。

```
aws omics delete-workflow 
  --id workflow id
```

HealthOmics は`delete-workflow`リクエストにレスポンスを送信しません。

## SDK を使用したワークフローの削除
<a name="sdk-delete-workflows"></a>

ワークフローは、いずれかの SDKsを使用して削除できます。

次の例は、Python SDK を使用してワークフローを削除する方法を示しています。

```
import boto3

omics = boto3.client('omics')

response = omics.delete_workflow(
   id='1234567'
)
```

# ワークフローのステータスを確認する
<a name="using-get-workflow"></a>

ワークフローを作成したら、次に示すように、**get-workflow** を使用してワークフローのステータスを確認し、その他の詳細を表示できます。

```
aws omics get-workflow --id 1234567 
```

レスポンスには、次に示すように、ステータスを含むワークフローの詳細が含まれます。

```
{
    "arn": "arn:aws:omics:us-west-2:....",
    "creationTime": "2022-07-06T00:27:05.542459" 
    "id": "1234567",
    "engine": "WDL",
    "status": "ACTIVE",
    "type": "PRIVATE",
    "main": "workflow-crambam.wdl",
    "name": "workflow_name",
    "storageType": "STATIC",
    "storageCapacity": "1200",
    "uuid": "64c9a39e-8302-cc45-0262-2ea7116d854f"   
  }
```

ステータスが に移行した後、このワークフローを使用して実行を開始できます`ACTIVE`。

# ワークフロー定義からゲノムファイルを参照する
<a name="create-ref-files"></a>

HealthOmics リファレンスストアオブジェクトは、次のような URI で参照できます。示されている`reference ID`場合は、独自の `account ID`、`reference store ID`、および を使用します。

```
omics://account ID.storage.us-west-2.amazonaws.com/reference store id/reference/id            
```

ワークフローによっては、参照ゲノムの `SOURCE`と `INDEX` ファイルの両方が必要になります。前の URI はデフォルトの短縮形式であり、デフォルトで SOURCE ファイルになります。いずれかのファイルを指定するには、次のように長い URI フォームを使用できます。

```
omics://account ID.storage.us-west-2.amazonaws.com/reference store id/reference/id/source
omics://account ID.storage.us-west-2.amazonaws.com/reference store id/reference/id/index
```

シーケンス読み取りセットを使用すると、図のように同様のパターンになります。

```
aws omics create-workflow \
     --name workflow name \
     --main sample workflow.wdl \
     --definition-uri omics://account ID.storage.us-west-2.amazonaws.com/sequence_store_id/readSet/id \
     --parameter-template file://parameters_sample_description.json
```

FASTQ に基づくリードセットなど、一部のリードセットにはペアのリードを含めることができます。次の例では、SOURCE1 と SOURCE2 と呼ばれます。BAM や CRAM などの形式には SOURCE1 ファイルのみが含まれます。一部のリードセットには、 `bai`や ファイルなどの INDEX `crai` ファイルが含まれます。前述の URI はデフォルトの短縮形式であり、デフォルトで SOURCE1 ファイルになります。正確なファイルまたはインデックスを指定するには、次のように長い URI フォームを使用できます。

```
omics://123456789012.storage.us-west-2.amazonaws.com/<sequence_store_id>/readSet/<id>/source1
omics://123456789012.storage.us-west-2.amazonaws.com/<sequence_store_id>/readSet/<id>/source2
omics://123456789012.storage.us-west-2.amazonaws.com/<sequence_store_id>/readSet/<id>/index
```

以下は、2 つの Omics Storage URIs。

```
{
   "input_fasta": "omics://123456789012.storage.us-west-2.amazonaws.com/<reference_store_id>/reference/<id>",
   "input_cram": "omics://123456789012.storage.us-west-2.amazonaws.com/<sequence_store_id>/readSet/<id>"
}
```

**開始/実行**リクエスト`--inputs file://<input_file.json>`に を追加して AWS CLI 、 の入力 JSON ファイルを参照します。