

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Private Workflows erstellen in HealthOmics
<a name="workflows-setup"></a>

*Private Workflows* hängen von einer Vielzahl von Ressourcen ab, die Sie vor der Erstellung des Workflows erstellen und konfigurieren:
+ **Workflow definition file:**Eine inWDL, Nextflow oder geschriebene Workflow-DefinitionsdateiCWL. Die Workflow-Definition spezifiziert die Eingaben und Ausgaben für Läufe, die den Workflow verwenden. Sie enthält auch Spezifikationen für die Ausführungen und Ausführungsaufgaben für Ihren Workflow, einschließlich der Rechen- und Speicheranforderungen. Die Workflow-Definitionsdatei muss `.zip` das Format haben. Weitere Informationen finden Sie unter [Workflow-Definitionsdateien](workflow-definition-files.md).
  + Sie können [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) verwenden, um Ihre Workflow-Definitionsdateien in WDL, Nextflow und CWL zu erstellen und zu validieren. Weitere Informationen finden Sie unter [Beispielaufforderungen für Amazon Q CLI](getting-started.md#omics-q-prompts) und im [HealthOmics Agentic Generative AI-Tutorial](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) unter. GitHub
+ **(Optional) Parameter template file:**Eine Parameter-Vorlagendatei, die in geschrieben wurde. JSON Erstellen Sie die Datei, um die Ausführungsparameter zu definieren, oder HealthOmics generiert die Parametervorlage für Sie. Weitere Informationen finden Sie unter [Parametervorlagendateien für HealthOmics Workflows](parameter-templates.md).
+ **Amazon ECR container images:**Erstellen Sie ein privates Amazon ECR-Repository für den Workflow. Erstellen Sie Container-Images im privaten Repository oder synchronisieren Sie den Inhalt einer unterstützten Upstream-Registrierung mit Ihrem privaten Amazon ECR-Repository.
+ **(Optional) Sentieon licenses:**Fordern Sie eine Sentieon Lizenz an, um die Sentieon Software in privaten Workflows zu verwenden.

Optional können Sie die Workflow-Definition vor oder nach der Erstellung des Workflows überprüfen. In **linter** diesem Thema werden die verfügbaren Linter in beschrieben. HealthOmics

**Topics**
+ [HealthOmics Workflow-Integration mit Git-basierten Repositorys](workflows-git-integration.md)
+ [Workflow-Definitionsdateien in HealthOmics](workflow-definition-files.md)
+ [Parametervorlagendateien für HealthOmics Workflows](parameter-templates.md)
+ [Container-Images für private Workflows](workflows-ecr.md)
+ [HealthOmics Workflow-README-Dateien](workflows-readme.md)
+ [Sentieon-Lizenzen für private Workflows anfordern](private-workflows-subscribe.md)
+ [Der Arbeitsablauf blinkt ein HealthOmics](workflows-linter.md)
+ [HealthOmics Workflow-Operationen](creating-private-workflows.md)

# HealthOmics Workflow-Integration mit Git-basierten Repositorys
<a name="workflows-git-integration"></a>

Wenn Sie einen Workflow (oder eine Workflow-Version) erstellen, geben Sie eine Workflow-Definition an, um Informationen über den Workflow, die Ausführungen und Aufgaben anzugeben. HealthOmics kann die Workflow-Definition als ZIP-Archiv (lokal oder in einem Amazon S3 S3-Bucket gespeichert) oder aus einem unterstützten Git-basierten Repository abrufen.

Die HealthOmics Integration mit Git-basierten Repositorys ermöglicht die folgenden Funktionen:
+ Direkte Workflow-Erstellung aus öffentlichen, privaten und selbstverwalteten Instanzen.
+ Integration von Workflow-README-Dateien und Parametervorlagen aus Repositorys.
+ Support für GitHub GitLab, und Bitbucket-Repositorys.

Durch die Verwendung eines Git-basierten Repositorys vermeiden Sie die manuellen Schritte des Herunterladens von Workflow-Definitionsdateien und Eingabeparameter-Vorlagendateien, der Erstellung eines ZIP-Archivs und der anschließenden Bereitstellung des Archivs in S3. Dies vereinfacht die Workflow-Erstellung für Szenarien wie die folgenden Beispiele:

1. Sie möchten schnell mit einem gängigen Open-Source-Workflow wie nf-core loslegen. HealthOmicsruft automatisch alle Workflow-Definitions- und Eingabeparameter-Vorlagendateien aus dem NF-Core-Repository ab GitHub und verwendet diese Dateien, um Ihren neuen Workflow zu erstellen.

1. Sie verwenden einen öffentlichen Workflow von GitHub, und einige neue Updates sind verfügbar. Sie können ganz einfach eine neue HealthOmics Workflow-Version erstellen, indem Sie die aktualisierte Workflow-Definition GitHub als Quelle verwenden. Benutzer Ihres Workflows können zwischen dem ursprünglichen Workflow und der neuen Workflow-Version wählen, die Sie erstellt haben.

1. Ihr Team baut eine eigene Pipeline auf, die nicht öffentlich ist. Sie speichern Ihren Code in einem privaten Git-Repository und verwenden diese Workflow-Definition für Ihre HealthOmics Workflows. Das Team aktualisiert die Workflow-Definition häufig als Teil eines iterativen Workflow-Entwicklungszyklus. Sie können ganz einfach neue Workflow-Versionen nach Bedarf aus Ihrem privaten Repository erstellen.

**Topics**
+ [Unterstützte Git-basierte Repositorys](#workflows-git-supported)
+ [Konfigurieren Sie Verbindungen zu externen Code-Repositorys](#workflows-git-connections)
+ [Zugreifen auf selbstverwaltete Repositorys](#workflows-git-self-managed)
+ [Kontingente im Zusammenhang mit externen Code-Repositorys](#workflows-git-quotas)
+ [Erforderliche IAM-Berechtigungen](#workflows-git-permissions)

## Unterstützte Git-basierte Repositorys
<a name="workflows-git-supported"></a>

HealthOmics unterstützt öffentliche und private Repositorys für die folgenden Git-basierten Anbieter:
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics unterstützt selbstverwaltete Repositorys für die folgenden Git-basierten Anbieter:
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics unterstützt die Verwendung von kontoübergreifenden Verbindungen für GitHub, GitLab und Bitbucket. Richten Sie gemeinsame Berechtigungen über den AWS Resource Access Manager ein. Ein Beispiel finden Sie im *CodePipeline Benutzerhandbuch* unter [Gemeinsame Verbindungen](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html).

## Konfigurieren Sie Verbindungen zu externen Code-Repositorys
<a name="workflows-git-connections"></a>

Connect Ihre Workflows mithilfe von AWS mit Git-basierten Repositorys. CodeConnection HealthOmics verwendet diese Verbindung, um auf Ihre Quellcode-Repositorys zuzugreifen.

**Anmerkung**  
Der CodeConnections AWS-Service ist in der Region il-central-1 nicht verfügbar. Konfigurieren Sie für diese Region den Dienst us-east-1, um Workflows oder Workflow-Versionen aus einem Repository zu erstellen. 

### Eine Verbindung erstellen
<a name="workflows-git-connection-create"></a>

Bevor Sie Verbindungen herstellen können, folgen Sie den Anweisungen unter [Verbindungen einrichten](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html) im *Developer Console Tools-Benutzerhandbuch*. 

Um eine Verbindung herzustellen, folgen Sie den Anweisungen unter [Verbindung erstellen](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html) im *Developer Console Tools-Benutzerhandbuch*. 

### Konfigurieren Sie die Autorisierung für die Verbindung
<a name="workflows-git-connection-create"></a>

Sie müssen die Verbindung mithilfe des OAuth Flow des Anbieters autorisieren. Stellen Sie sicher, dass der Verbindungsstatus lautet, `AVAILABLE` bevor Sie ihn verwenden.

Beispiele finden Sie im Blogbeitrag [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). 

## Zugreifen auf selbstverwaltete Repositorys
<a name="workflows-git-self-managed"></a>

Um Verbindungen zu einem GitLab selbstverwalteten Repository einzurichten, verwenden Sie beim Erstellen eines Hosts ein persönliches Administrator-Zugriffstoken. Bei der darauffolgenden Verbindungsherstellung wird mit dem Konto des Kunden auf Oauth zugegriffen.

Das folgende Beispiel richtet eine Verbindung zu einem selbstverwalteten Repository ein GitLab :

1. Richten Sie den Zugriff auf das Personal Access Token eines Admin-Benutzers ein.

   Informationen zum Einrichten eines PAT in einem GitLab selbstverwalteten Repository finden Sie unter [Persönliche Zugriffstoken](https://docs.gitlab.com/user/profile/personal_access_tokens/) in *GitLab Docs*.

1. Erstellen eines Hosts

   1. Navigieren Sie zu **CodePipeline>Einstellungen>Verbindungen**.

   1. **Wählen Sie die Registerkarte **Hosts** und dann Create Host.**

   1. Konfigurieren Sie die folgenden Felder:
      + Geben Sie einen Namen des Hosts ein
      + Wählen Sie als Anbietertyp **GitLab Self Managed**
      + Geben Sie die **Host-URL ein** 
      + Geben Sie die VPC-Informationen ein, wenn der Host in einer VPC definiert ist

   1. Wählen Sie **Create Host**, wodurch der Host im Status PENDING erstellt wird.

   1. Um die Einrichtung abzuschließen, wählen Sie **Host einrichten**.

   1. Geben Sie das Personal Access Token (PAT) eines Admin-Benutzers ein und wählen Sie dann **Weiter**. 

1. Stellen Sie die Verbindung her

   1. Wählen Sie auf der Registerkarte **Verbindungen die Option **Verbindungen** erstellen** aus.

   1. Wählen Sie als Anbietertyp die Option **GitLab Selbstverwaltet** aus.

   1. Geben Sie unter **Verbindungseinstellungen > Verbindungsnamen eingeben** die Host-URL ein, die Sie zuvor erstellt haben.

   1. Wenn auf Ihre GitLab selbstverwaltete Instanz nur über eine VPC zugegriffen werden kann, konfigurieren Sie die VPC-Details.

   1. Wählen Sie „Ausstehende Verbindung **aktualisieren**“. Das modale Fenster leitet Sie zur GitLab Anmeldeseite weiter.

   1. Geben Sie den Benutzernamen und das Passwort für das Kundenkonto ein und schließen Sie den Autorisierungsprozess ab.

   1.  Wählen Sie für die erstmalige Einrichtung **Authorize AWS Connector for Gitlab Self Managed**.

## Kontingente im Zusammenhang mit externen Code-Repositorys
<a name="workflows-git-quotas"></a>

Für die HealthOmics Integration mit externen Code-Repositorys gibt es eine maximale Größe für ein Repository, jede Repository-Datei und jede README-Datei. Details hierzu finden Sie unter [HealthOmics Workflow-Kontingente mit fester Größe](fixed-quotas.md#fixed-quotas-workflows).

## Erforderliche IAM-Berechtigungen
<a name="workflows-git-permissions"></a>

Fügen Sie Ihrer identitätsbasierten IAM-Richtlinie die folgenden Aktionen hinzu:

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

# Workflow-Definitionsdateien in HealthOmics
<a name="workflow-definition-files"></a>

Sie verwenden eine Workflow-Definition, um Informationen über den Workflow, die Läufe und die Aufgaben in den Läufen anzugeben. Sie erstellen Workflow-Definitionen in einer oder mehreren Dateien mithilfe einer Workflow-Definitionssprache. HealthOmics unterstützt in WDL, Nextflow oder CWL geschriebene Workflow-Definitionen. 

HealthOmics unterstützt die folgenden Optionen für WDL-Workflow-Definitionen: 
+ WDL — Stellt eine spezifikationskonforme WDL-Engine bereit. 
+ WDL lenient — Konzipiert für Workflows, die von Cromwell migriert wurden. Es unterstützt Kundenrichtlinien von Cromwell und einige nichtkonforme Logiken. Details hierzu finden Sie unter [Implizite Typkonvertierung in WDL Lenient](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Informationen zu den einzelnen Workflow-Sprachen finden Sie in den sprachspezifischen Abschnitten weiter unten.

In der Workflow-Definition geben Sie die folgenden Arten von Informationen an:
+ **Language version**— Die Sprache und Version der Workflow-Definition.
+ **Compute and memory**— Die Rechen- und Speicheranforderungen für Aufgaben im Workflow.
+ **Inputs**— Speicherort der Eingaben für die Workflow-Aufgaben. Weitere Informationen finden Sie unter [HealthOmics Eingaben ausführen](workflows-run-inputs.md).
+ **Outputs**— Speicherort für die von den Aufgaben generierten Ausgaben.
+ **Task resources**— Rechen- und Speicheranforderungen für jede Aufgabe.
+ **Accelerators**— andere Ressourcen, die für die Aufgaben erforderlich sind, z. B. Beschleuniger.

**Topics**
+ [HealthOmics Anforderungen an die Workflow-Definition](workflow-defn-requirements.md)
+ [Versionsunterstützung für HealthOmics Workflow-Definitionssprachen](workflows-lang-versions.md)
+ [Rechen- und Speicheranforderungen für HealthOmics Aufgaben](memory-and-compute-tasks.md)
+ [Aufgabenausgaben in einer HealthOmics Workflow-Definition](workflows-task-outputs.md)
+ [Aufgabenressourcen in einer HealthOmics Workflow-Definition](task-resources.md)
+ [Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics](task-accelerators.md)
+ [Besonderheiten der WDL-Workflow-Definition](workflow-languages-wdl.md)
+ [Einzelheiten der Nextflow-Workflow-Definition](workflow-definition-nextflow.md)
+ [Besonderheiten der CWL-Workflow-Definition](workflow-languages-cwl.md)
+ [Beispiele für Workflow-Definitionen](workflow-definition-examples.md)

# HealthOmics Anforderungen an die Workflow-Definition
<a name="workflow-defn-requirements"></a>

Die HealthOmics Workflow-Definitionsdateien müssen die folgenden Anforderungen erfüllen:
+ Aufgaben müssen input/output Parameter, Amazon ECR-Container-Repositorys und Laufzeitspezifikationen wie Speicher- oder CPU-Zuweisung definieren.
+ Stellen Sie sicher, dass Ihre IAM-Rollen über die erforderlichen Berechtigungen verfügen.<a name="lower"></a>
  + Ihr Workflow hat Zugriff auf Eingabedaten aus AWS Ressourcen wie Amazon S3. 
  + Ihr Workflow hat bei Bedarf Zugriff auf externe Repository-Services.
+ Deklarieren Sie die Ausgabedateien in der Workflow-Definition. Um Dateien für Zwischenläufe an den Ausgabespeicherort zu kopieren, deklarieren Sie sie als Workflow-Ausgaben. 
+ Die Eingabe- und Ausgabespeicherorte müssen sich in derselben Region wie der Workflow befinden. 
+ HealthOmics Die Eingaben für den Speicher-Workflow müssen den `ACTIVE` Status haben. HealthOmics importiert keine Eingaben mit einem `ARCHIVED` Status, wodurch der Workflow fehlschlägt. Informationen zu Amazon S3 S3-Objekteingaben finden Sie unter[HealthOmics Eingaben ausführen](workflows-run-inputs.md).
+ Ein **main** Speicherort des Workflows ist optional, wenn Ihr ZIP-Archiv entweder eine einzelne Workflow-Definition oder eine Datei mit dem Namen „main“ enthält.<a name="lower"></a>
  + Beispielpfad: `workflow-definition/main-file.wdl`
+ Bevor Sie einen Workflow von Amazon S3 oder Ihrem lokalen Laufwerk aus erstellen, erstellen Sie ein ZIP-Archiv mit den Workflow-Definitionsdateien und allen Abhängigkeiten, z. B. Unterworkflows.
+ Wir empfehlen, dass Sie Amazon ECR-Container im Workflow als Eingabeparameter für die Validierung der Amazon ECR-Berechtigungen deklarieren. 

Zusätzliche Überlegungen zu Nextflow:
+ **/bin**

  Nextflow-Workflow-Definitionen können einen /bin-Ordner mit ausführbaren Skripten enthalten. Dieser Pfad hat schreibgeschützten und ausführbaren Zugriff auf Aufgaben. Aufgaben, die auf diesen Skripten basieren, sollten einen Container verwenden, der mit den entsprechenden Skriptinterpretern erstellt wurde. Es empfiehlt sich, den Interpreter direkt aufzurufen. Beispiel:

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

  Auf NextFlow basierende Workflow-Definitionen können nextflow.config-Dateien enthalten, die dabei helfen, Parameterdefinitionen zu abstrahieren oder Ressourcenprofile zu verarbeiten. Um die Entwicklung und Ausführung von Nextflow-Pipelines in mehreren Umgebungen zu unterstützen, verwenden Sie eine HealthOmics -spezifische Konfiguration, die Sie der globalen Konfiguration mithilfe der IncludeConfig-Direktive hinzufügen. Um die Portabilität zu gewährleisten, konfigurieren Sie den Workflow mithilfe des folgenden Codes so, dass er die Datei nur einbezieht, wenn er darauf ausgeführt HealthOmics wird:

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

  HealthOmics unterstützt keine vom Modul generierten Dag-, Trace- und Ausführungsberichte. Sie können Alternativen zu den Trace- und Ausführungsberichten mithilfe einer Kombination aus GetRun und GetRunTask API-Aufrufen generieren. 

Zusätzliche Überlegungen zu CWL:
+ **Container image uri interpolation**

  HealthOmics ermöglicht, dass die DockerPull-Eigenschaft von ein DockerRequirement Inline-Javascript-Ausdruck ist. Beispiel:

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

  Auf diese Weise können Sie das Container-Image URIs als Eingabeparameter für den Workflow angeben.
+ **Javascript expressions**

  Javascript-Ausdrücke müssen `strict mode` konform sein.
+ **Operation process**

  HealthOmics unterstützt keine CWL-Operationsprozesse.

# Versionsunterstützung für HealthOmics Workflow-Definitionssprachen
<a name="workflows-lang-versions"></a>

HealthOmics unterstützt Workflow-Definitionsdateien, die in Nextflow, WDL oder CWL geschrieben wurden. Die folgenden Abschnitte enthalten Informationen zur HealthOmics Versionsunterstützung für diese Sprachen.

**Topics**
+ [Unterstützung für WDL-Versionen](#workflows-lang-versions-WDL)
+ [Unterstützung für CWL-Versionen](#workflows-lang-versions-CWL)
+ [Unterstützung für die Nextflow-Version](#workflows-lang-versions-nextflow)

## Unterstützung für WDL-Versionen
<a name="workflows-lang-versions-WDL"></a>

HealthOmics unterstützt die Versionen 1.0, 1.1 und die Entwicklungsversion der WDL-Spezifikation.

Jedes WDL-Dokument muss eine Versionsanweisung enthalten, aus der hervorgeht, welcher Version (Haupt- und Nebenversion) der Spezifikation es entspricht. [Weitere Informationen zu Versionen finden Sie unter WDL-Versionierung](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

Die Versionen 1.0 und 1.1 der WDL-Spezifikation unterstützen den Typ nicht. `Directory` Um den `Directory` Typ für Eingaben oder Ausgaben zu verwenden, setzen Sie die Version **development** in der ersten Zeile der Datei auf:

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

## Unterstützung für CWL-Versionen
<a name="workflows-lang-versions-CWL"></a>

HealthOmics unterstützt die Versionen 1.0, 1.1 und 1.2 der CWL-Sprache.

Sie können die Sprachversion in der CWL-Workflow-Definitionsdatei angeben. Weitere Informationen zu CWL finden Sie im [CWL-Benutzerhandbuch](https://github.com/common-workflow-language/user_guide)

## Unterstützung für die Nextflow-Version
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics unterstützt drei stabile Versionen von Nextflow. Nextflow veröffentlicht in der Regel alle sechs Monate eine stabile Version. HealthOmics unterstützt die monatlichen „Edge“ -Veröffentlichungen nicht.

HealthOmics unterstützt in jeder Version veröffentlichte Funktionen, jedoch keine Vorschaufunktionen.

### Unterstützte Versionen
<a name="workflows-versions-nextflow-list"></a>

HealthOmics unterstützt die folgenden Nextflow-Versionen:
+ Nextflow v22.04.01 DSL 1 und DSL 2
+ Nextflow v23.10.0 DSL 2 (Standard)
+ Nextflow v24.10.8 DSL 2

[Folgen Sie der Nextflow-Upgrade-Anleitung, um Ihren Workflow auf die neueste unterstützte Version (v24.10.8) zu migrieren.](https://nextflow.io/docs/latest/migrations/24-10.html)

Bei der Migration von Nextflow v23 zu v24 gibt es einige wichtige Änderungen, wie in den folgenden Abschnitten des Nextflow-Migrationsleitfadens beschrieben:
+ [Die wichtigsten Änderungen in 24.04](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [Die wichtigsten Änderungen in 24.10](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Nextflow-Versionen erkennen und verarbeiten
<a name="workflows-versions-processing"></a>

HealthOmics erkennt die von Ihnen angegebene DSL-Version und die Nextflow-Version. Basierend auf diesen Eingaben wird automatisch die beste Nextflow-Version ermittelt, die am besten ausgeführt werden kann.

#### DSL-Version
<a name="workflows-versions-p1"></a>

HealthOmics erkennt die angeforderte DSL-Version in Ihrer Workflow-Definitionsdatei. Sie können beispielsweise Folgendes angeben:`nextflow.enable.dsl=2`.

HealthOmics unterstützt standardmäßig DSL 2. Es bietet Abwärtskompatibilität mit DSL 1, sofern dies in Ihrer Workflow-Definitionsdatei angegeben ist.
+ Wenn Sie DSL 2 angeben, HealthOmics wird Nextflow v23.10.0 ausgeführt, sofern Sie Nextflow v22.04.0 oder v24.10.8 nicht angeben.
+ Wenn Sie DSL 1 angeben, wird Nextflow v22.04 ausgeführt (die einzige unterstützte Version, auf der DSL 1 HealthOmics ausgeführt wird). DSL1 
+ Wenn Sie keine DSL-Version angeben oder die DSL-Informationen aus irgendeinem Grund nicht analysieren HealthOmics können (z. B. Syntaxfehler in Ihrer Workflow-Definitionsdatei), wird HealthOmics standardmäßig DSL 2 verwendet und Nextflow v23.10.0 ausgeführt.
+ [Informationen zum Upgrade Ihres Workflows von DSL 1 auf DSL 2, um die neuesten Versionen und Softwarefunktionen von Nextflow zu nutzen, finden Sie unter Migration von DSL 1.](https://nextflow.io/docs/latest/dsl1.html)

#### Nextflow-Versionen
<a name="workflows-versions-p2"></a>

HealthOmics erkennt die angeforderte Nextflow-Version in der Nextflow-Konfigurationsdatei (nextflow.config), wenn Sie diese Datei angeben. Wir empfehlen, dass Sie die `nextflowVersion` Klausel am Ende der Datei hinzufügen, um unerwartete Überschreibungen durch die enthaltenen Konfigurationen zu vermeiden. Weitere Informationen finden Sie unter [Nextflow-Konfiguration](https://nextflow.io/docs/latest/config.html).

Sie können eine Nextflow-Version oder einen Versionsbereich mit der folgenden Syntax angeben:

```
   // 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 verarbeitet die Nextflow-Versionsinformationen wie folgt: 
+ Wenn Sie **=** eine genaue Version angeben, die HealthOmics unterstützt, HealthOmics verwendet diese Version. 
+ Wenn Sie **\$1** eine exakte Version oder einen Bereich von Versionen angeben, die nicht unterstützt werden, HealthOmics löst dies eine Ausnahme aus und die Ausführung schlägt fehl. Erwägen Sie die Verwendung dieser Option, wenn Sie bei Versionsanfragen strikt vorgehen und schnell scheitern möchten, wenn die Anfrage Versionen enthält, die nicht unterstützt werden.
+ Wenn Sie einen Versionsbereich angeben, wird die neueste unterstützte Version in diesem Bereich HealthOmics verwendet, es sei denn, der Bereich umfasst v24.10.8. In diesem Fall wird einer früheren HealthOmics Version der Vorzug gegeben. Wenn der Bereich beispielsweise sowohl v23.10.0 als auch v24.10.8 abdeckt, wählen Sie v23.10.0. HealthOmics 
+ Wenn es keine angeforderte Version gibt oder wenn die angeforderten Versionen nicht gültig sind oder aus irgendeinem Grund nicht analysiert werden können:
  + Wenn Sie DSL 1 angegeben haben, HealthOmics wird Nextflow v22.04 ausgeführt.
  + Andernfalls wird Nextflow v23.10.0 ausgeführt HealthOmics .

 Sie können die folgenden Informationen über die Nextflow-Version abrufen, die für jeden Lauf HealthOmics verwendet wurde:
+ Die Run-Logs enthalten Informationen über die tatsächliche Nextflow-Version, die für den Lauf HealthOmics verwendet wurde.
+ HealthOmics fügt Warnungen in die Run-Logs ein, wenn es keine direkte Übereinstimmung mit der von Ihnen angeforderten Version gibt oder wenn eine andere Version als die von Ihnen angegebene verwendet werden musste.
+ Die Antwort auf den **GetRun** API-Vorgang enthält ein Feld (`engineVersion`) mit der tatsächlichen Nextflow-Version, die für den Lauf HealthOmics verwendet wurde. Beispiel:

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

# Rechen- und Speicheranforderungen für HealthOmics Aufgaben
<a name="memory-and-compute-tasks"></a>

HealthOmics führt Ihre privaten Workflow-Aufgaben in einer Omics-Instanz aus. HealthOmics bietet eine Vielzahl von Instanztypen für verschiedene Arten von Aufgaben. Jeder Instance-Typ hat eine feste Speicher- und vCPU-Konfiguration (und eine feste GPU-Konfiguration für beschleunigte Recheninstanztypen). Die Kosten für die Nutzung einer Omics-Instanz variieren je nach Instanztyp. Einzelheiten finden Sie auf der Seite mit der [HealthOmics Preisgestaltung](https://aws.amazon.com/healthomics/pricing/).

Für Aufgaben in einem Workflow geben Sie den erforderlichen Arbeitsspeicher und v CPUs in der Workflow-Definitionsdatei an. Wenn eine Workflow-Aufgabe ausgeführt wird, HealthOmics ordnet die kleinste Omics-Instanz zu, die den angeforderten Speicher aufnehmen kann, und v. CPUs Wenn eine Aufgabe beispielsweise 64 GiB Speicher und 8 V benötigtCPUs, HealthOmics wählt aus`omics.r.2xlarge`.

Wir empfehlen Ihnen, die Instance-Typen zu überprüfen und die angeforderte V CPUs - und Speichergröße so einzustellen, dass sie der Instanz entsprechen, die Ihren Anforderungen am besten entspricht. Der Task-Container verwendet die Zahl von v CPUs und die Speichergröße, die Sie in Ihrer Workflow-Definitionsdatei angeben, auch wenn der Instance-Typ über zusätzliche V CPUs und zusätzlichen Speicher verfügt. 

Die folgende Liste enthält zusätzliche Informationen zu vCPU und Speicherzuweisung:
+ Bei der Zuweisung von Container-Ressourcen handelt es sich um feste Grenzwerte. Wenn für eine Aufgabe nicht genügend Arbeitsspeicher zur Verfügung steht oder wenn versucht wird, zusätzliche V zu verwendenCPUs , generiert die Aufgabe ein Fehlerprotokoll und wird beendet.
+ Wenn Sie keine Rechen- oder Speicheranforderungen angeben, HealthOmics wählt eine Konfiguration mit 1 vCPU **omics.c.large** und 1 GiB Arbeitsspeicher aus und verwendet diese standardmäßig.
+ Die Mindestkonfiguration, die Sie anfordern können, ist 1 vCPU und 1 GiB Arbeitsspeicher. 
+ Wenn Sie vCPUs, memory oder GPUs that angeben, das die unterstützten Instance-Typen überschreitet, HealthOmics wird eine Fehlermeldung ausgegeben und der Workflow schlägt bei den Validierungen fehl
+ Wenn Sie Brucheinheiten angeben, wird auf die nächste HealthOmics Ganzzahl aufgerundet.
+ HealthOmics reserviert eine kleine Menge an Speicher (5%) für Verwaltungs- und Protokollierungsagenten, sodass der Anwendung in der Aufgabe möglicherweise nicht immer die gesamte Speicherzuweisung zur Verfügung steht.
+ HealthOmics passt die Instanztypen an die von Ihnen angegebenen Rechen- und Speicheranforderungen an und verwendet möglicherweise eine Mischung aus Hardwaregenerationen. Aus diesem Grund kann es zu geringfügigen Abweichungen bei den Ausführungszeiten von Aufgaben für dieselbe Aufgabe kommen.

Diese Themen enthalten Einzelheiten zu den HealthOmics unterstützten Instance-Typen. 

**Topics**
+ [Standard-Instance-Typen](#workflow-task-standard-instances)
+ [Für die Datenverarbeitung optimierte Instanzen](#workflow-task-compute-optimized-instances)
+ [Für den Arbeitsspeicher optimierte Instanzen](#workflow-task-memory-optimized-instances)
+ [Instanzen für beschleunigte Datenverarbeitung](#workflow-task-accelerated-computing-instances)

**Anmerkung**  
 Erhöhen Sie bei standardmäßigen, rechen- und speicheroptimierten Instances die Größe der Instance-Bandbreite, wenn die Instance einen höheren Durchsatz benötigt. Bei Amazon EC2 EC2-Instances mit weniger als 16 vCPUs (Größe 4xl und kleiner) kann es zu Durchsatzsteigerungen kommen. Weitere Informationen zum Durchsatz von Amazon EC2 EC2-Instances finden Sie unter [Verfügbare Amazon EC2 EC2-Instance-Bandbreite](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Standard-Instance-Typen
<a name="workflow-task-standard-instances"></a>

Bei Standard-Instance-Typen zielen die Konfigurationen auf ein ausgewogenes Verhältnis von Rechenleistung und Arbeitsspeicher ab. 

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiB | 
| omics.m.x groß | 4 | 16 GiB | 
| omics.m.2 x groß | 8 | 32 GiB | 
| omics.m.4xgroß | 16 | 64 GiB | 
| omics.m.8xgroß | 32 | 128 GiB | 
| omics.m. 12 x groß | 48 | 192 GiB | 
| omics.m.16x groß | 64 | 256 GiB | 
| omics.m.24x groß | 96 | 384 GiB | 
| omics.m.32x groß | 128 | 512 GiB | 
| omics.m.48x groß | 192 | 768 GiB | 

## Für die Datenverarbeitung optimierte Instanzen
<a name="workflow-task-compute-optimized-instances"></a>

Bei rechenoptimierten Instance-Typen verfügen die Konfigurationen über mehr Rechenleistung und weniger Arbeitsspeicher.

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| omics.c.2 x groß | 8 | 16 GiB | 
| omics.c.4xlarge | 16 | 32 GiB | 
| omics.c.8xlarge | 32 | 64 GiB | 
| omics.c. 12 x groß | 48 | 96 GiB | 
| omics.c. 16 x groß | 64 | 128 GiB | 
| omics.c.24xlarge | 96 | 192 GiB | 
| omics.c.32xlarge | 128 | 256 GiB | 
| omics.c.48xlarge | 192 | 384 GiB | 

## Für den Arbeitsspeicher optimierte Instanzen
<a name="workflow-task-memory-optimized-instances"></a>

Bei speicheroptimierten Instance-Typen verfügen die Konfigurationen über weniger Rechenleistung und mehr Arbeitsspeicher.

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.r.large | 2 | 16 GiB | 
| omic s.r.x groß | 4 | 32 GiB | 
| omic s.r.2 x groß | 8 | 64 GiB | 
| omic s.r.4 x groß | 16 | 128 GiB | 
| omic s.r.8 x groß | 32 | 256 GiB | 
| omic s.r.12 x groß | 48 | 384 GiB | 
| omic s.r.16 x groß | 64 | 512 GiB | 
| omic s.r.24 x groß | 96 | 768 GiB | 
| omic s.r.32 x groß | 128 | 1024 GiB | 
| omic s.r.48 x groß | 192 | 1536 GiB | 

## Instanzen für beschleunigte Datenverarbeitung
<a name="workflow-task-accelerated-computing-instances"></a>

Sie können optional GPU-Ressourcen für jede Aufgabe in einem Workflow angeben, sodass der Aufgabe eine Instanz für HealthOmics beschleunigtes Rechnen zugewiesen wird. Informationen zum Angeben der GPU-Informationen in der Workflow-Definitionsdatei finden Sie unter. [Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics](task-accelerators.md)

Wenn Sie einen Task Accelerator angeben, der mehrere Instanztypen unterstützt, HealthOmics wählt der Instanztyp je nach Verfügbarkeit aus. Wenn mehr als ein Instance-Typ verfügbar ist HealthOmics , wird die kostengünstigere Instanz bevorzugt. Die Ausnahme bildet der Task Accelerator nvidia-t4-a10g-l4, der der in Ihrer Region verfügbaren Instance der neuesten Generation den Vorzug gibt.

G4-Instances werden in der Region Israel (Tel Aviv) nicht unterstützt. G5-Instances werden in der Region Asien-Pazifik (Singapur) nicht unterstützt. 



**Topics**
+ [Instance-Typen G6 und G6e](#workflow-task-accelerated-accelerated-g6)
+ [G4- und G5-Instanzen](#workflow-task-accelerated-accelerated-g45)

### Instance-Typen G6 und G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics unterstützt die folgenden G6-Instance-Konfigurationen für beschleunigtes Rechnen. Alle omics.g6-Instanzen verwenden Nvidia L4. GPUs

HealthOmics unterstützt die G6- und G6e-Instances in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g 6.2 x groß | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g 6.4x groß | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g 6.8 x groß | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g 6.12 x groß | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g 6.16 x groß | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g 6.24x groß | 96 | 384 GiB | 4 | 96 GiB | 

Alle omics.g6e-Instanzen verwenden Nvidia L40s. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4x groß | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8xgroß | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12xlarge | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16x groß | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24x groß | 96 | 768 GiB | 4 | 192 GiB | 

### G4- und G5-Instanzen
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics unterstützt die folgenden G4- und G5-Instance-Konfigurationen für beschleunigtes Rechnen. 

Alle omics.g5-Instances verwenden Nvidia Tesla A10G. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2 x groß | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g 5.4 x groß | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g 5.8x groß | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g 5.12 x groß | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g 5.16 x groß | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g 5.24x groß | 96 | 384 GiB | 4 | 96 GiB | 

Alle omics.g4dn-Instanzen verwenden Nvidia Tesla T4. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xgroß | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xgroß | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn.12xlarge | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 

# Aufgabenausgaben in einer HealthOmics Workflow-Definition
<a name="workflows-task-outputs"></a>

Sie geben Aufgabenausgaben in der Workflow-Definition an. Verwirft standardmäßig alle zwischengeschalteten Aufgabendateien, HealthOmics wenn der Workflow abgeschlossen ist. Um eine Zwischendatei zu exportieren, definieren Sie sie als Ausgabe. 

Wenn Sie das Aufruf-Caching verwenden, werden die Ausgaben der Aufgaben im Cache HealthOmics gespeichert, einschließlich aller Zwischendateien, die Sie als Ausgaben definieren.

Die folgenden Themen enthalten Beispiele für Aufgabendefinitionen für jede der Workflow-Definitionssprachen.

**Topics**
+ [Aufgabenausgaben für WDL](#workflow-task-outputs-wdl)
+ [Task-Ausgaben für Nextflow](#workflow-task-outputs-nextflow)
+ [Aufgabenausgaben für CWL](#workflow-task-outputs-cwl)

## Aufgabenausgaben für WDL
<a name="workflow-task-outputs-wdl"></a>

Für in WDL geschriebene Workflow-Definitionen definieren Sie Ihre Ausgaben im **outputs** Workflow-Bereich der obersten Ebene. 

HealthOmics

**Topics**
+ [Aufgabenausgabe für STDOUT](#task-outputs-wdl-stdout)
+ [Aufgabenausgabe für STDERR](#task-outputs-wdl-stderr)
+ [Ausgabe der Aufgabe in eine Datei](#task-outputs-wdl-file)
+ [Ausgabe der Aufgabe in ein Array von Dateien](#task-outputs-wdl-files)

### Aufgabenausgabe für STDOUT
<a name="task-outputs-wdl-stdout"></a>

In diesem Beispiel wird eine Aufgabe mit dem Namen erstellt`SayHello`, die den STDOUT-Inhalt in die Aufgabenausgabedatei zurückgibt. **Die **stdout** WDL-Funktion erfasst den STDOUT-Inhalt (in diesem Beispiel die Eingabezeichenfolge Hello World\$1** ) in einer Datei. **stdout\$1file** 

Da Protokolle für den gesamten STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe auch in Logs angezeigt.

```
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()
    }
}
```

### Aufgabenausgabe für STDERR
<a name="task-outputs-wdl-stderr"></a>

In diesem Beispiel wird eine Aufgabe mit dem Namen erstellt`SayHello`, die den STDERR-Inhalt in die Aufgabenausgabedatei zurückgibt. **Die **stderr** WDL-Funktion erfasst den STDERR-Inhalt (in diesem Beispiel die Eingabezeichenfolge Hello World\$1** ) in einer Datei. **stderr\$1file** 

Da Protokolle für den gesamten STDERR-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe in Logs angezeigt.

```
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()
    }
}
```

### Ausgabe der Aufgabe in eine Datei
<a name="task-outputs-wdl-file"></a>

In diesem Beispiel erstellt die SayHello Aufgabe zwei Dateien (message.txt und info.txt) und deklariert diese Dateien explizit als die benannten Ausgaben (message\$1file und 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"
    } 
}
```

### Ausgabe der Aufgabe in ein Array von Dateien
<a name="task-outputs-wdl-files"></a>

In diesem Beispiel generiert die `GenerateGreetings` Aufgabe ein Array von Dateien als Aufgabenausgabe. Die Aufgabe generiert dynamisch eine Begrüßungsdatei für jedes Mitglied des Eingabearrays`names`. Da die Dateinamen erst zur Laufzeit bekannt sind, verwendet die Ausgabedefinition die WDL-Funktion glob (), um alle Dateien auszugeben, die dem Muster entsprechen. `*_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")
    }       
 }
```

## Task-Ausgaben für Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Definieren Sie für in Nextflow geschriebene Workflow-Definitionen eine **publishDir-Direktive**, um Aufgabeninhalte in Ihren Amazon S3 S3-Ausgabe-Bucket zu exportieren. Setzen Sie den Wert **publishDir** auf. `/mnt/workflow/pubdir` 

 HealthOmics Um Dateien nach Amazon S3 exportieren zu können, müssen sich die Dateien in diesem Verzeichnis befinden.

Wenn eine Aufgabe eine Gruppe von Ausgabedateien erzeugt, die als Eingaben für eine nachfolgende Aufgabe verwendet werden sollen, empfehlen wir, diese Dateien in einem Verzeichnis zu gruppieren und das Verzeichnis als Aufgabenausgabe auszugeben. Das Aufzählen jeder einzelnen Datei kann zu einem I/O-Engpass im zugrunde liegenden Dateisystem führen. Zum Beispiel:

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

## Aufgabenausgaben für CWL
<a name="workflow-task-outputs-cwl"></a>

Bei in CWL geschriebenen Workflow-Definitionen können Sie die Aufgabenausgaben mithilfe von `CommandLineTool` Aufgaben angeben. Die folgenden Abschnitte zeigen Beispiele für `CommandLineTool` Aufgaben, die verschiedene Arten von Ausgaben definieren.

**Topics**
+ [Aufgabenausgabe für STDOUT](#task-outputs-cwl-stdout)
+ [Aufgabenausgabe für STDERR](#task-outputs-cwl-stderr)
+ [Ausgabe der Aufgabe in eine Datei](#task-outputs-cwl-file)
+ [Ausgabe der Aufgabe in ein Array von Dateien](#task-outputs-cwl-files)

### Aufgabenausgabe für STDOUT
<a name="task-outputs-cwl-stdout"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die den STDOUT-Inhalt in einer Textausgabedatei mit dem Namen wiedergibt. **output.txt** **Wenn Sie beispielsweise die folgende Eingabe angeben, lautet die resultierende Aufgabenausgabe Hello World\$1** in der **output.txt** Datei.

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

Die `outputs` Direktive gibt an, dass der Ausgabename **example\$1out** und der Typ lauten`stdout`. Damit eine Downstream-Aufgabe die Ausgabe dieser Aufgabe verarbeitet, würde sie die Ausgabe als bezeichnen`example_out`.

Da Protokolle für den gesamten STDERR- und STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe auch in Logs angezeigt.

```
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
```

### Aufgabenausgabe für STDERR
<a name="task-outputs-cwl-stderr"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die den STDERR-Inhalt in einer Textausgabedatei mit dem Namen wiedergibt. **stderr.txt** Die Aufgabe ändert die `baseCommand` so, dass sie in STDERR (statt STDOUT) `echo` schreibt.

Die `outputs` Direktive gibt an, dass der Ausgabename **stderr\$1out** und der Typ lautet. `stderr` 

Da Protokolle für den gesamten STDERR- und STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe in Logs angezeigt.

```
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
```

### Ausgabe der Aufgabe in eine Datei
<a name="task-outputs-cwl-file"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die aus den Eingabedateien ein komprimiertes Tar-Archiv erstellt. Sie geben den Namen des Archivs als Eingabeparameter an (archive\$1name). 

Die **outputs** Direktive gibt an, dass der `archive_file` Ausgabetyp ist`File`, und sie verwendet einen Verweis auf den Eingabeparameter`archive_name`, um eine Bindung an die Ausgabedatei herzustellen.

```
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
```

### Ausgabe der Aufgabe in ein Array von Dateien
<a name="task-outputs-cwl-files"></a>

In diesem Beispiel erstellt die `CommandLineTool` Aufgabe mithilfe des `touch` Befehls ein Array von Dateien. Der Befehl verwendet die Zeichenketten im `files-to-create` Eingabeparameter, um die Dateien zu benennen. Der Befehl gibt ein Array von Dateien aus. Das Array enthält alle Dateien im Arbeitsverzeichnis, die dem `glob` Muster entsprechen. In diesem Beispiel wird ein Platzhaltermuster („\$1“) verwendet, das allen Dateien entspricht.

```
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
```

# Aufgabenressourcen in einer HealthOmics Workflow-Definition
<a name="task-resources"></a>

Definieren Sie in der Workflow-Definition für jede Aufgabe Folgendes:
+ Das Container-Image für die Aufgabe. Weitere Informationen finden Sie unter [Container-Images für private Workflows](workflows-ecr.md).
+ Die Anzahl CPUs und der für die Aufgabe benötigte Speicher. Weitere Informationen finden Sie unter [Rechen- und Speicheranforderungen für HealthOmics Aufgaben](memory-and-compute-tasks.md).

HealthOmics ignoriert alle Speicherspezifikationen pro Aufgabe. HealthOmics stellt Ausführungsspeicher bereit, auf den alle Aufgaben in der Ausführung zugreifen können. Weitere Informationen finden Sie unter [Speichertypen in HealthOmics Workflows ausführen](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"
   }
   ...
}
```

Bei einem WDL-Workflow werden bis zu zwei HealthOmics Wiederholungsversuche für eine Aufgabe versucht, die aufgrund von Dienstfehlern fehlschlägt (die API-Anfrage gibt einen 5XX-HTTP-Statuscode zurück). Weitere Informationen zu Wiederholungsversuchen von Aufgaben finden Sie unter. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Sie können das Wiederholungsverhalten deaktivieren, indem Sie die folgende Konfiguration für die Aufgabe in der WDL-Definitionsdatei angeben:

```
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
```

------

# Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics
<a name="task-accelerators"></a>

In der Workflow-Definition können Sie optional die GPU-Beschleuniger-Spezifikation für eine Aufgabe angeben. HealthOmics unterstützt die folgenden Beschleunigerspezifikationswerte zusammen mit den unterstützten Instanztypen:


| Beschleuniger-Spezifikation | Instanztypen von Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-a 10 g | G4 und G5 | 
| nvidia-tesla-a10 g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 und G6 | 
| nvidia-l4-a10g | G5 und G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40 s | G6e | 

Wenn Sie einen Beschleunigertyp angeben, der mehrere Instance-Typen unterstützt, HealthOmics wählt der Instance-Typ auf der Grundlage der verfügbaren Kapazität aus. Wenn beide Instance-Typen verfügbar sind HealthOmics , wird die kostengünstigere Instanz bevorzugt. Die Ausnahme bildet der Task Accelerator nvidia-t4-a10g-l4, der der verfügbaren Instanz der neuesten Generation den Vorzug gibt.

Einzelheiten zu den Instanztypen [Instanzen für beschleunigte Datenverarbeitung](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances) finden Sie unter.

Im folgenden Beispiel gibt die Workflow-Definition `nvidia-l4` als Beschleuniger an:

------
#### [ 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"
```

------

# Besonderheiten der WDL-Workflow-Definition
<a name="workflow-languages-wdl"></a>

Die folgenden Themen enthalten Einzelheiten zu den Typen und Anweisungen, die für WDL-Workflow-Definitionen in verfügbar sind. HealthOmics

**Topics**
+ [Implizite Typkonvertierung in WDL Lenient](#workflow-wdl-type-conversion)
+ [Namespace-Definition in input.json](#workflow-wdl-namespace-defn)
+ [Primitive Typen in WDL](#workflow-wdl-primitive-types)
+ [Komplexe Typen in WDL](#workflow-wdl-complex-types)
+ [Richtlinien in WDL](#workflow-wdl-directives)
+ [Aufgaben-Metadaten in WDL](#workflow-wdl-task-metadata)
+ [Beispiel für eine WDL-Workflow-Definition](#wdl-example)

## Implizite Typkonvertierung in WDL Lenient
<a name="workflow-wdl-type-conversion"></a>

HealthOmics unterstützt die implizite Typkonvertierung in der Datei input.json und der Workflow-Definition. Um implizite Typumwandlung zu verwenden, geben Sie bei der Erstellung des Workflows für die Workflow-Engine den Wert WDL Lenient an. WDL Lenient wurde für Workflows entwickelt, die von Cromwell migriert wurden. Es unterstützt Cromwell-Richtlinien von Kunden und einige nichtkonforme Logiken.

[WDL Lenient unterstützt die Typkonvertierung für die folgenden Elemente in der Liste der eingeschränkten Ausnahmen von WDL:](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ Float wird in Int umgewandelt, wobei der Zwang zu keinem Genauigkeitsverlust führt (z. B. 1,0 entspricht 1).
+ Von String zu Int/Float, wobei der Zwang zu keinem Genauigkeitsverlust führt.
+ Ordnen Sie [W, X] dem Array [Pair [Y, Z]] zu, falls W gegen Y und X gegen Z erzwingbar ist.
+ Ordnen Sie [Paar [W, X]] an, um [Y, Z] zuzuordnen, falls W gegen Y und X gegen Z erzwingbar ist (z. B. 1,0 entspricht 1).

Um implizites Typ-Casting zu verwenden, geben Sie die Workflow-Engine als WDL\$1LENIENT an, wenn Sie den Workflow oder die Workflow-Version erstellen.

**In der Konsole heißt der Workflow-Engine-Parameter Language.** In der API heißt der Workflow-Engine-Parameter **Engine**. Für weitere Informationen siehe [Erstellen Sie einen privaten Workflow](create-private-workflow.md) oder [Workflow-Version erstellen](workflows-version-create.md).

## Namespace-Definition in input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics unterstützt vollständig qualifizierte Variablen in input.json. Wenn Sie beispielsweise zwei Eingabevariablen mit den Namen number1 und number2 im Workflow deklarieren: **SumWorkflow**

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

 Sie können sie als vollqualifizierte Variablen in input.json verwenden: 

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

## Primitive Typen in WDL
<a name="workflow-wdl-primitive-types"></a>

Die folgende Tabelle zeigt, wie Eingaben in WDL den entsprechenden primitiven Typen zugeordnet werden. HealthOmics bietet eingeschränkte Unterstützung für Typenzwang, daher empfehlen wir, explizite Typen festzulegen. 


**Primitive Typen**  

| WDL-Typ | JSON-Typ | Beispiel WDL | Beispiel für einen JSON-Schlüssel und -Wert | Hinweise | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | Der Wert muss in Kleinbuchstaben geschrieben werden und darf keine Anführungszeichen enthalten. | 
| Int | integer | Int i | "i": 7 | Darf nicht in Anführungszeichen gesetzt werden. | 
| Float | number | Float f | "f": 42.2 | Darf nicht in Anführungszeichen stehen. | 
| String | string | String s | "s": "characters" | JSON-Zeichenfolgen, die eine URI sind, müssen einer zu importierenden WDL-Datei zugeordnet werden. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 und HealthOmics Speicher URIs werden importiert, solange die für den Workflow bereitgestellte IAM-Rolle Lesezugriff auf diese Objekte hat. Andere URI-Schemas werden nicht unterstützt (wie file://https://, undftp://). Die URI muss ein Objekt angeben. Es kann kein Verzeichnis sein, was bedeutet, dass es nicht mit einem enden kann/. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | Der Directory Typ ist nicht in WDL 1.0 oder 1.1 enthalten, daher müssen Sie ihn zum Header der WDL-Datei hinzufügenversion development. Die URI muss eine Amazon S3 S3-URI sein und ein Präfix haben, das mit einem '/' endet. Der gesamte Inhalt des Verzeichnisses wird rekursiv als einziger Download in den Workflow kopiert. Der Directory sollte nur Dateien enthalten, die sich auf den Workflow beziehen. | 

## Komplexe Typen in WDL
<a name="workflow-wdl-complex-types"></a>

Die folgende Tabelle zeigt, wie Eingaben in WDL den entsprechenden komplexen JSON-Typen zugeordnet werden. Komplexe Typen in WDL sind Datenstrukturen, die aus primitiven Typen bestehen. Datenstrukturen wie Listen werden in Arrays umgewandelt.


**Komplexe Typen**  

| Typ WDL | JSON-Typ | Beispiel WDL | Beispiel für einen JSON-Schlüssel und -Wert | Hinweise | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | Die Mitglieder des Arrays müssen dem Format des WDL-Arraytyps folgen. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Jeder Wert des Paares muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Jeder Eintrag in der Map muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| 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>  | Die Namen der Strukturmitglieder müssen exakt mit den Namen der JSON-Objektschlüssel übereinstimmen. Jeder Wert muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| Object | – | – | – | Der Object WDL-Typ ist veraltet und sollte Struct in jedem Fall durch ersetzt werden. | 

## Richtlinien in WDL
<a name="workflow-wdl-directives"></a>

HealthOmics unterstützt die folgenden Direktiven in allen WDL-Versionen, die HealthOmics sie unterstützen.

### GPU-Ressourcen konfigurieren
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics unterstützt Laufzeitattribute **acceleratorType** und **acceleratorCount** mit allen unterstützten [GPU-Instanzen](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html). HealthOmics unterstützt auch Aliase mit dem Namen **gpuType** und**gpuCount**, die dieselbe Funktionalität wie ihre Accelerator-Gegenstücke haben. Wenn die WDL-Definition beide Direktiven enthält, HealthOmics verwendet die Beschleunigerwerte.

Das folgende Beispiel zeigt, wie diese Direktiven verwendet werden:

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

### Konfigurieren Sie die Aufgabenwiederholung bei Servicefehlern
<a name="workflow-wdl-task-retry"></a>

HealthOmics unterstützt bis zu zwei Wiederholungen für eine Aufgabe, die aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Sie können die maximale Anzahl von Wiederholungen (1 oder 2) konfigurieren und Wiederholungen aufgrund von Servicefehlern deaktivieren. Standardmäßig werden maximal zwei Wiederholungen HealthOmics versucht. 

Das folgende Beispiel legt fest`preemptible`, dass Wiederholungsversuche bei Dienstfehlern deaktiviert werden:

```
{
  preemptible: 0 
}
```

Weitere Hinweise zu Wiederholungsversuchen von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

### Konfigurieren Sie die Aufgabenwiederholung bei fehlendem Arbeitsspeicher
<a name="workflow-wdl-retries"></a>

HealthOmics unterstützt Wiederholungsversuche für eine Aufgabe, die fehlgeschlagen ist, weil ihr nicht genügend Speicherplatz zur Verfügung stand (Container-Exitcode 137, 4XX HTTP-Statuscode). HealthOmics verdoppelt die Speichermenge für jeden Wiederholungsversuch.

Standardmäßig versucht es bei dieser Art von Fehler HealthOmics nicht erneut. Verwenden Sie die `maxRetries` Direktive, um die maximale Anzahl von Wiederholungen anzugeben.

Im folgenden Beispiel wird der `maxRetries` Wert auf 3 gesetzt, sodass HealthOmics maximal vier Versuche unternommen werden, die Aufgabe abzuschließen (der erste Versuch plus drei Wiederholungen):

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

**Anmerkung**  
Für die Wiederholung der Aufgabe bei fehlendem Arbeitsspeicher sind GNU Findutils 4.2.3\$1 erforderlich. Der Standard-Image-Container enthält dieses Paket HealthOmics . Wenn Sie in Ihrer WDL-Definition ein benutzerdefiniertes Bild angeben, stellen Sie sicher, dass das Bild GNU Findutils 4.2.3\$1 enthält.

### Konfigurieren Sie Rückgabecodes
<a name="workflow-wdl-directive-returnCodes"></a>

Das **ReturnCodes-Attribut** bietet einen Mechanismus zur Angabe eines Rückgabecodes oder einer Reihe von Rückgabecodes, die auf eine erfolgreiche Ausführung einer Aufgabe hinweisen. Das WDL-Modul berücksichtigt die Rückgabecodes, die Sie im **Runtime-Abschnitt** der WDL-Definition angeben, und legt den Aufgabenstatus entsprechend fest. 

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

HealthOmics **unterstützt auch einen Alias namens **continueOnReturnCode**, der dieselben Funktionen wie ReturnCodes hat.** Wenn Sie beide Attribute angeben, wird der **ReturnCodes-Wert HealthOmics ** verwendet.

## Aufgaben-Metadaten in WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics unterstützt die folgenden Metadatenoptionen für WDL-Aufgaben.

### Deaktivieren Sie das Caching auf Aufgabenebene mit dem Attribut volatile
<a name="workflow-wdl-volatile-attribute"></a>

Mit dem **flüchtigen** Attribut können Sie das Caching von Anrufen für bestimmte Aufgaben in Ihrem WDL-Workflow deaktivieren. Wenn eine Aufgabe als flüchtig markiert ist, wird sie immer ausgeführt und verwendet niemals zwischengespeicherte Ergebnisse, selbst wenn das Caching für die Ausführung aktiviert ist.

Fügen Sie das **flüchtige** Attribut zum **Metabereich** Ihrer Aufgabendefinition hinzu:

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

## Beispiel für eine WDL-Workflow-Definition
<a name="wdl-example"></a>

Die folgenden Beispiele zeigen private Workflow-Definitionen für die Konvertierung von `CRAM` zu `BAM` in WDL. Der `CRAM` `BAM` To-Workflow definiert zwei Aufgaben und verwendet Tools aus dem `genomes-in-the-cloud` Container, der im Beispiel gezeigt wird und öffentlich verfügbar ist. 

Das folgende Beispiel zeigt, wie der Amazon ECR-Container als Parameter eingebunden wird. Auf diese Weise können HealthOmics Sie die Zugriffsberechtigungen für Ihren Container überprüfen, bevor der Run gestartet wird.

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

Das folgende Beispiel zeigt, wie Sie angeben, welche Dateien in Ihrem Lauf verwendet werden sollen, wenn sich die Dateien in einem Amazon S3 S3-Bucket befinden.

```
{
    "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"
}
```

Wenn Sie Dateien aus einem Sequenzspeicher angeben möchten, geben Sie dies wie im folgenden Beispiel gezeigt an, indem Sie den URI für den Sequenzspeicher verwenden.

```
{
    "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"
}
```

Anschließend können Sie Ihren Workflow in WDL definieren, wie im folgenden Beispiel gezeigt. 

```
 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}"
    }
}
```

# Einzelheiten der Nextflow-Workflow-Definition
<a name="workflow-definition-nextflow"></a>

HealthOmics unterstützt DSL1 Nextflow und. DSL2 Details hierzu finden Sie unter [Unterstützung für die Nextflow-Version](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow DSL2 basiert auf der Programmiersprache Groovy, sodass Parameter dynamisch sind und Typenzwang nach den gleichen Regeln wie Groovy möglich ist. Parameter und Werte, die von der JSON-Eingabe bereitgestellt werden, sind in der Parameters () -Map des Workflows verfügbar. `params`

**Topics**
+ [Verwenden Sie die Plug-ins NF-Schema und NF-Validation](#schema-and-validation-plugins-nextflow)
+ [Speicher angeben URIs](#storage-uris-nextflow)
+ [Nextflow-Direktiven](#workflow-nexflow-directives)
+ [Aufgabeninhalt exportieren](#exporting-task-content-nextflow)

## Verwenden Sie die Plug-ins NF-Schema und NF-Validation
<a name="schema-and-validation-plugins-nextflow"></a>

**Anmerkung**  
Zusammenfassung der Unterstützung für Plugins HealthOmics :  
v22.04 — keine Unterstützung für Plugins
v23.10 — unterstützt und `nf-schema` `nf-validation`
v24.10 — unterstützt `nf-schema`

HealthOmics bietet die folgende Unterstützung für Nextflow-Plugins:
+ Für Nextflow v23.10 ist das Plugin nf-validation @1 HealthOmics .1.1 vorinstalliert. 
+ Für Nextflow v23.10 und höher wird das Plugin nf-schema @2 .3.0 vorinstalliert. HealthOmics 
+ Sie können während einer Workflow-Ausführung keine zusätzlichen Plugins abrufen. HealthOmics ignoriert alle anderen Plugin-Versionen, die Sie in der `nextflow.config` Datei angeben.
+ Für Nextflow v24 und höher `nf-schema` ist dies die neue Version des veralteten Plugins. `nf-validation` Weitere Informationen finden Sie unter [nf-schema im Nextflow-Repository](https://github.com/nextflow-io/nf-schema). GitHub

## Speicher angeben URIs
<a name="storage-uris-nextflow"></a>

Wenn ein Amazon S3 oder HealthOmics URI verwendet wird, um eine Nextflow-Datei oder ein Nextflow-Pfadobjekt zu erstellen, stellt es das entsprechende Objekt für den Workflow zur Verfügung, sofern Lesezugriff gewährt wird. Die Verwendung von Präfixen oder Verzeichnissen ist für Amazon S3 URIs zulässig. Beispiele finden Sie unter [Amazon S3 S3-Eingabeparameterformate](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics unterstützt teilweise die Verwendung von Glob Patterns in Amazon S3 URIs oder HealthOmics Storage URIs. Verwenden Sie Glob-Muster in der Workflow-Definition für die Erstellung von Or-Kanälen`path`. `file` Informationen zum erwarteten Verhalten und zu den genauen Fällen finden Sie unter[Nextflow-Behandlung von Glob-Mustern in Amazon S3 S3-Eingaben](workflows-run-inputs.md#wd-nextflow-s3-formats).

## Nextflow-Direktiven
<a name="workflow-nexflow-directives"></a>

Sie konfigurieren Nextflow-Direktiven in der Nextflow-Konfigurationsdatei oder Workflow-Definition. Die folgende Liste zeigt die Rangfolge, in der die HealthOmics Konfigurationseinstellungen angewendet werden, von der niedrigsten zur höchsten Priorität:

1. Globale Konfiguration in der Konfigurationsdatei.

1. Aufgabenbereich der Workflow-Definition.

1. Aufgabenspezifische Selektoren in der Konfigurationsdatei.

**Topics**
+ [Strategie zur Wiederholung von Aufgaben unter Verwendung von `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`](#workflow-nexflow-task-retry)
+ [Deaktivieren Sie die Wiederholung von Aufgaben mit `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Dauer der Aufgabe unter Verwendung der Direktive `time`](#time-directive-nextflow)

### Strategie zur Wiederholung von Aufgaben unter Verwendung von `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Verwenden Sie die `errorStrategy` Direktive, um die Strategie für Aufgabenfehler zu definieren. Wenn eine Aufgabe mit einer Fehleranzeige (einem Exit-Status ungleich Null) zurückkehrt, wird die Aufgabe standardmäßig angehalten und die gesamte HealthOmics Ausführung beendet. Wenn Sie `errorStrategy` auf festlegen, wird HealthOmics versucht`retry`, die fehlgeschlagene Aufgabe erneut zu versuchen. Informationen zur Erhöhung der Anzahl der Wiederholungen finden Sie unter. [Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`](#workflow-nexflow-task-retry)

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

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

Informationen darüber, wie mit Wiederholungsversuchen HealthOmics von Aufgaben während einer Ausführung umgegangen wird, finden Sie unter. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

### Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Führt standardmäßig HealthOmics keine Wiederholungsversuche für eine fehlgeschlagene Aufgabe durch, oder versucht einen erneuten Versuch, wenn Sie dies konfigurieren. `errorStrategy` Um die maximale Anzahl von Wiederholungen zu erhöhen, legen `errorStrategy` Sie die maximale Anzahl von Wiederholungen fest `retry` und konfigurieren Sie sie mithilfe der Direktive. `maxRetries`

Im folgenden Beispiel wird die maximale Anzahl von Wiederholungen in der globalen Konfiguration auf 3 festgelegt.

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

Das folgende Beispiel zeigt, wie `maxRetries` im Aufgabenbereich der Workflow-Definition festgelegt wird.

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

Das folgende Beispiel zeigt, wie eine aufgabenspezifische Konfiguration in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelselektoren angegeben wird.

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

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

### Deaktivieren Sie die Wiederholung von Aufgaben mit `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

 HealthOmics Unterstützt für Nextflow v23 und v24 Aufgabenwiederholungen, wenn die Aufgabe aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Standardmäßig werden bis zu zwei Wiederholungen einer fehlgeschlagenen Aufgabe HealthOmics versucht. 

Sie können so konfigurieren`omicsRetryOn5xx`, dass die Wiederholung von Aufgaben bei Dienstfehlern deaktiviert wird. Weitere Informationen zur Wiederholung von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Im folgenden Beispiel wird die globale Konfiguration so konfiguriert`omicsRetryOn5xx`, dass die Aufgabenwiederholung deaktiviert wird.

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

Das folgende Beispiel zeigt, wie die Konfiguration `omicsRetryOn5xx` im Aufgabenbereich der Workflow-Definition erfolgt.

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

Das folgende Beispiel zeigt, wie eine aufgabenspezifische Konfiguration in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelauswahl festgelegt `omicsRetryOn5xx` wird.

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

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

### Dauer der Aufgabe unter Verwendung der Direktive `time`
<a name="time-directive-nextflow"></a>

HealthOmics stellt ein einstellbares Kontingent bereit (siehe[HealthOmics Servicekontingenten](service-quotas.md)), um die maximale Dauer eines Laufs anzugeben. Für Nextflow v23- und v24-Workflows können Sie mithilfe der Nextflow-Direktive auch die maximale Aufgabendauer angeben. `time`

Bei der Entwicklung neuer Workflows hilft Ihnen die Festlegung der maximalen Aufgabendauer dabei, außer catch geratene Aufgaben und lang andauernde Aufgaben zu erkennen. 

Weitere Informationen zur Nextflow-Zeitdirektive finden Sie unter [Zeitdirektive](https://www.nextflow.io/docs/latest/reference/process.html#process-time) in der Nextflow-Referenz.

HealthOmics bietet die folgende Unterstützung für die Nextflow-Zeitdirektive:

1. HealthOmics unterstützt eine Granularität von 1 Minute für die Zeitdirektive. Sie können einen Wert zwischen 60 Sekunden und dem Wert für die maximale Laufzeit angeben.

1. Wenn Sie einen Wert unter 60 eingeben, wird HealthOmics dieser auf 60 Sekunden aufgerundet. Bei Werten über 60 wird auf die nächste Minute HealthOmics abgerundet.

1. Wenn der Workflow Wiederholungsversuche für eine Aufgabe unterstützt, versucht er die Aufgabe HealthOmics erneut, wenn das Timeout überschritten wird.

1. Wenn bei einer Aufgabe das Timeout überschritten wird (oder bei der letzten Wiederholung), wird die Aufgabe HealthOmics abgebrochen. Dieser Vorgang kann eine Dauer von ein bis zwei Minuten haben.

1. Bei Zeitüberschreitung der Aufgabe werden die Ausführung und der Aufgabenstatus auf Fehlgeschlagen gesetzt und die anderen Aufgaben in der Ausführung abgebrochen (für Aufgaben mit dem Status „Gestartet“, „Ausstehend“ oder „Wird ausgeführt“). HealthOmics HealthOmics exportiert die Ausgaben von Aufgaben, die vor dem Timeout abgeschlossen wurden, an den von Ihnen angegebenen S3-Ausgabespeicherort. 

1. Die Zeit, die eine Aufgabe im Status „Ausstehend“ verbringt, wird nicht auf die Dauer der Aufgabe angerechnet.

1. Wenn die Ausführung Teil einer Ausführungsgruppe ist und das Timeout der Ausführungsgruppe vor Ablauf des Task-Timers abläuft, gehen Ausführung und Task in den Status Fehlgeschlagen über.

Geben Sie die Timeoutdauer mit einer oder mehreren der folgenden Einheiten an:`ms`,`s`, `m``h`, oder`d`.

Das folgende Beispiel zeigt, wie die globale Konfiguration in der Nextflow-Konfigurationsdatei angegeben wird. Es legt ein globales Timeout von 1 Stunde und 30 Minuten fest.

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

Das folgende Beispiel zeigt, wie eine Zeitanweisung im Aufgabenbereich der Workflow-Definition angegeben wird. In diesem Beispiel wird ein Timeout von 3 Tagen, 5 Stunden und 4 Minuten festgelegt. Dieser Wert hat Vorrang vor dem globalen Wert in der Konfigurationsdatei, hat jedoch keinen Vorrang vor einer aufgabenspezifischen Zeitanweisung für `my_label` in der Konfigurationsdatei.

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

Das folgende Beispiel zeigt, wie aufgabenspezifische Zeitdirektiven in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelselektoren angegeben werden. In diesem Beispiel wird ein globaler Task-Timeout-Wert von 30 Minuten festgelegt. Es legt einen Wert von 2 Stunden für eine Aufgabe `myTask` und einen Wert von 3 Stunden für Aufgaben mit Bezeichnung `my_label` fest. Bei Aufgaben, die dem Selektor entsprechen, haben diese Werte Vorrang vor dem globalen Wert und dem Wert in der Workflow-Definition.

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

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

## Aufgabeninhalt exportieren
<a name="exporting-task-content-nextflow"></a>

Definieren Sie für in Nextflow geschriebene Workflows eine **PublishDir-Direktive**, um Aufgabeninhalte in Ihren Amazon S3 S3-Ausgabe-Bucket zu exportieren. Wie im folgenden Beispiel gezeigt, setzen Sie den Wert **publishDir** auf. `/mnt/workflow/pubdir` Um Dateien nach Amazon S3 zu exportieren, müssen sich die Dateien in diesem Verzeichnis befinden.

```
 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
    """
  }
```

# Besonderheiten der CWL-Workflow-Definition
<a name="workflow-languages-cwl"></a>

Workflows, die in Common Workflow Language (CWL) geschrieben wurden, bieten ähnliche Funktionen wie Workflows, die in WDL und Nextflow geschrieben wurden. Sie können Amazon S3 oder HealthOmics Storage URIs als Eingabeparameter verwenden. 

Wenn Sie die Eingabe in einer SecondaryFile in einem Unter-Workflow definieren, fügen Sie dieselbe Definition im Haupt-Workflow hinzu.

HealthOmics Workflows unterstützen keine Betriebsprozesse. Weitere Informationen zu Betriebsprozessen in CWL-Workflows finden Sie in der [CWL-Dokumentation](https://www.commonwl.org/user_guide/topics/operations.html).

Es hat sich bewährt, für jeden Container, den Sie verwenden, einen separaten CWL-Workflow zu definieren. Wir empfehlen, den DockerPull-Eintrag nicht mit einer festen Amazon ECR-URI fest zu codieren.

**Topics**
+ [Konvertieren Sie die zu verwendenden CWL-Workflows HealthOmics](#workflow-cwl-convert)
+ [Deaktivieren Sie die Aufgabenwiederholung mit `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Einen Workflow-Schritt wiederholen](#workflow-cwl-loop)
+ [Führen Sie Aufgaben mit mehr Arbeitsspeicher erneut aus](#workflow-cwl-out-of-memory-retry)
+ [Beispiele](#workflow-cwl-examples)

## Konvertieren Sie die zu verwendenden CWL-Workflows HealthOmics
<a name="workflow-cwl-convert"></a>

Um eine bestehende CWL-Workflow-Definition zur Verwendung zu konvertieren HealthOmics, nehmen Sie die folgenden Änderungen vor:
+ Ersetzen Sie alle Docker-Container URIs durch Amazon URIs ECR.
+ Stellen Sie sicher, dass alle Workflow-Dateien im Haupt-Workflow als Eingabe deklariert sind und dass alle Variablen explizit definiert sind.
+ Stellen Sie sicher, dass der gesamte JavaScript Code Strict-Mode-konform ist.

## Deaktivieren Sie die Aufgabenwiederholung mit `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics unterstützt Aufgabenwiederholungen, wenn die Aufgabe aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Standardmäßig werden bis zu zwei Wiederholungen einer HealthOmics fehlgeschlagenen Aufgabe versucht. Weitere Hinweise zur Wiederholung von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Um die Wiederholung von Aufgaben bei Servicefehlern zu deaktivieren, konfigurieren Sie die `omicsRetryOn5xx` Anweisung in der Workflow-Definition. Sie können diese Direktive unter Anforderungen oder Hinweisen definieren. Wir empfehlen, die Direktive als Hinweis für die Portabilität hinzuzufügen.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Anforderungen haben Vorrang vor Hinweisen. Wenn eine Aufgabenimplementierung einen Ressourcenbedarf in Hinweisen enthält, der auch durch Anforderungen in einem umschließenden Workflow bereitgestellt wird, haben die einschließenden Anforderungen Vorrang.

Wenn dieselbe Aufgabenanforderung auf verschiedenen Ebenen des Workflows vorkommt, wird der spezifischste Eintrag von HealthOmics verwendet `requirements` (oder`hints`, falls es keine Einträge in gibt). `requirements` Die folgende Liste zeigt die Rangfolge, in der die HealthOmics Konfigurationseinstellungen angewendet werden, von der niedrigsten zur höchsten Priorität:
+ Workflow-Ebene
+ Schrittebene
+ Aufgabenbereich der Workflow-Definition

Das folgende Beispiel zeigt, wie die `omicsRetryOn5xx` Direktive auf verschiedenen Ebenen des Workflows konfiguriert wird. In diesem Beispiel hat die Anforderung auf Workflow-Ebene Vorrang vor den Hinweisen auf Workflow-Ebene. Die Anforderungskonfigurationen auf Aufgaben- und Schrittebene haben Vorrang vor den Hinweiskonfigurationen.

```
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
```

## Einen Workflow-Schritt wiederholen
<a name="workflow-cwl-loop"></a>

HealthOmics unterstützt die Schleife eines Workflow-Schritts. Sie können Schleifen verwenden, um Workflow-Schritte wiederholt auszuführen, bis eine bestimmte Bedingung erfüllt ist. Dies ist nützlich für iterative Prozesse, bei denen Sie eine Aufgabe mehrmals wiederholen müssen oder bis ein bestimmtes Ergebnis erreicht ist.

**Hinweis:** Für die Loop-Funktionalität ist CWL Version 1.2 oder höher erforderlich. Workflows, die CWL-Versionen vor 1.2 verwenden, unterstützen keine Loop-Operationen.

Um Loops in Ihrem CWL-Workflow zu verwenden, definieren Sie eine Loop-Anforderung. Das folgende Beispiel zeigt die Konfiguration der Loop-Anforderungen:

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

Das `loopWhen` Feld steuert, wann die Schleife endet. In diesem Beispiel wird die Schleife fortgesetzt, solange der Zähler unter dem Maximalwert liegt. Das `loop` Feld definiert, wie Eingabeparameter zwischen den Iterationen aktualisiert werden. Das `loopSource` gibt an, welche Ausgabe der vorherigen Iteration in die nächste Iteration einfließen wird. Das `outputMethod` Feld, das auf gesetzt ist, `last` gibt nur die Ausgabe der letzten Iteration zurück.

## Führen Sie Aufgaben mit mehr Arbeitsspeicher erneut aus
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics unterstützt die automatische Wiederholung fehlgeschlagener out-of-memory Aufgaben. Wenn eine Aufgabe mit dem Code 137 (out-of-memory) beendet HealthOmics wird, wird eine neue Aufgabe mit erhöhter Speicherzuweisung auf der Grundlage des angegebenen Multiplikators erstellt.

**Anmerkung**  
HealthOmics wiederholt out-of-memory Fehler bis zu dreimal oder bis die Speicherzuweisung 1536 GiB erreicht, je nachdem, welcher Grenzwert zuerst erreicht wird.

Das folgende Beispiel zeigt, wie Wiederholungen konfiguriert werden: out-of-memory

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

Wenn eine Aufgabe aufgrund von fehlschlägt out-of-memory, HealthOmics berechnet die Speicherzuweisung beim erneuten Versuch anhand der Formel:. `previous_run_memory × memoryRetryMultiplier` Wenn im obigen Beispiel die Aufgabe mit 4096 MB Arbeitsspeicher fehlschlägt, verwendet der Wiederholungsversuch 4096 × 2,5 = 10.240 MB Arbeitsspeicher.

Der `memoryRetryMultiplier` Parameter steuert, wie viel zusätzlicher Speicher für Wiederholungsversuche reserviert werden soll:
+ **Standardwert:** Wenn Sie keinen Wert angeben, wird der Standardwert verwendet `2` (verdoppelt den Speicher)
+ **Gültiger Bereich:** Muss eine positive Zahl größer als sein. `1` Ungültige Werte führen zu einem 4XX-Validierungsfehler
+ **Effektiver Mindestwert:** Werte zwischen `1` und `1.5` werden automatisch erhöht, `1.5` um eine sinnvolle Speichererweiterung sicherzustellen und übermäßige Wiederholungsversuche zu verhindern

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

Im Folgenden finden Sie ein Beispiel für einen in CWL geschriebenen Workflow. 

```
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
```

Die folgende Datei definiert die `copy.cwl` Aufgabe.

```
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)"
```

Im Folgenden finden Sie ein Beispiel für einen in CWL geschriebenen Workflow mit einer GPU-Anforderung.

```
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: []
```

# Beispiele für Workflow-Definitionen
<a name="workflow-definition-examples"></a>

Das folgende Beispiel zeigt dieselbe Workflow-Definition in WDL, Nextflow und 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
```

------

# Parametervorlagendateien für HealthOmics Workflows
<a name="parameter-templates"></a>

Parametervorlagen definieren die Eingabeparameter für einen Workflow. Sie können Eingabeparameter definieren, um Ihren Workflow flexibler und vielseitiger zu gestalten. Sie können beispielsweise einen Parameter für den Amazon S3 S3-Speicherort der Referenzgenomdateien definieren. Parametervorlagen können über einen Git-basierten Repository-Dienst oder Ihr lokales Laufwerk bereitgestellt werden. Benutzer können den Workflow dann mit verschiedenen Datensätzen ausführen. 

Sie können die Parametervorlage für Ihren Workflow oder HealthOmics die Parametervorlage für Sie erstellen.

Die Parametervorlage ist eine JSON-Datei. In der Datei ist jeder Eingabeparameter ein benanntes Objekt, das mit dem Namen der Workflow-Eingabe übereinstimmen muss. Wenn Sie einen Lauf starten und nicht Werte für alle erforderlichen Parameter angeben, schlägt der Lauf fehl.

Das Eingabeparameterobjekt umfasst die folgenden Attribute:
+ **description**— Dieses erforderliche Attribut ist eine Zeichenfolge, die von der Konsole auf der **Startrun-Seite** angezeigt wird. Diese Beschreibung wird auch als Run-Metadaten gespeichert.
+ **optional**— Dieses optionale Attribut gibt an, ob der Eingabeparameter optional ist. Wenn Sie das **optional** Feld nicht angeben, ist der Eingabeparameter erforderlich.

Die folgende Beispielparametervorlage zeigt, wie die Eingabeparameter angegeben werden.

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

## Generieren von Parametervorlagen
<a name="parameter-parsing"></a>

HealthOmics generiert die Parametervorlage, indem die Workflow-Definition analysiert wird, um Eingabeparameter zu ermitteln. Wenn Sie eine Parametervorlagendatei für einen Workflow bereitstellen, überschreiben die Parameter in Ihrer Datei die in der Workflow-Definition erkannten Parameter.

Es gibt geringfügige Unterschiede zwischen der Parsing-Logik der CWL-, WDL- und Nextflow-Engines, wie in den folgenden Abschnitten beschrieben. 

**Topics**
+ [Parametererkennung für CWL](#parameter-parsing-cwl)
+ [Parametererkennung für WDL](#parameter-parsing-wdl)
+ [Parametererkennung für Nextflow](#parameter-parsing-nextflow)

### Parametererkennung für CWL
<a name="parameter-parsing-cwl"></a>

In der CWL-Workflow-Engine geht die Parsing-Logik von den folgenden Annahmen aus:
+ Alle unterstützten Typen, für die ein Nullwert zulässig ist, sind als optionale Eingabeparameter gekennzeichnet.
+ Alle unterstützten Typen, die nicht Null enthalten, werden als erforderliche Eingabeparameter gekennzeichnet.
+ Alle Parameter mit Standardwerten sind als optionale Eingabeparameter gekennzeichnet.
+ Die Beschreibungen werden aus dem `label` Abschnitt der `main` Workflow-Definition extrahiert. Wenn nicht angegeben, `label` ist die Beschreibung leer (eine leere Zeichenfolge). 

Die folgenden Tabellen zeigen Beispiele für die CWL-Interpolation. Für jedes Beispiel lautet der Parametername. `x` Wenn der Parameter erforderlich ist, müssen Sie einen Wert für den Parameter angeben. Wenn der Parameter optional ist, müssen Sie keinen Wert angeben.

Diese Tabelle zeigt Beispiele für die CWL-Interpolation für primitive Typen.


| Eingabe | Beispiel für Eingabe/Ausgabe | Erforderlich | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 oder 2 oder... | Ja | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | Der Standardwert ist 2. Gültige Eingabe ist 1 oder 2 oder... | Nein | 
|  <pre>x:               <br />  type: int?</pre>  | Gültige Eingabe ist Keine oder 1 oder 2 oder... | Nein | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | Der Standardwert ist 2. Gültige Eingabe ist Keine oder 1 oder 2 oder... | Nein | 

Die folgende Tabelle enthält Beispiele für die CWL-Interpolation für komplexe Typen. Ein komplexer Typ ist eine Sammlung primitiver Typen.


| Eingabe | Beispiel für Eingabe/Ausgabe | Erforderlich | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] oder [1,2,3]  | Ja | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Keiner oder [] oder [1,2,3]  | Nein | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] oder [Keine, 3, Keine]  | Ja | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Keine] oder Keine oder [1,2,3] oder [Keine, 3] aber nicht []  | Nein | 

### Parametererkennung für WDL
<a name="parameter-parsing-wdl"></a>

In der WDL-Workflow-Engine geht die Parsing-Logik von den folgenden Annahmen aus:
+ Alle unterstützten Typen, für die NULL-Werte zulässig sind, sind als optionale Eingabeparameter gekennzeichnet. 
+ Für unterstützte Typen, die keine NULL-Werte zulassen:
  + Jede Eingabevariable mit der Zuweisung von Literalen oder Ausdrücken ist als optionale Parameter gekennzeichnet. Zum Beispiel:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Wenn den Eingabeparametern keine Werte oder Ausdrücke zugewiesen wurden, werden sie als erforderliche Parameter markiert. 
+ Beschreibungen werden aus `parameter_meta` der `main` Workflow-Definition extrahiert. Wenn nicht angegeben, `parameter_meta` ist die Beschreibung leer (eine leere Zeichenfolge). Weitere Informationen finden Sie in der WDL-Spezifikation für [Parameter-Metadaten](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

Die folgenden Tabellen enthalten Beispiele für WDL-Interpolation. Für jedes Beispiel lautet der Parametername. `x` Wenn der Parameter erforderlich ist, müssen Sie einen Wert für den Parameter angeben. Wenn der Parameter optional ist, müssen Sie keinen Wert angeben.

Diese Tabelle zeigt Beispiele für WDL-Interpolation für primitive Typen.


| Eingabe | Beispiel für Eingabe/Ausgabe | Erforderlich | 
| --- | --- | --- | 
| Ganzzahl x | 1 oder 2 oder... | Ja | 
| Int x = 2 | 2 | Nein | 
| Ganzzahl x = 1\$12 | 3 | Nein | 
| Ganzzahl x = y\$1z | y\$1z | Nein | 
| Int? x | Keiner oder 1 oder 2 oder... | Ja | 
| Int? x = 2 | Keiner oder 2 | Nein | 
| Int? x = 1\$12 | Keiner oder 3 | Nein | 
| Int? x = y\$1z | Keiner oder y\$1z | Nein | 

Die folgende Tabelle zeigt Beispiele für die WDL-Interpolation für komplexe Typen. Ein komplexer Typ ist eine Sammlung primitiver Typen. 


| Eingabe | Beispiel für Eingabe/Ausgabe | Erforderlich | 
| --- | --- | --- | 
| Array [Int] x | [1,2,3] oder [] | Ja | 
| Reihe [Int] \$1 x | [1], aber nicht [] | Ja | 
| Array [Int]? x | Keiner oder [] oder [1,2,3] | Nein | 
| Array [Int?] x | [] oder [Keine, 3, Keine] | Ja | 
| Array [Int?] =? x | [Keine] oder Keine oder [1,2,3] oder [Keine, 3] aber nicht [] | Nein | 
| Strukturbeispiel \$1Zeichenfolge a, Int y\$1 später in den Eingaben: Beispiel mySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Ja | 
| Strukturbeispiel \$1Zeichenfolge a, Int y\$1 später in den Eingaben: Beispiel? Meine Probe |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | Nein | 

### Parametererkennung für Nextflow
<a name="parameter-parsing-nextflow"></a>

 HealthOmics Generiert für Nextflow die Parametervorlage durch Analysieren der Datei. `nextflow_schema.json` Wenn die Workflow-Definition keine Schemadatei enthält, wird die Haupt-Workflow-Definitionsdatei HealthOmics analysiert.

**Topics**
+ [Analysieren der Schemadatei](#parameter-parsing-nextflow-schema)
+ [Analysieren der Hauptdatei](#parameter-parsing-nextflow-main)
+ [Verschachtelte Parameter](#parameter-parsing-nextflow-nested)
+ [Beispiele für Nextflow-Interpolation](#parameter-parsing-nextflow-examples)

#### Analysieren der Schemadatei
<a name="parameter-parsing-nextflow-schema"></a>

Damit das Parsen korrekt funktioniert, stellen Sie sicher, dass die Schemadatei die folgenden Anforderungen erfüllt:
+ Die Schemadatei hat einen Namen `nextflow_schema.json` und befindet sich in demselben Verzeichnis wie die Haupt-Workflow-Datei.
+ Die Schemadatei ist gültiges JSON, wie in einem der folgenden Schemas definiert:
  + [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 analysiert die `nextflow_schema.json` Datei, um die Parametervorlage zu generieren:
+ Extrahiert alles**properties**, was im Schema definiert ist.
+ Schließt die Eigenschaft ein**description**, sofern sie für die Eigenschaft verfügbar ist.
+ Identifiziert, ob jeder Parameter optional oder erforderlich ist, basierend auf dem **required** Feld der Eigenschaft.

Das folgende Beispiel zeigt eine Definitionsdatei und die generierte Parameterdatei.

```
{
    "$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" }
    ]
}
```

Die generierte Parametervorlage:

```
{
    "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
    }
}
```

#### Analysieren der Hauptdatei
<a name="parameter-parsing-nextflow-main"></a>

Wenn die Workflow-Definition keine `nextflow_schema.json` Datei enthält, wird die Haupt-Workflow-Definitionsdatei HealthOmics analysiert.

HealthOmics analysiert die `params` Ausdrücke, die in der Workflow-Definitionsdatei und in der `nextflow.config` Datei gefunden wurden. Alle `params` mit Standardwerten sind als optional gekennzeichnet.

Beachten Sie die folgenden Anforderungen, damit das Parsen korrekt funktioniert:
+ HealthOmics analysiert nur die Haupt-Workflow-Definitionsdatei. Um sicherzustellen, dass alle Parameter erfasst werden, empfehlen wir, eine Verbindung zu allen **params** Untermodulen und importierten Workflows herzustellen.
+ Die Konfigurationsdatei ist optional. Wenn Sie eine definieren, geben Sie ihr einen Namen `nextflow.config` und platzieren Sie sie im selben Verzeichnis wie die Haupt-Workflow-Definitionsdatei.

Das folgende Beispiel zeigt eine Definitionsdatei und die generierte Parametervorlage.

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

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

Die generierte Parametervorlage:

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

 HealthOmics Sammelt bei Standardwerten, die in nextflow.config definiert sind, `params` Zuweisungen und Parameter, die darin deklariert sind`params {}`, wie im folgenden Beispiel gezeigt. `params`Muss in Zuweisungsanweisungen auf der linken Seite der Anweisung stehen.

```
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}"
```

Die generierte Parametervorlage:

```
{
    // 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
    }
}
```

#### Verschachtelte Parameter
<a name="parameter-parsing-nextflow-nested"></a>

Beides `nextflow_schema.json` und `nextflow.config` erlaubt verschachtelte Parameter. Für die HealthOmics Parametervorlage sind jedoch nur die Parameter der obersten Ebene erforderlich. Wenn Ihr Workflow einen verschachtelten Parameter verwendet, müssen Sie ein JSON-Objekt als Eingabe für diesen Parameter angeben.

##### Verschachtelte Parameter in Schemadateien
<a name="parameter-parsing-schema-nested"></a>

HealthOmics überspringt verschachtelte Elemente **params** beim Parsen einer Datei. `nextflow_schema.json` Wenn Sie beispielsweise die folgende Datei definieren: `nextflow_schema.json`

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

HealthOmics ignoriert `input_file` und `input_num` wenn es die Parametervorlage generiert:

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

Wenn Sie diesen Workflow ausführen, HealthOmics erwartet eine `input.json` Datei, die der folgenden ähnelt:

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

##### Verschachtelte Parameter in Konfigurationsdateien
<a name="parameter-parsing-config-nested"></a>

HealthOmics sammelt keine **params** in einer `nextflow.config` Datei verschachtelten Dateien und überspringt sie beim Parsen. Wenn Sie beispielsweise die folgende Datei definieren: `nextflow.config`

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

HealthOmics ignoriert `params.nested.beta` und `params.group.delta` wenn es die Parametervorlage generiert:

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

#### Beispiele für Nextflow-Interpolation
<a name="parameter-parsing-nextflow-examples"></a>

Die folgende Tabelle zeigt Beispiele für die Nextflow-Interpolation für Parameter in der Hauptdatei.


| Parameter | Erforderlich | 
| --- | --- | 
| params.input\$1file | Ja | 
| params.input\$1file = "s3://bucket/data.json“ | Nein | 
| params.nested.input\$1file | N/A | 
| params.nested.input\$1file = "s3://bucket/data.json“ | N/A | 

Die folgende Tabelle zeigt Beispiele für die Nextflow-Interpolation für Parameter in der Datei. `nextflow.config`


| Parameter | Erforderlich | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | Nein | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | Nein | 
|  <pre>params {<br />   nested {<br />     input_file = "s3://bucket/data.json"    <br />   }<br />}</pre>  | N/A | 
|  <pre>input_file = params.input_file</pre>  | N/A | 

# Container-Images für private Workflows
<a name="workflows-ecr"></a>

HealthOmics unterstützt Container-Images, die in privaten Amazon ECR-Repositorys gehostet werden. Sie können Container-Images erstellen und sie in das private Repository hochladen. Sie können Ihre private Amazon ECR-Registrierung auch als Pull-Through-Cache verwenden, um den Inhalt von Upstream-Registrierungen zu synchronisieren.

Ihr Amazon ECR-Repository muss sich in derselben AWS Region befinden wie das Konto, das den Service aufruft. Eine andere Person AWS-Konto kann Eigentümer des Container-Images sein, sofern das Quell-Image-Repository die entsprechenden Berechtigungen bietet. Weitere Informationen finden Sie unter [Richtlinien für den kontenübergreifenden Zugriff auf Amazon ECR](permissions-ecr.md#permissions-cross-account).

Wir empfehlen Ihnen, Ihr Amazon ECR-Container-Image URIs als Parameter in Ihrem Workflow zu definieren, damit der Zugriff verifiziert werden kann, bevor der Lauf beginnt. Es macht es auch einfacher, einen Workflow in einer neuen Region auszuführen, indem der Parameter Region geändert wird.

**Anmerkung**  
HealthOmics unterstützt keine ARM-Container und unterstützt keinen Zugriff auf öffentliche Repositorys.

Informationen zur Konfiguration von IAM-Berechtigungen für den Zugriff HealthOmics auf Amazon ECR finden Sie unter. [HealthOmics Berechtigungen für Ressourcen](permissions-resource.md)

**Topics**
+ [Synchronisieren mit Container-Registrierungen von Drittanbietern](#ecr-pull-through)
+ [Allgemeine Überlegungen zu Amazon ECR-Container-Images](#ecr-considerations)
+ [Umgebungsvariablen für HealthOmics Workflows](#ecr-env-vars)
+ [Verwenden von Java in Amazon ECR-Container-Images](#ecr-java-considerations)
+ [Hinzufügen von Aufgabeneingaben zu einem Amazon ECR-Container-Image](#ecr-tasks)

## Synchronisieren mit Container-Registrierungen von Drittanbietern
<a name="ecr-pull-through"></a>

Sie können Amazon ECR Pull-Through-Cache-Regeln verwenden, um Repositorys in einer unterstützten Upstream-Registry mit Ihren privaten Amazon ECR-Repositorys zu synchronisieren. Weitere Informationen finden Sie unter [Synchronisieren einer Upstream-Registrierung](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html) im *Amazon ECR-Benutzerhandbuch*.

Der Pull-Through-Cache erstellt automatisch das Image-Repository in Ihrer privaten Registrierung, wenn Sie den Cache erstellen, und er synchronisiert sich automatisch mit dem zwischengespeicherten Image, wenn Änderungen am Upstream-Image vorgenommen werden. 

HealthOmics unterstützt den Pull-Through-Cache für die folgenden Upstream-Registrierungen: 
+ Amazon ECR Public
+ Registrierung für Kubernetes-Container-Images
+ Quay
+ Docker Hub 
+ Microsoft Azure Container Registry
+ GitHub Container-Registrierung 
+ GitLab Container-Registrierung 

HealthOmics unterstützt keinen Pull-Through-Cache für ein privates Amazon ECR-Upstream-Repository.

Zu den Vorteilen der Verwendung des Amazon ECR Pull-Through-Cache gehören:

1. Sie müssen Container-Images nicht manuell zu Amazon ECR migrieren oder Updates aus dem Drittanbieter-Repository synchronisieren. 

1. Workflows greifen auf die synchronisierten Container-Images in Ihrem privaten Repository zu. Dies ist zuverlässiger als das Herunterladen von Inhalten zur Laufzeit aus einer öffentlichen Registrierung.

1. Da Amazon ECR Pull-Through-Caches eine vorhersehbare URI-Struktur verwenden, kann der HealthOmics Service die private Amazon ECR-URI automatisch der Upstream-Registrierungs-URI zuordnen. Sie müssen die URI-Werte in der Workflow-Definition nicht aktualisieren und ersetzen.

**Topics**
+ [Pull-Through-Cache konfigurieren](#ecr-pull-through-configure)
+ [Registrierungszuordnungen](#ecr-pull-through-registry-mapping)
+ [Bildzuordnungen](#ecr-pull-through-mapping-format)

### Pull-Through-Cache konfigurieren
<a name="ecr-pull-through-configure"></a>

Amazon ECR bietet eine Registrierung für Sie AWS-Konto in jeder Region. Stellen Sie sicher, dass Sie die Amazon ECR-Konfiguration in derselben Region erstellen, in der Sie den Workflow ausführen möchten.

In den folgenden Abschnitten werden die Konfigurationsaufgaben für den Pull-Through-Cache beschrieben.

**Topics**
+ [Erstellen Sie eine Pull-Through-Cache-Regel](#create-ecr-ptc)
+ [Registrierungsberechtigungen für die Upstream-Registrierung](#reg-ecr-ptc)
+ [Vorlagen für die Erstellung von Reposit](#repo-create-templates-ptc)
+ [Den Workflow erstellen](#reg-mapping-ecr-ptc)

#### Erstellen Sie eine Pull-Through-Cache-Regel
<a name="create-ecr-ptc"></a>

Erstellen Sie eine Amazon ECR-Pull-Through-Cache-Regel für jede Upstream-Registrierung, die Bilder enthält, die Sie zwischenspeichern möchten. Eine Regel spezifiziert eine Zuordnung zwischen einer Upstream-Registrierung und dem privaten Amazon ECR-Repository. 

Für eine Upstream-Registrierung, die eine Authentifizierung erfordert, geben Sie Ihre Anmeldeinformationen mithilfe von AWS Secrets Manager ein.

**Anmerkung**  
Ändern Sie eine Pull-Through-Cache-Regel nicht, während ein aktiver Lauf das private Repository verwendet. Der Lauf könnte fehlschlagen oder, was noch wichtiger ist, dazu führen, dass Ihre Pipeline unerwartete Bilder verwendet.

Weitere Informationen finden Sie unter [Erstellen einer Pull-Through-Cache-Regel](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) im *Amazon Elastic Container Registry-Benutzerhandbuch*.

##### Erstellen Sie mithilfe der Konsole eine Pull-Through-Cache-Regel
<a name="create-ecr-ptc-console"></a>

Gehen Sie mit der Amazon ECR-Konsole wie folgt vor, um den Pull-Through-Cache zu konfigurieren:

1. Öffnen Sie die Amazon ECR-Konsole: https://console.aws.amazon.com /ecr

1. Erweitern Sie im linken Menü unter **Private Registrierung** die Option **Funktionen und Einstellungen**. Wählen Sie dann **Pull** through Cache aus.

1. Wählen **Sie auf der Seite Pull-Through-Cache** die Option **Regel hinzufügen** aus.

1. Wählen Sie im Bereich **Upstream-Registrierung** die Upstream-Registrierung aus, die mit Ihrer privaten Registrierung synchronisiert werden soll, und klicken Sie dann auf **Weiter**.

1. Wenn für die Upstream-Registrierung eine Authentifizierung erforderlich ist, öffnet die Konsole eine neue Seite, auf der Sie das SageMaker KI-Geheimnis angeben, das Ihre Anmeldeinformationen enthält. Wählen Sie **Weiter** aus.

1. Wählen **Sie unter Namespaces angeben** im Bereich **Cache-Namespace** aus, ob die privaten Repositorys mit einem bestimmten Repository-Präfix oder ohne Präfix erstellt werden sollen. **Wenn Sie ein Präfix verwenden möchten, geben Sie den Präfixnamen im Feld Cache-Repository-Präfix an.**

1. Wählen Sie im Bereich **Upstream-Namespace** aus, ob aus Upstream-Repositorys mit einem bestimmten Repository-Präfix oder ohne Präfix abgerufen werden soll. Wenn Sie ein Präfix verwenden möchten, geben Sie den Präfixnamen im Feld **Upstream-Repository-Präfix** an.

   Das **Namespace-Beispielfenster** zeigt ein Beispiel für eine Pull-Anfrage, eine Upstream-URL und die URL des Cache-Repositorys, das erstellt wird.

1. Wählen Sie **Weiter** aus.

1. Überprüfen Sie die Konfiguration und wählen Sie **Create**, um die Regel zu erstellen.

Weitere Informationen finden Sie unter [Eine Pull-Through-Cache-Regel erstellen (AWS Management Console)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console).

##### Erstellen Sie mit der CLI eine Pull-Through-Cache-Regel
<a name="create-ecr-ptc-cli"></a>

Verwenden Sie den Amazon **create-pull-through-cache-rule** ECR-Befehl, um eine Pull-Through-Cache-Regel zu erstellen. Für Upstream-Registrierungen, die eine Authentifizierung erfordern, speichern Sie die Anmeldeinformationen in einem Secrets Manager Manager-Geheimnis.

Die folgenden Abschnitte enthalten Beispiele für jede unterstützte Upstream-Registrierung.

##### Für Amazon ECR Public
<a name="ecr-ptc-cli-public-ecr"></a>

Im folgenden Beispiel wird eine Pull-Through-Cache-Regel für die öffentliche Registrierung von Amazon ECR erstellt. Es gibt ein Repository-Präfix von `ecr-public`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `ecr-public/upstream-repository-name` hat.

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

##### Für Kubernetes Container Registry
<a name="ecr-ptc-cli-kubernetes"></a>

Im folgenden Beispiel wird eine Pull-Through-Cache-Regel für das öffentliche Kubernetes-Registry erstellt. Es gibt ein Repository-Präfix von `kubernetes`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `kubernetes/upstream-repository-name` hat.

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

##### Für Quay
<a name="ecr-ptc-cli-quay"></a>

Im folgenden Beispiel wird eine Pull-Through-Cache-Regel für die öffentliche Registrierung von Quay erstellt. Es gibt ein Repository-Präfix von `quay`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `quay/upstream-repository-name` hat.

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

##### Für Docker Hub
<a name="ecr-ptc-cli-docker-hub"></a>

Im folgenden Beispiel wird eine Pull-Through-Cache-Regel für die Docker-Hub-Registrierung von Quay erstellt. Es gibt ein Repository-Präfix von `docker-hub`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `docker-hub/upstream-repository-name` hat. Sie müssen den vollständigen Amazon-Ressourcennamen (ARN) des Secrets mit Ihren Anmeldeinformationen für Docker Hub angeben.

```
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
```

##### Für Container Registry GitHub
<a name="ecr-ptc-cli-public-github"></a>

Im folgenden Beispiel wird eine Pull-Through-Cacheregel für die GitHub Container Registry erstellt. Es gibt ein Repository-Präfix von `github`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `github/upstream-repository-name` hat. Sie müssen den vollständigen Amazon-Ressourcennamen (ARN) des Geheimnisses angeben, das Ihre Anmeldeinformationen für die GitHub Container Registry enthält.

```
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
```

##### Für Microsoft Azure Container Registry
<a name="ecr-ptc-cli-azure"></a>

Im folgenden Beispiel wird eine Pull-Through-Cacheregel für die Microsoft Azure Container Registry erstellt. Es gibt ein Repository-Präfix von `azure`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `azure/upstream-repository-name` hat. Sie müssen den vollständigen Amazon-Ressourcennamen (ARN) des Secrets mit Ihren Anmeldeinformationen für die Microsoft Azure Container Registry angeben.

```
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
```

##### Für GitLab Container Registry
<a name="ecr-ptc-cli-gitlab"></a>

Im folgenden Beispiel wird eine Pull-Through-Cacheregel für die GitLab Container Registry erstellt. Es gibt ein Repository-Präfix von `gitlab`, was dazu führt, dass jedes Repository, das mit der Pull-Through-Cache-Regel erstellt wurde, das Benennungsschema von `gitlab/upstream-repository-name` hat. Sie müssen den vollständigen Amazon-Ressourcennamen (ARN) des Geheimnisses angeben, das Ihre Anmeldeinformationen für die GitLab Container Registry enthält.

```
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
```

Weitere Informationen finden Sie unter [Erstellen einer Pull-Through-Cache-Regel (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) im *Amazon ECR-Benutzerhandbuch*.

Sie können den **get-run-task** CLI-Befehl verwenden, um Informationen über das Container-Image abzurufen, das für eine bestimmte Aufgabe verwendet wird:

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

Die Ausgabe enthält die folgenden Informationen über das Container-Image:

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

#### Registrierungsberechtigungen für die Upstream-Registrierung
<a name="reg-ecr-ptc"></a>

Verwenden Sie Registrierungsberechtigungen, um die Verwendung des Pull-Through-Cache und das Abrufen der Container-Images in die private Amazon ECR-Registrierung zu ermöglichen HealthOmics . Fügen Sie der Registrierung eine Amazon ECR-Registrierungsrichtlinie hinzu, die die in Läufen verwendeten Container bereitstellt. 

Die folgende Richtlinie erteilt dem HealthOmics Service die Erlaubnis, Repositorys mit den angegebenen Pull-Through-Cache-Präfixen zu erstellen und Upstream-Pulls in diese Repositorys zu initiieren. 

1. Öffnen Sie in der Amazon ECR-Konsole das linke Menü, erweitern Sie unter **Private Registrierung den Eintrag **Registrierungsberechtigungen****. Wählen Sie dann **Kontoauszug generieren** aus.

1. Wählen Sie oben rechts JSON aus. Geben Sie eine Richtlinie ein, die der folgenden ähnelt:

------
#### [ 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/*"
               ] 
           }
       ]
   }
   ```

------

#### Vorlagen für die Erstellung von Reposit
<a name="repo-create-templates-ptc"></a>

Um das Pull-Through-Caching in verwenden zu können HealthOmics, muss das Amazon ECR-Repository über eine Vorlage für die Repository-Erstellung verfügen. Die Vorlage definiert Konfigurationseinstellungen für den Fall, dass Sie oder Amazon ECR ein privates Repository für eine Upstream-Registrierung erstellen. 

Jede Vorlage enthält ein Repository-Namespace-Präfix, das Amazon ECR verwendet, um neue Repositorys einer bestimmten Vorlage zuzuordnen. Vorlagen spezifizieren die Konfiguration für alle Repository-Einstellungen, einschließlich ressourcenbasierter Zugriffsrichtlinien, Tag-Unveränderlichkeit, Verschlüsselung und Lebenszyklus-Richtlinien.

Weitere Informationen finden Sie unter [Vorlagen für die Erstellung von Repositorys](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html) im *Amazon Elastic Container Registry User Guide*.

So erstellen Sie eine Vorlage für die Erstellung eines Repositorys:

1. Öffnen Sie in der Amazon ECR-Konsole das linke Menü unter **Private Registrierung**, erweitern Sie **Funktionen und Einstellungen**. Wählen Sie dann **Vorlagen zur Erstellung von Repositorys** aus.

1. Wählen Sie **Create template (Vorlage erstellen)** aus.

1. Wählen Sie in den **Vorlagendetails** die Option **Pull through cache** aus.

1. Wählen Sie aus, ob diese Vorlage auf ein bestimmtes Präfix oder auf alle Repositorys angewendet werden soll, die keiner anderen Vorlage entsprechen.

   **Wenn Sie **Ein bestimmtes Präfix** wählen, geben Sie den Namespace-Präfixwert im Feld Präfix ein.** Sie haben dieses Präfix bei der Erstellung der PTC-Regel angegeben.

1. Wählen Sie **Weiter** aus.

1. **Geben Sie auf der Seite Konfiguration zur Repository-Erstellung hinzufügen** die **Repository-Berechtigungen** ein. Verwenden Sie eine der Beispiel-Richtlinienanweisungen oder geben Sie eine ein, die dem folgenden Beispiel ähnelt:

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

****  

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

------

1. Optional können Sie Repository-Einstellungen wie Lebenszyklusrichtlinien und Tags hinzufügen. Amazon ECR wendet diese Regeln auf alle Container-Images an, die für den Pull-Through-Cache erstellt wurden und das angegebene Präfix verwenden.

1. Wählen Sie **Weiter** aus.

1. Überprüfen Sie die Konfiguration und wählen Sie **Weiter**.

#### Den Workflow erstellen
<a name="reg-mapping-ecr-ptc"></a>

Wenn Sie einen neuen Workflow oder eine neue Workflow-Version erstellen, überprüfen Sie die Registrierungszuordnungen und aktualisieren Sie sie bei Bedarf. Details hierzu finden Sie unter [Erstellen Sie einen privaten Workflow](create-private-workflow.md).

### Registrierungszuordnungen
<a name="ecr-pull-through-registry-mapping"></a>

Sie definieren Registrierungszuordnungen, um Präfixe in Ihrer privaten Amazon ECR-Registrierung und den Namen der Upstream-Registrierung zuzuordnen.

Weitere Informationen zu Amazon ECR-Registrierungszuordnungen finden Sie unter [Erstellen einer Pull-Through-Cache-Regel in](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) Amazon ECR.

Das folgende Beispiel zeigt Registrierungszuordnungen zu Docker Hub, Quay und Amazon ECR Public.

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

### Bildzuordnungen
<a name="ecr-pull-through-mapping-format"></a>

Sie definieren Bildzuordnungen, die zwischen den Bildnamen, wie sie in Ihren privaten Amazon ECR-Workflows definiert sind, und den Bildnamen in der Upstream-Registrierung zugeordnet werden.

Sie können Image-Zuordnungen mit Registern verwenden, die den Pull-Through-Cache unterstützen. Sie können Image-Zuordnungen auch für Upstream-Registrierungen verwenden, die den Pull-Through-Cache HealthOmics nicht unterstützen. Sie müssen die Upstream-Registrierung manuell mit Ihrem privaten Repository synchronisieren. 

Weitere Informationen zu Amazon ECR-Image-Zuordnungen finden Sie unter [Erstellen einer Pull-Through-Cache-Regel in](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) Amazon ECR.

Das folgende Beispiel zeigt Zuordnungen von privaten Amazon ECR-Images zu einem öffentlichen Genomik-Image und dem neuesten Ubuntu-Image.

```
{
    "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",
        }
    ]
}
```

## Allgemeine Überlegungen zu Amazon ECR-Container-Images
<a name="ecr-considerations"></a>
+ Architektur

  HealthOmics unterstützt x86\$164-Container. Wenn Ihr lokaler Computer ARM-basiert ist, z. B. Apple Mac, verwenden Sie einen Befehl wie den folgenden, um ein x86\$164-Container-Image zu erstellen: 

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ Entrypoint und Shell

  HealthOmics Workflow-Engines fügen Bash-Skripten als Befehlsüberschreibung in die Container-Images ein, die von Workflow-Aufgaben verwendet werden. Daher sollten Container-Images ohne einen angegebenen ENTRYPOINT erstellt werden, sodass eine Bash-Shell die Standardeinstellung ist. 
+ Bereitgestellte Pfade

  Ein gemeinsam genutztes Dateisystem wird in Container-Aufgaben unter /tmp eingehängt. Alle Daten oder Tools, die an diesem Ort in das Container-Image integriert sind, werden überschrieben.

  Die Workflow-Definition ist für Aufgaben über einen schreibgeschützten Mount unter /mnt/workflow verfügbar.
+ Größe des Images

  Die maximalen Bildgrößen von Containern finden Sie unter[HealthOmics Workflow-Kontingente mit fester Größe](fixed-quotas.md#fixed-quotas-workflows).

## Umgebungsvariablen für HealthOmics Workflows
<a name="ecr-env-vars"></a>

HealthOmics stellt Umgebungsvariablen bereit, die Informationen über den Workflow enthalten, der im Container ausgeführt wird. Sie können die Werte dieser Variablen in der Logik Ihrer Workflow-Aufgaben verwenden.

Alle HealthOmics Workflow-Variablen beginnen mit dem `AWS_WORKFLOW_` Präfix. Dieses Präfix ist ein geschütztes Umgebungsvariablenpräfix. Verwenden Sie dieses Präfix nicht für Ihre eigenen Variablen in Workflow-Containern. 

HealthOmics stellt die folgenden Workflow-Umgebungsvariablen bereit:

**AWS\$1REGION**  
Diese Variable ist die Region, in der der Container ausgeführt wird.

**AWS\$1WORKFLOW\$1AUSFÜHREN**  
Diese Variable ist der Name des aktuellen Laufs.

**AWS\$1WORKFLOW\$1RUN\$1ID**  
Diese Variable ist die Lauf-ID des aktuellen Laufs.

**AWS\$1WORKFLOW\$1RUN\$1UUID**  
Diese Variable ist die Run-UUID des aktuellen Laufs.

**AWS\$1WORKFLOW\$1AUFGABE**  
Diese Variable ist der Name der aktuellen Aufgabe.

**AWS\$1WORKFLOW\$1TASK\$1ID**  
Diese Variable ist die Aufgaben-ID der aktuellen Aufgabe.

**AWS\$1WORKFLOW\$1TASK\$1UUID**  
Diese Variable ist die Task-UUID der aktuellen Aufgabe.

Das folgende Beispiel zeigt typische Werte für jede Umgebungsvariable:

```
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
```

## Verwenden von Java in Amazon ECR-Container-Images
<a name="ecr-java-considerations"></a>

Wenn eine Workflow-Aufgabe eine Java-Anwendung wie GATK verwendet, sollten Sie die folgenden Speicheranforderungen für den Container berücksichtigen:
+ Java-Anwendungen verwenden Stack-Speicher und Heap-Speicher. Standardmäßig ist der maximale Heap-Speicher ein Prozentsatz des gesamten verfügbaren Speichers im Container. Dieser Standard hängt von der jeweiligen JVM-Distribution und der JVM-Version ab. Konsultieren Sie daher die entsprechende Dokumentation für Ihre JVM oder legen Sie das maximale Heap-Speicherlimit explizit mithilfe von Java-Befehlszeilenoptionen (wie `-Xmx`) fest. 
+ Legen Sie den maximalen Heap-Speicher nicht auf 100% der Speicherzuweisung des Containers fest, da der JVM-Stack auch Speicher benötigt. Speicher ist auch für den JVM-Garbage-Collector und alle anderen Betriebssystemprozesse erforderlich, die im Container ausgeführt werden.
+ Einige Java-Anwendungen, wie GATK, können native Methodenaufrufe oder andere Optimierungen wie Speicherzuordnungsdateien verwenden. Diese Techniken erfordern Speicherzuweisungen, die „außerhalb des Heaps“ erfolgen und nicht durch den JVM-Parameter für maximale Heap-Anzahl gesteuert werden. 

  Wenn Sie wissen (oder vermuten), dass Ihre Java-Anwendung Off-Heap-Speicher zuweist, stellen Sie sicher, dass Ihre Aufgabenspeicherzuweisung die Anforderungen an Off-Heap-Speicher berücksichtigt.

  Wenn diese Off-Heap-Zuweisungen dazu führen, dass dem Container nicht mehr genügend Speicher zur Verfügung steht, wird normalerweise kein **OutOfMemory** Java-Fehler angezeigt, da die JVM diesen Speicher nicht kontrolliert. 

## Hinzufügen von Aufgabeneingaben zu einem Amazon ECR-Container-Image
<a name="ecr-tasks"></a>

Fügen Sie alle ausführbaren Dateien, Bibliotheken und Skripten, die für die Ausführung einer Workflow-Aufgabe erforderlich sind, in das Amazon ECR-Image ein, das für die Ausführung der Aufgabe verwendet wird. 

Es hat sich bewährt, die Verwendung von Skripten, Binärdateien und Bibliotheken zu vermeiden, die sich außerhalb eines Task-Container-Images befinden. Dies ist besonders wichtig, wenn `nf-core` Workflows verwendet werden, die ein `bin` Verzeichnis als Teil des Workflow-Pakets verwenden. Dieses Verzeichnis wird zwar für die Workflow-Aufgabe verfügbar sein, es ist jedoch als schreibgeschütztes Verzeichnis bereitgestellt. Erforderliche Ressourcen in diesem Verzeichnis sollten in das Task-Image kopiert und zur Laufzeit oder beim Erstellen des für die Aufgabe verwendeten Container-Images verfügbar gemacht werden. 

Die maximale Größe des HealthOmics unterstützten Container-Images finden [HealthOmics Workflow-Kontingente mit fester Größe](fixed-quotas.md#fixed-quotas-workflows) Sie unter.

# HealthOmics Workflow-README-Dateien
<a name="workflows-readme"></a>

Sie können eine README.md-Datei hochladen, die Anweisungen, Diagramme und wichtige Informationen für Ihren Arbeitsablauf enthält. Jede Workflow-Version unterstützt eine README-Datei, die Sie jederzeit aktualisieren können.

**Zu den README-Anforderungen gehören:**
+ Die README-Datei muss im Markdown-Format (.md) vorliegen
+ Maximale Dateigröße: 500 KiB

**Topics**
+ [Verwenden Sie eine vorhandene README-Datei](#workflows-add-readme)
+ [Bedingungen für das Rendern](#workflows-rendering-readme)

## Verwenden Sie eine vorhandene README-Datei
<a name="workflows-add-readme"></a>

READMEs Aus Git-Repositorys exportierte Dateien enthalten relative Links, die normalerweise außerhalb des Repositorys nicht funktionieren. HealthOmics Die Git-Integration konvertiert diese automatisch in absolute Links für das korrekte Rendern in der Konsole, sodass keine manuellen URL-Updates erforderlich sind. 

Bei READMEs Importen aus Amazon S3 oder lokalen Laufwerken müssen Bilder und Links entweder öffentlich verwendet werden URLs oder ihre relativen Pfade müssen aktualisiert werden, damit sie korrekt gerendert werden.

**Anmerkung**  
Bilder müssen öffentlich gehostet werden, damit sie in der HealthOmics Konsole angezeigt werden können. Bilder, die in GitHub Enterprise Server oder GitLab Self-Managed Repositorys gespeichert sind, können nicht gerendert werden.

## Bedingungen für das Rendern
<a name="workflows-rendering-readme"></a>

Die HealthOmics Konsole interpoliert öffentlich zugängliche Bilder und Links mithilfe absoluter Pfade. Um URLs aus privaten Repositorys rendern zu können, muss der Benutzer Zugriff auf das Repository haben. Für GitHub Enterprise Server oder GitLab Self-Managed Repositorys, die benutzerdefinierte Domänen verwenden, können relative Links HealthOmics nicht aufgelöst oder Bilder gerendert werden, die in diesen privaten Repositorys gespeichert sind.

Die folgende Tabelle zeigt die Markdown-Elemente, die von der README-Ansicht der AWS Konsole unterstützt werden.


| Element | AWS Konsole | 
| --- | --- | 
| Benachrichtigungen | Ja, aber ohne Icons | 
| Abzeichen | Ja | 
| Grundlegende Textformatierung | Ja | 
| [Codeblöcke](https://www.markdownguide.org/basic-syntax/#code-blocks) | Ja, hat aber keine [Syntaxhervorhebungs](https://www.markdownguide.org/extended-syntax/#syntax-highlighting) - und Kopierschaltflächenfunktionen  | 
| Zusammenklappbare Abschnitte | Ja | 
| [Überschriften](https://www.markdownguide.org/basic-syntax/#headings) | Ja | 
| [Bildformate](https://www.markdownguide.org/basic-syntax/#images-1) | Ja | 
| [Bild (anklickbar)](https://www.markdownguide.org/basic-syntax/#linking-images) | Ja | 
| [Zeilenumbrüche](https://www.markdownguide.org/basic-syntax/#line-breaks) | Ja | 
| Meerjungfrau-Diagramm | Kann nur das Diagramm öffnen, die Position des Diagramms verschieben und Code kopieren | 
| Angebote | Ja | 
| [https://www.markdownguide.org/extended-syntax/#subscript](https://www.markdownguide.org/extended-syntax/#subscript) | Ja | 
| [Tabellen](https://www.markdownguide.org/extended-syntax/#tables) | Ja, unterstützt aber keine Textausrichtung | 
| Textausrichtung | Ja | 

### Bild und Link werden verwendet URLs
<a name="workflows-urls-readme"></a>

Strukturieren Sie je nach Quellenanbieter Ihre Basis URLs für Seiten und Bilder in den folgenden Formaten.
+ `{username}`: Der Benutzername, unter dem das Repository gehostet wird.
+ `{repo}`: Der Name des Repositorys.
+ `{ref}`: Die Quellreferenz (Branch, Tag und Commit-ID). 
+ `{path}`: Der Dateipfad zur Seite oder zum Bild im Repository. 


| Quellanbieter | Seiten-URL | Bild-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 | 

GitHubGitLab, und Bitbucket unterstützt sowohl Seiten als auch Bilder URLs , die auf ein öffentliches Repository verweisen. Die folgende Tabelle zeigt, wie die einzelnen Quellenanbieter das Rendern von Bildern und Links URLs für private Repositorys unterstützen.


| Unterstützung für private Repositorys | Quellenanbieter | Seiten-URL | Bild-URL | 
| --- | --- | --- | --- | 
| GitHub | Nur mit Zugriff auf das Repository | Nein | 
| GitLab | Nur mit Zugriff auf das Repository | Nein | 
| Bitbucket | Nur mit Zugriff auf das Repository | Nein | 

# Sentieon-Lizenzen für private Workflows anfordern
<a name="private-workflows-subscribe"></a>

Wenn Ihr privater Workflow die Sentieon-Software verwendet, benötigen Sie eine Senieon-Lizenz. Gehen Sie wie folgt vor, um eine Lizenz für die Sentieon-Software anzufordern und einzurichten:
+ Fordern Sie eine Sentieon-Lizenz an 
  + Senden Sie eine E-Mail an die Sentieon-Supportgruppe (support@sentieon.com), um eine Softwarelizenz anzufordern.
    + Geben Sie in der AWS E-Mail Ihre Canonical Benutzer-ID an.
    + [Finden Sie Ihre AWS Canonical-Benutzer-ID, indem Sie diesen Anweisungen folgen.](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)
+ Aktualisieren Sie Ihre HealthOmics Servicerolle, um ihr Zugriff auf den Sentieon-Lizenzserver-Proxy und den Sentieon Omics Bucket in Ihrer Region zu gewähren. Das folgende Beispiel gewährt Zugriff auf. `us-east-1` Falls erforderlich, ersetzen Sie diesen Text durch Ihre Region.

------
#### [ 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/*"
              ]
          }
      ]
   }
  ```

------
+ Generieren Sie eine AWS Support-Anfrage, um Zugriff auf den Sentieon-Lizenzserver-Proxy zu erhalten. 
  + [Um einen Support-Fall zu erstellen, navigieren Sie zu support.console.aws.amazon.com.](https://support.console.aws.amazon.com)
  + Geben Sie im Support-Fall Ihre Region und Ihre Region an AWS-Konto . Ihr Konto wurde der Zulassungsliste für den Lizenzserver-Proxy hinzugefügt.
+ Erstellen Sie Ihren privaten Workflow mithilfe des Sentieon-Containers und des Sentieon-Lizenzskripts.
  + Weitere Anweisungen zur Verwendung von Sentieon-Tools in privaten Workflows finden Sie unter [Sentieon-Amazon-Omics](https://github.com/Sentieon/sentieon-amazon-omics) unter. GitHub
+ Die Sentieon-Softwareversion 202112.07 und höher unterstützen den Lizenzserver-Proxy. HealthOmics Um Sentieon-Softwareversionen vor 202112.07 zu verwenden, wenden Sie sich an den Sentieon-Support.

# Der Arbeitsablauf blinkt ein HealthOmics
<a name="workflows-linter"></a>

Nachdem Sie einen Workflow erstellt haben, empfehlen wir, dass Sie einen Linter für den Workflow ausführen, bevor Sie mit der ersten Ausführung beginnen. Der Linter erkennt Fehler, die dazu führen können, dass der Lauf fehlschlägt. 

Bei WDL HealthOmics wird automatisch ein Linter ausgeführt, wenn Sie den Workflow erstellen. Die Linterausgabe ist im `statusMessage` Feld der Antwort verfügbar. **get-workflow** Verwenden Sie den folgenden CLI-Befehl, um die Statusausgabe abzurufen (verwenden Sie die Workflow-ID des WDL-Workflows, den Sie erstellt haben): 

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

HealthOmics stellt Links bereit, die Sie auf der Workflow-Definition ausführen können, bevor Sie den Workflow erstellen. Führen Sie diese Linter auf vorhandenen Pipelines aus, zu denen Sie migrieren. HealthOmics
+ **WDL**— Ein öffentliches Amazon ECR-Image zum Ausführen eines [WDL-Linters](https://gallery.ecr.aws/aws-genomics/healthomics-linter).
+ **Nextflow**— Ein öffentliches Amazon ECR-Image zur Ausführung von [Linter-Regeln für]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow) Nextflow. Sie können auf den Quellcode für diesen Linter von zugreifen. [GitHub](https://github.com/awslabs/linter-rules-for-nextflow)
+ **CWL**— nicht verfügbar

# HealthOmics Workflow-Operationen
<a name="creating-private-workflows"></a>

Um einen privaten Workflow zu erstellen, benötigen Sie:
+  **Workflow definition file:**Eine inWDL, Nextflow oder geschriebene Workflow-DefinitionsdateiCWL. Die Workflow-Definition spezifiziert die Eingaben und Ausgaben für Läufe, die den Workflow verwenden. Sie enthält auch Spezifikationen für die Ausführungen und Ausführungsaufgaben für Ihren Workflow, einschließlich der Rechen- und Speicheranforderungen. Die Workflow-Definitionsdatei muss `.zip` das Format haben. Weitere Informationen finden Sie unter [Workflow-Definitionsdateien](workflow-definition-files.md) in HealthOmics.
  + Sie können [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) verwenden, um Ihre Workflow-Definitionsdateien in WDL, Nextflow und CWL zu erstellen und zu validieren. Weitere Informationen finden Sie unter [Beispielaufforderungen für Amazon Q CLI](getting-started.md#omics-q-prompts) und im [HealthOmics Agentic Generative AI-Tutorial](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) unter. GitHub
+  **(Optional) Parameter template file:**Eine Parameter-Vorlagendatei, die in geschrieben wurde. JSON Erstellen Sie die Datei, um die Ausführungsparameter zu definieren, oder HealthOmics generiert die Parametervorlage für Sie. Weitere Informationen finden Sie unter [Parametervorlagendateien für HealthOmics Workflows](parameter-templates.md). 
+ **Amazon ECR container images:**Erstellen Sie private Amazon ECR-Repositorys für jeden Container, der im Workflow verwendet wird. Erstellen Sie Container-Images für den Workflow und speichern Sie sie in einem privaten Repository, oder synchronisieren Sie den Inhalt einer unterstützten Upstream-Registrierung mit Ihrem privaten ECR-Repository. 
+  **(Optional) Sentieon licenses:**Fordern Sie eine Sentieon Lizenz an, um die Sentieon Software in privaten Workflows zu verwenden.

Für Workflow-Definitionsdateien, die größer als 4 MiB (gezippt) sind, wählen Sie bei der Workflow-Erstellung eine der folgenden Optionen:
+ Laden Sie in einen Amazon Simple Storage Service-Ordner hoch und geben Sie den Speicherort an.
+ Laden Sie in ein externes Repository hoch (maximale Größe 1 GiB) und geben Sie die Repository-Details an.

Nachdem Sie einen Workflow erstellt haben, können Sie die folgenden Workflow-Informationen mit dem `UpdateWorkflow` Vorgang aktualisieren:
+ Name
+ Description
+ Standard-Speichertyp
+ Standardspeicherkapazität (mit Workflow-ID)
+ README.md-Datei

Um andere Informationen im Workflow zu ändern, erstellen Sie einen neuen Workflow oder eine neue Workflow-Version.

Verwenden Sie die Workflow-Versionierung, um Ihre Workflows zu organisieren und zu strukturieren. Versionen helfen Ihnen auch dabei, die Einführung iterativer Workflow-Updates zu verwalten. Weitere Informationen zu Versionen erhalten Sie unter [Workflow-Version erstellen](workflows-version-create.md).

**Topics**
+ [Erstellen Sie einen privaten Workflow](create-private-workflow.md)
+ [Einen privaten Workflow aktualisieren](update-private-workflow.md)
+ [Löschen Sie einen privaten Workflow](delete-private-workflow.md)
+ [Überprüfen Sie den Workflow-Status](using-get-workflow.md)
+ [Referenzieren von Genomdateien aus einer Workflow-Definition](create-ref-files.md)

# Erstellen Sie einen privaten Workflow
<a name="create-private-workflow"></a>

Erstellen Sie einen Workflow mit der HealthOmics Konsole, AWS CLI-Befehlen oder einem der AWS SDKs.

**Anmerkung**  
Nehmen Sie keine persönlich identifizierbaren Informationen (PII) in Workflow-Namen auf. Diese Namen sind in CloudWatch Protokollen sichtbar.

Wenn Sie einen Workflow erstellen, HealthOmics weist er dem Workflow einen Universally Unique Identifier (UUID) zu. Die Workflow-UUID ist eine GUID (Globally Unique Identifier), die für alle Workflows und Workflow-Versionen eindeutig ist. Aus Gründen der Datenherkunft empfehlen wir, die Workflow-UUID zu verwenden, um Workflows eindeutig zu identifizieren.

Wenn Ihre Workflow-Aufgaben externe Tools (ausführbare Dateien, Bibliotheken oder Skripts) verwenden, bauen Sie diese Tools in ein Container-Image ein. Sie haben die folgenden Optionen für das Hosten des Container-Images:
+ Hosten Sie das Container-Image in der privaten ECR-Registrierung. Voraussetzungen für diese Option:
  + Erstellen Sie ein privates ECR-Repository oder wählen Sie ein vorhandenes Repository aus.
  + Konfigurieren Sie die ECR-Ressourcenrichtlinie wie unter beschrieben. [Amazon-ECR-Berechtigungen](permissions-ecr.md)
  + Laden Sie Ihr Container-Image in das private Repository hoch. 
+ Synchronisieren Sie das Container-Image mit dem Inhalt einer unterstützten Registrierung eines Drittanbieters. Voraussetzungen für diese Option:
  + Konfigurieren Sie in der privaten ECR-Registrierung eine Pull-Through-Cache-Regel für jede Upstream-Registrierung. Weitere Informationen finden Sie unter [Bildzuordnungen](workflows-ecr.md#ecr-pull-through-mapping-format).
  + Konfigurieren Sie die ECR-Ressourcenrichtlinie wie unter beschrieben. [Amazon-ECR-Berechtigungen](permissions-ecr.md)
  + Erstellen Sie Vorlagen für die Repository-Erstellung. Die Vorlage definiert Einstellungen für den Zeitpunkt, zu dem Amazon ECR das private Repository für eine Upstream-Registrierung erstellt.
  + Erstellen Sie Präfixzuordnungen, um Container-Image-Referenzen in der Workflow-Definition den ECR-Cache-Namespaces neu zuzuordnen.

Wenn Sie einen Workflow erstellen, geben Sie eine Workflow-Definition an, die Informationen über den Workflow, die Ausführungen und die Aufgaben enthält. HealthOmics kann die Workflow-Definition als lokal oder in einem Amazon S3 S3-Bucket gespeichertes ZIP-Archiv oder aus einem unterstützten Git-basierten Repository abrufen. 

**Topics**
+ [Einen Workflow mithilfe der Konsole erstellen](#console-create-workflows)
+ [Einen Workflow mit der CLI erstellen](#api-create-workflows)
+ [Einen Workflow mithilfe eines SDK erstellen](#sdk-create-workflows)

## Einen Workflow mithilfe der Konsole erstellen
<a name="console-create-workflows"></a>

**Schritte zum Erstellen eines Workflows**

1. Öffnen Sie die [HealthOmics -Konsole](https://console.aws.amazon.com/omics/).

1.  Öffnen Sie bei Bedarf den linken Navigationsbereich (±1). Wählen Sie **Private Workflows** aus.

1. Wählen Sie auf der Seite **Private Workflows** die Option **Workflow erstellen** aus.

1. Geben Sie auf der Seite **Workflow definieren** die folgenden Informationen ein:

   1. **Workflow-Name**: Ein eindeutiger Name für diesen Workflow. Wir empfehlen, Workflow-Namen festzulegen, um Ihre Läufe in der AWS HealthOmics Konsole und in den CloudWatch Protokollen zu organisieren.

   1. **Beschreibung** (optional): Eine Beschreibung dieses Workflows.

1. Geben Sie im Bereich **Workflow-Definition** die folgenden Informationen ein:

   1. **Workflow-Sprache** (optional): Wählen Sie die Spezifikationssprache des Workflows aus. Andernfalls HealthOmics bestimmt die Sprache anhand der Workflow-Definition.

   1. Wählen Sie **unter Workflow-Definitionsquelle**, ob Sie den Definitionsordner aus einem Git-basierten Repository, einem Amazon S3 S3-Speicherort oder von einem lokalen Laufwerk importieren möchten.

      1. Für den **Import aus einem Repository-Service**:
**Anmerkung**  
HealthOmics unterstützt öffentliche und private Repositorys fürGitHub,GitLab,, BitbucketGitHub self-managed,GitLab self-managed.

         1. Wählen Sie eine **Verbindung**, um Ihre AWS Ressourcen mit dem externen Repository zu verbinden. Informationen zum Herstellen einer Verbindung finden Sie unter[Connect mit externen Code-Repositorys her](setting-up-new.md#setting-up-omics-repository).
**Anmerkung**  
Kunden in der TLV Region müssen eine Verbindung in der Region IAD (us-east-1) herstellen, um einen Workflow zu erstellen. 

         1. Geben Sie unter **Vollständige Repository-ID** Ihre Repository-ID als Benutzername/Repository-Name ein. Stellen Sie sicher, dass Sie Zugriff auf die Dateien in diesem Repository haben.

         1. Geben Sie im Feld **Quellverweis** (optional) eine Repository-Quellenreferenz ein (Branch-, Tag- oder Commit-ID). HealthOmics verwendet den Standardzweig, wenn kein Quellverweis angegeben ist.

         1. Geben Sie im Feld **Dateimuster ausschließen** die Dateimuster ein, um bestimmte Ordner, Dateien oder Erweiterungen auszuschließen. Dies hilft bei der Verwaltung der Datengröße beim Import von Repository-Dateien. Es gibt maximal 50 Muster, und die Muster müssen der [Glob-Pattern-Syntax](https://fossil-scm.org/home/doc/tip/www/globs.md) folgen. Beispiel: 

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. Für **Select Definition Folder aus S3**:

         1. Geben Sie den Amazon S3 S3-Speicherort ein, der den komprimierten Workflow-Definitionsordner enthält. Der Amazon S3 S3-Bucket muss sich in derselben Region wie der Workflow befinden.

         1. Wenn Ihr Konto nicht Eigentümer des Amazon S3 S3-Buckets ist, geben Sie die Konto-ID des Bucket-Besitzers in die AWS Konto-ID des **S3-Bucket-Besitzers ein**. Diese Informationen sind erforderlich, um die Inhaberschaft des Buckets verifizieren zu HealthOmics können.

      1. Für **Wählen Sie den Definitionsordner aus einer lokalen Quelle** aus:

         1. Geben Sie den Speicherort des komprimierten Workflow-Definitionsordners auf dem lokalen Laufwerk ein.

   1. **Haupt-Workflow-Definitionsdateipfad** (optional): Geben Sie den Dateipfad vom komprimierten Workflow-Definitionsordner oder Repository zur `main` Datei ein. Dieser Parameter ist nicht erforderlich, wenn der Workflow-Definitionsordner nur eine Datei enthält oder wenn die Hauptdatei den Namen „main“ hat.

1. Wählen Sie im Bereich **README-Datei** (optional) die **Quelle der README-Datei** aus und geben Sie die folgenden Informationen ein:
   + Geben **Sie für Import aus einem Repository-Service** im Feld **README-Dateipfad den Pfad** zur README-Datei innerhalb des Repositorys ein.
   + Geben **Sie unter Datei aus S3 auswählen** in der **README-Datei in S3** den Amazon S3 S3-URI für die README-Datei ein.
   + Für **Datei aus einer lokalen Quelle auswählen**: Wählen Sie in **README — optional** die Option **Datei auswählen**, um die hochzuladende Markdown-Datei (.md) auszuwählen.

1. Geben Sie im Bereich „**Konfiguration des Standardlaufspeichers**“ den Standardspeichertyp und die Kapazität für Läufe an, die diesen Workflow verwenden:

   1. **Speichertyp ausführen**: Wählen Sie aus, ob statischer oder dynamischer Speicher als Standard für den temporären Laufspeicher verwendet werden soll. Die Standardeinstellung ist statischer Speicher.

   1. **Laufspeicherkapazität** (optional): Für den statischen Laufspeichertyp können Sie die Standardmenge an Laufspeicher eingeben, die für diesen Workflow erforderlich ist. Der Standardwert für diesen Parameter ist 1200 GiB. Sie können diese Standardwerte überschreiben, wenn Sie einen Lauf starten.

1. **Tags** (optional): Sie können diesem Workflow bis zu 50 Tags zuordnen.

1. Wählen Sie **Weiter** aus.

1. Wählen Sie auf der Seite **Workflow-Parameter hinzufügen** (optional) die **Parameterquelle** aus:

   1. Bei **Aus Workflow-Definitionsdatei analysieren**: HealthOmics Analysiert automatisch die Workflow-Parameter aus der Workflow-Definitionsdatei.

   1. Verwenden **Sie für Parametervorlage aus dem Git-Repository bereitstellen** den Pfad zur Parametervorlagendatei aus Ihrem Repository.

   1. Laden **Sie für „JSON-Datei aus lokaler Quelle auswählen**“ eine JSON Datei aus einer lokalen Quelle hoch, die die Parameter angibt.

   1. **Geben Sie für Workflow-Parameter** manuell eingeben die Parameternamen und Beschreibungen manuell ein.

1. Im Bereich **Parametervorschau** können Sie die Parameter für diese Workflow-Version überprüfen oder ändern. Wenn Sie die JSON Datei wiederherstellen, gehen alle lokalen Änderungen verloren, die Sie vorgenommen haben.

1. Wählen Sie **Weiter** aus.

1. Auf der Seite zur **Neuzuweisung von Container-URI** können Sie im Bereich **Zuordnungsregeln Regeln** für die URI-Zuordnung für Ihren Workflow definieren.

   Wählen Sie für **Quelle der Zuordnungsdatei** eine der folgenden Optionen aus:
   + **Keine** — Keine Zuordnungsregeln erforderlich.
   + **JSON-Datei aus S3 auswählen** — Geben Sie den S3-Speicherort für die Zuordnungsdatei an. 
   + **JSON-Datei aus einer lokalen Quelle auswählen** — Geben Sie den Speicherort der Mapping-Datei auf Ihrem lokalen Gerät an.
   + **Zuordnungen manuell eingeben** **— Geben Sie die Registry- und Image-Zuordnungen im Bereich „Zuordnungen“ ein.**

1.  In der Konsole **wird** der Bereich „Zuordnungen“ angezeigt. Wenn Sie eine Mapping-Quelldatei ausgewählt haben, zeigt die Konsole die Werte aus der Datei an.

   1. In **Registrierungszuordnungen** können Sie die Zuordnungen bearbeiten oder Zuordnungen hinzufügen (maximal 20 Registrierungszuordnungen).

      Jede Registrierungszuweisung enthält die folgenden Felder:
      + **Upstream-Registrierungs-URL** — Die URI der Upstream-Registrierung.
      + **ECR-Repository-Präfix** — Das Repository-Präfix, das im privaten Amazon ECR-Repository verwendet werden soll.
      + (Optional) **Upstream-Repository-Präfix** — Das Präfix des Repositorys in der Upstream-Registrierung.
      + (Optional) **ECR-Konto-ID** — Konto-ID des Kontos, dem das Upstream-Container-Image gehört.

   1. In **Image-Zuordnungen** können Sie die Image-Zuordnungen bearbeiten oder Zuordnungen hinzufügen (maximal 100 Image-Zuordnungen).

      Jede Image-Zuordnung enthält die folgenden Felder:
      + **Quellbild** — Gibt den URI des Quellbilds in der Upstream-Registrierung an.
      + **Zielbild** — Gibt den URI des entsprechenden Images in der privaten Amazon ECR-Registrierung an.

1. Wählen Sie **Weiter** aus.

1. Überprüfen Sie die Workflow-Konfiguration und wählen Sie dann **Workflow erstellen**.

## Einen Workflow mit der CLI erstellen
<a name="api-create-workflows"></a>

Wenn sich Ihre Workflow-Dateien und die Parameter-Vorlagendatei auf Ihrem lokalen Computer befinden, können Sie mit dem folgenden CLI-Befehl einen Workflow erstellen. 

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

Der `create-workflow` Vorgang gibt die folgende Antwort zurück:

```
{
  "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"
}
```

### Optionale Parameter, die beim Erstellen eines Workflows verwendet werden können
<a name="other-create-parameters"></a>

Sie können jeden der optionalen Parameter angeben, wenn Sie einen Workflow erstellen. Einzelheiten zur Syntax finden Sie [CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)in der HealthOmics AWS-API-Referenz. 

**Topics**
+ [Geben Sie den Amazon S3 S3-Speicherort der Workflow-Definition an](#create-defn-uri-parameter)
+ [Verwenden Sie die Workflow-Definition aus einem Git-basierten Repository](#create-defn-uri-git)
+ [Geben Sie eine Readme-Datei an](#specify-readme-file)
+ [**main**Geben Sie die Definitionsdatei an](#create-main-parameter)
+ [Geben Sie den Speichertyp für die Ausführung an](#create-run-storage-parameter)
+ [Geben Sie die GPU-Konfiguration an](#create-accelerator-parameter)
+ [Konfigurieren Sie die Parameter für die Zuordnung des Pull-Through-C](#create-prefix-mapping-parameters)

#### Geben Sie den Amazon S3 S3-Speicherort der Workflow-Definition an
<a name="create-defn-uri-parameter"></a>

Wenn sich Ihre Workflow-Definitionsdatei in einem Amazon S3 S3-Ordner befindet, geben Sie den Speicherort mithilfe des `definition-uri` Parameters an, wie im folgenden Beispiel gezeigt. Wenn Ihr Konto nicht Eigentümer des Amazon S3 S3-Buckets ist, geben Sie die AWS-Konto ID des Besitzers an.

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

#### Verwenden Sie die Workflow-Definition aus einem Git-basierten Repository
<a name="create-defn-uri-git"></a>

Um die Workflow-Definition aus einem unterstützten Git-basierten Repository zu verwenden, verwenden Sie den `definition-repository` Parameter in Ihrer Anfrage. Geben Sie keinen anderen `definition` Parameter an, da eine Anfrage fehlschlägt, wenn sie mehr als eine Eingabequelle enthält.

Der `definition-respository` Parameter enthält die folgenden Felder:
+ **connectionArn**— ARN der Code-Verbindung, die Ihre AWS-Ressourcen mit dem externen Repository verbindet.
+ **fullRepositoryId**— Geben Sie die Repository-ID als ein`owner-name/repo-name`. Stellen Sie sicher, dass Sie Zugriff auf die Dateien in diesem Repository haben.
+ **sourceReference**(Optional) — Geben Sie einen Repository-Referenztyp (BRANCH, TAG oder COMMIT) und einen Wert ein.

  HealthOmics verwendet den neuesten Commit für den Standard-Branch, wenn Sie keinen Quellverweis angeben.
+ **excludeFilePatterns**(Optional) — Geben Sie die Dateimuster ein, um bestimmte Ordner, Dateien oder Erweiterungen auszuschließen. Dies hilft bei der Verwaltung der Datengröße beim Import von Repository-Dateien. Geben Sie maximal 50 Muster an. Die Muster müssen der [Glob-Pattern-Syntax](https://fossil-scm.org/home/doc/tip/www/globs.md) folgen. Beispiel:
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Wenn Sie die Workflow-Definition aus einem Git-basierten Repository angeben, verwenden Sie diese Option, `parameter-template-path` um die Parameter-Vorlagendatei anzugeben. Wenn Sie diesen Parameter nicht angeben, HealthOmics wird der Workflow ohne Parametervorlage erstellt.

Das folgende Beispiel zeigt die Parameter, die sich auf Inhalte aus einem Git-basierten privaten Repository beziehen: 

```
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" \
```

Weitere Beispiele finden Sie im Blogbeitrag [So erstellen Sie HealthOmics AWS-Workflows aus Inhalten in Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git).

#### Geben Sie eine Readme-Datei an
<a name="specify-readme-file"></a>

Sie können den Speicherort der README-Datei mit einem der folgenden Parameter angeben:
+ **readme-markdown**— Zeichenketteneingabe oder eine Datei auf Ihrem lokalen Computer. 
+ **readme-uri**— Die URI einer auf S3 gespeicherten Datei. 
+ **readme-path **— Der Pfad zur README-Datei im Repository. 

**Verwenden Sie den Readme-Pfad nur in Verbindung mit definition-respository.** Wenn Sie keinen README-Parameter angeben, wird die README.md-Datei auf Stammebene in das Repository HealthOmics importiert (falls vorhanden).

Die folgenden Beispiele zeigen, wie der Speicherort der README-Datei mithilfe des Readme-Pfads und der Readme-URI angegeben wird.

```
# 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"
```

Weitere Informationen finden Sie unter [HealthOmics Workflow-README-Dateien](workflows-readme.md).

#### **main**Geben Sie die Definitionsdatei an
<a name="create-main-parameter"></a>

Wenn Sie mehrere Workflow-Definitionsdateien einbeziehen, verwenden Sie den `main` Parameter, um die Hauptdefinitionsdatei für Ihren Workflow anzugeben.

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

#### Geben Sie den Speichertyp für die Ausführung an
<a name="create-run-storage-parameter"></a>

Sie können den Standard-Laufspeichertyp (DYNAMIC oder STATIC) und die Run-Speicherkapazität (erforderlich für statischen Speicher) angeben. Weitere Hinweise zu Laufspeichertypen finden Sie unter[Speichertypen in HealthOmics Workflows ausführen](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  \
```

#### Geben Sie die GPU-Konfiguration an
<a name="create-accelerator-parameter"></a>

Verwenden Sie den Accelerators-Parameter, um einen Workflow zu erstellen, der auf einer Accelerated-Compute-Instance ausgeführt wird. Das folgende Beispiel zeigt, wie der Parameter verwendet wird. `accelerators` Sie geben die GPU-Konfiguration in der Workflow-Definition an. Siehe [Instanzen für beschleunigte Datenverarbeitung](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
```

#### Konfigurieren Sie die Parameter für die Zuordnung des Pull-Through-C
<a name="create-prefix-mapping-parameters"></a>

Wenn Sie die Amazon ECR Pull-Through-Cache-Zuordnungsfunktion verwenden, können Sie die Standardzuordnungen überschreiben. Weitere Informationen zu den Container-Einrichtungsparametern finden Sie unter. [Container-Images für private Workflows](workflows-ecr.md)

Im folgenden Beispiel `mappings.json` enthält die Datei diesen Inhalt:

```
{
    "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"
        }
    ]
}
```

Geben Sie die Zuordnungsparameter im Befehl create-workflow an:

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

Sie können auch den S3-Speicherort der Datei mit den Zuordnungsparametern angeben:

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

## Einen Workflow mithilfe eines SDK erstellen
<a name="sdk-create-workflows"></a>

Sie können einen Workflow mit einem der erstellen SDKs. Das folgende Beispiel zeigt, wie ein Workflow mit dem Python-SDK erstellt wird.

```
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={ ... }
)
```

# Einen privaten Workflow aktualisieren
<a name="update-private-workflow"></a>

Sie können einen Workflow über die HealthOmics Konsole, AWS CLI-Befehle oder einen der folgenden aktualisieren AWS SDKs.

**Anmerkung**  
Nehmen Sie keine persönlich identifizierbaren Informationen (PII) in Workflow-Namen auf. Diese Namen sind in CloudWatch Protokollen sichtbar.

**Topics**
+ [Aktualisierung eines Workflows mithilfe der Konsole](#console-update-workflows)
+ [Aktualisieren eines Workflows mit der CLI](#api-update-workflows)
+ [Aktualisierung eines Workflows mithilfe eines SDK](#sdk-update-workflows)

## Aktualisierung eines Workflows mithilfe der Konsole
<a name="console-update-workflows"></a>

**Schritte zum Aktualisieren eines Workflows**

1. Öffnen Sie die [HealthOmics -Konsole](https://console.aws.amazon.com/omics/).

1.  Öffnen Sie bei Bedarf den linken Navigationsbereich (←). Wählen Sie **Private Workflows**.

1. Wählen Sie auf der Seite **Private Workflows** den Workflow aus, der aktualisiert werden soll.

1. Auf der **Workflow-Seite**:
   + Wenn der Workflow Versionen hat, stellen Sie sicher, dass Sie die **Standardversion** auswählen.
   + Wählen Sie in der Liste **Aktionen** die **Option Ausgewählte Bearbeitung** aus. 

1. Auf der Seite **„Workflow bearbeiten**“ können Sie jeden der folgenden Werte ändern:
   + **Name des Workflows**.
   + **Beschreibung des Workflows**.
   + Der standardmäßige **Run-Speichertyp** für den Workflow.
   + Die standardmäßige **Run-Speicherkapazität** (wenn der Run-Speichertyp statischer Speicher ist). Weitere Informationen zur standardmäßigen Run-Speicherkonfiguration finden Sie unter[Einen Workflow mithilfe der Konsole erstellen](create-private-workflow.md#console-create-workflows).

1. Wählen Sie **Änderungen speichern**, um die Änderungen zu übernehmen.

## Aktualisieren eines Workflows mit der CLI
<a name="api-update-workflows"></a>

Wie im folgenden Beispiel gezeigt, können Sie den Namen und die Beschreibung des Workflows aktualisieren. Sie können auch den Standard-Laufspeichertyp (STATIC oder DYNAMIC) und die Run-Speicherkapazität (für den statischen Speichertyp) ändern. Weitere Informationen zu Laufspeichertypen finden Sie unter[Speichertypen in HealthOmics Workflows ausführen](workflows-run-types.md).

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

Sie erhalten keine Antwort auf die `update-workflow` Anfrage.

## Aktualisierung eines Workflows mithilfe eines SDK
<a name="sdk-update-workflows"></a>

Sie können einen Workflow mit einem der aktualisieren SDKs.

Das folgende Beispiel zeigt, wie ein Workflow mit dem Python-SDK aktualisiert wird.

```
import boto3

omics = boto3.client('omics')

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

# Löschen Sie einen privaten Workflow
<a name="delete-private-workflow"></a>

Wenn Sie einen Workflow nicht mehr benötigen, können Sie ihn mit der HealthOmics Konsole, AWS CLI-Befehlen oder einem der folgenden Befehle löschen AWS SDKs. Sie können einen Workflow löschen, der die folgenden Kriterien erfüllt:
+ Sein Status ist AKTIV oder FEHLGESCHLAGEN.
+ Es hat keine aktiven Aktien. 
+ Sie haben alle Workflow-Versionen gelöscht.

Das Löschen eines Workflows hat keine Auswirkungen auf laufende Läufe, die den Workflow verwenden.

**Topics**
+ [Löschen eines Workflows mithilfe der Konsole](#console-delete-workflows)
+ [Löschen eines Workflows mit der CLI](#api-delete-workflows)
+ [Löschen eines Workflows mithilfe eines SDK](#sdk-delete-workflows)

## Löschen eines Workflows mithilfe der Konsole
<a name="console-delete-workflows"></a>

**Um einen Workflow zu löschen**

1. Öffnen Sie die [HealthOmics -Konsole](https://console.aws.amazon.com/omics/).

1.  Öffnen Sie bei Bedarf den linken Navigationsbereich (←). Wählen Sie **Private Workflows** aus.

1. Wählen Sie auf der Seite **Private Workflows** den zu löschenden Workflow aus.

1. Wählen Sie auf der **Workflow-Seite** in der Liste **Aktionen** die **Option Ausgewählte löschen** aus.

1. Geben **Sie im Workflow-Modal „Löschen**“ „Bestätigen“ ein, um den Löschvorgang zu bestätigen.

1. Wählen Sie **Löschen** aus.

## Löschen eines Workflows mit der CLI
<a name="api-delete-workflows"></a>

Das folgende Beispiel zeigt, wie Sie den AWS CLI Befehl verwenden können, um einen Workflow zu löschen. Um das Beispiel auszuführen, ersetzen Sie den `workflow id` durch die ID des Workflows, den Sie löschen möchten. 

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

HealthOmics sendet keine Antwort auf die `delete-workflow` Anfrage. 

## Löschen eines Workflows mithilfe eines SDK
<a name="sdk-delete-workflows"></a>

Sie können einen Workflow mit einem der löschen SDKs.

Das folgende Beispiel zeigt, wie ein Workflow mit dem Python-SDK gelöscht wird.

```
import boto3

omics = boto3.client('omics')

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

# Überprüfen Sie den Workflow-Status
<a name="using-get-workflow"></a>

Nachdem Sie Ihren Workflow erstellt haben, können Sie den Status überprüfen und weitere Details des Workflows mithilfe von **get-workflow** anzeigen, wie in der Abbildung gezeigt.

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

Die Antwort enthält Workflow-Details, einschließlich des Status, wie in der Abbildung gezeigt.

```
{
    "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"   
  }
```

Sie können mit diesem Workflow einen Lauf starten, nachdem der Status zu gewechselt ist`ACTIVE`.

# Referenzieren von Genomdateien aus einer Workflow-Definition
<a name="create-ref-files"></a>

Auf ein HealthOmics Referenzspeicherobjekt kann mit einem URI wie dem folgenden verwiesen werden. Verwenden Sie Ihre eigenen`account ID`,`reference store ID`, und `reference ID` wo angegeben.

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

Für einige Workflows sind `SOURCE` sowohl die als auch die `INDEX` Dateien für das Referenzgenom erforderlich. Der vorherige URI ist die Standardkurzform und wird standardmäßig auf die SOURCE-Datei gesetzt. Um eine der beiden Dateien anzugeben, können Sie die lange URI-Form wie folgt verwenden.

```
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
```

Die Verwendung eines Sequence-Readesets hätte ein ähnliches Muster, wie hier gezeigt.

```
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
```

Einige Lesesätze, z. B. solche, die auf FASTQ basieren, können gepaarte Lesesätze enthalten. In den folgenden Beispielen werden sie als SOURCE1 und SOURCE2 bezeichnet. Formate wie BAM und CRAM enthalten nur eine SOURCE1 Datei. Einige Lesesätze enthalten INDEX-Dateien wie `bai` ODER-Dateien. `crai` Der vorhergehende URI ist die Standardkurzform und verwendet standardmäßig die SOURCE1 Datei. Um die genaue Datei oder den Index anzugeben, können Sie die lange URI-Form wie folgt verwenden.

```
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
```

Im Folgenden finden Sie ein Beispiel für eine JSON-Eingabedatei, die zwei Omics Storage URIs verwendet.

```
{
   "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>"
}
```

Verweisen Sie auf die JSON-Eingabedatei in, AWS CLI indem Sie sie `--inputs file://<input_file.json>` zu Ihrer **Start-Run-Anforderung** hinzufügen. 