

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Création de flux de travail privés dans HealthOmics
<a name="workflows-setup"></a>

Les *flux de travail privés* dépendent de diverses ressources que vous créez et configurez avant de créer le flux de travail :
+ **Workflow definition file:**Un fichier de définition de flux de travail écrit en WDLNextflow, ouCWL. La définition du flux de travail spécifie les entrées et les sorties pour les exécutions qui utilisent le flux de travail. Il inclut également des spécifications pour les exécutions et les tâches d'exécution pour votre flux de travail, y compris les exigences en matière de calcul et de mémoire. Le fichier de définition du flux de travail doit être au `.zip` format. Pour plus d'informations, consultez la section [Fichiers de définition du flux](workflow-definition-files.md) de travail.
  + Vous pouvez utiliser [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) pour créer et valider vos fichiers de définition de flux de travail dans WDL, Nextflow et CWL. Pour plus d'informations, consultez les [exemples d'instructions pour Amazon Q CLI](getting-started.md#omics-q-prompts) et le didacticiel [HealthOmics Agentic Generative AI](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) sur. GitHub
+ **(Optional) Parameter template file:**Un fichier de modèle de paramètres écrit enJSON. Créez le fichier pour définir les paramètres d'exécution ou HealthOmics générez le modèle de paramètres pour vous. Pour plus d'informations, consultez la section [Fichiers modèles de paramètres pour les HealthOmics flux de travail](parameter-templates.md).
+ **Amazon ECR container images:**Créez un référentiel Amazon ECR privé pour le flux de travail. Créez des images de conteneur dans le référentiel privé ou synchronisez le contenu d'un registre en amont pris en charge avec votre référentiel privé Amazon ECR.
+ **(Optional) Sentieon licenses:**Demandez une Sentieon licence pour utiliser le Sentieon logiciel dans des flux de travail privés.

Vous pouvez éventuellement exécuter un linter sur la définition du flux de travail avant ou après sa création. La **linter** rubrique décrit les linters disponibles dans. HealthOmics

**Topics**
+ [HealthOmics intégration du flux de travail avec les référentiels basés sur Git](workflows-git-integration.md)
+ [Fichiers de définition du flux de travail dans HealthOmics](workflow-definition-files.md)
+ [Fichiers modèles de paramètres pour les HealthOmics flux de travail](parameter-templates.md)
+ [Images de conteneur pour les flux de travail privés](workflows-ecr.md)
+ [HealthOmics Fichiers README du flux de travail](workflows-readme.md)
+ [Demande de licences Sentieon pour des flux de travail privés](private-workflows-subscribe.md)
+ [Linters de flux de travail dans HealthOmics](workflows-linter.md)
+ [HealthOmics opérations de flux de travail](creating-private-workflows.md)

# HealthOmics intégration du flux de travail avec les référentiels basés sur Git
<a name="workflows-git-integration"></a>

Lorsque vous créez un flux de travail (ou une version de flux de travail), vous fournissez une définition de flux de travail pour spécifier les informations relatives au flux de travail, aux exécutions et aux tâches. HealthOmics peut récupérer la définition du flux de travail sous forme d'archive .zip (stockée localement ou dans un compartiment Amazon S3) ou à partir d'un référentiel Git compatible.

L' HealthOmics intégration avec les référentiels basés sur Git permet les fonctionnalités suivantes :
+ Création directe de flux de travail à partir d'instances publiques, privées et autogérées.
+ Intégration de fichiers README de flux de travail et de modèles de paramètres à partir de référentiels.
+ Support pour GitHub GitLab, et les référentiels Bitbucket.

En utilisant un référentiel basé sur Git, vous évitez les étapes manuelles consistant à télécharger des fichiers de définition de flux de travail et des fichiers de modèles de paramètres d'entrée, à créer une archive .zip, puis à transférer l'archive vers S3. Cela simplifie la création de flux de travail pour des scénarios tels que les exemples suivants :

1. Vous souhaitez commencer rapidement à utiliser un flux de travail open source courant, tel que nf-core. HealthOmicsrécupère automatiquement tous les fichiers de définition de flux de travail et de modèles de paramètres d'entrée à partir du référentiel nf-core GitHub et utilise ces fichiers pour créer votre nouveau flux de travail.

1. Vous utilisez un flux de travail public depuis GitHub, et de nouvelles mises à jour sont disponibles. Vous pouvez facilement créer une nouvelle version de HealthOmics flux de travail en utilisant la définition de flux de travail mise à jour GitHub comme source. Les utilisateurs de votre flux de travail peuvent choisir entre le flux de travail d'origine ou la nouvelle version de flux de travail que vous avez créée.

1. Votre équipe est en train de créer un pipeline propriétaire qui n'est pas public. Vous conservez votre code dans un dépôt git privé et vous utilisez cette définition de flux de travail pour vos HealthOmics flux de travail. L'équipe met fréquemment à jour la définition du flux de travail dans le cadre d'un cycle de développement itératif du flux de travail. Vous pouvez facilement créer de nouvelles versions de flux de travail selon les besoins à partir de votre référentiel privé.

**Topics**
+ [Référentiels basés sur Git pris en charge](#workflows-git-supported)
+ [Configuration des connexions aux référentiels de code externes](#workflows-git-connections)
+ [Accès aux référentiels autogérés](#workflows-git-self-managed)
+ [Quotas liés aux référentiels de code externes](#workflows-git-quotas)
+ [Autorisations IAM requises](#workflows-git-permissions)

## Référentiels basés sur Git pris en charge
<a name="workflows-git-supported"></a>

HealthOmics prend en charge les référentiels publics et privés pour les fournisseurs Git suivants :
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics prend en charge les référentiels autogérés pour les fournisseurs Git suivants :
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics prend en charge l'utilisation de connexions entre comptes pour GitHub GitLab, et Bitbucket. Configurez des autorisations partagées via AWS Resource Access Manager. Pour un exemple, voir [Connexions partagées](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html) dans le *guide de CodePipeline l'utilisateur*.

## Configuration des connexions aux référentiels de code externes
<a name="workflows-git-connections"></a>

Connectez vos flux de travail à des référentiels basés sur Git à l'aide d'AWS. CodeConnection HealthOmics utilise cette connexion pour accéder à vos référentiels de code source.

**Note**  
Le CodeConnections service AWS n'est pas disponible dans la région il-central-1. Pour cette région, configurez le service us-east-1 pour créer des flux de travail ou des versions de flux de travail à partir d'un référentiel. 

### Créez une connexion
<a name="workflows-git-connection-create"></a>

Avant de créer des connexions, suivez les instructions de la section [Configuration des connexions](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html) du *Guide de l'utilisateur des outils de la Developer Console*. 

Pour créer une connexion, suivez les instructions de la section [Créer une connexion](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html) du *Guide de l'utilisateur des outils de la Developer Console*. 

### Configurer l'autorisation pour la connexion
<a name="workflows-git-connection-create"></a>

Vous devez autoriser la connexion en utilisant le OAuth flux du fournisseur. Assurez-vous que l'état de la connexion est `AVAILABLE` correct avant de l'utiliser.

Pour des exemples, consultez le billet de blog [Comment créer un AWS HealthOmics flux de travail à partir du contenu dans Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git). 

## Accès aux référentiels autogérés
<a name="workflows-git-self-managed"></a>

Pour configurer des connexions à un référentiel GitLab autogéré, utilisez un jeton d'accès personnel d'administrateur lors de la création d'un hôte. La création de connexion suivante permet d'accéder à Oauth avec le compte du client.

L'exemple suivant établit une connexion à un référentiel GitLab autogéré :

1. Configurez l'accès au jeton d'accès personnel d'un utilisateur administrateur.

   Pour configurer un PAT dans un référentiel GitLab autogéré, voir [Jetons d'accès personnels](https://docs.gitlab.com/user/profile/personal_access_tokens/) dans *GitLab Docs*.

1. Création d'un hôte

   1. Accédez à **CodePipeline>Paramètres>Connexions**.

   1. Choisissez l'onglet **Hosts**, puis **Create Host**.

   1. Configurez les champs suivants :
      + Entrez le nom de l'hôte
      + Pour le type de fournisseur, choisissez **GitLab Self Managed**
      + Entrez l'**URL de l'hôte** 
      + Entrez les informations du VPC si l'hôte est défini dans un VPC

   1. Choisissez **Create Host**, ce qui crée l'hôte dans l'état PENDING.

   1. Pour terminer la configuration, choisissez **Set up Host**.

   1. Entrez le jeton d'accès personnel (PAT) d'un utilisateur administrateur, puis choisissez **Continuer**. 

1. Créez la connexion

   1. Choisissez **Créer des connexions** dans l'onglet **Connexions**.

   1. Pour le type de fournisseur, sélectionnez **GitLab Autogéré**.

   1. Sous **Paramètres de connexion > Entrez le nom de la connexion**, entrez l'URL de l'hôte que vous avez créée précédemment.

   1. Si votre instance GitLab autogérée est uniquement accessible via un VPC, configurez les détails du VPC.

   1. Choisissez **Mettre à jour la connexion en attente**. La fenêtre modale vous redirige vers la page de GitLab connexion.

   1. Entrez le nom d'utilisateur et le mot de passe du compte client et terminez le processus d'autorisation.

   1.  Pour la première configuration, choisissez **Authorize AWS Connector for Gitlab Self Managed**.

## Quotas liés aux référentiels de code externes
<a name="workflows-git-quotas"></a>

Pour HealthOmics l'intégration avec des référentiels de code externes, il existe une taille maximale pour un référentiel, chaque fichier de référentiel et chaque fichier README. Pour en savoir plus, consultez [HealthOmics quotas de taille fixe du flux de travail](fixed-quotas.md#fixed-quotas-workflows).

## Autorisations IAM requises
<a name="workflows-git-permissions"></a>

Ajoutez les actions suivantes à votre politique IAM basée sur l'identité :

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

# Fichiers de définition du flux de travail dans HealthOmics
<a name="workflow-definition-files"></a>

Vous utilisez une définition de flux de travail pour spécifier des informations sur le flux de travail, les exécutions et les tâches des exécutions. Vous créez des définitions de flux de travail dans un ou plusieurs fichiers à l'aide d'un langage de définition de flux de travail. HealthOmics prend en charge les définitions de flux de travail écrites en WDL, Nextflow ou CWL. 

HealthOmics prend en charge les choix suivants pour les définitions de flux de travail WDL : 
+ WDL — Fournit un moteur WDL conforme aux spécifications. 
+ WDL lenient — Conçu pour gérer les flux de travail migrés depuis Cromwell. Il prend en charge les directives Cromwell du client et certaines logiques non conformes. Pour en savoir plus, consultez [Conversion de type implicite dans WDL Lenient](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Pour plus d'informations sur chacune des langues du flux de travail, consultez les sections détaillées spécifiques à chaque langue ci-dessous.

Vous spécifiez les types d'informations suivants dans la définition du flux de travail :
+ **Language version**— La langue et la version de la définition du flux de travail.
+ **Compute and memory**— Les besoins en calcul et en mémoire pour les tâches du flux de travail.
+ **Inputs**— Emplacement des entrées pour les tâches du flux de travail. Pour de plus amples informations, veuillez consulter [HealthOmics exécuter les entrées](workflows-run-inputs.md).
+ **Outputs**— Emplacement pour enregistrer les résultats générés par les tâches.
+ **Task resources**— Besoins en calcul et en mémoire pour chaque tâche.
+ **Accelerators**— les autres ressources requises par les tâches, telles que les accélérateurs.

**Topics**
+ [HealthOmics exigences de définition du flux de travail](workflow-defn-requirements.md)
+ [Support de version pour les langages HealthOmics de définition des flux de travail](workflows-lang-versions.md)
+ [Exigences en matière de calcul et de mémoire pour les HealthOmics tâches](memory-and-compute-tasks.md)
+ [Résultats des tâches dans une définition HealthOmics de flux de travail](workflows-task-outputs.md)
+ [Ressources de tâches dans une définition HealthOmics de flux de travail](task-resources.md)
+ [Accélérateurs de tâches dans une définition de HealthOmics flux de travail](task-accelerators.md)
+ [Spécificités de définition du flux de travail WDL](workflow-languages-wdl.md)
+ [Caractéristiques de la définition du flux de travail Nextflow](workflow-definition-nextflow.md)
+ [Spécificités de définition du flux de travail CWL](workflow-languages-cwl.md)
+ [Exemples de définitions de flux de travail](workflow-definition-examples.md)

# HealthOmics exigences de définition du flux de travail
<a name="workflow-defn-requirements"></a>

Les fichiers HealthOmics de définition du flux de travail doivent répondre aux exigences suivantes :
+ Les tâches doivent définir input/output les paramètres, les référentiels de conteneurs Amazon ECR et les spécifications d'exécution telles que l'allocation de mémoire ou de CPU.
+ Vérifiez que vos rôles IAM disposent des autorisations requises.<a name="lower"></a>
  + Votre flux de travail a accès aux données d'entrée provenant de AWS ressources, telles qu'Amazon S3. 
  + Votre flux de travail a accès à des services de référentiel externes en cas de besoin.
+ Déclarez les fichiers de sortie dans la définition du flux de travail. Pour copier des fichiers d'exécution intermédiaires vers l'emplacement de sortie, déclarez-les en tant que sorties de flux de travail. 
+ Les emplacements d'entrée et de sortie doivent se trouver dans la même région que le flux de travail. 
+ HealthOmics les entrées du flux de travail de stockage doivent être en `ACTIVE` état. HealthOmics n'importera pas les entrées avec un `ARCHIVED` statut, ce qui entraînera l'échec du flux de travail. Pour plus d'informations sur les entrées d'objets Amazon S3, consultez[HealthOmics exécuter les entrées](workflows-run-inputs.md).
+ L'**main**emplacement du flux de travail est facultatif si votre archive ZIP contient une seule définition de flux de travail ou un fichier nommé « principal ».<a name="lower"></a>
  + Exemple de chemin : `workflow-definition/main-file.wdl`
+ Avant de créer un flux de travail à partir d'Amazon S3 ou de votre disque local, créez une archive zip contenant les fichiers de définition du flux de travail et toutes les dépendances, telles que les sous-flux de travail.
+ Nous vous recommandons de déclarer les conteneurs Amazon ECR dans le flux de travail comme paramètres d'entrée pour la validation des autorisations Amazon ECR. 

Autres considérations relatives à Nextflow :
+ **/bin**

  Les définitions de flux de travail Nextflow peuvent inclure un dossier /bin contenant des scripts exécutables. Ce chemin dispose d'un accès en lecture seule et d'un accès exécutable aux tâches. Les tâches qui s'appuient sur ces scripts doivent utiliser un conteneur créé avec les interpréteurs de script appropriés. La meilleure pratique consiste à appeler directement l'interprète. Par exemple :

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

  Les définitions de flux de travail basées sur Nextflow peuvent inclure des fichiers nextflow.config qui permettent d'abstraire les définitions de paramètres ou de traiter les profils de ressources. Pour prendre en charge le développement et l'exécution de pipelines Nextflow sur plusieurs environnements, utilisez une configuration HealthOmics spécifique que vous ajoutez à la configuration globale à l'aide de la directive IncludeConfig. Pour garantir la portabilité, configurez le flux de travail pour inclure le fichier uniquement lors de son exécution en HealthOmics utilisant le code suivant :

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

  HealthOmics ne prend pas en charge les rapports DAG, de trace et d'exécution générés par le moteur. Vous pouvez générer des alternatives aux rapports de suivi et d'exécution à l'aide d'une combinaison GetRun d'appels d' GetRunTask API. 

Autres considérations relatives au CWL :
+ **Container image uri interpolation**

  HealthOmics permet à la propriété DockerPull du d' DockerRequirement être une expression javascript en ligne. Par exemple :

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

  Cela vous permet de spécifier l'image du conteneur URIs comme paramètre d'entrée du flux de travail.
+ **Javascript expressions**

  Les expressions Javascript doivent être `strict mode` conformes.
+ **Operation process**

  HealthOmics ne prend pas en charge les processus d'opération CWL.

# Support de version pour les langages HealthOmics de définition des flux de travail
<a name="workflows-lang-versions"></a>

HealthOmics prend en charge les fichiers de définition de flux de travail écrits en Nextflow, WDL ou CWL. Les sections suivantes fournissent des informations sur HealthOmics la prise en charge des versions pour ces langues.

**Topics**
+ [Support des versions WDL](#workflows-lang-versions-WDL)
+ [Support de la version CWL](#workflows-lang-versions-CWL)
+ [Support de la version Nextflow](#workflows-lang-versions-nextflow)

## Support des versions WDL
<a name="workflows-lang-versions-WDL"></a>

HealthOmics prend en charge les versions 1.0, 1.1 et la version de développement de la spécification WDL.

Chaque document WDL doit inclure une déclaration de version pour spécifier la version (majeure et mineure) de la spécification à laquelle il adhère. Pour plus d'informations sur les versions, voir Gestion des versions [WDL](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

Les versions 1.0 et 1.1 de la spécification WDL ne prennent pas en charge ce `Directory` type. Pour utiliser le `Directory` type pour les entrées ou les sorties, définissez la **development** version sur la première ligne du fichier :

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

## Support de la version CWL
<a name="workflows-lang-versions-CWL"></a>

HealthOmics supporte les versions 1.0, 1.1 et 1.2 du langage CWL.

Vous pouvez spécifier la version linguistique dans le fichier de définition du flux de travail CWL. Pour plus d'informations sur CWL, consultez le guide de l'utilisateur de [CWL](https://github.com/common-workflow-language/user_guide)

## Support de la version Nextflow
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics supporte trois versions stables de Nextflow. Nextflow publie généralement une version stable tous les six mois. HealthOmics ne prend pas en charge les versions mensuelles « Edge ».

HealthOmics prend en charge les fonctionnalités publiées dans chaque version, mais pas les fonctionnalités de prévisualisation.

### Versions prises en charge
<a name="workflows-versions-nextflow-list"></a>

HealthOmics prend en charge les versions suivantes de Nextflow :
+ Nextflow v22.04.01 DSL 1 et DSL 2
+ Nextflow v23.10.0 DSL 2 (par défaut)
+ Nextflow v24.10.8 DSL 2

Pour migrer votre flux de travail vers la dernière version prise en charge (v24.10.8), suivez le guide de mise à niveau de [Nextflow](https://nextflow.io/docs/latest/migrations/24-10.html).

La migration de Nextflow v23 vers v24 entraîne des modifications majeures, comme décrit dans les sections suivantes du guide de migration de Nextflow :
+ [Changements les plus marquants de la version 24.04](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [Changements majeurs dans la version 24.10](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Détecter et traiter les versions de Nextflow
<a name="workflows-versions-processing"></a>

HealthOmics détecte la version DSL et la version Nextflow que vous spécifiez. Il détermine automatiquement la meilleure version de Nextflow à exécuter en fonction de ces entrées.

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

HealthOmics détecte la version DSL demandée dans votre fichier de définition de flux de travail. Par exemple, vous pouvez spécifier :`nextflow.enable.dsl=2`.

HealthOmics prend en charge le DSL 2 par défaut. Il fournit une rétrocompatibilité avec DSL 1, si cela est spécifié dans le fichier de définition de votre flux de travail.
+ Si vous spécifiez DSL 2, HealthOmics exécute Nextflow v23.10.0, sauf si vous spécifiez Nextflow v22.04.0 ou v24.10.8.
+ Si vous spécifiez DSL 1, HealthOmics exécute Nextflow v22.04 DSL1 (la seule version prise en charge qui exécute DSL 1).
+ Si vous ne spécifiez pas de version DSL, ou si HealthOmics vous ne parvenez pas à analyser les informations DSL pour quelque raison que ce soit (par exemple, des erreurs de syntaxe dans le fichier de définition de votre flux de travail), utilisez HealthOmics par défaut DSL 2 et exécutez Nextflow v23.10.0.
+ Pour mettre à niveau votre flux de travail du DSL 1 au DSL 2 afin de tirer parti des dernières versions et fonctionnalités logicielles de Nextflow, voir [Migration](https://nextflow.io/docs/latest/dsl1.html) depuis DSL 1.

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

HealthOmics détecte la version de Nextflow demandée dans le fichier de configuration de Nextflow (nextflow.config), si vous fournissez ce fichier. Nous vous recommandons d'ajouter la `nextflowVersion` clause à la fin du fichier pour éviter tout remplacement inattendu des configurations incluses. Pour plus d'informations, consultez la section [Configuration de Nextflow](https://nextflow.io/docs/latest/config.html).

Vous pouvez spécifier une version de Nextflow ou une série de versions à l'aide de la syntaxe suivante :

```
   // 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 traite les informations de version de Nextflow comme suit : 
+ Si vous spécifiez une version exacte qui HealthOmics prend en charge, HealthOmics utilise cette version. **=** 
+ Si vous **\$1** spécifiez une version exacte ou une plage de versions qui ne sont pas prises en charge, HealthOmics déclenche une exception et échoue. Envisagez d'utiliser cette option si vous souhaitez être strict en ce qui concerne les demandes de version et échouer rapidement si la demande inclut des versions non prises en charge.
+ Si vous spécifiez une plage de versions, HealthOmics utilise la dernière version prise en charge dans cette plage, sauf si la plage inclut la version 24.10.8. Dans ce cas, HealthOmics donne la préférence à une version antérieure. Par exemple, si la plage couvre à la fois les versions 23.10.0 et 24.10.8, choisissez la version 23.10.0. HealthOmics 
+ S'il n'existe aucune version demandée, ou si les versions demandées ne sont pas valides ou ne peuvent pas être analysées pour une quelconque raison :
  + Si vous avez spécifié DSL 1, HealthOmics exécute Nextflow v22.04.
  + Sinon, HealthOmics exécute Nextflow v23.10.0.

 Vous pouvez récupérer les informations suivantes concernant la version de Nextflow HealthOmics utilisée pour chaque exécution :
+ Les journaux d'exécution contiennent des informations sur la version réelle de Nextflow HealthOmics utilisée pour l'exécution.
+ HealthOmics ajoute des avertissements dans les journaux d'exécution s'il n'y a pas de correspondance directe avec la version demandée ou s'il est nécessaire d'utiliser une version différente de celle que vous avez spécifiée.
+ La réponse à l'opération d'**GetRun**API inclut un champ (`engineVersion`) avec la version réelle de Nextflow HealthOmics utilisée pour l'exécution. Par exemple :

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

# Exigences en matière de calcul et de mémoire pour les HealthOmics tâches
<a name="memory-and-compute-tasks"></a>

HealthOmics exécute vos tâches de flux de travail privées dans une instance omics. HealthOmics fournit une variété de types d'instances pour s'adapter à différents types de tâches. Chaque type d'instance possède une configuration de mémoire et de vCPU fixes (et une configuration GPU fixe pour les types d'instances de calcul accéléré). Le coût d'utilisation d'une instance omics varie en fonction du type d'instance. Pour plus de détails, consultez la page de [HealthOmics tarification](https://aws.amazon.com/healthomics/pricing/).

Pour les tâches d'un flux de travail, vous spécifiez la mémoire requise et la valeur v CPUs dans le fichier de définition du flux de travail. Lorsqu'une tâche de flux de travail s'exécute, HealthOmics alloue la plus petite instance omics pouvant accueillir la mémoire demandée et v. CPUs Par exemple, si une tâche nécessite 64 GiB de mémoire et 8 VCPUs, HealthOmics sélectionne. `omics.r.2xlarge`

Nous vous recommandons de passer en revue les types d'instances et de définir le v CPUs et la taille de mémoire demandés pour correspondre à l'instance qui répond le mieux à vos besoins. Le conteneur de tâches utilise le nombre de v CPUs et la taille de mémoire que vous spécifiez dans le fichier de définition de votre flux de travail, même si le type d'instance dispose de v CPUs et de mémoire supplémentaires. 

La liste suivante contient des informations supplémentaires sur les vCPU et l'allocation de mémoire :
+ Les allocations de ressources aux conteneurs sont des limites strictes. Si une tâche manque de mémoire ou tente d'utiliser un v supplémentaireCPUs , la tâche génère un journal des erreurs et s'arrête.
+ Si vous ne spécifiez aucune exigence en termes de calcul ou de mémoire HealthOmics , **omics.c.large** sélectionnez et utilisez par défaut une configuration avec 1 vCPU et 1 GiB de mémoire.
+ La configuration minimale que vous pouvez demander est de 1 vCPU et 1 GiB de mémoire. 
+ Si vous spécifiez vCPUs, memory ou GPUs une valeur supérieure aux types d'instance pris en charge, un message d' HealthOmics erreur s'affiche et le flux de travail échoue aux validations
+ Si vous spécifiez des unités fractionnaires, HealthOmics arrondissez à l'entier supérieur le plus proche.
+ HealthOmics réserve une petite quantité de mémoire (5 %) aux agents de gestion et de journalisation, de sorte que l'allocation de mémoire complète peut ne pas toujours être disponible pour l'application associée à la tâche.
+ HealthOmics fait correspondre les types d'instances aux exigences de calcul et de mémoire que vous spécifiez, et peut utiliser une combinaison de générations matérielles. Pour cette raison, il peut y avoir des variations mineures dans les durées d'exécution des tâches pour une même tâche.

Ces rubriques fournissent des informations détaillées sur les types d'instances pris HealthOmics en charge. 

**Topics**
+ [Types d'instances standard](#workflow-task-standard-instances)
+ [Instances optimisées pour le calcul](#workflow-task-compute-optimized-instances)
+ [Instances optimisées pour la mémoire](#workflow-task-memory-optimized-instances)
+ [Instances de calcul accéléré](#workflow-task-accelerated-computing-instances)

**Note**  
 Pour les instances standard, optimisées pour le calcul et la mémoire, augmentez la taille de bande passante de l'instance si celle-ci nécessite un débit plus élevé. Les instances Amazon EC2 dotées de moins de 16 vCPU (taille 4xl ou inférieure) peuvent connaître des pics de débit. Pour plus d'informations sur le débit des instances Amazon EC2, consultez la section Bande passante disponible pour les instances [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Types d'instances standard
<a name="workflow-task-standard-instances"></a>

Pour les types d'instances standard, les configurations visent à trouver un équilibre entre la puissance de calcul et la mémoire. 

HealthOmics prend en charge les instances 32xlarge et 48xlarge dans les régions suivantes : USA Ouest (Oregon) et USA Est (Virginie du Nord).


| Instance | Numéro de v CPUs | Mémoire | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiO | 
| omics.m.xlarge | 4 | 16 GiO | 
| omics.m.2xlarge | 8 | 32 GiO | 
| omics.m.4xlarge | 16 | 64 Go | 
| omics.m.8xlarge | 32 | 128 Gio | 
| omics.m. 12 x large | 48 | 192 Go | 
| omics.m. 16 x large | 64 | 256 Gio | 
| omics.m. 24 x large | 96 | 384 Go | 
| omics.m. 32 x large | 128 | 512 Gio | 
| omics.m. 48 x large | 192 | 768 Gio | 

## Instances optimisées pour le calcul
<a name="workflow-task-compute-optimized-instances"></a>

Pour les types d'instances optimisés pour le calcul, les configurations ont plus de puissance de calcul et moins de mémoire.

HealthOmics prend en charge les instances 32xlarge et 48xlarge dans les régions suivantes : USA Ouest (Oregon) et USA Est (Virginie du Nord).


| Instance | Numéro de v CPUs | Mémoire | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiO | 
| omics.c.2 x large | 8 | 16 GiO | 
| omics.c.4 x large | 16 | 32 GiO | 
| omics.c.8xlarge | 32 | 64 Go | 
| omics.c. 12 x large | 48 | 96 GiB | 
| omics.c. 16 x large | 64 | 128 Gio | 
| omics.c. 24 x large | 96 | 192 Go | 
| omics.c. 32 x large | 128 | 256 Gio | 
| omics.c. 48 x large | 192 | 384 Go | 

## Instances optimisées pour la mémoire
<a name="workflow-task-memory-optimized-instances"></a>

Pour les types d'instances optimisés pour la mémoire, les configurations disposent de moins de puissance de calcul et de plus de mémoire.

HealthOmics prend en charge les instances 32xlarge et 48xlarge dans les régions suivantes : USA Ouest (Oregon) et USA Est (Virginie du Nord).


| Instance | Numéro de v CPUs | Mémoire | 
| --- | --- | --- | 
| omics s.r.large | 2 | 16 GiO | 
| omics.r.xlarge | 4 | 32 GiO | 
| omics s.r.l. 2 x large | 8 | 64 Go | 
| omics s.r.4 x large | 16 | 128 Gio | 
| omics s.r.l. 8 x large | 32 | 256 Gio | 
| omics s.r.l. 12 x large | 48 | 384 Go | 
| omics s.r.l. 16 x large | 64 | 512 Gio | 
| omics s.r.l. 24 x large | 96 | 768 Gio | 
| omics s.r.l. 32 x large | 128 | 1024 GiB | 
| omics s.r.48 x large | 192 | 1536 GiB | 

## Instances de calcul accéléré
<a name="workflow-task-accelerated-computing-instances"></a>

Vous pouvez éventuellement spécifier des ressources GPU pour chaque tâche d'un flux de travail, afin d' HealthOmicsallouer une instance de calcul accéléré à la tâche. Pour plus d'informations sur la manière de spécifier les informations du GPU dans le fichier de définition du flux de travail, consultez[Accélérateurs de tâches dans une définition de HealthOmics flux de travail](task-accelerators.md).

Si vous spécifiez un accélérateur de tâches qui prend en charge plusieurs types d'instances, HealthOmics sélectionne le type d'instance en fonction de sa disponibilité. Si plusieurs types d'instances sont disponibles, HealthOmics privilégiez l'instance la moins coûteuse. L'exception concerne l'accélérateur de tâches nvidia-t4-a10g-l4, qui donne la préférence aux instances de dernière génération disponibles dans votre région.

Les instances G4 ne sont pas prises en charge dans la région d'Israël (Tel Aviv). Les instances G5 ne sont pas prises en charge dans la région Asie-Pacifique (Singapour). 



**Topics**
+ [Types d'instances G6 et G6e](#workflow-task-accelerated-accelerated-g6)
+ [Instances G4 et G5](#workflow-task-accelerated-accelerated-g45)

### Types d'instances G6 et G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics prend en charge les configurations d'instances de calcul accéléré G6 suivantes. Toutes les instances omics.g6 utilisent Nvidia L4. GPUs

HealthOmics prend en charge les instances G6 et G6e dans les régions suivantes : USA Ouest (Oregon) et USA Est (Virginie du Nord).


| Instance | Numéro de v CPUs | Mémoire | Nombre de GPUs | Mémoire GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiO | 1 | 24 GiO | 
| omics.g6.2xlarge | 8 | 32 GiO | 1 | 24 GiO | 
| omics.g6.4 x large | 16 | 64 Go | 1 | 24 GiO | 
| omics.g 6,8 x large | 32 | 128 Gio | 1 | 24 GiO | 
| omics.g 6,12 x large | 48 | 192 Go | 4 | 96 GiB | 
| omics.g6.16 x large | 64 | 256 Gio | 1 | 24 GiO | 
| omics.g 6.24 x large | 96 | 384 Go | 4 | 96 GiB | 

Toutes les instances omics.g6e utilisent Nvidia L40s. GPUs


| Instance | Numéro de v CPUs | Mémoire | Nombre de GPUs | Mémoire GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiO | 1 | 48 GiO | 
| omics.g6e.2xlarge | 8 | 64 Go | 1 | 48 GiO | 
| omics.g6e.4xlarge | 16 | 128 Gio | 1 | 48 GiO | 
| omics.g6e.8xlarge | 32 | 256 Gio | 1 | 48 GiO | 
| omics.g6e.12xlarge | 48 | 384 Go | 4 | 192 Go | 
| omics.g6e.16 x large | 64 | 512 Gio | 1 | 48 GiO | 
| omics.g6e.24xlarge | 96 | 768 Gio | 4 | 192 Go | 

### Instances G4 et G5
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics prend en charge les configurations d'instances de calcul accéléré G4 et G5 suivantes. 

Toutes les instances omics.g5 utilisent le Nvidia Tesla A10G. GPUs


| Instance | Numéro de v CPUs | Mémoire | Nombre de GPUs | Mémoire GPU | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiO | 1 | 24 GiO | 
| omics.g5.2 x large | 8 | 32 GiO | 1 | 24 GiO | 
| omics.g 5,4 x large | 16 | 64 Go | 1 | 24 GiO | 
| omics.g 5,8 x large | 32 | 128 Gio | 1 | 24 GiO | 
| omics.g5.12xlarge | 48 | 192 Go | 4 | 96 GiB | 
| omics.g5.16 x large | 64 | 256 Gio | 1 | 24 GiO | 
| omics.g 5.24 x large | 96 | 384 Go | 4 | 96 GiB | 

Toutes les instances omics.g4dn utilisent le Nvidia Tesla T4. GPUs


| Instance | Numéro de v CPUs | Mémoire | Nombre de GPUs | Mémoire GPU | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiO | 1 | 16 GiO | 
| omics.g4dn.2xlarge | 8 | 32 GiO | 1 | 16 GiO | 
| omics.g4dn.4xlarge | 16 | 64 Go | 1 | 16 GiO | 
| omics.g4dn.8xlarge | 32 | 128 Gio | 1 | 16 GiO | 
| omics.g4dn.12xlarge | 48 | 192 Go | 4 | 64 Go | 
| omics.g4dn.16xlarge | 64 | 256 Gio | 1 | 24 GiO | 

# Résultats des tâches dans une définition HealthOmics de flux de travail
<a name="workflows-task-outputs"></a>

Vous spécifiez les résultats des tâches dans la définition du flux de travail. Par défaut, HealthOmics supprime tous les fichiers de tâches intermédiaires lorsque le flux de travail est terminé. Pour exporter un fichier intermédiaire, vous devez le définir comme sortie. 

Si vous utilisez la mise en cache des appels, HealthOmics enregistre les résultats des tâches dans le cache, y compris les fichiers intermédiaires que vous définissez comme sorties.

Les rubriques suivantes incluent des exemples de définition de tâches pour chacun des langages de définition de flux de travail.

**Topics**
+ [Sorties de tâches pour WDL](#workflow-task-outputs-wdl)
+ [Sorties de tâches pour Nextflow](#workflow-task-outputs-nextflow)
+ [Sorties de tâches pour CWL](#workflow-task-outputs-cwl)

## Sorties de tâches pour WDL
<a name="workflow-task-outputs-wdl"></a>

Pour les définitions de flux de travail écrites en WDL, définissez vos sorties dans la **outputs** section de flux de travail de niveau supérieur. 

HealthOmics

**Topics**
+ [Sortie de tâche pour STDOUT](#task-outputs-wdl-stdout)
+ [Sortie de tâche pour STDERR](#task-outputs-wdl-stderr)
+ [Sortie de tâche vers un fichier](#task-outputs-wdl-file)
+ [Sortie de tâches vers un tableau de fichiers](#task-outputs-wdl-files)

### Sortie de tâche pour STDOUT
<a name="task-outputs-wdl-stdout"></a>

Cet exemple crée une tâche nommée `SayHello` qui renvoie le contenu STDOUT au fichier de sortie de la tâche. **La **stdout** fonction WDL capture le contenu STDOUT (dans cet exemple, la chaîne d'entrée Hello World \$1** ) dans le fichier**stdout\$1file**. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDOUT, le résultat apparaît également dans CloudWatch les journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

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

### Sortie de tâche pour STDERR
<a name="task-outputs-wdl-stderr"></a>

Cet exemple crée une tâche nommée `SayHello` qui renvoie le contenu STDERR au fichier de sortie de la tâche. **La **stderr** fonction WDL capture le contenu STDERR (dans cet exemple, la chaîne d'entrée Hello World \$1** ) dans le fichier**stderr\$1file**. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDERR, le résultat apparaîtra dans les CloudWatch journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

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

### Sortie de tâche vers un fichier
<a name="task-outputs-wdl-file"></a>

Dans cet exemple, la SayHello tâche crée deux fichiers (message.txt et info.txt) et déclare explicitement ces fichiers en tant que sorties nommées (message\$1file et 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"
    } 
}
```

### Sortie de tâches vers un tableau de fichiers
<a name="task-outputs-wdl-files"></a>

Dans cet exemple, la `GenerateGreetings` tâche génère un tableau de fichiers comme résultat de la tâche. La tâche génère dynamiquement un fichier d'accueil pour chaque membre du tableau d'entrée`names`. Comme les noms de fichiers ne sont pas connus avant l'exécution, la définition de sortie utilise la fonction WDL glob () pour afficher tous les fichiers correspondant au modèle. `*_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")
    }       
 }
```

## Sorties de tâches pour Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Pour les définitions de flux de travail écrites dans Nextflow, définissez une directive **PublishDir** pour exporter le contenu des tâches vers votre compartiment Amazon S3 de sortie. Définissez la valeur **PublishDir sur**. `/mnt/workflow/pubdir` 

 HealthOmics Pour exporter des fichiers vers Amazon S3, les fichiers doivent se trouver dans ce répertoire.

Si une tâche produit un groupe de fichiers de sortie à utiliser comme entrées pour une tâche ultérieure, nous vous recommandons de regrouper ces fichiers dans un répertoire et d'émettre le répertoire en tant que sortie de tâche. L'énumération de chaque fichier individuel peut entraîner un engorgement des E/S dans le système de fichiers sous-jacent. Par exemple :

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

## Sorties de tâches pour CWL
<a name="workflow-task-outputs-cwl"></a>

Pour les définitions de flux de travail écrites en CWL, vous pouvez spécifier les résultats des tâches à l'aide de `CommandLineTool` tâches. Les sections suivantes présentent des exemples de `CommandLineTool` tâches qui définissent différents types de sorties.

**Topics**
+ [Sortie de tâche pour STDOUT](#task-outputs-cwl-stdout)
+ [Sortie de tâche pour STDERR](#task-outputs-cwl-stderr)
+ [Sortie de tâche vers un fichier](#task-outputs-cwl-file)
+ [Sortie de tâches vers un tableau de fichiers](#task-outputs-cwl-files)

### Sortie de tâche pour STDOUT
<a name="task-outputs-cwl-stdout"></a>

Cet exemple crée une `CommandLineTool` tâche qui renvoie le contenu STDOUT dans un fichier de sortie texte nommé. **output.txt** Par exemple, si vous fournissez l'entrée suivante, le résultat de la tâche est **Hello World \$1** dans le **output.txt** dossier.

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

La `outputs` directive indique que le nom de sortie est **example\$1out** et que son type est`stdout`. Pour qu'une tâche en aval consomme le résultat de cette tâche, elle désignera la sortie sous la forme`example_out`.

Dans la mesure HealthOmics où il crée des journaux pour tout le contenu STDERR et STDOUT, le résultat apparaît également dans les CloudWatch journaux, ainsi que d'autres informations de journalisation STDERR relatives à la tâche.

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

### Sortie de tâche pour STDERR
<a name="task-outputs-cwl-stderr"></a>

Cet exemple crée une `CommandLineTool` tâche qui renvoie le contenu STDERR dans un fichier de sortie texte nommé. **stderr.txt** La tâche modifie le `baseCommand` afin qu'il `echo` écrit sur STDERR (au lieu de STDOUT).

La `outputs` directive indique que le nom de sortie est **stderr\$1out** et que son type est`stderr`. 

Dans la mesure où il HealthOmics crée des journaux pour tout le contenu STDERR et STDOUT, le résultat apparaîtra dans les CloudWatch journaux, avec les autres informations de journalisation STDERR relatives à la tâche.

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

### Sortie de tâche vers un fichier
<a name="task-outputs-cwl-file"></a>

Cet exemple crée une `CommandLineTool` tâche qui crée une archive tar compressée à partir des fichiers d'entrée. Vous indiquez le nom de l'archive en tant que paramètre d'entrée (archive\$1name). 

La **outputs** directive indique que le type `archive_file` de sortie est`File`, et elle utilise une référence au paramètre d'entrée `archive_name` pour établir une liaison avec le fichier de sortie.

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

### Sortie de tâches vers un tableau de fichiers
<a name="task-outputs-cwl-files"></a>

Dans cet exemple, la `CommandLineTool` tâche crée un tableau de fichiers à l'aide de la `touch` commande. La commande utilise les chaînes du paramètre `files-to-create` d'entrée pour nommer les fichiers. La commande génère un tableau de fichiers. Le tableau inclut tous les fichiers du répertoire de travail qui correspondent au `glob` modèle. Cet exemple utilise un motif générique (« \$1 ») qui correspond à tous les fichiers.

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

# Ressources de tâches dans une définition HealthOmics de flux de travail
<a name="task-resources"></a>

Dans la définition du flux de travail, définissez les éléments suivants pour chaque tâche :
+ L'image du conteneur pour la tâche. Pour de plus amples informations, veuillez consulter [Images de conteneur pour les flux de travail privés](workflows-ecr.md).
+ Le nombre CPUs et la mémoire nécessaires pour la tâche. Pour de plus amples informations, veuillez consulter [Exigences en matière de calcul et de mémoire pour les HealthOmics tâches](memory-and-compute-tasks.md).

HealthOmics ignore les spécifications de stockage par tâche. HealthOmics fournit un stockage d'exécution auquel toutes les tâches en cours d'exécution peuvent accéder. Pour de plus amples informations, veuillez consulter [Exécuter les types de stockage dans les HealthOmics flux de travail](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"
   }
   ...
}
```

Dans le cas d'un flux de travail WDL, deux HealthOmics tentatives au maximum sont effectuées pour une tâche qui échoue en raison d'erreurs de service (la demande d'API renvoie un code d'état HTTP 5XX). Pour plus d'informations sur les nouvelles tentatives de tâches, consultez[Nouvelles tentatives de tâches](monitoring-runs.md#run-status-task-retries).

Vous pouvez désactiver le comportement de nouvelle tentative en spécifiant la configuration suivante pour la tâche dans le fichier de définition WDL :

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

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

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

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

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

------

# Accélérateurs de tâches dans une définition de HealthOmics flux de travail
<a name="task-accelerators"></a>

Dans la définition du flux de travail, vous pouvez éventuellement spécifier les spécifications de l'accélérateur GPU pour une tâche. HealthOmics prend en charge les valeurs de spécification d'accélérateur suivantes, ainsi que les types d'instances pris en charge :


| Spécifications de l'accélérateur | Types d'instances Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-A 10 g | G4 et G5 | 
| nvidia-tesla-a10 g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 et G6 | 
| nvidia-l4-a10g | G5 et G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40s | G6e | 

Si vous spécifiez un type d'accélérateur qui prend en charge plusieurs types d'instances, HealthOmics sélectionne le type d'instance en fonction de la capacité disponible. Si les deux types d'instance sont disponibles, HealthOmics donne la préférence à l'instance la moins coûteuse. L'exception concerne l'accélérateur de tâches nvidia-t4-a10g-l4 qui donne la préférence à l'instance de dernière génération disponible.

Pour plus de détails sur les types d'instances, consultez[Instances de calcul accéléré](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances).

Dans l'exemple suivant, la définition du flux de travail indique `nvidia-l4` qu'il s'agit de l'accélérateur :

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

------

# Spécificités de définition du flux de travail WDL
<a name="workflow-languages-wdl"></a>

Les rubriques suivantes fournissent des informations détaillées sur les types et les directives disponibles pour les définitions de flux de travail WDL dans HealthOmics.

**Topics**
+ [Conversion de type implicite dans WDL Lenient](#workflow-wdl-type-conversion)
+ [Définition de l'espace de noms dans input.json](#workflow-wdl-namespace-defn)
+ [Types primitifs dans WDL](#workflow-wdl-primitive-types)
+ [Types complexes dans WDL](#workflow-wdl-complex-types)
+ [Directives dans WDL](#workflow-wdl-directives)
+ [Métadonnées des tâches dans WDL](#workflow-wdl-task-metadata)
+ [Exemple de définition de flux de travail WDL](#wdl-example)

## Conversion de type implicite dans WDL Lenient
<a name="workflow-wdl-type-conversion"></a>

HealthOmics prend en charge la conversion de type implicite dans le fichier input.json et dans la définition du flux de travail. Pour utiliser le casting de type implicite, spécifiez le moteur de flux de travail comme WDL indulgent lorsque vous créez le flux de travail. WDL Lenient est conçu pour gérer les flux de travail migrés depuis Cromwell. Il prend en charge les directives Cromwell du client et certaines logiques non conformes.

[WDL Lenient prend en charge la conversion de type pour les éléments suivants de la liste des exceptions limitées de WDL :](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ Float jusqu'à Int, où la coercition n'entraîne aucune perte de précision (par exemple, 1,0 correspond à 1).
+ String to Int/Float, où la coercition n'entraîne aucune perte de précision.
+ Associez [W, X] à Array [Pair [Y, Z]], dans le cas où W est coercible à Y et X est coercible à Z.
+ Array [Pair [W, X]] to Map [Y, Z], dans le cas où W est coercible à Y et X est coercible à Z (par exemple, 1.0 correspond à 1).

Pour utiliser le casting de type implicite, spécifiez le moteur de flux de travail sous la forme WDL\$1LENIENT lorsque vous créez le flux de travail ou la version du flux de travail.

Dans la console, le paramètre du moteur de flux de travail s'appelle **Language**. Dans l'API, le paramètre du moteur de flux de travail est nommé **moteur**. Pour plus d’informations, consultez [Création d'un flux de travail privé](create-private-workflow.md) ou [Création d'une version de flux de travail](workflows-version-create.md).

## Définition de l'espace de noms dans input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics prend en charge les variables entièrement qualifiées dans input.json. Par exemple, si vous déclarez deux variables d'entrée nommées numéro1 et numéro2 dans le flux de travail : **SumWorkflow**

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

 Vous pouvez les utiliser comme variables entièrement qualifiées dans input.json : 

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

## Types primitifs dans WDL
<a name="workflow-wdl-primitive-types"></a>

Le tableau suivant montre comment les entrées de WDL correspondent aux types primitifs correspondants. HealthOmics fournit une prise en charge limitée de la coercition de type. Nous vous recommandons donc de définir des types explicites. 


**Types primitifs**  

| Type WDL | Type JSON | Exemple WDL | Exemple de clé et de valeur JSON | Remarques | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | La valeur doit être en minuscules et sans guillemets. | 
| Int | integer | Int i | "i": 7 | Ne doit pas être entre guillemets. | 
| Float | number | Float f | "f": 42.2 | Ne doit pas être entre guillemets. | 
| String | string | String s | "s": "characters" | Les chaînes JSON qui sont des URI doivent être mappées à un fichier WDL pour être importées. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 et le HealthOmics stockage URIs sont importés tant que le rôle IAM fourni pour le flux de travail dispose d'un accès en lecture à ces objets. Aucun autre schéma d'URI n'est pris en charge (tel que file://https://, etftp://). L'URI doit spécifier un objet. Il ne peut pas s'agir d'un répertoire, ce qui signifie qu'il ne peut pas se terminer par un/. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | Le Directory type n'est pas inclus dans WDL 1.0 ou 1.1, vous devrez donc l'ajouter version development à l'en-tête du fichier WDL. L'URI doit être un URI Amazon S3 et comporter un préfixe se terminant par un «/». Tout le contenu du répertoire sera copié de manière récursive dans le flux de travail sous forme de téléchargement unique. Le ne Directory doit contenir que des fichiers liés au flux de travail. | 

## Types complexes dans WDL
<a name="workflow-wdl-complex-types"></a>

Le tableau suivant montre comment les entrées de WDL correspondent aux types JSON complexes correspondants. Les types complexes dans WDL sont des structures de données composées de types primitifs. Les structures de données telles que les listes seront converties en tableaux.


**Types complexes**  

| Type WDL | Type JSON | Exemple WDL | Exemple de clé et de valeur JSON | Remarques | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | Les membres du tableau doivent suivre le format du type de tableau WDL. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Chaque valeur de la paire doit utiliser le format JSON du type WDL correspondant. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Chaque entrée de la carte doit utiliser le format JSON du type WDL correspondant. | 
| 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>  | Les noms des membres de la structure doivent correspondre exactement aux noms des clés d'objet JSON. Chaque valeur doit utiliser le format JSON du type WDL correspondant. | 
| Object | N/A | N/A | N/A | Le Object type WDL est obsolète et doit être remplacé par Struct dans tous les cas. | 

## Directives dans WDL
<a name="workflow-wdl-directives"></a>

HealthOmics prend en charge les directives suivantes dans toutes les versions de WDL compatibles HealthOmics .

### Configuration des ressources du GPU
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics prend en charge les attributs d'exécution **acceleratorType** et **acceleratorCount** avec toutes les [instances de GPU](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html) prises en charge. HealthOmics prend également en charge les alias nommés **gpuType** et**gpuCount**, qui ont les mêmes fonctionnalités que leurs homologues accélérateurs. Si la définition WDL contient les deux directives, HealthOmics utilise les valeurs de l'accélérateur.

L'exemple suivant montre comment utiliser ces directives :

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

### Configurer une nouvelle tentative de tâche pour les erreurs de service
<a name="workflow-wdl-task-retry"></a>

HealthOmics prend en charge jusqu'à deux tentatives pour une tâche qui a échoué en raison d'erreurs de service (codes d'état HTTP 5XX). Vous pouvez configurer le nombre maximum de tentatives (1 ou 2) et vous pouvez désactiver les tentatives en cas d'erreur de service. Par défaut, le nombre maximum de HealthOmics tentatives est de deux tentatives. 

L'exemple suivant permet `preemptible` de désactiver les tentatives en cas d'erreur de service :

```
{
  preemptible: 0 
}
```

Pour plus d'informations sur les nouvelles tentatives de tâches HealthOmics, consultez[Nouvelles tentatives de tâches](monitoring-runs.md#run-status-task-retries).

### Configurer une nouvelle tentative de tâche en cas de mémoire insuffisante
<a name="workflow-wdl-retries"></a>

HealthOmics prend en charge les nouvelles tentatives pour une tâche qui a échoué en raison d'un manque de mémoire (code de sortie du conteneur 137, code d'état HTTP 4XX). HealthOmics double la quantité de mémoire à chaque nouvelle tentative.

Par défaut, HealthOmics ne réessaie pas pour ce type d'échec. Utilisez la `maxRetries` directive pour spécifier le nombre maximal de tentatives.

L'exemple suivant définit `maxRetries` la valeur 3, de sorte que quatre HealthOmics tentatives au maximum sont tentées pour terminer la tâche (la première tentative plus trois nouvelles tentatives) :

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

**Note**  
Une nouvelle tentative de tâche en cas de mémoire insuffisante nécessite GNU findutils 4.2.3\$1. Le conteneur HealthOmics d'images par défaut inclut ce package. Si vous spécifiez une image personnalisée dans votre définition WDL, assurez-vous qu'elle inclut GNU findutils 4.2.3\$1.

### Configurer les codes de retour
<a name="workflow-wdl-directive-returnCodes"></a>

L'attribut **ReturnCodes** fournit un mécanisme permettant de spécifier un code de retour, ou un ensemble de codes de retour, indiquant l'exécution réussie d'une tâche. Le moteur WDL respecte les codes de retour que vous spécifiez dans la section **d'exécution** de la définition WDL et définit le statut des tâches en conséquence. 

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

HealthOmics prend également en charge un alias nommé **continueOnReturnCode**, qui possède les mêmes fonctionnalités que **ReturnCodes**. Si vous spécifiez les deux attributs, HealthOmics utilise la valeur **ReturnCodes**.

## Métadonnées des tâches dans WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics prend en charge les options de métadonnées suivantes pour les tâches WDL.

### Désactiver la mise en cache au niveau des tâches avec l'attribut volatile
<a name="workflow-wdl-volatile-attribute"></a>

L'attribut **volatile** vous permet de désactiver la mise en cache des appels pour des tâches spécifiques de votre flux de travail WDL. Lorsqu'une tâche est marquée comme volatile, elle s'exécute toujours et n'utilise jamais les résultats mis en cache, même lorsque la mise en cache est activée pour l'exécution.

Ajoutez l'attribut **volatile** à la **méta-section** de votre définition de tâche :

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

## Exemple de définition de flux de travail WDL
<a name="wdl-example"></a>

Les exemples suivants présentent des définitions de flux de travail privés pour la conversion de `CRAM` vers `BAM` dans WDL. Le `BAM` flux `CRAM` de travail to définit deux tâches et utilise les outils du `genomes-in-the-cloud` conteneur, qui est illustré dans l'exemple et est accessible au public. 

L'exemple suivant montre comment inclure le conteneur Amazon ECR en tant que paramètre. Cela permet HealthOmics de vérifier les autorisations d'accès à votre conteneur avant qu'il ne commence l'exécution.

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

L'exemple suivant montre comment spécifier les fichiers à utiliser lors de votre exécution, lorsque les fichiers se trouvent dans un compartiment Amazon S3.

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

Si vous souhaitez spécifier des fichiers à partir d'un magasin de séquences, indiquez-le comme indiqué dans l'exemple suivant, en utilisant l'URI du magasin de séquences.

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

Vous pouvez ensuite définir votre flux de travail dans WDL comme indiqué dans l'exemple suivant. 

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

# Caractéristiques de la définition du flux de travail Nextflow
<a name="workflow-definition-nextflow"></a>

HealthOmics prend en charge DSL1 Nextflow et. DSL2 Pour en savoir plus, consultez [Support de la version Nextflow](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow DSL2 est basé sur le langage de programmation Groovy, les paramètres sont donc dynamiques et la coercition de type est possible en utilisant les mêmes règles que Groovy. Les paramètres et valeurs fournis par le JSON d'entrée sont disponibles dans la carte parameters (`params`) du flux de travail.

**Topics**
+ [Utiliser les plugins nf-schema et nf-validation](#schema-and-validation-plugins-nextflow)
+ [Spécifier le stockage URIs](#storage-uris-nextflow)
+ [Directives Nextflow](#workflow-nexflow-directives)
+ [Exporter le contenu de la tâche](#exporting-task-content-nextflow)

## Utiliser les plugins nf-schema et nf-validation
<a name="schema-and-validation-plugins-nextflow"></a>

**Note**  
Résumé de la HealthOmics prise en charge des plugins :  
v22.04 — aucun support pour les plugins
v23.10 — prend en charge et `nf-schema` `nf-validation`
v24.10 — prend en charge `nf-schema`

HealthOmics fournit le support suivant pour les plugins Nextflow :
+ Pour Nextflow v23.10, HealthOmics préinstalle le plugin nf-validation @1 .1.1. 
+ Pour Nextflow v23.10 et versions ultérieures, HealthOmics préinstalle le plugin nf-schema @2 .3.0.
+ Vous ne pouvez pas récupérer de plug-ins supplémentaires lors de l'exécution d'un flux de travail. HealthOmics ignore toutes les autres versions de plug-in que vous spécifiez dans le `nextflow.config` fichier.
+ Pour Nextflow v24 et versions supérieures, `nf-schema` il s'agit de la nouvelle version du plugin obsolète`nf-validation`. Pour plus d'informations, consultez [nf-schema](https://github.com/nextflow-io/nf-schema) dans le référentiel GitHub Nextflow.

## Spécifier le stockage URIs
<a name="storage-uris-nextflow"></a>

Lorsqu'un Amazon S3 ou un HealthOmics URI est utilisé pour créer un fichier ou un objet de chemin Nextflow, l'objet correspondant est mis à la disposition du flux de travail, à condition que l'accès en lecture soit accordé. L'utilisation de préfixes ou de répertoires est autorisée pour Amazon S3 URIs. Pour obtenir des exemples, consultez [Formats de paramètres d'entrée Amazon S3](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics prend partiellement en charge l'utilisation de modèles globaux dans Amazon S3 URIs ou HealthOmics Storage URIs. Utilisez des modèles Glob dans la définition du flux de travail pour la création de `path` `file` canaux. Pour le comportement attendu et les cas exacts, voir[Nextflow Gestion du modèle Glob dans les entrées Amazon S3](workflows-run-inputs.md#wd-nextflow-s3-formats).

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

Vous configurez les directives Nextflow dans le fichier de configuration ou la définition du flux de travail Nextflow. La liste suivante indique l'ordre de priorité HealthOmics utilisé pour appliquer les paramètres de configuration, de la priorité la plus faible à la plus élevée :

1. Configuration globale dans le fichier de configuration.

1. Section des tâches de la définition du flux de travail.

1. Sélecteurs spécifiques aux tâches dans le fichier de configuration.

**Topics**
+ [Stratégie de nouvelle tentative de tâche en utilisant `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Tentatives de nouvelle tentative de tâche en utilisant `maxRetries`](#workflow-nexflow-task-retry)
+ [Désactiver la tâche, réessayez en utilisant `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Durée de la tâche à l'aide de la `time` directive](#time-directive-nextflow)

### Stratégie de nouvelle tentative de tâche en utilisant `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Utilisez la `errorStrategy` directive pour définir la stratégie en cas d'erreurs de tâches. Par défaut, lorsqu'une tâche revient avec une indication d'erreur (un statut de sortie différent de zéro), la tâche s'arrête et HealthOmics met fin à l'exécution complète. Si vous définissez cette `errorStrategy` option`retry`, HealthOmics tente une nouvelle tentative de la tâche qui a échoué. Pour augmenter le nombre de tentatives, voir[Tentatives de nouvelle tentative de tâche en utilisant `maxRetries`](#workflow-nexflow-task-retry).

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

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

Pour plus d'informations sur le mode HealthOmics de gestion des nouvelles tentatives de tâches lors d'une exécution, consultez[Nouvelles tentatives de tâches](monitoring-runs.md#run-status-task-retries).

### Tentatives de nouvelle tentative de tâche en utilisant `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Par défaut, HealthOmics ne tente aucune nouvelle tentative d'une tâche qui a échoué, ou tente une nouvelle tentative si vous configurez. `errorStrategy` Pour augmenter le nombre maximum de tentatives, définissez `retry` et configurez le nombre maximum de tentatives `errorStrategy` à l'aide de la `maxRetries` directive.

L'exemple suivant définit le nombre maximum de tentatives à 3 dans la configuration globale.

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

L'exemple suivant montre comment définir `maxRetries` dans la section des tâches de la définition du flux de travail.

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

L'exemple suivant montre comment spécifier une configuration spécifique à une tâche dans le fichier de configuration Nextflow, en fonction du nom ou des sélecteurs d'étiquette.

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

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

### Désactiver la tâche, réessayez en utilisant `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

Pour Nextflow v23 et v24, HealthOmics prend en charge les nouvelles tentatives de tâche si la tâche a échoué en raison d'erreurs de service (codes d'état HTTP 5XX). Par défaut, HealthOmics tente jusqu'à deux tentatives d'une tâche ayant échoué. 

Vous pouvez configurer `omicsRetryOn5xx` pour désactiver la rétentative de tâche en cas d'erreur de service. Pour plus d'informations sur la nouvelle tentative d'une tâche HealthOmics, consultez[Nouvelles tentatives de tâches](monitoring-runs.md#run-status-task-retries).

L'exemple suivant permet de configurer `omicsRetryOn5xx` la configuration globale pour désactiver la nouvelle tentative de tâche.

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

L'exemple suivant montre comment procéder à la configuration `omicsRetryOn5xx` dans la section des tâches de la définition du flux de travail.

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

L'exemple suivant montre comment définir `omicsRetryOn5xx` une configuration spécifique à une tâche dans le fichier de configuration Nextflow, en fonction du nom ou des sélecteurs d'étiquette.

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

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

### Durée de la tâche à l'aide de la `time` directive
<a name="time-directive-nextflow"></a>

HealthOmics fournit un quota ajustable (voir[HealthOmics quotas de service](service-quotas.md)) pour spécifier la durée maximale d'une course. Pour les flux de travail Nextflow v23 et v24, vous pouvez également spécifier la durée maximale des tâches à l'aide de la directive Nextflow. `time`

Lors du développement d'un nouveau flux de travail, la définition de la durée maximale des tâches vous permet de détecter les tâches intempestives et les tâches de longue durée. 

Pour plus d'informations sur la directive temporelle Nextflow, voir [directive time dans la](https://www.nextflow.io/docs/latest/reference/process.html#process-time) référence Nextflow.

HealthOmics fournit le support suivant pour la directive temporelle Nextflow :

1. HealthOmics prend en charge une granularité d'une minute pour la directive horaire. Vous pouvez spécifier une valeur comprise entre 60 secondes et la durée maximale d'exécution.

1. Si vous entrez une valeur inférieure à 60, HealthOmics arrondissez-la à 60 secondes. Pour les valeurs supérieures à 60, HealthOmics arrondissez à la minute inférieure la plus proche.

1. Si le flux de travail prend en charge les nouvelles tentatives pour une tâche, HealthOmics réessayez la tâche si le délai imparti est expiré.

1. Si le délai d'expiration d'une tâche (ou si la dernière tentative expire), elle est HealthOmics annulée. Cette opération peut avoir une durée d'une à deux minutes.

1. En cas d'expiration de la tâche, HealthOmics définit l'exécution et le statut de la tâche sur Échec, et annule les autres tâches en cours d'exécution (pour les tâches en cours d'exécution, en attente ou en cours d'exécution). HealthOmics exporte les sorties des tâches qu'il a terminées avant le délai d'expiration vers l'emplacement de sortie S3 que vous avez désigné. 

1. Le temps passé par une tâche en attente n'est pas pris en compte dans la durée de la tâche.

1. Si l'exécution fait partie d'un groupe d'exécution et que le groupe d'exécution expire avant le délai imparti, l'exécution et la tâche passent au statut d'échec.

Spécifiez la durée du délai d'expiration en utilisant une ou plusieurs des unités suivantes :`ms`,`s`, `m``h`, ou`d`.

L'exemple suivant montre comment spécifier une configuration globale dans le fichier de configuration Nextflow. Il définit un délai d'expiration global de 1 heure et 30 minutes.

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

L'exemple suivant montre comment spécifier une directive temporelle dans la section des tâches de la définition du flux de travail. Cet exemple définit un délai d'expiration de 3 jours, 5 heures et 4 minutes. Cette valeur a priorité sur la valeur globale du fichier de configuration, mais pas sur une directive temporelle spécifique à une tâche `my_label` dans le fichier de configuration.

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

L'exemple suivant montre comment spécifier des directives temporelles spécifiques à une tâche dans le fichier de configuration Nextflow, en fonction du nom ou des sélecteurs d'étiquette. Cet exemple définit un délai d'expiration global de la tâche de 30 minutes. Il définit une valeur de 2 heures pour la tâche `myTask` et une valeur de 3 heures pour les tâches avec étiquette`my_label`. Pour les tâches correspondant au sélecteur, ces valeurs ont priorité sur la valeur globale et sur la valeur de la définition du flux de travail.

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

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

## Exporter le contenu de la tâche
<a name="exporting-task-content-nextflow"></a>

Pour les flux de travail écrits dans Nextflow, définissez une directive **PublishDir** pour exporter le contenu des tâches vers votre compartiment Amazon S3 de sortie. Comme indiqué dans l'exemple suivant, définissez la valeur **PublishDir sur**. `/mnt/workflow/pubdir` Pour exporter des fichiers vers Amazon S3, les fichiers doivent se trouver dans ce répertoire.

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

# Spécificités de définition du flux de travail CWL
<a name="workflow-languages-cwl"></a>

Les flux de travail écrits en langage de flux de travail commun, ou CWL, offrent des fonctionnalités similaires à celles des flux de travail écrits en WDL et Nextflow. Vous pouvez utiliser Amazon S3 ou le HealthOmics stockage URIs comme paramètres d'entrée. 

Si vous définissez une entrée dans un fichier secondaire dans un sous-flux de travail, ajoutez la même définition dans le flux de travail principal.

HealthOmics les flux de travail ne prennent pas en charge les processus opérationnels. Pour en savoir plus sur les processus opérationnels dans les flux de travail CWL, consultez la documentation [CWL](https://www.commonwl.org/user_guide/topics/operations.html).

La meilleure pratique consiste à définir un flux de travail CWL distinct pour chaque conteneur que vous utilisez. Nous vous recommandons de ne pas coder en dur l'entrée DockerPull avec un URI Amazon ECR fixe.

**Topics**
+ [Convertissez les flux de travail CWL à utiliser HealthOmics](#workflow-cwl-convert)
+ [Désactiver la tâche, réessayez en utilisant `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Boucler une étape du flux de travail](#workflow-cwl-loop)
+ [Réessayer des tâches avec une mémoire accrue](#workflow-cwl-out-of-memory-retry)
+ [Exemples](#workflow-cwl-examples)

## Convertissez les flux de travail CWL à utiliser HealthOmics
<a name="workflow-cwl-convert"></a>

Pour convertir une définition de flux de travail CWL existante à utiliser HealthOmics, apportez les modifications suivantes :
+ Remplacez tous les conteneurs Docker URIs par Amazon URIs ECR.
+ Assurez-vous que tous les fichiers de flux de travail sont déclarés en entrée dans le flux de travail principal et que toutes les variables sont définies de manière explicite.
+ Assurez-vous que tout le JavaScript code est conforme au mode strict.

## Désactiver la tâche, réessayez en utilisant `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics prend en charge les nouvelles tentatives de tâche si la tâche a échoué en raison d'erreurs de service (codes d'état HTTP 5XX). Par défaut, HealthOmics tente jusqu'à deux tentatives d'une tâche qui a échoué. Pour plus d'informations sur la nouvelle tentative d'une tâche HealthOmics, consultez[Nouvelles tentatives de tâches](monitoring-runs.md#run-status-task-retries).

Pour désactiver la nouvelle tentative de tâche en cas d'erreur de service, configurez la `omicsRetryOn5xx` directive dans la définition du flux de travail. Vous pouvez définir cette directive dans la section « exigences » ou « astuces ». Nous vous recommandons d'ajouter la directive comme indication de portabilité.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Les exigences l'emportent sur les conseils. Si l'implémentation d'une tâche fournit un besoin en ressources sous forme d'indications qui est également fourni par les exigences d'un flux de travail englobant, les exigences générales ont priorité.

Si la même exigence de tâche apparaît à différents niveaux du flux de travail, HealthOmics utilise l'entrée la plus spécifique provenant de `requirements` (ou`hints`, s'il n'y a aucune entrée`requirements`). La liste suivante indique l'ordre de priorité HealthOmics utilisé pour appliquer les paramètres de configuration, de la priorité la plus faible à la plus élevée :
+ Niveau du flux de travail
+ Niveau d'étape
+ Section des tâches de la définition du flux de travail

L'exemple suivant montre comment configurer la `omicsRetryOn5xx` directive à différents niveaux du flux de travail. Dans cet exemple, l'exigence relative au niveau du flux de travail remplace les indications relatives au niveau du flux de travail. Les configurations d'exigences au niveau des tâches et des étapes remplacent les configurations indicatives.

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

## Boucler une étape du flux de travail
<a name="workflow-cwl-loop"></a>

HealthOmics permet de mettre en boucle une étape du flux de travail. Vous pouvez utiliser des boucles pour exécuter les étapes du flux de travail de manière répétée jusqu'à ce qu'une condition spécifiée soit remplie. Cela est utile pour les processus itératifs dans lesquels vous devez répéter une tâche plusieurs fois ou jusqu'à ce qu'un certain résultat soit atteint.

**Remarque :** La fonctionnalité de boucle nécessite la version 1.2 ou ultérieure de CWL. Les flux de travail utilisant des versions CWL antérieures à 1.2 ne prennent pas en charge les opérations en boucle.

Pour utiliser des boucles dans votre flux de travail CWL, définissez une exigence de boucle. L'exemple suivant montre la configuration requise pour les boucles :

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

Le `loopWhen` champ contrôle le moment où la boucle se termine. Dans cet exemple, la boucle continue tant que le compteur est inférieur à la valeur maximale. Le `loop` champ définit la manière dont les paramètres d'entrée sont mis à jour entre les itérations. `loopSource`Spécifie le résultat de l'itération précédente qui alimente l'itération suivante. Le `outputMethod` champ défini sur `last` renvoie uniquement le résultat de l'itération finale.

## Réessayer des tâches avec une mémoire accrue
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics permet une nouvelle tentative automatique en cas d'échec des out-of-memory tâches. Lorsqu'une tâche se termine avec le code 137 (out-of-memory), HealthOmics crée une nouvelle tâche avec une allocation de mémoire accrue en fonction du multiplicateur spécifié.

**Note**  
HealthOmics tente une nouvelle tentative d' out-of-memoryéchec jusqu'à 3 fois ou jusqu'à ce que l'allocation de mémoire atteigne 1 536 GiB, selon la première limite atteinte.

L'exemple suivant montre comment configurer la out-of-memory nouvelle tentative :

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

Lorsqu'une tâche échoue en raison de out-of-memory, HealthOmics calcule l'allocation de mémoire pour les nouvelles tentatives à l'aide de la formule :. `previous_run_memory × memoryRetryMultiplier` Dans l'exemple ci-dessus, si la tâche avec 4 096 Mo de mémoire échoue, la nouvelle tentative utilise 4 096 × 2,5 = 10 240 Mo de mémoire.

Le `memoryRetryMultiplier` paramètre contrôle la quantité de mémoire supplémentaire à allouer pour les nouvelles tentatives :
+ **Valeur par défaut :** si vous ne spécifiez aucune valeur, la valeur par défaut est `2` (double la mémoire)
+ **Plage valide :** doit être un nombre positif supérieur à`1`. Les valeurs non valides entraînent une erreur de validation 4XX
+ **Valeur effective minimale :** les valeurs comprises entre `1` et `1.5` sont automatiquement augmentées afin `1.5` de garantir une augmentation significative de la mémoire et d'éviter des tentatives de nouvelle tentative excessives

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

Voici un exemple de flux de travail écrit en CWL. 

```
cwlVersion: v1.2
class: Workflow

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

out_filename: string
docker_image: string


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

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

Le fichier suivant définit la `copy.cwl` tâche.

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

Voici un exemple de flux de travail écrit en CWL avec une exigence de GPU.

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

# Exemples de définitions de flux de travail
<a name="workflow-definition-examples"></a>

L'exemple suivant montre la même définition de flux de travail dans WDL, Nextflow et 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
```

------

# Fichiers modèles de paramètres pour les HealthOmics flux de travail
<a name="parameter-templates"></a>

Les modèles de paramètres définissent les paramètres d'entrée d'un flux de travail. Vous pouvez définir des paramètres d'entrée pour rendre votre flux de travail plus flexible et plus polyvalent. Par exemple, vous pouvez définir un paramètre pour l'emplacement des fichiers génomiques de référence sur Amazon S3. Les modèles de paramètres peuvent être fournis par le biais d'un service de dépôt basé sur Git ou de votre disque local. Les utilisateurs peuvent ensuite exécuter le flux de travail à l'aide de différents ensembles de données. 

Vous pouvez créer le modèle de paramètres pour votre flux de travail ou HealthOmics générer le modèle de paramètres pour vous.

Le modèle de paramètres est un fichier JSON. Dans le fichier, chaque paramètre d'entrée est un objet nommé qui doit correspondre au nom de l'entrée du flux de travail. Lorsque vous lancez une exécution, si vous ne fournissez pas de valeurs pour tous les paramètres requis, l'exécution échoue.

L'objet du paramètre d'entrée inclut les attributs suivants :
+ **description**— Cet attribut obligatoire est une chaîne que la console affiche sur la page **Démarrer l'exécution**. Cette description est également conservée sous forme de métadonnées d'exécution.
+ **optional**— Cet attribut facultatif indique si le paramètre d'entrée est facultatif. Si vous ne spécifiez pas le **optional** champ, le paramètre d'entrée est obligatoire.

L'exemple de modèle de paramètres suivant montre comment spécifier les paramètres d'entrée.

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

## Génération de modèles de paramètres
<a name="parameter-parsing"></a>

HealthOmics génère le modèle de paramètres en analysant la définition du flux de travail pour détecter les paramètres d'entrée. Si vous fournissez un fichier modèle de paramètres pour un flux de travail, les paramètres de votre fichier remplacent les paramètres détectés dans la définition du flux de travail.

Il existe de légères différences entre la logique d'analyse des moteurs CWL, WDL et Nextflow, comme décrit dans les sections suivantes. 

**Topics**
+ [Détection de paramètres pour CWL](#parameter-parsing-cwl)
+ [Détection de paramètres pour WDL](#parameter-parsing-wdl)
+ [Détection de paramètres pour Nextflow](#parameter-parsing-nextflow)

### Détection de paramètres pour CWL
<a name="parameter-parsing-cwl"></a>

Dans le moteur de flux de travail CWL, la logique d'analyse repose sur les hypothèses suivantes :
+ Tous les types pris en charge par des valeurs nulles sont marqués comme paramètres d'entrée facultatifs.
+ Tous les types pris en charge non nuls sont marqués comme paramètres d'entrée obligatoires.
+ Tous les paramètres avec des valeurs par défaut sont marqués comme paramètres d'entrée facultatifs.
+ Les descriptions sont extraites de la `label` section de la définition du `main` flux de travail. Si `label` ce n'est pas spécifié, la description sera vide (chaîne vide). 

Les tableaux suivants présentent des exemples d'interpolation CWL. Pour chaque exemple, le nom du paramètre est`x`. Si le paramètre est obligatoire, vous devez fournir une valeur pour le paramètre. Si le paramètre est facultatif, il n'est pas nécessaire de fournir de valeur.

Ce tableau présente des exemples d'interpolation CWL pour les types primitifs.


| Entrée | Exemple d'entrée/sortie | Obligatoire | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 ou 2 ou... | Oui | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | La valeur par défaut est 2. L'entrée valide est 1 ou 2 ou... | Non | 
|  <pre>x:               <br />  type: int?</pre>  | L'entrée valide est None ou 1 ou 2 ou... | Non | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | La valeur par défaut est 2. L'entrée valide est None ou 1 ou 2 ou... | Non | 

Le tableau suivant présente des exemples d'interpolation CWL pour les types complexes. Un type complexe est un ensemble de types primitifs.


| Entrée | Exemple d'entrée/sortie | Obligatoire | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] ou [1,2,3]  | Oui | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Aucun ou [] ou [1,2,3]  | Non | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] ou [Aucun, 3, Aucun]  | Oui | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Aucun] ou Aucun ou [1,2,3] ou [Aucun, 3] mais pas []  | Non | 

### Détection de paramètres pour WDL
<a name="parameter-parsing-wdl"></a>

Dans le moteur de flux de travail WDL, la logique d'analyse repose sur les hypothèses suivantes :
+ Tous les types pris en charge par des valeurs nulles sont marqués comme paramètres d'entrée facultatifs. 
+ Pour les types pris en charge non nullables :
  + Toute variable d'entrée à laquelle sont assignés des littéraux ou des expressions est marquée comme paramètre facultatif. Par exemple :

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Si aucune valeur ou expression n'a été affectée aux paramètres d'entrée, ils seront marqués comme paramètres obligatoires. 
+ Les descriptions sont extraites de `parameter_meta` la définition du `main` flux de travail. Si `parameter_meta` ce n'est pas spécifié, la description sera vide (chaîne vide). Pour plus d'informations, consultez la spécification WDL pour les [métadonnées des paramètres](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

Les tableaux suivants présentent des exemples d'interpolation WDL. Pour chaque exemple, le nom du paramètre est`x`. Si le paramètre est obligatoire, vous devez fournir une valeur pour le paramètre. Si le paramètre est facultatif, il n'est pas nécessaire de fournir de valeur.

Ce tableau présente des exemples d'interpolation WDL pour les types primitifs.


| Entrée | Exemple d'entrée/sortie | Obligatoire | 
| --- | --- | --- | 
| Int x | 1 ou 2 ou... | Oui | 
| Int x = 2 | 2 | Non | 
| Int x = 1\$12 | 3 | Non | 
| Int x = y\$1z | y\$1z | Non | 
| Int ? x | Aucun, 1 ou 2 ou... | Oui | 
| Int ? x = 2 | Aucun ou 2 | Non | 
| Int ? x = 1\$12 | Aucun ou 3 | Non | 
| Int ? x = y\$1z | Aucun ou y\$1z | Non | 

Le tableau suivant présente des exemples d'interpolation WDL pour les types complexes. Un type complexe est un ensemble de types primitifs. 


| Entrée | Exemple d'entrée/sortie | Obligatoire | 
| --- | --- | --- | 
| Tableau [Int] x | [1,2,3] ou [] | Oui | 
| Tableau [Int] \$1 x | [1], mais pas [] | Oui | 
| Tableau [Int] ? x | Aucun ou [] ou [1,2,3] | Non | 
| Tableau [Int ?] x | [] ou [Aucun, 3, Aucun] | Oui | 
| Tableau [Int ?] = ? x | [Aucun] ou Aucun ou [1,2,3] ou [Aucun, 3] mais pas [] | Non | 
| Exemple de structure \$1String a, Int y\$1 plus loin dans les entrées : Sample MySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Oui | 
| Exemple de structure \$1String a, Int y\$1 plus tard dans les entrées : Sample ? Mon échantillon |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | Non | 

### Détection de paramètres pour Nextflow
<a name="parameter-parsing-nextflow"></a>

Pour Nextflow, HealthOmics génère le modèle de paramètres en analysant le `nextflow_schema.json` fichier. Si la définition du flux de travail n'inclut pas de fichier de schéma, HealthOmics analyse le fichier de définition du flux de travail principal.

**Topics**
+ [Analyse du fichier de schéma](#parameter-parsing-nextflow-schema)
+ [Analyse du fichier principal](#parameter-parsing-nextflow-main)
+ [Paramètres imbriqués](#parameter-parsing-nextflow-nested)
+ [Exemples d'interpolation Nextflow](#parameter-parsing-nextflow-examples)

#### Analyse du fichier de schéma
<a name="parameter-parsing-nextflow-schema"></a>

Pour que l'analyse fonctionne correctement, assurez-vous que le fichier de schéma répond aux exigences suivantes :
+ Le fichier de schéma est nommé `nextflow_schema.json` et se trouve dans le même répertoire que le fichier de flux de travail principal.
+ Le fichier de schéma est un fichier JSON valide tel que défini dans l'un des schémas suivants :
  + [schéma json. org/draft/2020-12/schema](https://json-schema.org/draft/2020-12/schema).
  + [schéma json. org/draft-07/schema](https://json-schema.org/draft-07/schema).

HealthOmics analyse le `nextflow_schema.json` fichier pour générer le modèle de paramètres :
+ Extrait tout **properties** ce qui est défini dans le schéma.
+ Comprend la propriété **description** si disponible pour la propriété.
+ Indique si chaque paramètre est facultatif ou obligatoire, en fonction du **required** champ de la propriété.

L'exemple suivant montre un fichier de définition et le fichier de paramètres généré.

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

Le modèle de paramètres généré :

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

#### Analyse du fichier principal
<a name="parameter-parsing-nextflow-main"></a>

Si la définition du flux de travail n'inclut aucun `nextflow_schema.json` fichier, HealthOmics analyse le fichier de définition du flux de travail principal.

HealthOmics analyse les `params` expressions présentes dans le fichier de définition du flux de travail principal et dans le `nextflow.config` fichier. Tous ceux `params` dont les valeurs par défaut sont marqués comme facultatifs.

Pour que l'analyse fonctionne correctement, tenez compte des exigences suivantes :
+ HealthOmics analyse uniquement le fichier de définition du flux de travail principal. Pour garantir que tous les paramètres sont capturés, nous vous recommandons de les connecter à tous **params** les sous-modules et aux flux de travail importés.
+ Le fichier de configuration est facultatif. Si vous en définissez un, nommez-le `nextflow.config` et placez-le dans le même répertoire que le fichier de définition du flux de travail principal.

L'exemple suivant montre un fichier de définition et le modèle de paramètres généré.

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

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

Le modèle de paramètres généré :

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

Pour les valeurs par défaut définies dans nextflow.config, HealthOmics collecte les `params` assignations et les paramètres déclarés dans le fichier`params {}`, comme indiqué dans l'exemple suivant. Dans les instructions d'affectation, elles `params` doivent apparaître dans la partie gauche de la déclaration.

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

Le modèle de paramètres généré :

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

#### Paramètres imbriqués
<a name="parameter-parsing-nextflow-nested"></a>

Les deux `nextflow_schema.json` et `nextflow.config` autorisent les paramètres imbriqués. Toutefois, le modèle de HealthOmics paramètres ne nécessite que les paramètres de niveau supérieur. Si votre flux de travail utilise un paramètre imbriqué, vous devez fournir un objet JSON en entrée pour ce paramètre.

##### Paramètres imbriqués dans les fichiers de schéma
<a name="parameter-parsing-schema-nested"></a>

HealthOmics sauts imbriqués **params** lors de l'analyse d'un fichier. `nextflow_schema.json` Par exemple, si vous définissez le `nextflow_schema.json` fichier suivant :

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

HealthOmics ignore `input_file` et `input_num` lorsqu'il génère le modèle de paramètres :

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

Lorsque vous exécutez ce flux de travail, HealthOmics vous vous attendez à un `input.json` fichier similaire au suivant :

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

##### Paramètres imbriqués dans les fichiers de configuration
<a name="parameter-parsing-config-nested"></a>

HealthOmics ne collecte pas les données imbriquées **params** dans un `nextflow.config` fichier et les ignore lors de l'analyse. Par exemple, si vous définissez le `nextflow.config` fichier suivant :

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

HealthOmics ignore `params.nested.beta` et `params.group.delta` lorsqu'il génère le modèle de paramètres :

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

#### Exemples d'interpolation Nextflow
<a name="parameter-parsing-nextflow-examples"></a>

Le tableau suivant présente des exemples d'interpolation Nextflow pour les paramètres du fichier principal.


| Paramètres | Obligatoire | 
| --- | --- | 
| params.input\$1file | Oui | 
| params.input\$1file = "s3://bucket/data.json » | Non | 
| params.nested.input\$1file | N/A | 
| params.nested.input\$1file = "s3://bucket/data.json » | N/A | 

Le tableau suivant présente des exemples d'interpolation Nextflow pour les paramètres du fichier. `nextflow.config`


| Paramètres | Obligatoire | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | Non | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | Non | 
|  <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 | 

# Images de conteneur pour les flux de travail privés
<a name="workflows-ecr"></a>

HealthOmics prend en charge les images de conteneurs hébergées dans les référentiels privés Amazon ECR. Vous pouvez créer des images de conteneur et les télécharger dans le référentiel privé. Vous pouvez également utiliser votre registre privé Amazon ECR comme cache d'extraction pour synchroniser le contenu des registres en amont.

Votre référentiel Amazon ECR doit résider dans la même AWS région que le compte appelant le service. Une autre personne Compte AWS peut être propriétaire de l'image du conteneur, à condition que le référentiel d'images source fournisse les autorisations appropriées. Pour de plus amples informations, veuillez consulter [Politiques relatives à l'accès multicompte à Amazon ECR](permissions-ecr.md#permissions-cross-account).

Nous vous recommandons de définir votre image de conteneur Amazon ECR en URIs tant que paramètre de votre flux de travail afin que l'accès puisse être vérifié avant le début de l'exécution. Cela facilite également l'exécution d'un flux de travail dans une nouvelle région en modifiant le paramètre Région.

**Note**  
HealthOmics ne prend pas en charge les conteneurs ARM et ne prend pas en charge l'accès aux référentiels publics.

Pour plus d'informations sur la configuration des autorisations IAM pour accéder HealthOmics à Amazon ECR, consultez. [HealthOmics Autorisations relatives aux ressources](permissions-resource.md)

**Topics**
+ [Synchronisation avec des registres de conteneurs tiers](#ecr-pull-through)
+ [Considérations générales relatives aux images de conteneurs Amazon ECR](#ecr-considerations)
+ [Variables d'environnement pour les HealthOmics flux de travail](#ecr-env-vars)
+ [Utilisation de Java dans les images de conteneurs Amazon ECR](#ecr-java-considerations)
+ [Ajouter des entrées de tâches à une image de conteneur Amazon ECR](#ecr-tasks)

## Synchronisation avec des registres de conteneurs tiers
<a name="ecr-pull-through"></a>

Vous pouvez utiliser les règles de cache d'extraction d'Amazon ECR pour synchroniser les référentiels d'un registre en amont pris en charge avec vos référentiels privés Amazon ECR. Pour plus d'informations, consultez [Synchroniser un registre en amont](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html) dans le *guide de l'utilisateur Amazon ECR.*

Le cache d'extraction crée automatiquement le référentiel d'images dans votre registre privé lorsque vous créez le cache, et il se synchronise automatiquement avec l'image mise en cache lorsque des modifications sont apportées à l'image en amont. 

HealthOmics prend en charge le cache d'extraction pour les registres en amont suivants : 
+ Amazon ECR Public
+ Registre d'images de conteneurs Kubernetes
+ Quay
+ Docker Hub 
+ Microsoft Azure Container Registry
+ GitHub Registre des conteneurs 
+ GitLab Registre des conteneurs 

HealthOmics ne prend pas en charge le cache d'extraction pour un référentiel privé Amazon ECR en amont.

Les avantages de l'utilisation du cache d'extraction Amazon ECR sont les suivants :

1. Vous évitez d'avoir à migrer manuellement les images de conteneur vers Amazon ECR ou à synchroniser les mises à jour depuis le référentiel tiers. 

1. Les flux de travail accèdent aux images de conteneur synchronisées de votre référentiel privé, ce qui est plus fiable que le téléchargement de contenu depuis un registre public au moment de l'exécution.

1. Comme les caches d'extraction Amazon ECR utilisent une structure d'URI prévisible, le HealthOmics service peut automatiquement mapper l'URI privé Amazon ECR avec l'URI de registre en amont. Vous n'êtes pas obligé de mettre à jour et de remplacer les valeurs d'URI dans la définition du flux de travail.

**Topics**
+ [Configuration du cache d'extraction](#ecr-pull-through-configure)
+ [Mappages de registres](#ecr-pull-through-registry-mapping)
+ [Mappages d'images](#ecr-pull-through-mapping-format)

### Configuration du cache d'extraction
<a name="ecr-pull-through-configure"></a>

Amazon ECR fournit un registre pour vous Compte AWS dans chaque région. Assurez-vous de créer la configuration Amazon ECR dans la même région que celle où vous prévoyez d'exécuter le flux de travail.

Les sections suivantes décrivent les tâches de configuration du cache d'extraction.

**Topics**
+ [Création d'une règle de cache d'extraction](#create-ecr-ptc)
+ [Autorisations de registre pour le registre en amont](#reg-ecr-ptc)
+ [Modèles de création de référentiels](#repo-create-templates-ptc)
+ [Création du flux de travail](#reg-mapping-ecr-ptc)

#### Création d'une règle de cache d'extraction
<a name="create-ecr-ptc"></a>

Créez une règle de cache d'extraction Amazon ECR pour chaque registre en amont contenant des images que vous souhaitez mettre en cache. Une règle spécifie un mappage entre un registre en amont et le référentiel privé Amazon ECR. 

Pour un registre en amont qui nécessite une authentification, vous devez fournir vos informations d'identification à l'aide d'AWS Secrets Manager.

**Note**  
Ne modifiez pas une règle de cache d'extraction lorsqu'une exécution active utilise le référentiel privé. L'exécution pourrait échouer ou, plus grave encore, entraîner l'utilisation d'images inattendues dans votre pipeline.

Pour plus d'informations, consultez la section [Création d'une règle de cache d'extraction](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) dans le *guide de l'utilisateur d'Amazon Elastic Container Registry*.

##### Création d'une règle de cache d'extraction à l'aide de la console
<a name="create-ecr-ptc-console"></a>

Pour configurer le cache d'extraction, procédez comme suit à l'aide de la console Amazon ECR :

1. Ouvrez la console Amazon ECR : https://console.aws.amazon.com /ecr

1. Dans le menu de gauche, sous **Registre privé**, développez **Fonctionnalités et paramètres**, puis choisissez **Pull through cache**.

1. Sur la page **du cache** d'extraction, choisissez **Ajouter une règle**.

1. Dans le panneau de **registre Upstream**, choisissez le registre amont à synchroniser avec votre registre privé, puis choisissez **Next**.

1. Si le registre en amont nécessite une authentification, la console ouvre une nouvelle page dans laquelle vous spécifiez le secret SageMaker AI qui contient vos informations d'identification. Choisissez **Suivant**.

1. Sous **Spécifier les espaces de noms**, dans le panneau de l'**espace de noms du cache**, choisissez de créer les référentiels privés à l'aide d'un préfixe de référentiel spécifique ou sans préfixe. Si vous choisissez d'utiliser un préfixe, spécifiez le nom du préfixe dans le préfixe du **référentiel de cache**.

1. Dans le panneau de l'**espace de noms Upstream**, choisissez si vous souhaitez extraire des référentiels en amont en utilisant un préfixe de référentiel spécifique ou sans préfixe. Si vous choisissez d'utiliser un préfixe, spécifiez le nom du préfixe dans le préfixe du **référentiel Upstream**.

   Le panneau d'**exemple Namespace** affiche un exemple de pull request, une URL en amont et l'URL du référentiel de cache créé.

1. Choisissez **Suivant**.

1. Vérifiez la configuration et choisissez **Create** pour créer la règle.

Pour plus d'informations, voir [Création d'une règle de cache d'extraction (console AWS de gestion)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console).

##### Création d'une règle de cache d'extraction à l'aide de la CLI
<a name="create-ecr-ptc-cli"></a>

Utilisez la **create-pull-through-cache-rule** commande Amazon ECR pour créer une règle de cache d'extraction. Pour les registres en amont qui nécessitent une authentification, stockez les informations d'identification dans un secret Secrets Manager.

Les sections suivantes fournissent des exemples pour chaque registre en amont pris en charge.

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

L'exemple suivant crée une règle de mise en cache par extraction pour le registre public Amazon ECR. Il spécifie un préfixe de référentiel de `ecr-public`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `ecr-public/upstream-repository-name`.

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

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

L'exemple suivant crée une règle de mise en cache par extraction pour le registre public Kubernetes. Il spécifie un préfixe de référentiel de `kubernetes`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `kubernetes/upstream-repository-name`.

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

##### Pour Quay
<a name="ecr-ptc-cli-quay"></a>

L'exemple suivant crée une règle de mise en cache par extraction pour le registre public Quay. Il spécifie un préfixe de référentiel de `quay`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `quay/upstream-repository-name`.

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

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

L'exemple suivant crée une règle de mise en cache par extraction pour le registre Docker Hub. Il spécifie un préfixe de référentiel de `docker-hub`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `docker-hub/upstream-repository-name`. Vous devez spécifier l'Amazon Resource Name (ARN) complet du secret contenant vos informations d'identification Docker Hub.

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

##### Pour le registre des GitHub conteneurs
<a name="ecr-ptc-cli-public-github"></a>

L'exemple suivant crée une règle de cache d'extraction pour le registre des GitHub conteneurs. Il spécifie un préfixe de référentiel de `github`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `github/upstream-repository-name`. Vous devez spécifier le nom Amazon Resource Name (ARN) complet du secret contenant vos informations d'identification du registre des GitHub conteneurs.

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

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

L'exemple suivant crée une règle de cache d'extraction pour le Microsoft Azure Container Registry. Il spécifie un préfixe de référentiel de `azure`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `azure/upstream-repository-name`. Vous devez spécifier l'Amazon Resource Name (ARN) complet du secret contenant vos informations d'identification Azure Container Registry.

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

##### Pour le registre des GitLab conteneurs
<a name="ecr-ptc-cli-gitlab"></a>

L'exemple suivant crée une règle de cache d'extraction pour le registre des GitLab conteneurs. Il spécifie un préfixe de référentiel de `gitlab`, ce qui fait que chaque référentiel créé à l'aide de la règle de mise en cache par extraction aura le schéma de dénomination de `gitlab/upstream-repository-name`. Vous devez spécifier le nom Amazon Resource Name (ARN) complet du secret contenant vos informations d'identification du registre des GitLab conteneurs.

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

Pour plus d'informations, consultez la section [Créer une règle de cache d'extraction (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) dans le *guide de l'utilisateur Amazon ECR.*

Vous pouvez utiliser la commande **get-run-task** CLI pour récupérer des informations sur l'image du conteneur utilisée pour une tâche spécifique :

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

La sortie inclut les informations suivantes concernant l'image du conteneur :

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

#### Autorisations de registre pour le registre en amont
<a name="reg-ecr-ptc"></a>

Utilisez les autorisations de registre HealthOmics pour autoriser l'utilisation du cache d'extraction et l'extraction des images du conteneur dans le registre privé Amazon ECR. Ajoutez une politique de registre Amazon ECR au registre qui fournit les conteneurs utilisés lors des exécutions. 

La politique suivante autorise le HealthOmics service à créer des référentiels avec le ou les préfixes de cache d'extraction spécifiés et à lancer des extractions en amont dans ces référentiels. 

1. Depuis la console Amazon ECR, ouvrez le menu de gauche, sous **Registre privé**, développez **les autorisations du registre**, puis choisissez **Generate statement**.

1. En haut à droite, choisissez JSON. Entrez une politique similaire à la suivante :

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

------

#### Modèles de création de référentiels
<a name="repo-create-templates-ptc"></a>

Pour utiliser la mise en cache par extraction HealthOmics, le référentiel Amazon ECR doit disposer d'un modèle de création de référentiel. Le modèle définit les paramètres de configuration lorsque vous ou Amazon ECR créez un référentiel privé pour un registre en amont. 

Chaque modèle contient un préfixe d'espace de noms de référentiel, qu'Amazon ECR utilise pour associer les nouveaux référentiels à un modèle spécifique. Les modèles spécifient la configuration de tous les paramètres du référentiel, notamment les politiques d'accès basées sur les ressources, l'immuabilité des balises, le chiffrement et les politiques de cycle de vie.

Pour plus d'informations, consultez les [modèles de création de référentiels](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html) dans le *guide de l'utilisateur d'Amazon Elastic Container Registry*.

Comment créer un modèle de création de référentiel :

1. Depuis la console Amazon ECR, ouvrez le menu de gauche, sous **Registre privé**, développez **Fonctionnalités et paramètres**, puis choisissez **Modèles de création de référentiel**.

1. Sélectionnez **Create template (Créer un modèle)**.

1. Dans **Détails du modèle**, choisissez **Pull through cache**.

1. Choisissez d'appliquer ce modèle à un préfixe spécifique ou à tous les référentiels qui ne correspondent pas à un autre modèle.

   **Si vous choisissez **Un préfixe spécifique, entrez la valeur du préfixe** de l'espace de noms dans Préfixe.** Vous avez spécifié ce préfixe lors de la création de la règle PTC.

1. Choisissez **Suivant**.

1. Dans la **page de configuration de la création d'un référentiel**, entrez **les autorisations du référentiel**. Utilisez l'un des exemples de déclarations de politique ou saisissez-en un similaire à l'exemple suivant :

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

****  

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

------

1. Vous pouvez éventuellement ajouter des paramètres de référentiel tels que la politique de cycle de vie et les balises. Amazon ECR applique ces règles à toutes les images de conteneur créées pour le cache d'extraction qui utilisent le préfixe spécifié.

1. Choisissez **Suivant**.

1. Vérifiez la configuration et choisissez **Next**.

#### Création du flux de travail
<a name="reg-mapping-ecr-ptc"></a>

Lorsque vous créez un nouveau flux de travail ou une nouvelle version de flux de travail, passez en revue les mappages de registre et mettez-les à jour si nécessaire. Pour en savoir plus, consultez [Création d'un flux de travail privé](create-private-workflow.md).

### Mappages de registres
<a name="ecr-pull-through-registry-mapping"></a>

Vous définissez des mappages de registre pour mapper les préfixes de votre registre Amazon ECR privé et les noms de registre en amont.

Pour plus d'informations sur les mappages de registre Amazon ECR, consultez [Création d'une règle de cache d'extraction dans Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

L'exemple suivant montre les mappages de registre vers Docker Hub, Quay et Amazon ECR Public.

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

### Mappages d'images
<a name="ecr-pull-through-mapping-format"></a>

Vous définissez des mappages d'images pour établir une correspondance entre les noms d'images tels que définis dans vos flux de travail Amazon ECR privés et les noms d'images dans le registre en amont.

Vous pouvez utiliser des mappages d'images avec des registres qui prennent en charge le pull through cache. Vous pouvez également utiliser des mappages d'images avec des registres en amont où le cache d'extraction HealthOmics n'est pas pris en charge. Vous devez synchroniser manuellement le registre en amont avec votre dépôt privé. 

Pour plus d'informations sur les mappages d'images Amazon ECR, consultez [Création d'une règle de cache d'extraction dans Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

L'exemple suivant montre les mappages entre des images Amazon ECR privées et une image génomique publique et la dernière image Ubuntu.

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

## Considérations générales relatives aux images de conteneurs Amazon ECR
<a name="ecr-considerations"></a>
+ Architecture

  HealthOmics prend en charge les conteneurs x86\$164. Si votre machine locale est basée sur ARM, comme Apple Mac, utilisez une commande telle que la suivante pour créer une image de conteneur x86\$164 : 

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ Point d'entrée et coque

  HealthOmics les moteurs de flux de travail injectent des scripts bash pour remplacer les commandes des images de conteneur utilisées par les tâches de flux de travail. Ainsi, les images de conteneur doivent être créées sans point d'entrée spécifié, de sorte qu'un shell bash soit le shell par défaut. 
+ Chemins montés

  Un système de fichiers partagé est monté sur les tâches du conteneur dans /tmp. Toutes les données ou tous les outils intégrés à l'image du conteneur à cet emplacement seront remplacés.

  La définition du flux de travail est accessible aux tâches via un montage en lecture seule sur /mnt/workflow.
+ Taille de l’image

  Voir [HealthOmics quotas de taille fixe du flux de travail](fixed-quotas.md#fixed-quotas-workflows) pour les tailles maximales des images des conteneurs.

## Variables d'environnement pour les HealthOmics flux de travail
<a name="ecr-env-vars"></a>

HealthOmics fournit des variables d'environnement contenant des informations sur le flux de travail exécuté dans le conteneur. Vous pouvez utiliser les valeurs de ces variables dans la logique de vos tâches de flux de travail.

Toutes les variables HealthOmics de flux de travail commencent par le `AWS_WORKFLOW_` préfixe. Ce préfixe est un préfixe de variable d'environnement protégée. N'utilisez pas ce préfixe pour vos propres variables dans les conteneurs de flux de travail. 

HealthOmics fournit les variables d'environnement de flux de travail suivantes :

**AWS\$1REGION**  
Cette variable correspond à la région dans laquelle le conteneur est exécuté.

**AWS\$1WORKFLOW\$1EXÉCUTER**  
Cette variable est le nom de l'exécution en cours.

**AWS\$1WORKFLOW\$1RUN\$1ID**  
Cette variable est l'identifiant de l'exécution en cours.

**AWS\$1WORKFLOW\$1EXÉCUTER\$1UUID**  
Cette variable est l'UUID d'exécution de l'exécution en cours.

**AWS\$1WORKFLOW\$1TÂCHE**  
Cette variable est le nom de la tâche en cours.

**AWS\$1WORKFLOW\$1IDENTIFIANT DE TÂCHE**  
Cette variable est l'identifiant de la tâche en cours.

**AWS\$1WORKFLOW\$1UUID DE TÂCHE**  
Cette variable est l'UUID de la tâche en cours.

L'exemple suivant montre les valeurs typiques de chaque variable d'environnement :

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

## Utilisation de Java dans les images de conteneurs Amazon ECR
<a name="ecr-java-considerations"></a>

Si une tâche de flux de travail utilise une application Java telle que GATK, tenez compte des exigences de mémoire suivantes pour le conteneur :
+ Les applications Java utilisent de la mémoire en pile et de la mémoire en tas. Par défaut, la mémoire de segment maximale est un pourcentage de la mémoire totale disponible dans le conteneur. Cette valeur par défaut dépend de la distribution et de la version de la JVM spécifiques. Consultez donc la documentation correspondante à votre machine virtuelle Java ou définissez explicitement le maximum de mémoire à l'aide des options de ligne de commande Java (telles que `-Xmx`). 
+ Ne définissez pas la mémoire de segment maximale à 100 % de l'allocation de mémoire du conteneur, car la pile JVM nécessite également de la mémoire. De la mémoire est également requise pour le ramasse-miettes de la machine virtuelle Java et pour tout autre processus du système d'exploitation exécuté dans le conteneur.
+ Certaines applications Java, telles que GATK, peuvent utiliser des invocations de méthodes natives ou d'autres optimisations telles que des fichiers de mappage de mémoire. Ces techniques nécessitent des allocations de mémoire effectuées « hors segment », qui ne sont pas contrôlées par le paramètre de mémoire maximale de la JVM. 

  Si vous savez (ou pensez) que votre application Java alloue de la mémoire hors segment, assurez-vous que l'allocation de mémoire aux tâches inclut les exigences en matière de mémoire externe.

  Si ces allocations hors segment entraînent un manque de mémoire du conteneur, vous ne verrez généralement pas d'**OutOfMemory**erreur Java, car la JVM ne contrôle pas cette mémoire. 

## Ajouter des entrées de tâches à une image de conteneur Amazon ECR
<a name="ecr-tasks"></a>

Ajoutez tous les exécutables, bibliothèques et scripts nécessaires pour exécuter une tâche de flux de travail dans l'image Amazon ECR utilisée pour exécuter la tâche. 

Il est recommandé d'éviter d'utiliser des scripts, des fichiers binaires et des bibliothèques externes à une image de conteneur de tâches. Cela est particulièrement important lorsque vous utilisez `nf-core` des flux de travail qui utilisent un `bin` répertoire dans le cadre du package de flux de travail. Bien que ce répertoire soit disponible pour la tâche de flux de travail, il est monté en tant que répertoire en lecture seule. Les ressources requises dans ce répertoire doivent être copiées dans l'image de la tâche et mises à disposition lors de l'exécution ou lors de la création de l'image de conteneur utilisée pour la tâche. 

Voir [HealthOmics quotas de taille fixe du flux de travail](fixed-quotas.md#fixed-quotas-workflows) pour connaître la taille maximale de l'image de conteneur prise HealthOmics en charge.

# HealthOmics Fichiers README du flux de travail
<a name="workflows-readme"></a>

Vous pouvez télécharger un fichier README.md contenant des instructions, des diagrammes et des informations essentielles pour votre flux de travail. Chaque version du flux de travail prend en charge un fichier README, que vous pouvez mettre à jour à tout moment.

**Les exigences du README incluent :**
+ Le fichier README doit être au format Markdown (.md)
+ Taille de fichier maximale : 500 KiB

**Topics**
+ [Utiliser un fichier README existant](#workflows-add-readme)
+ [Conditions de rendu](#workflows-rendering-readme)

## Utiliser un fichier README existant
<a name="workflows-add-readme"></a>

READMEs exportés depuis les référentiels Git contiennent des liens relatifs qui ne fonctionnent généralement pas en dehors du référentiel. HealthOmics L'intégration Git les convertit automatiquement en liens absolus pour un rendu correct dans la console, éliminant ainsi le besoin de mises à jour manuelles des URL. 

Pour les images READMEs importées depuis Amazon S3 ou des lecteurs locaux, les images et les liens doivent être soit publics, URLs soit avoir leurs chemins relatifs mis à jour pour un rendu correct.

**Note**  
Les images doivent être hébergées publiquement pour être affichées dans la HealthOmics console. Les images stockées dans GitHub Enterprise Server ou dans GitLab Self-Managed des référentiels ne peuvent pas être rendues.

## Conditions de rendu
<a name="workflows-rendering-readme"></a>

La HealthOmics console interpole les images et les liens accessibles au public à l'aide de chemins absolus. Pour effectuer un rendu à URLs partir de référentiels privés, l'utilisateur doit avoir accès au référentiel. GitLab Self-ManagedLes référentiels For GitHub Enterprise Server ou, qui utilisent des domaines personnalisés, HealthOmics ne peuvent pas résoudre les liens relatifs ni afficher les images stockées dans ces référentiels privés.

Le tableau suivant indique les éléments Markdown pris en charge par la vue README de la AWS console.


| Element | AWS console | 
| --- | --- | 
| Alerts (Alertes) | Oui, mais sans icônes | 
| Badges | Oui | 
| Formatage de texte de base | Oui | 
| [Blocs de code](https://www.markdownguide.org/basic-syntax/#code-blocks) | Oui, mais ne possède pas de fonctionnalité de [surlignage syntaxique](https://www.markdownguide.org/extended-syntax/#syntax-highlighting) et de bouton de copie  | 
| Sections pliables | Oui | 
| [Rubriques](https://www.markdownguide.org/basic-syntax/#headings) | Oui | 
| [Formats d'image](https://www.markdownguide.org/basic-syntax/#images-1) | Oui | 
| [Image (cliquable)](https://www.markdownguide.org/basic-syntax/#linking-images) | Oui | 
| [Sauts de ligne](https://www.markdownguide.org/basic-syntax/#line-breaks) | Oui | 
| Schéma de la sirène | Peut uniquement ouvrir le graphique, déplacer la position du graphique et copier le code | 
| Quotes | Oui | 
| [Indice](https://www.markdownguide.org/extended-syntax/#subscript) [et exposant](https://www.markdownguide.org/extended-syntax/#superscript) | Oui | 
| [Tables](https://www.markdownguide.org/extended-syntax/#tables) | Oui, mais ne prend pas en charge l'alignement du texte | 
| Alignement du texte | Oui | 

### Utilisation de l'image et du lien URLs
<a name="workflows-urls-readme"></a>

En fonction de votre fournisseur de source, structurez votre base URLs de pages et d'images dans les formats suivants.
+ `{username}`: nom d'utilisateur où le dépôt est hébergé.
+ `{repo}`: nom du référentiel.
+ `{ref}`: référence source (branche, balise et ID de validation). 
+ `{path}`: chemin du fichier vers la page ou l'image dans le référentiel. 


| Fournisseur de source | URL de la page | URL de l'image | 
| --- | --- | --- | 
| 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, et Bitbucket prend en charge à la fois les pages et URLs les images qui renvoient vers un dépôt public. Le tableau suivant indique la prise en charge par chaque fournisseur de source pour le rendu d'images et de liens URLs pour les référentiels privés.


| Support pour les référentiels privés | Fournisseur de source | URL de la page | URL de l'image | 
| --- | --- | --- | --- | 
| GitHub | Uniquement avec accès au référentiel | Non | 
| GitLab | Uniquement avec accès au référentiel | Non | 
| Bitbucket | Uniquement avec accès au référentiel | Non | 

# Demande de licences Sentieon pour des flux de travail privés
<a name="private-workflows-subscribe"></a>

Si votre flux de travail privé utilise le logiciel Sentieon, vous avez besoin d'une licence Senieon. Pour demander et configurer une licence pour le logiciel Sentieon, procédez comme suit :
+ Demandez une licence Sentieon 
  + Envoyez un e-mail au groupe de support Sentieon (support@sentieon.com) pour demander une licence logicielle.
    + Indiquez votre nom d'utilisateur AWS canonique dans l'e-mail.
    + Trouvez votre nom d'utilisateur AWS canonique en suivant [ces instructions](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId).
+ Mettez à jour votre rôle de HealthOmics service pour lui accorder l'accès au proxy du serveur de licences Sentieon et au bucket Sentieon Omics de votre région. L'exemple suivant autorise l'accès à`us-east-1`. Si nécessaire, remplacez ce texte par votre région.

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

------
+ Générez un dossier d' AWS assistance pour accéder au proxy du serveur de licences Sentieon. 
  + Pour créer un dossier d'assistance, accédez à [support.console.aws.amazon.com](https://support.console.aws.amazon.com).
  + Indiquez votre région Compte AWS et votre région dans le dossier d'assistance. Votre compte est ajouté à la liste des autorisations pour le proxy du serveur de licences.
+ Créez votre flux de travail privé à l'aide du conteneur Sentieon et du script de licence Sentieon.
  + Pour des instructions supplémentaires sur l'utilisation des outils Sentieon dans des flux de travail privés, voir [Sentieon-Amazon-Omics](https://github.com/Sentieon/sentieon-amazon-omics) dans. GitHub
+ La version 202112.07 et supérieure du logiciel Sentieon prend en charge le proxy du HealthOmics serveur de licences. Pour utiliser les versions du logiciel Sentieon antérieures au 202112.07, contactez le support Sentieon.

# Linters de flux de travail dans HealthOmics
<a name="workflows-linter"></a>

Après avoir créé un flux de travail, nous vous recommandons d'exécuter un linter sur le flux de travail avant de commencer la première exécution. Le linter détecte les erreurs susceptibles de provoquer l'échec de l'exécution. 

Pour WDL, exécute HealthOmics automatiquement un linter lorsque vous créez le flux de travail. La sortie Linter est disponible dans le `statusMessage` champ de la **get-workflow** réponse. Utilisez la commande CLI suivante pour récupérer la sortie d'état (utilisez l'ID du flux de travail WDL que vous avez créé) : 

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

HealthOmics fournit des linters que vous pouvez exécuter sur la définition du flux de travail avant de créer le flux de travail. Exécutez ces linters sur les pipelines existants vers lesquels vous effectuez la migration. HealthOmics
+ **WDL**— Une image Amazon ECR publique pour exécuter un linter [WDL](https://gallery.ecr.aws/aws-genomics/healthomics-linter).
+ **Nextflow**— Une image Amazon ECR publique pour exécuter les [règles Linter pour]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow) Nextflow. Vous pouvez accéder au code source de ce linter à partir de [GitHub](https://github.com/awslabs/linter-rules-for-nextflow).
+ **CWL**— non disponible

# HealthOmics opérations de flux de travail
<a name="creating-private-workflows"></a>

Pour créer un flux de travail privé, vous devez :
+  **Workflow definition file:**Un fichier de définition de flux de travail écrit en WDLNextflow, ouCWL. La définition du flux de travail spécifie les entrées et les sorties pour les exécutions qui utilisent le flux de travail. Il inclut également des spécifications pour les exécutions et les tâches d'exécution pour votre flux de travail, y compris les exigences en matière de calcul et de mémoire. Le fichier de définition du flux de travail doit être au `.zip` format. Pour plus d'informations, consultez la section [Fichiers de définition du flux](workflow-definition-files.md) de travail dans HealthOmics.
  + Vous pouvez utiliser [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) pour créer et valider vos fichiers de définition de flux de travail dans WDL, Nextflow et CWL. Pour plus d'informations, consultez les [exemples d'instructions pour Amazon Q CLI](getting-started.md#omics-q-prompts) et le didacticiel [HealthOmics Agentic Generative AI](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) sur. GitHub
+  **(Optional) Parameter template file:**Un fichier de modèle de paramètres écrit enJSON. Créez le fichier pour définir les paramètres d'exécution ou HealthOmics générez le modèle de paramètres pour vous. Pour plus d'informations, consultez la section [Fichiers modèles de paramètres pour les HealthOmics flux de travail](parameter-templates.md). 
+ **Amazon ECR container images:**Créez des référentiels Amazon ECR privés pour chaque conteneur utilisé dans le flux de travail. Créez des images de conteneur pour le flux de travail et stockez-les dans un référentiel privé, ou synchronisez le contenu d'un registre en amont pris en charge avec votre référentiel privé ECR. 
+  **(Optional) Sentieon licenses:**Demandez une Sentieon licence pour utiliser le Sentieon logiciel dans des flux de travail privés.

Pour les fichiers de définition de flux de travail supérieurs à 4 Mo (compressés), choisissez l'une des options suivantes lors de la création du flux de travail :
+ Téléchargez-le dans un dossier Amazon Simple Storage Service et spécifiez l'emplacement.
+ Téléchargez vers un référentiel externe (taille maximale de 1 GiB) et spécifiez les détails du référentiel.

Après avoir créé un flux de travail, vous pouvez mettre à jour les informations de flux de travail suivantes avec l'`UpdateWorkflow`opération :
+ Nom
+ Description
+ Type de stockage par défaut
+ Capacité de stockage par défaut (avec ID de flux de travail)
+ fichier README.md

Pour modifier d'autres informations du flux de travail, créez un nouveau flux de travail ou une nouvelle version de flux de travail.

Utilisez le versionnement des flux de travail pour organiser et structurer vos flux de travail. Les versions vous aident également à gérer l'introduction de mises à jour itératives du flux de travail. Pour plus d'informations sur les versions, consultez [Création d'une version de flux de travail](workflows-version-create.md).

**Topics**
+ [Création d'un flux de travail privé](create-private-workflow.md)
+ [Mettre à jour un flux de travail privé](update-private-workflow.md)
+ [Supprimer un flux de travail privé](delete-private-workflow.md)
+ [Vérifier l'état du flux de travail](using-get-workflow.md)
+ [Référencer des fichiers génomiques à partir d'une définition de flux de travail](create-ref-files.md)

# Création d'un flux de travail privé
<a name="create-private-workflow"></a>

Créez un flux de travail à l'aide de la HealthOmics console, des commandes de la AWS CLI ou de l'une des AWS SDKs.

**Note**  
N'incluez aucune information personnellement identifiable (PII) dans les noms des flux de travail. Ces noms sont visibles dans les CloudWatch journaux.

Lorsque vous créez un flux de travail, HealthOmics attribuez un identifiant unique universel (UUID) au flux de travail. L'UUID du flux de travail est un identifiant global unique (GUID) unique pour tous les flux de travail et toutes les versions de flux de travail. À des fins de provenance des données, nous vous recommandons d'utiliser l'UUID du flux de travail pour identifier les flux de travail de manière unique.

Si vos tâches de flux de travail utilisent des outils externes (exécutables, bibliothèques ou scripts), vous créez ces outils dans une image de conteneur. Vous disposez des options suivantes pour héberger l'image du conteneur :
+ Hébergez l'image du conteneur dans le registre privé ECR. Les conditions requises pour cette option sont les suivantes :
  + Créez un référentiel privé ECR ou choisissez un référentiel existant.
  + Configurez la politique de ressources ECR comme décrit dans[Autorisations Amazon ECR](permissions-ecr.md).
  + Téléchargez l'image de votre conteneur dans le référentiel privé. 
+ Synchronisez l'image du conteneur avec le contenu d'un registre tiers pris en charge. Les conditions requises pour cette option sont les suivantes :
  + Dans le registre privé ECR, configurez une règle de cache d'extraction pour chaque registre en amont. Pour de plus amples informations, veuillez consulter [Mappages d'images](workflows-ecr.md#ecr-pull-through-mapping-format).
  + Configurez la politique de ressources ECR comme décrit dans[Autorisations Amazon ECR](permissions-ecr.md).
  + Créez des modèles de création de référentiels. Le modèle définit les paramètres à partir desquels Amazon ECR crée le référentiel privé pour un registre en amont.
  + Créez des mappages de préfixes pour remapper les références d'images de conteneur dans la définition du flux de travail avec les espaces de noms du cache ECR.

Lorsque vous créez un flux de travail, vous fournissez une définition de flux de travail contenant des informations sur le flux de travail, les exécutions et les tâches. HealthOmics peut récupérer la définition du flux de travail sous forme d'archive .zip stockée localement ou dans un compartiment Amazon S3, ou à partir d'un référentiel Git compatible. 

**Topics**
+ [Création d'un flux de travail à l'aide de la console](#console-create-workflows)
+ [Création d'un flux de travail à l'aide de la CLI](#api-create-workflows)
+ [Création d'un flux de travail à l'aide d'un SDK](#sdk-create-workflows)

## Création d'un flux de travail à l'aide de la console
<a name="console-create-workflows"></a>

**Étapes de création d'un flux de travail**

1. Ouvrez la [HealthOmics console](https://console.aws.amazon.com/omics/).

1.  Si nécessaire, ouvrez le volet de navigation de gauche (≡). Choisissez des **flux de travail privés**.

1. Sur la page **Flux de travail privés**, choisissez **Créer un flux de travail**.

1. Sur la page **Définir le flux** de travail, fournissez les informations suivantes :

   1. **Nom du flux** de travail : nom distinctif pour ce flux de travail. Nous vous recommandons de définir des noms de flux de travail pour organiser vos exécutions dans la AWS HealthOmics console et CloudWatch les journaux.

   1. **Description** (facultatif) : description de ce flux de travail.

1. Dans le panneau **de définition du flux** de travail, fournissez les informations suivantes :

   1. **Langue du flux** de travail (facultatif) : sélectionnez la langue de spécification du flux de travail. Dans le cas contraire, HealthOmics détermine la langue à partir de la définition du flux de travail.

   1. Pour **la source de définition du flux** de travail, choisissez d'importer le dossier de définition à partir d'un référentiel Git, d'un emplacement Amazon S3 ou d'un lecteur local.

      1. Pour **l'importation depuis un service de référentiel** :
**Note**  
HealthOmics prend en charge les référentiels publics et privés pour GitHubGitLab,, BitbucketGitHub self-managed,GitLab self-managed.

         1. Choisissez une **connexion** pour connecter vos AWS ressources au référentiel externe. Pour créer une connexion, voir[Connectez-vous à des référentiels de code externes](setting-up-new.md#setting-up-omics-repository).
**Note**  
Les clients de la TLV région doivent créer une connexion dans la région IAD (us-east-1) pour créer un flux de travail. 

         1. Dans ID de **référentiel complet, entrez votre ID** de référentiel sous forme de nom d'utilisateur/nom de dépôt. Vérifiez que vous avez accès aux fichiers de ce dépôt.

         1. Dans **Référence de source** (facultatif), entrez une référence de source de référentiel (branche, balise ou ID de validation). HealthOmics utilise la branche par défaut si aucune référence de source n'est spécifiée.

         1. Dans **Exclure les modèles** de fichiers, entrez les modèles de fichiers pour exclure des dossiers, des fichiers ou des extensions spécifiques. Cela permet de gérer la taille des données lors de l'importation de fichiers de référentiel. Il y a un maximum de 50 modèles, et les modèles doivent suivre la syntaxe du [modèle global](https://fossil-scm.org/home/doc/tip/www/globs.md). Par exemple : 

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. Pour **Sélectionner le dossier de définition depuis S3** :

         1. Entrez l'emplacement Amazon S3 qui contient le dossier de définition du flux de travail compressé. Le compartiment Amazon S3 doit se trouver dans la même région que le flux de travail.

         1. Si votre compte ne possède pas le compartiment Amazon S3, entrez l'ID de AWS compte du propriétaire du compartiment dans l'ID **de compte du propriétaire du compartiment S3**. Ces informations sont nécessaires pour vérifier HealthOmics la propriété du compartiment.

      1. Pour **Sélectionner le dossier de définition à partir d'une source locale** :

         1. Entrez l'emplacement du lecteur local du dossier de définition du flux de travail compressé.

   1. **Chemin du fichier de définition du flux de travail principal** (facultatif) : entrez le chemin du fichier depuis le dossier ou le référentiel de définition du flux de travail compressé vers le `main` fichier. Ce paramètre n'est pas obligatoire s'il n'existe qu'un seul fichier dans le dossier de définition du flux de travail ou si le fichier principal est nommé « main ».

1. Dans le panneau du **fichier README** (facultatif), sélectionnez la **source du fichier README** et fournissez les informations suivantes :
   + Pour **Importer depuis un service de référentiel**, dans le **champ Chemin du fichier README**, entrez le chemin du fichier README dans le référentiel.
   + Pour **Select file from S3**, dans le **fichier README dans S3**, entrez l'URI Amazon S3 du fichier README.
   + Pour **Sélectionner un fichier à partir d'une source locale** : dans **README, facultatif**, **choisissez Choisir un fichier** pour sélectionner le fichier Markdown (.md) à télécharger.

1. Dans le panneau de **configuration du stockage d'exécution par** défaut, indiquez le type de stockage d'exécution par défaut et la capacité pour les exécutions utilisant ce flux de travail :

   1. **Type de stockage d'exécution** : choisissez d'utiliser le stockage statique ou dynamique par défaut pour le stockage d'exécution temporaire. La valeur par défaut est le stockage statique.

   1. **Capacité de stockage d'exécution** (facultatif) : pour le type de stockage d'exécution statique, vous pouvez entrer la quantité de stockage d'exécution par défaut requise pour ce flux de travail. La valeur par défaut de ce paramètre est de 1200 GiB. Vous pouvez remplacer ces valeurs par défaut lorsque vous démarrez une course.

1. **Balises** (facultatif) : vous pouvez associer jusqu'à 50 balises à ce flux de travail.

1. Choisissez **Suivant**.

1. Sur la page **Ajouter des paramètres de flux** de travail (facultatif), sélectionnez la **source du paramètre** :

   1. Pour **Parse from fichier de définition de flux de travail**, HealthOmics analysera automatiquement les paramètres du flux de travail à partir du fichier de définition de flux de travail.

   1. Pour **Provide parameter template from Git repository**, utilisez le chemin d'accès au fichier de modèle de paramètres depuis votre dépôt.

   1. Pour **Select JSON file from local source**, téléchargez un JSON fichier depuis une source locale qui spécifie les paramètres.

   1. Pour **saisir manuellement les paramètres du flux** de travail, entrez manuellement les noms et les descriptions des paramètres.

1. Dans le panneau d'**aperçu des paramètres**, vous pouvez consulter ou modifier les paramètres de cette version du flux de travail. Si vous restaurez le JSON fichier, vous perdrez toutes les modifications locales que vous avez apportées.

1. Choisissez **Suivant**.

1. Sur la page de **remappage des URI du conteneur**, dans le panneau **Règles de mappage**, vous pouvez définir des règles de mappage des URI pour votre flux de travail.

   Pour **Source du fichier de mappage**, sélectionnez l'une des options suivantes :
   + **Aucune : aucune** règle de mappage n'est requise.
   + **Sélectionnez le fichier JSON dans S3** — Spécifiez l'emplacement S3 du fichier de mappage. 
   + **Sélectionnez un fichier JSON à partir d'une source locale** : spécifiez l'emplacement du fichier de mappage sur votre appareil local.
   + **Entrez les mappages manuellement** **: entrez les mappages de registre et les mappages d'images dans le panneau Mappages.**

1.  La console affiche le panneau **Mappings.** Si vous avez choisi un fichier source de mappage, la console affiche les valeurs du fichier.

   1. Dans **les mappages de registre**, vous pouvez modifier les mappages ou ajouter des mappages (maximum de 20 mappages de registre).

      Chaque mappage de registre contient les champs suivants :
      + **URL du registre en amont** : URI du registre en amont.
      + Préfixe **du référentiel ECR : préfixe** du référentiel à utiliser dans le référentiel privé Amazon ECR.
      + (Facultatif) **Préfixe du référentiel en amont** : préfixe du référentiel dans le registre en amont.
      + (Facultatif) ID de **compte ECR : ID** de compte du compte propriétaire de l'image du conteneur en amont.

   1. Dans **Mappages d'images**, vous pouvez modifier les mappages d'images ou ajouter des mappages (maximum de 100 mappages d'images).

      Chaque mappage d'image contient les champs suivants :
      + **Image source** — Spécifie l'URI de l'image source dans le registre en amont.
      + **Image de destination** — Spécifie l'URI de l'image correspondante dans le registre Amazon ECR privé.

1. Choisissez **Suivant**.

1. Vérifiez la configuration du flux de travail, puis choisissez **Créer un flux de travail**.

## Création d'un flux de travail à l'aide de la CLI
<a name="api-create-workflows"></a>

Si vos fichiers de flux de travail et le fichier de modèle de paramètres se trouvent sur votre machine locale, vous pouvez créer un flux de travail à l'aide de la commande CLI suivante. 

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

L'`create-workflow`opération renvoie la réponse suivante :

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

### Paramètres facultatifs à utiliser lors de la création d'un flux de travail
<a name="other-create-parameters"></a>

Vous pouvez spécifier n'importe quel paramètre facultatif lorsque vous créez un flux de travail. Pour plus de détails sur la syntaxe, consultez [CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)le manuel de référence des HealthOmics API AWS. 

**Topics**
+ [Spécifiez la définition du flux de travail (emplacement Amazon S3)](#create-defn-uri-parameter)
+ [Utiliser la définition du flux de travail à partir d'un référentiel basé sur Git](#create-defn-uri-git)
+ [Spécifier un fichier Readme](#specify-readme-file)
+ [Spécifiez le fichier **main** de définition](#create-main-parameter)
+ [Spécifiez le type de stockage d'exécution](#create-run-storage-parameter)
+ [Spécifiez la configuration du GPU](#create-accelerator-parameter)
+ [Configuration des paramètres de mappage du cache à extraction](#create-prefix-mapping-parameters)

#### Spécifiez la définition du flux de travail (emplacement Amazon S3)
<a name="create-defn-uri-parameter"></a>

Si le fichier de définition de votre flux de travail se trouve dans un dossier Amazon S3, spécifiez l'emplacement à l'aide du `definition-uri` paramètre, comme indiqué dans l'exemple suivant. Si votre compte ne possède pas le compartiment Amazon S3, fournissez l' Compte AWS ID du propriétaire.

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

#### Utiliser la définition du flux de travail à partir d'un référentiel basé sur Git
<a name="create-defn-uri-git"></a>

Pour utiliser la définition du flux de travail provenant d'un référentiel Git compatible, utilisez le `definition-repository` paramètre dans votre demande. Ne fournissez aucun autre `definition` paramètre, car une demande échoue si elle inclut plusieurs sources d'entrée.

Le `definition-respository` paramètre contient les champs suivants :
+ **connectionArn**— ARN de la connexion au code qui connecte vos ressources AWS au référentiel externe.
+ **fullRepositoryId**— Entrez l'ID du référentiel sous la forme`owner-name/repo-name`. Vérifiez que vous avez accès aux fichiers de ce dépôt.
+ **sourceReference**(Facultatif) — Entrez un type de référence de référentiel (BRANCH, TAG ou COMMIT) et une valeur.

  HealthOmics utilise le dernier commit sur la branche par défaut si vous ne spécifiez pas de référence de source.
+ **excludeFilePatterns**(Facultatif) — Entrez les modèles de fichiers pour exclure des dossiers, des fichiers ou des extensions spécifiques. Cela permet de gérer la taille des données lors de l'importation de fichiers de référentiel. Fournissez un maximum de 50 modèles. Les modèles doivent suivre la syntaxe du modèle [global.](https://fossil-scm.org/home/doc/tip/www/globs.md) Par exemple :
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Lorsque vous spécifiez la définition du flux de travail à partir d'un référentiel basé sur Git, utilisez-la `parameter-template-path` pour spécifier le fichier de modèle de paramètres. Si vous ne fournissez pas ce paramètre, HealthOmics crée le flux de travail sans modèle de paramètres.

L'exemple suivant montre les paramètres liés au contenu d'un dépôt privé basé sur Git : 

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

Pour d'autres exemples, consultez le billet de blog [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).

#### Spécifier un fichier Readme
<a name="specify-readme-file"></a>

Vous pouvez spécifier l'emplacement du fichier README à l'aide de l'un des paramètres suivants :
+ **readme-markdown**— Entrée d'une chaîne ou d'un fichier sur votre machine locale. 
+ **readme-uri**— L'URI d'un fichier stocké sur S3. 
+ **readme-path **— Le chemin d'accès au fichier README dans le référentiel. 

**Utilisez readme-path uniquement en conjonction avec definition-respository.** Si vous ne spécifiez aucun paramètre README, HealthOmics importe le fichier README.md de niveau racine dans le référentiel (s'il existe).

Les exemples suivants montrent comment spécifier l'emplacement du fichier README en utilisant readme-path et readme-uri.

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

Pour de plus amples informations, veuillez consulter [HealthOmics Fichiers README du flux de travail](workflows-readme.md).

#### Spécifiez le fichier **main** de définition
<a name="create-main-parameter"></a>

Si vous incluez plusieurs fichiers de définition de flux de travail, utilisez le `main` paramètre pour spécifier le fichier de définition principal de votre flux de travail.

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

#### Spécifiez le type de stockage d'exécution
<a name="create-run-storage-parameter"></a>

Vous pouvez spécifier le type de stockage d'exécution par défaut (DYNAMIC ou STATIC) et la capacité de stockage d'exécution (requise pour le stockage statique). Pour plus d'informations sur les types de stockage d'exécution, consultez[Exécuter les types de stockage dans les HealthOmics flux de travail](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  \
```

#### Spécifiez la configuration du GPU
<a name="create-accelerator-parameter"></a>

Utilisez le paramètre accelerators pour créer un flux de travail qui s'exécute sur une instance de calcul accéléré. L'exemple suivant montre comment utiliser le `accelerators` paramètre. Vous spécifiez la configuration du GPU dans la définition du flux de travail. Consultez [Instances de calcul accéléré](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
```

#### Configuration des paramètres de mappage du cache à extraction
<a name="create-prefix-mapping-parameters"></a>

Si vous utilisez la fonctionnalité de mappage de cache par extraction d'Amazon ECR, vous pouvez remplacer les mappages par défaut. Pour plus d'informations sur les paramètres de configuration du conteneur, consultez[Images de conteneur pour les flux de travail privés](workflows-ecr.md).

Dans l'exemple suivant, le fichier `mappings.json` contient le contenu suivant :

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

Spécifiez les paramètres de mappage dans la commande create-workflow :

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

Vous pouvez également spécifier l'emplacement S3 du fichier de paramètres de mappage :

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

## Création d'un flux de travail à l'aide d'un SDK
<a name="sdk-create-workflows"></a>

Vous pouvez créer un flux de travail à l'aide de l'un des SDKs. L'exemple suivant montre comment créer un flux de travail à l'aide du SDK Python

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

# Mettre à jour un flux de travail privé
<a name="update-private-workflow"></a>

Vous pouvez mettre à jour un flux de travail à l'aide de la HealthOmics console, des commandes de la AWS CLI ou de l'une des AWS SDKs.

**Note**  
N'incluez aucune information personnellement identifiable (PII) dans les noms des flux de travail. Ces noms sont visibles dans les CloudWatch journaux.

**Topics**
+ [Mettre à jour un flux de travail à l'aide de la console](#console-update-workflows)
+ [Mettre à jour un flux de travail à l'aide de la CLI](#api-update-workflows)
+ [Mettre à jour un flux de travail à l'aide d'un SDK](#sdk-update-workflows)

## Mettre à jour un flux de travail à l'aide de la console
<a name="console-update-workflows"></a>

**Étapes pour mettre à jour un flux de travail**

1. Ouvrez la [HealthOmics console](https://console.aws.amazon.com/omics/).

1.  Si nécessaire, ouvrez le volet de navigation de gauche (≡). Choisissez des **flux de travail privés**.

1. Sur la page **Flux de travail privés**, choisissez le flux de travail à mettre à jour.

1. Sur la page **Workflow** :
   + Si le flux de travail comporte des versions, assurez-vous de sélectionner la **version par défaut**.
   + Choisissez **Modifier dans** la liste des **actions**. 

1. Sur la page **Modifier le flux** de travail, vous pouvez modifier l'une des valeurs suivantes :
   + **Nom du flux de travail**.
   + **Description du flux** de travail.
   + **Type de stockage Run** par défaut pour le flux de travail.
   + **Capacité de stockage d'exécution** par défaut (si le type de stockage d'exécution est un stockage statique). Pour plus d'informations sur la configuration d'exécution du stockage par défaut, consultez[Création d'un flux de travail à l'aide de la console](create-private-workflow.md#console-create-workflows).

1. Choisissez **Enregistrer les modifications** pour appliquer les modifications.

## Mettre à jour un flux de travail à l'aide de la CLI
<a name="api-update-workflows"></a>

Comme le montre l'exemple suivant, vous pouvez mettre à jour le nom et la description du flux de travail. Vous pouvez également modifier le type de stockage d'exécution par défaut (STATIC ou DYNAMIC) et la capacité de stockage d'exécution (pour le type de stockage statique). Pour plus d'informations sur les types de stockage d'exécution, consultez[Exécuter les types de stockage dans les HealthOmics flux de travail](workflows-run-types.md).

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

Vous ne recevez pas de réponse à cette `update-workflow` demande.

## Mettre à jour un flux de travail à l'aide d'un SDK
<a name="sdk-update-workflows"></a>

Vous pouvez mettre à jour un flux de travail à l'aide de l'un des SDKs.

L'exemple suivant montre comment mettre à jour un flux de travail à l'aide du SDK Python

```
import boto3

omics = boto3.client('omics')

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

# Supprimer un flux de travail privé
<a name="delete-private-workflow"></a>

Lorsque vous n'avez plus besoin d'un flux de travail, vous pouvez le supprimer à l'aide de la HealthOmics console, des commandes de la AWS CLI ou de l'une des commandes AWS SDKs. Vous pouvez supprimer un flux de travail répondant aux critères suivants :
+ Son statut est ACTIF ou ÉCHEC.
+ Elle ne possède aucune action active. 
+ Vous avez supprimé toutes les versions du flux de travail.

La suppression d'un flux de travail n'a aucune incidence sur les exécutions en cours utilisant le flux de travail.

**Topics**
+ [Supprimer un flux de travail à l'aide de la console](#console-delete-workflows)
+ [Supprimer un flux de travail à l'aide de la CLI](#api-delete-workflows)
+ [Supprimer un flux de travail à l'aide d'un SDK](#sdk-delete-workflows)

## Supprimer un flux de travail à l'aide de la console
<a name="console-delete-workflows"></a>

**Pour supprimer un flux de travail**

1. Ouvrez la [HealthOmics console](https://console.aws.amazon.com/omics/).

1.  Si nécessaire, ouvrez le volet de navigation de gauche (≡). Choisissez des **flux de travail privés**.

1. Sur la page **Flux de travail privés**, choisissez le flux de travail à supprimer.

1. Sur la page **Workflow**, choisissez **Supprimer la sélection** dans la liste des **actions**.

1. Dans le mode **Supprimer le flux** de travail, entrez « confirmer » pour confirmer la suppression.

1. Sélectionnez **Delete (Supprimer)**.

## Supprimer un flux de travail à l'aide de la CLI
<a name="api-delete-workflows"></a>

L'exemple suivant montre comment utiliser la AWS CLI commande pour supprimer un flux de travail. Pour exécuter l'exemple, remplacez le `workflow id` par l'ID du flux de travail que vous souhaitez supprimer. 

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

HealthOmics n'envoie pas de réponse à la `delete-workflow` demande. 

## Supprimer un flux de travail à l'aide d'un SDK
<a name="sdk-delete-workflows"></a>

Vous pouvez supprimer un flux de travail à l'aide de l'un des SDKs.

L'exemple suivant montre comment supprimer un flux de travail à l'aide du SDK Python.

```
import boto3

omics = boto3.client('omics')

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

# Vérifier l'état du flux de travail
<a name="using-get-workflow"></a>

Après avoir créé votre flux de travail, vous pouvez vérifier son statut et consulter d'autres détails du flux de travail à l'aide de **get-workflow**, comme indiqué.

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

La réponse inclut les détails du flux de travail, y compris le statut, comme indiqué.

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

Vous pouvez démarrer une exécution à l'aide de ce flux de travail une fois que le statut est passé à`ACTIVE`.

# Référencer des fichiers génomiques à partir d'une définition de flux de travail
<a name="create-ref-files"></a>

Un objet de magasin de HealthOmics référence peut être référencé avec un URI comme celui-ci. Utilisez le vôtre `account ID``reference store ID`, et `reference ID` là où cela est indiqué.

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

Certains flux de travail nécessiteront à la fois `INDEX` les fichiers `SOURCE` et pour le génome de référence. L'URI précédent est la forme abrégée par défaut et sera le fichier SOURCE par défaut. Pour spécifier l'un ou l'autre des fichiers, vous pouvez utiliser le format URI long, comme suit.

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

L'utilisation d'un ensemble de lecture de séquences aurait un schéma similaire, comme indiqué.

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

Certains ensembles de lecture, tels que ceux basés sur FASTQ, peuvent contenir des lectures jumelées. Dans les exemples suivants, ils sont appelés SOURCE1 et SOURCE2. Les formats tels que BAM et CRAM n'auront qu'un SOURCE1 fichier. Certains ensembles de lecture contiendront des fichiers INDEX tels que `crai` des fichiers `bai` ou. L'URI précédent est la forme abrégée par défaut et sera le SOURCE1 fichier par défaut. Pour spécifier le fichier ou l'index exact, vous pouvez utiliser le format URI long, comme suit.

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

Voici un exemple de fichier JSON d'entrée qui utilise deux Omics Storage URIs.

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

Référencez le fichier JSON d'entrée dans le AWS CLI en l'ajoutant `--inputs file://<input_file.json>` à votre demande de **démarrage**. 