

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di flussi di lavoro privati in HealthOmics
<a name="workflows-setup"></a>

*I flussi di lavoro privati* dipendono da una varietà di risorse create e configurate prima di creare il flusso di lavoro:
+ **Workflow definition file:**Un file di definizione del flusso di lavoro scritto in WDLNextflow, oCWL. La definizione del flusso di lavoro specifica gli input e gli output per le esecuzioni che utilizzano il flusso di lavoro. Include inoltre le specifiche per le attività di esecuzione ed esecuzione del flusso di lavoro, inclusi i requisiti di calcolo e memoria. Il file di definizione del flusso di lavoro deve essere in `.zip` formato. Per ulteriori informazioni, vedere [File di definizione dei flussi](workflow-definition-files.md) di lavoro.
  + Puoi utilizzare [Amazon Q CLI per creare e convalidare i](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) file di definizione del flusso di lavoro in WDL, Nextflow e CWL. Per ulteriori informazioni, consulta le [istruzioni di esempio per la CLI di Amazon Q](getting-started.md#omics-q-prompts) e il tutorial sull'intelligenza artificiale generativa [HealthOmics Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) su. GitHub
+ **(Optional) Parameter template file:**Un file modello di parametro scritto in. JSON Crea il file per definire i parametri di esecuzione o HealthOmics genera automaticamente il modello dei parametri. Per ulteriori informazioni, consultate [File modello di parametri per i HealthOmics flussi di lavoro](parameter-templates.md).
+ **Amazon ECR container images:**Crea un repository Amazon ECR privato per il flusso di lavoro. Crea immagini di container nel repository privato o sincronizza il contenuto di un registro upstream supportato con il tuo repository privato Amazon ECR.
+ **(Optional) Sentieon licenses:**Richiedi una Sentieon licenza per utilizzare il software in flussi di lavoro privatiSentieon.

Facoltativamente, è possibile eseguire un linter sulla definizione del flusso di lavoro prima o dopo la creazione del flusso di lavoro. L'**linter**argomento descrive i linter disponibili in. HealthOmics

**Topics**
+ [HealthOmics integrazione del flusso di lavoro con repository basati su Git](workflows-git-integration.md)
+ [File di definizione del flusso di lavoro in HealthOmics](workflow-definition-files.md)
+ [File modello di parametri per i flussi HealthOmics di lavoro](parameter-templates.md)
+ [Immagini di container per flussi di lavoro privati](workflows-ecr.md)
+ [HealthOmics File README del flusso di lavoro](workflows-readme.md)
+ [Richiesta di licenze Sentieon per flussi di lavoro privati](private-workflows-subscribe.md)
+ [Stampanti per flussi di lavoro in HealthOmics](workflows-linter.md)
+ [HealthOmics operazioni del flusso di lavoro](creating-private-workflows.md)

# HealthOmics integrazione del flusso di lavoro con repository basati su Git
<a name="workflows-git-integration"></a>

Quando crei un flusso di lavoro (o una versione del flusso di lavoro), fornisci una definizione del flusso di lavoro per specificare informazioni sul flusso di lavoro, sulle esecuzioni e sulle attività. HealthOmics può recuperare la definizione del flusso di lavoro come archivio.zip (archiviato localmente o in un bucket Amazon S3) o da un repository basato su Git supportato.

L' HealthOmics integrazione con i repository basati su Git abilita le seguenti funzionalità:
+ Creazione diretta di flussi di lavoro da istanze pubbliche, private e autogestite.
+ Integrazione di file README e modelli di parametri del flusso di lavoro dai repository.
+ Support per GitHub e GitLab repository Bitbucket.

Utilizzando un repository basato su Git, eviti i passaggi manuali di download dei file di definizione del flusso di lavoro e dei file modello dei parametri di input, la creazione di un archivio.zip e quindi l'archiviazione temporanea su S3. Ciò semplifica la creazione di flussi di lavoro per scenari come i seguenti esempi:

1. Vuoi iniziare rapidamente a utilizzare un flusso di lavoro open source comune, come nf-core. HealthOmicsrecupera automaticamente tutti i file di definizione del flusso di lavoro e dei modelli dei parametri di input dal repository nf-core in poi GitHub e utilizza questi file per creare il nuovo flusso di lavoro.

1. Stai utilizzando un flusso di lavoro pubblico da GitHub e saranno disponibili alcuni nuovi aggiornamenti. È possibile creare facilmente una nuova versione del HealthOmics flusso di lavoro utilizzando la definizione aggiornata del flusso di lavoro GitHub come origine. Gli utenti del flusso di lavoro possono scegliere tra il flusso di lavoro originale o la nuova versione del flusso di lavoro che hai creato.

1. Il tuo team sta creando una pipeline proprietaria che non è pubblica. Conservi il codice in un repository git privato e usi questa definizione di flusso di lavoro per i tuoi flussi di lavoro. HealthOmics Il team aggiorna frequentemente la definizione del flusso di lavoro come parte di un ciclo di vita iterativo di sviluppo del flusso di lavoro. È possibile creare facilmente nuove versioni del flusso di lavoro in base alle esigenze dal proprio archivio privato.

**Topics**
+ [Repository basati su Git supportati](#workflows-git-supported)
+ [Configura le connessioni a repository di codice esterni](#workflows-git-connections)
+ [Accesso agli archivi autogestiti](#workflows-git-self-managed)
+ [Quote relative a repository di codice esterni](#workflows-git-quotas)
+ [Autorizzazioni IAM richieste](#workflows-git-permissions)

## Repository basati su Git supportati
<a name="workflows-git-supported"></a>

HealthOmics supporta repository pubblici e privati per i seguenti provider basati su Git:
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics supporta repository autogestiti per i seguenti provider basati su Git:
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics supporta l'uso di connessioni tra account per GitHub, e Bitbucket. GitLab Configura le autorizzazioni condivise tramite AWS Resource Access Manager. Per un esempio, consulta [Connessioni condivise](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html) nella *guida per l'CodePipeline utente*.

## Configura le connessioni a repository di codice esterni
<a name="workflows-git-connections"></a>

Connect i tuoi flussi di lavoro a repository basati su Git utilizzando AWS. CodeConnection HealthOmics utilizza questa connessione per accedere ai tuoi repository di codice sorgente.

**Nota**  
Il CodeConnections servizio AWS non è disponibile nella regione il-central-1. Per questa regione, configura il servizio us-east-1 per creare flussi di lavoro o versioni del flusso di lavoro da un repository. 

### Creazione di una connessione
<a name="workflows-git-connection-create"></a>

Prima di creare connessioni, segui le istruzioni in [Configurazione delle connessioni nella Guida per l'utente degli strumenti](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html) della *Developer Console*. 

Per creare una connessione, segui le istruzioni riportate in [Creare una connessione](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html) nella *Developer Console Tools User Guide*. 

### Configura l'autorizzazione per la connessione
<a name="workflows-git-connection-create"></a>

È necessario autorizzare la connessione utilizzando il OAuth flusso del provider. Assicurati che lo stato della connessione sia valido `AVAILABLE` prima di utilizzarla.

Per esempi, consulta il post del blog [Come creare un AWS HealthOmics flusso di lavoro dal contenuto in Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git). 

## Accesso agli archivi autogestiti
<a name="workflows-git-self-managed"></a>

Per configurare le connessioni a un repository GitLab autogestito, utilizza un token di accesso personale di amministrazione durante la creazione di un host. La successiva creazione della connessione accede a Oauth con l'account del cliente.

L'esempio seguente configura una connessione a un repository autogestito: GitLab 

1. Configura l'accesso al token di accesso personale di un utente amministratore.

   *Per configurare un PAT in un repository GitLab autogestito, vedi [Token di accesso personali in Docs.](https://docs.gitlab.com/user/profile/personal_access_tokens/) GitLab *

1. Creazione di un host

   1. **Vai a >Impostazioni>Connessioni. CodePipeline**

   1. **Scegli la scheda **Host**, quindi scegli Crea host.**

   1. Configura i campi seguenti:
      + Inserisci il nome dell'host
      + Per il tipo di provider, scegli **GitLab Self Managed**
      + Inserisci l'**URL dell'host** 
      + Inserisci le informazioni sul VPC se l'host è definito in un VPC

   1. Scegli **Create Host**, che crea l'host nello stato PENDING.

   1. Per completare la configurazione, scegli **Configura host**.

   1. Inserisci il Personal Access Token (PAT) di un utente amministratore, quindi scegli **Continua**. 

1. Crea la connessione

   1. Scegli **Crea connessioni** nella scheda **Connessioni**.

   1. Per il tipo di provider, seleziona **GitLab Autogestito.**

   1. In **Impostazioni di connessione > Inserisci il nome della connessione, inserisci** l'URL dell'host che hai creato in precedenza.

   1. Se l'istanza GitLab autogestita è accessibile solo tramite un VPC, configura i dettagli del VPC.

   1. Scegli **Aggiorna** connessione in sospeso. La finestra modale ti reindirizza alla pagina di accesso. GitLab 

   1. Inserisci il nome utente e la password per l'account cliente e completa il processo di autorizzazione.

   1.  Per la prima configurazione, scegli **Authorize AWS Connector for Gitlab** Self Managed.

## Quote relative a repository di codice esterni
<a name="workflows-git-quotas"></a>

Per HealthOmics l'integrazione con gli archivi di codice esterni, è prevista una dimensione massima per un repository, ogni file di repository e ogni file README. Per informazioni dettagliate, vedi [HealthOmics quote a dimensione fissa per il flusso di lavoro](fixed-quotas.md#fixed-quotas-workflows).

## Autorizzazioni IAM richieste
<a name="workflows-git-permissions"></a>

Aggiungi le seguenti azioni alla tua policy IAM basata sull'identità:

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

# File di definizione del flusso di lavoro in HealthOmics
<a name="workflow-definition-files"></a>

Si utilizza una definizione del flusso di lavoro per specificare informazioni sul flusso di lavoro, sulle esecuzioni e sulle attività in corso. Le definizioni del flusso di lavoro vengono create in uno o più file utilizzando un linguaggio di definizione del flusso di lavoro. HealthOmics supporta le definizioni dei flussi di lavoro scritte in WDL, Nextflow o CWL. 

HealthOmics supporta le seguenti scelte per le definizioni dei flussi di lavoro WDL: 
+ WDL — Fornisce un motore WDL conforme alle specifiche. 
+ WDL lenient: progettato per gestire i flussi di lavoro migrati da Cromwell. Supporta le direttive Cromwell dei clienti e alcune logiche non conformi. Per informazioni dettagliate, vedi [Conversione implicita dei tipi in WDL lenient](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Per informazioni su ciascuna delle lingue del flusso di lavoro, consulta le sezioni dettagliate specifiche della lingua di seguito.

Nella definizione del flusso di lavoro si specificano i seguenti tipi di informazioni:
+ **Language version**— La lingua e la versione della definizione del flusso di lavoro.
+ **Compute and memory**— I requisiti di calcolo e memoria per le attività del flusso di lavoro.
+ **Inputs**— Ubicazione degli input per le attività del flusso di lavoro. Per ulteriori informazioni, consulta [HealthOmics input di esecuzione](workflows-run-inputs.md).
+ **Outputs**— Posizione in cui salvare gli output generati dalle attività.
+ **Task resources**— Requisiti di calcolo e memoria per ogni attività.
+ **Accelerators**— altre risorse richieste dalle attività, come gli acceleratori.

**Topics**
+ [HealthOmics requisiti di definizione del flusso di lavoro](workflow-defn-requirements.md)
+ [Supporto della versione per i linguaggi HealthOmics di definizione del flusso di lavoro](workflows-lang-versions.md)
+ [Requisiti di calcolo e memoria per le attività HealthOmics](memory-and-compute-tasks.md)
+ [Risultati delle attività in una definizione di HealthOmics flusso di lavoro](workflows-task-outputs.md)
+ [Le risorse delle attività in una definizione di HealthOmics flusso di lavoro](task-resources.md)
+ [Acceleratori di attività in una definizione di workflow HealthOmics](task-accelerators.md)
+ [Specifiche della definizione del flusso di lavoro WDL](workflow-languages-wdl.md)
+ [Specifiche della definizione del flusso di lavoro Nextflow](workflow-definition-nextflow.md)
+ [Specifiche della definizione del flusso di lavoro CWL](workflow-languages-cwl.md)
+ [Esempi di definizioni del flusso di lavoro](workflow-definition-examples.md)

# HealthOmics requisiti di definizione del flusso di lavoro
<a name="workflow-defn-requirements"></a>

I file HealthOmics di definizione del flusso di lavoro devono soddisfare i seguenti requisiti:
+ Le attività devono definire input/output parametri, repository di contenitori Amazon ECR e specifiche di runtime come l'allocazione della memoria o della CPU.
+ Verifica che i tuoi ruoli IAM dispongano delle autorizzazioni richieste.<a name="lower"></a>
  + Il tuo flusso di lavoro ha accesso ai dati di input provenienti da AWS risorse, come Amazon S3. 
  + Il tuo flusso di lavoro ha accesso a servizi di repository esterni quando necessario.
+ Dichiara i file di output nella definizione del flusso di lavoro. Per copiare i file di esecuzione intermedi nella posizione di output, dichiarateli come output del flusso di lavoro. 
+ Le posizioni di input e output devono trovarsi nella stessa regione del flusso di lavoro. 
+ HealthOmics gli input del flusso di lavoro di archiviazione devono essere in `ACTIVE` stato. HealthOmics non importerà input con uno `ARCHIVED` stato, causando il fallimento del flusso di lavoro. Per informazioni sugli input degli oggetti Amazon S3, consulta. [HealthOmics input di esecuzione](workflows-run-inputs.md)
+ La **main** posizione del flusso di lavoro è facoltativa se l'archivio ZIP contiene una singola definizione di flusso di lavoro o un file denominato «principale».<a name="lower"></a>
  + Percorso di esempio: `workflow-definition/main-file.wdl`
+ Prima di creare un flusso di lavoro da Amazon S3 o dall'unità locale, crea un archivio zip dei file di definizione del flusso di lavoro e di eventuali dipendenze, come i flussi di lavoro secondari.
+ Ti consigliamo di dichiarare i contenitori Amazon ECR nel flusso di lavoro come parametri di input per la convalida delle autorizzazioni Amazon ECR. 

Considerazioni aggiuntive su Nextflow:
+ **/bin**

  Le definizioni del flusso di lavoro Nextflow possono includere una cartella /bin con script eseguibili. Questo percorso ha accesso alle attività in sola lettura ed eseguibile. Le attività che si basano su questi script devono utilizzare un contenitore creato con gli interpreti di script appropriati. La migliore pratica consiste nel chiamare direttamente l'interprete. Esempio:

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

  Le definizioni dei flussi di lavoro basate su NextFlow possono includere file nextflow.config che aiutano ad astrarre le definizioni dei parametri o i profili delle risorse di processo. Per supportare lo sviluppo e l'esecuzione di pipeline Nextflow su più ambienti, utilizza una configurazione HealthOmics specifica da aggiungere alla configurazione globale utilizzando la direttiva IncludeConfig. Per mantenere la portabilità, configura il flusso di lavoro in modo che includa il file solo durante l'esecuzione utilizzando il codice seguente: HealthOmics 

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

  HealthOmics non supporta i report dag, trace ed esecuzione generati dal motore. È possibile generare alternative ai report di traccia ed esecuzione utilizzando una combinazione di GetRun chiamate API. GetRunTask 

Considerazioni aggiuntive sulla CWL:
+ **Container image uri interpolation**

  HealthOmics consente alla proprietà DockerPull di essere un'espressione DockerRequirement javascript in linea. Esempio:

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

  Ciò consente di specificare l'immagine del contenitore URIs come parametri di input per il flusso di lavoro.
+ **Javascript expressions**

  Le espressioni Javascript devono essere `strict mode` conformi.
+ **Operation process**

  HealthOmics non supporta i processi operativi CWL.

# Supporto della versione per i linguaggi HealthOmics di definizione del flusso di lavoro
<a name="workflows-lang-versions"></a>

HealthOmics supporta file di definizione del flusso di lavoro scritti in Nextflow, WDL o CWL. Le seguenti sezioni forniscono informazioni sul supporto delle HealthOmics versioni per queste lingue.

**Topics**
+ [Supporto della versione WDL](#workflows-lang-versions-WDL)
+ [Supporto per la versione CWL](#workflows-lang-versions-CWL)
+ [Supporto per la versione Nextflow](#workflows-lang-versions-nextflow)

## Supporto della versione WDL
<a name="workflows-lang-versions-WDL"></a>

HealthOmics supporta le versioni 1.0, 1.1 e la versione di sviluppo della specifica WDL.

Ogni documento WDL deve includere una dichiarazione di versione per specificare a quale versione (principale e secondaria) della specifica a cui aderisce. [Per ulteriori informazioni sulle versioni, vedere WDL versioning](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

Le versioni 1.0 e 1.1 della specifica WDL non supportano questo tipo. `Directory` Per utilizzare il `Directory` tipo per input o output, impostate la versione su **development** nella prima riga del file:

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

## Supporto per la versione CWL
<a name="workflows-lang-versions-CWL"></a>

HealthOmics supporta le versioni 1.0, 1.1 e 1.2 del linguaggio CWL.

È possibile specificare la versione della lingua nel file di definizione del flusso di lavoro CWL. Per ulteriori informazioni su CWL, consultate la guida per l'utente di [CWL](https://github.com/common-workflow-language/user_guide)

## Supporto per la versione Nextflow
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics supporta tre versioni stabili di Nextflow. Nextflow rilascia in genere una versione stabile ogni sei mesi. HealthOmics non supporta le versioni mensili «edge».

HealthOmics supporta le funzionalità rilasciate in ogni versione, ma non le funzionalità di anteprima.

### Versioni supportate
<a name="workflows-versions-nextflow-list"></a>

HealthOmics supporta le seguenti versioni di Nextflow:
+ Nextflow v22.04.01 DSL 1 e DSL 2
+ Nextflow v23.10.0 DSL 2 (impostazione predefinita)
+ Nextflow versione 24.10.8 DSL 2

[Per migrare il flusso di lavoro all'ultima versione supportata (v24.10.8), segui la guida all'aggiornamento di Nextflow.](https://nextflow.io/docs/latest/migrations/24-10.html)

Ci sono alcune modifiche importanti durante la migrazione da Nextflow v23 a v24, come descritto nelle seguenti sezioni della guida alla migrazione di Nextflow:
+ [Ultime modifiche nella versione 24.04](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [Ultime modifiche nel 24.10](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Rileva ed elabora le versioni di Nextflow
<a name="workflows-versions-processing"></a>

HealthOmics rileva la versione DSL e la versione di Nextflow specificate. Determina automaticamente la migliore versione di Nextflow da eseguire in base a questi input.

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

HealthOmics rileva la versione DSL richiesta nel file di definizione del flusso di lavoro. Ad esempio, puoi specificare:. `nextflow.enable.dsl=2`

HealthOmics supporta DSL 2 per impostazione predefinita. Fornisce la retrocompatibilità con DSL 1, se specificato nel file di definizione del flusso di lavoro.
+ Se si specifica DSL 2, HealthOmics esegue Nextflow v23.10.0, a meno che non si specifichi Nextflow v22.04.0 o v24.10.8.
+ Se si specifica DSL 1, esegue Nextflow v22.04 (l'unica versione supportata che esegue DSL 1). HealthOmics DSL1 
+ Se non specifichi una versione DSL o se non HealthOmics riesci ad analizzare le informazioni DSL per qualsiasi motivo (ad esempio errori di sintassi nel file di definizione del flusso di lavoro), il valore predefinito è DSL 2 ed esegue Nextflow v23.10.0. HealthOmics 
+ [Per aggiornare il flusso di lavoro da DSL 1 a DSL 2 per sfruttare le versioni e le funzionalità software più recenti di Nextflow, consulta Migrazione da DSL 1.](https://nextflow.io/docs/latest/dsl1.html)

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

HealthOmics rileva la versione di Nextflow richiesta nel file di configurazione di Nextflow (nextflow.config), se fornisci questo file. Ti consigliamo di aggiungere la `nextflowVersion` clausola alla fine del file per evitare sostituzioni impreviste delle configurazioni incluse. [Per ulteriori informazioni, consulta la configurazione di Nextflow.](https://nextflow.io/docs/latest/config.html)

Puoi specificare una versione di Nextflow o un intervallo di versioni utilizzando la seguente sintassi:

```
   // 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 elabora le informazioni sulla versione di Nextflow come segue: 
+ Se si utilizza **=** per specificare una versione esatta che HealthOmics supporta, HealthOmics utilizza quella versione. 
+ Se si utilizza **\$1** per specificare una versione esatta o un intervallo di versioni non supportate, HealthOmics genera un'eccezione e fallisce l'esecuzione. Prendi in considerazione l'utilizzo di questa opzione se desideri essere rigoroso con le richieste di versione e fallire rapidamente se la richiesta include versioni non supportate.
+ Se specifichi un intervallo di versioni, HealthOmics utilizza l'ultima versione supportata in quell'intervallo, a meno che l'intervallo non includa la v24.10.8. In questo caso, HealthOmics dà la preferenza a una versione precedente. Ad esempio, se l'intervallo copre sia la v23.10.0 che la v24.10.8, sceglie v23.10.0. HealthOmics 
+ Se non esiste una versione richiesta o se le versioni richieste non sono valide o non possono essere analizzate per qualsiasi motivo:
  + Se hai specificato DSL 1, HealthOmics esegue Nextflow v22.04.
  + Altrimenti, esegue Nextflow v23.10.0. HealthOmics 

 Puoi recuperare le seguenti informazioni sulla versione di Nextflow utilizzata per ogni esecuzione: HealthOmics 
+ I log di esecuzione contengono informazioni sulla versione effettiva di Nextflow utilizzata per l'esecuzione. HealthOmics 
+ HealthOmics aggiunge avvisi nei log di esecuzione se non esiste una corrispondenza diretta con la versione richiesta o se è necessario utilizzare una versione diversa da quella specificata.
+ La risposta all'operazione **GetRun** API include un campo (`engineVersion`) con la versione effettiva di Nextflow HealthOmics utilizzata per l'esecuzione. Esempio:

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

# Requisiti di calcolo e memoria per le attività HealthOmics
<a name="memory-and-compute-tasks"></a>

HealthOmics esegue le attività private del flusso di lavoro in un'istanza omics. HealthOmics offre una varietà di tipi di istanze per soddisfare diversi tipi di attività. Ogni tipo di istanza ha una configurazione fissa di memoria e vCPU (e una configurazione GPU fissa per i tipi di istanze di elaborazione accelerata). Il costo dell'utilizzo di un'istanza omics varia a seconda del tipo di istanza. Per i dettagli, consulta la pagina [HealthOmics dei prezzi](https://aws.amazon.com/healthomics/pricing/).

Per le attività in un flusso di lavoro, si specifica la memoria richiesta e v CPUs nel file di definizione del flusso di lavoro. Quando viene eseguita un'operazione di workflow, HealthOmics alloca l'istanza omics più piccola che contiene la memoria richiesta e v. CPUs Ad esempio, se un'attività richiede 64 GiB di memoria e 8 vCPUs, HealthOmics seleziona. `omics.r.2xlarge`

Ti consigliamo di esaminare i tipi di istanza e di impostare la v CPUs e la dimensione di memoria richieste in modo che corrispondano all'istanza che meglio soddisfa le tue esigenze. Il contenitore delle attività utilizza il numero di v CPUs e la dimensione della memoria specificati nel file di definizione del flusso di lavoro, anche se il tipo di istanza dispone di v CPUs e memoria aggiuntivi. 

L'elenco seguente contiene informazioni aggiuntive su vCPU e allocazione della memoria:
+ Le allocazioni di risorse dei container sono limiti rigidi. Se un'attività esaurisce la memoria o tenta di utilizzare v aggiuntiviCPUs , l'attività genera un registro degli errori e viene chiusa.
+ Se non specifichi alcun requisito di calcolo o memoria, HealthOmics seleziona **omics.c.large** e imposta di default una configurazione con 1 vCPU e 1 GiB di memoria.
+ La configurazione minima che è possibile richiedere è 1 vCPU e 1 GiB di memoria. 
+ Se si specifica vCPUs, memory o GPUs che supera i tipi di istanza supportati, viene generato un messaggio di errore e il HealthOmics flusso di lavoro non viene convalidato
+ Se specificate unità frazionarie, HealthOmics arrotondate al numero intero più vicino.
+ HealthOmics riserva una piccola quantità di memoria (5%) per gli agenti di gestione e registrazione, pertanto l'allocazione completa della memoria potrebbe non essere sempre disponibile per l'applicazione coinvolta nell'operazione.
+ HealthOmics corrisponde ai tipi di istanza per soddisfare i requisiti di calcolo e memoria specificati e può utilizzare una combinazione di generazioni hardware. Per questo motivo, possono verificarsi alcune lievi variazioni nei tempi di esecuzione delle attività per la stessa attività.

Questi argomenti forniscono dettagli sui tipi di istanze HealthOmics supportati. 

**Topics**
+ [Tipi di istanze standard](#workflow-task-standard-instances)
+ [Istanze ottimizzate per il calcolo](#workflow-task-compute-optimized-instances)
+ [Istanze ottimizzate per la memoria](#workflow-task-memory-optimized-instances)
+ [Istanze di elaborazione accelerata](#workflow-task-accelerated-computing-instances)

**Nota**  
 Per le istanze standard, di calcolo e ottimizzate per la memoria, aumenta la dimensione della larghezza di banda dell'istanza se l'istanza richiede un throughput più elevato. Le istanze Amazon EC2 con meno di 16 vCPU (dimensioni 4xl e inferiori) possono subire un aumento del throughput. Per ulteriori informazioni sulla velocità effettiva delle istanze Amazon EC2, consulta Larghezza di banda disponibile delle istanze di [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Tipi di istanze standard
<a name="workflow-task-standard-instances"></a>

Per i tipi di istanze standard, le configurazioni mirano a un equilibrio tra potenza di calcolo e memoria. 

HealthOmics supporta le istanze 32xlarge e 48xlarge in queste regioni: Stati Uniti occidentali (Oregon) e Stati Uniti orientali (Virginia settentrionale).


| Istanza | Numero di v CPUs | Memoria | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiB | 
| omics.m.xlarge | 4 | 16 GiB | 
| omics.m.2xlarge | 8 | 32 GiB | 
| omics.m.4xlarge | 16 | 64 GiB | 
| omics.m.8xlarge | 32 | 128 GiB | 
| omics.m.12xlarge | 48 | 192 GiB | 
| omics.m.16xlarge | 64 | 256 GiB | 
| omics.m.24xlarge | 96 | 384 GiB | 
| omics.m.32xlarge | 128 | 512 GiB | 
| omics.m.48xlarge | 192 | 768 GiB | 

## Istanze ottimizzate per il calcolo
<a name="workflow-task-compute-optimized-instances"></a>

Per i tipi di istanza ottimizzati per l'elaborazione, le configurazioni offrono maggiore potenza di calcolo e meno memoria.

HealthOmics supporta le istanze 32xlarge e 48xlarge in queste regioni: Stati Uniti occidentali (Oregon) e Stati Uniti orientali (Virginia settentrionale).


| Istanza | Numero di v CPUs | Memoria | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| omics.c.2xlarge | 8 | 16 GiB | 
| omics.c.4xlarge | 16 | 32 GiB | 
| omics.c.8xlarge | 32 | 64 GiB | 
| omics.c.12xlarge | 48 | 96 GiB | 
| omics.c. 16 x large | 64 | 128 GiB | 
| omics.c.24xlarge | 96 | 192 GiB | 
| omics.c.32xlarge | 128 | 256 GiB | 
| omics.c.48xlarge | 192 | 384 GiB | 

## Istanze ottimizzate per la memoria
<a name="workflow-task-memory-optimized-instances"></a>

Per i tipi di istanza ottimizzati per la memoria, le configurazioni hanno meno potenza di calcolo e più memoria.

HealthOmics supporta le istanze 32xlarge e 48xlarge in queste regioni: Stati Uniti occidentali (Oregon) e Stati Uniti orientali (Virginia settentrionale).


| Istanza | Numero di v CPUs | Memoria | 
| --- | --- | --- | 
| omic s.r.large | 2 | 16 GiB | 
| omic s.r.xlarge | 4 | 32 GiB | 
| omic s.r.2xlarge | 8 | 64 GiB | 
| omic s.r.4 x grande | 16 | 128 GiB | 
| omic s.r.8xlarge | 32 | 256 GiB | 
| omic s.r.12 x grande | 48 | 384 GiB | 
| omics.r. 16 x grande | 64 | 512 GiB | 
| omic s.r.24xlarge | 96 | 768 GiB | 
| omic s.r.32xlarge | 128 | 1024 GiB | 
| Fomics.r. 48 x grande | 192 | 1536 GiB | 

## Istanze di elaborazione accelerata
<a name="workflow-task-accelerated-computing-instances"></a>

Facoltativamente, è possibile specificare risorse GPU per ogni attività in un flusso di lavoro, in modo da HealthOmics allocare un'istanza di elaborazione accelerata per l'attività. Per informazioni su come specificare le informazioni sulla GPU nel file di definizione del flusso di lavoro, vedere. [Acceleratori di attività in una definizione di workflow HealthOmics](task-accelerators.md)

Se si specifica un acceleratore di attività che supporta più tipi di istanza, HealthOmics seleziona il tipo di istanza in base alla disponibilità. Se sono disponibili più tipi di istanza, HealthOmics dà la preferenza all'istanza a basso costo. L'eccezione è rappresentata dal task accelerator nvidia-t4-a10g-l4 che dà la preferenza all'istanza di ultima generazione disponibile nella tua regione.

Le istanze G4 non sono supportate nella regione di Israele (Tel Aviv). Le istanze G5 non sono supportate nella regione Asia Pacifico (Singapore). 



**Topics**
+ [Tipi di istanze G6 e G6e](#workflow-task-accelerated-accelerated-g6)
+ [Istanze G4 e G5](#workflow-task-accelerated-accelerated-g45)

### Tipi di istanze G6 e G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics supporta le seguenti configurazioni di istanza di calcolo accelerato G6. Tutte le istanze omics.g6 utilizzano Nvidia L4. GPUs

HealthOmics supporta le istanze G6 e G6e in queste regioni: Stati Uniti occidentali (Oregon) e Stati Uniti orientali (Virginia settentrionale).


| Istanza | Numero di v CPUs | Memoria | Numero di GPUs | Memoria GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g6.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g6.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g6.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g6.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g6.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g6.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

Tutte le istanze omics.g6e utilizzano Nvidia L40s. GPUs


| Istanza | Numero di v CPUs | Memoria | Numero di GPUs | Memoria GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4xlarge | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8xlarge | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12xlarge | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16xlarge | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24xlarge | 96 | 768 GiB | 4 | 192 GiB | 

### Istanze G4 e G5
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics supporta le seguenti configurazioni di istanze di calcolo accelerato G4 e G5. 

Tutte le istanze omics.g5 utilizzano Nvidia Tesla A10G. GPUs


| Istanza | Numero di v CPUs | Memoria | Numero di GPUs | Memoria GPU | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g5.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g5.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g5.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g5.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g5.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

Tutte le istanze omics.g4dn utilizzano Nvidia Tesla T4. GPUs


| Istanza | Numero di v CPUs | Memoria | Numero di GPUs | Memoria GPU | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xlarge | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xlarge | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn.12xlarge | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 

# Risultati delle attività in una definizione di HealthOmics flusso di lavoro
<a name="workflows-task-outputs"></a>

Gli output delle attività vengono specificati nella definizione del flusso di lavoro. Per impostazione predefinita, HealthOmics elimina tutti i file di attività intermedi al termine del flusso di lavoro. Per esportare un file intermedio, lo si definisce come output. 

Se si utilizza la memorizzazione nella cache delle chiamate, HealthOmics salva gli output delle attività nella cache, inclusi tutti i file intermedi definiti come output.

I seguenti argomenti includono esempi di definizione delle attività per ciascuno dei linguaggi di definizione del flusso di lavoro.

**Topics**
+ [Output delle attività per WDL](#workflow-task-outputs-wdl)
+ [Output delle attività per Nextflow](#workflow-task-outputs-nextflow)
+ [Output delle attività per CWL](#workflow-task-outputs-cwl)

## Output delle attività per WDL
<a name="workflow-task-outputs-wdl"></a>

Per le definizioni dei flussi di lavoro scritte in WDL, definite i risultati nella sezione Workflow di primo livello. **outputs** 

HealthOmics

**Topics**
+ [Output delle attività per STDOUT](#task-outputs-wdl-stdout)
+ [Output dell'attività per STDERR](#task-outputs-wdl-stderr)
+ [Emissione dell'operazione in un file](#task-outputs-wdl-file)
+ [Emissione dell'operazione su una serie di file](#task-outputs-wdl-files)

### Output delle attività per STDOUT
<a name="task-outputs-wdl-stdout"></a>

Questo esempio crea un'attività denominata `SayHello` che riproduce il contenuto STDOUT nel file di output dell'operazione. **La **stdout** funzione WDL acquisisce il contenuto STDOUT (in questo esempio, la stringa di input Hello World\$1** ) nel file. **stdout\$1file** 

Poiché HealthOmics crea registri per tutto il contenuto STDOUT, l'output viene visualizzato anche in CloudWatch Logs, insieme ad altre informazioni di registrazione STDERR relative all'attività.

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

### Output dell'attività per STDERR
<a name="task-outputs-wdl-stderr"></a>

Questo esempio crea un'attività denominata `SayHello` che riproduce il contenuto STDERR del file di output dell'operazione. **La **stderr** funzione WDL acquisisce il contenuto STDERR (in questo esempio, la stringa di input Hello World\$1** ) nel file. **stderr\$1file** 

Poiché HealthOmics crea registri per tutto il contenuto STDERR, l'output verrà visualizzato in CloudWatch Logs, insieme ad altre informazioni di registrazione STDERR relative all'attività.

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

### Emissione dell'operazione in un file
<a name="task-outputs-wdl-file"></a>

In questo esempio, l' SayHello attività crea due file (message.txt e info.txt) e li dichiara esplicitamente come output denominato (message\$1file e 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"
    } 
}
```

### Emissione dell'operazione su una serie di file
<a name="task-outputs-wdl-files"></a>

In questo esempio, l'`GenerateGreetings`attività genera una serie di file come output dell'operazione. L'operazione genera dinamicamente un file di saluto per ogni membro dell'array di input. `names` Poiché i nomi dei file non sono noti fino all'esecuzione, la definizione di output utilizza la funzione WDL glob () per generare tutti i file che corrispondono al modello. `*_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")
    }       
 }
```

## Output delle attività per Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Per le definizioni dei flussi di lavoro scritte in Nextflow, definisci una direttiva **PublishDir** per esportare il contenuto delle attività nel tuo bucket Amazon S3 di output. **`/mnt/workflow/pubdir`Imposta** il valore PublishDir su. 

 HealthOmics Per esportare file in Amazon S3, i file devono trovarsi in questa directory.

Se un'operazione produce un gruppo di file di output da utilizzare come input per un'attività successiva, consigliamo di raggruppare questi file in una directory e di emettere la directory come output dell'attività. L'enumerazione di ogni singolo file può causare un collo di bottiglia di I/O nel file system sottostante. Per esempio:

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

## Output delle attività per CWL
<a name="workflow-task-outputs-cwl"></a>

Per le definizioni dei flussi di lavoro scritte in CWL, è possibile specificare gli output delle attività utilizzando le attività. `CommandLineTool` Le sezioni seguenti mostrano esempi di `CommandLineTool` attività che definiscono diversi tipi di output.

**Topics**
+ [Output delle attività per STDOUT](#task-outputs-cwl-stdout)
+ [Output dell'attività per STDERR](#task-outputs-cwl-stderr)
+ [Emissione dell'operazione in un file](#task-outputs-cwl-file)
+ [Esecuzione dell'operazione su una serie di file](#task-outputs-cwl-files)

### Output delle attività per STDOUT
<a name="task-outputs-cwl-stdout"></a>

Questo esempio crea un'`CommandLineTool`attività che riproduce il contenuto STDOUT in un file di output di testo denominato. **output.txt** **Ad esempio, se fornite il seguente input, l'output dell'attività risultante è Hello World\$1** nel **output.txt** file.

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

La `outputs` direttiva specifica che il nome dell'output è **example\$1out** e il suo tipo è`stdout`. Affinché un'attività a valle consumi l'output di questa attività, si riferirebbe all'output come. `example_out`

Poiché HealthOmics crea registri per tutto il contenuto STDERR e STDOUT, l'output viene visualizzato anche in CloudWatch Logs, insieme ad altre informazioni di registrazione STDERR relative all'attività.

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

### Output dell'attività per STDERR
<a name="task-outputs-cwl-stderr"></a>

Questo esempio crea un'`CommandLineTool`attività che riproduce il contenuto STDERR in un file di output di testo denominato. **stderr.txt** L'attività modifica il codice in `baseCommand` modo che venga `echo` scritto su STDERR (anziché su STDOUT).

La `outputs` direttiva specifica che il nome dell'output è e il tipo è**stderr\$1out**. `stderr` 

Poiché HealthOmics crea registri per tutto il contenuto STDERR e STDOUT, l'output verrà visualizzato in CloudWatch Logs, insieme ad altre informazioni di registrazione STDERR relative all'attività.

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

### Emissione dell'operazione in un file
<a name="task-outputs-cwl-file"></a>

Questo esempio crea un'`CommandLineTool`attività che crea un archivio tar compresso dai file di input. Fornite il nome dell'archivio come parametro di input (archive\$1name). 

La **outputs** direttiva specifica che il tipo di `archive_file` output è `File` e utilizza un riferimento al parametro di input per collegarsi `archive_name` al file di output.

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

### Esecuzione dell'operazione su una serie di file
<a name="task-outputs-cwl-files"></a>

In questo esempio, l'`CommandLineTool`attività crea una matrice di file utilizzando il `touch` comando. Il comando utilizza le stringhe del parametro `files-to-create` di input per denominare i file. Il comando genera una serie di file. L'array include tutti i file nella directory di lavoro che corrispondono al `glob` modello. Questo esempio utilizza un pattern di caratteri jolly («\$1») che corrisponde a tutti i file.

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

# Le risorse delle attività in una definizione di HealthOmics flusso di lavoro
<a name="task-resources"></a>

Nella definizione del flusso di lavoro, definisci quanto segue per ogni attività:
+ L'immagine del contenitore per l'attività. Per ulteriori informazioni, consulta [Immagini di container per flussi di lavoro privati](workflows-ecr.md).
+ Il numero CPUs e la memoria necessari per l'operazione. Per ulteriori informazioni, consulta [Requisiti di calcolo e memoria per le attività HealthOmics](memory-and-compute-tasks.md).

HealthOmics ignora qualsiasi specifica di archiviazione per attività. HealthOmics fornisce un'archiviazione di esecuzione a cui possono accedere tutte le attività in esecuzione. Per ulteriori informazioni, consulta [Esegui tipi di storage nei flussi HealthOmics di lavoro](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"
   }
   ...
}
```

Per un flusso di lavoro WDL, HealthOmics tenta fino a due nuovi tentativi per un'operazione che non riesce a causa di errori di servizio (la richiesta API restituisce un codice di stato HTTP 5XX). Per ulteriori informazioni sui nuovi tentativi di attività, vedere. [Ritentativi di attività](monitoring-runs.md#run-status-task-retries)

È possibile disattivare il comportamento dei nuovi tentativi specificando la seguente configurazione per l'operazione nel file di definizione 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
```

------

# Acceleratori di attività in una definizione di workflow HealthOmics
<a name="task-accelerators"></a>

Nella definizione del flusso di lavoro, puoi facoltativamente specificare le specifiche dell'acceleratore GPU per un'attività. HealthOmics supporta i seguenti valori accelerator-spec, oltre ai tipi di istanza supportati:


| Specifiche dell'acceleratore | Tipi di istanze Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4 a 10 g | G4 e G5 | 
| nvidia-tesla-a10 g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 e G6 | 
| nvidia-l4-a10g | G5 e G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40s | G6e | 

Se si specifica un tipo di acceleratore che supporta più tipi di istanza, HealthOmics seleziona il tipo di istanza in base alla capacità disponibile. Se entrambi i tipi di istanza sono disponibili, HealthOmics dà la preferenza all'istanza a basso costo. L'eccezione è rappresentata dal task accelerator nvidia-t4-a10g-l4 che dà la preferenza all'istanza di ultima generazione disponibile.

Per i dettagli sui tipi di istanze[Istanze di elaborazione accelerata](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances), vedere.

Nell'esempio seguente, la definizione del flusso di lavoro specifica `nvidia-l4` come acceleratore:

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

------

# Specifiche della definizione del flusso di lavoro WDL
<a name="workflow-languages-wdl"></a>

I seguenti argomenti forniscono dettagli sui tipi e le direttive disponibili per le definizioni dei flussi di lavoro WDL in. HealthOmics

**Topics**
+ [Conversione implicita dei tipi in WDL lenient](#workflow-wdl-type-conversion)
+ [Definizione dello spazio dei nomi in input.json](#workflow-wdl-namespace-defn)
+ [Tipi primitivi in WDL](#workflow-wdl-primitive-types)
+ [Tipi complessi in WDL](#workflow-wdl-complex-types)
+ [Direttive in WDL](#workflow-wdl-directives)
+ [Metadati delle attività in WDL](#workflow-wdl-task-metadata)
+ [Esempio di definizione del flusso di lavoro WDL](#wdl-example)

## Conversione implicita dei tipi in WDL lenient
<a name="workflow-wdl-type-conversion"></a>

HealthOmics supporta la conversione implicita dei tipi nel file input.json e nella definizione del flusso di lavoro. Per utilizzare il tipo di casting implicito, specificate il motore di workflow come WDL clemente quando create il flusso di lavoro. WDL lenient è progettato per gestire i flussi di lavoro migrati da Cromwell. Supporta le direttive Cromwell dei clienti e alcune logiche non conformi.

[WDL lenient supporta la conversione dei tipi per i seguenti elementi nell'elenco delle eccezioni limitate di WDL:](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ Float to Int, dove la coercizione non comporta alcuna perdita di precisione (ad esempio 1,0 mappato a 1).
+ String to Int/Float, dove la coercizione non comporta alcuna perdita di precisione.
+ Mappa [W, X] su Array [Pair [Y, Z]], nel caso in cui W sia coercibile con Y e X sia coercibile con Z.
+ Array [Pair [W, X] to Map [Y, Z], nel caso in cui W sia coercibile con Y e X sia coercibile con Z (ad esempio 1,0 mappato a 1).

Per utilizzare il type casting implicito, specificate il motore di workflow come WDL\$1LENIENT quando create il workflow o la versione del workflow.

**Nella console, il parametro del motore di workflow è denominato Language.** Nell'API, il parametro del motore di workflow è denominato **engine**. Per ulteriori informazioni, consulta [Creare un flusso di lavoro privato](create-private-workflow.md) o [Creare una versione del flusso di lavoro](workflows-version-create.md).

## Definizione dello spazio dei nomi in input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics supporta variabili completamente qualificate in input.json. Ad esempio, se dichiarate due variabili di input denominate number1 e number2 nel flusso di lavoro: **SumWorkflow**

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

 Puoi usarle come variabili complete in input.json: 

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

## Tipi primitivi in WDL
<a name="workflow-wdl-primitive-types"></a>

La tabella seguente mostra come gli input in WDL vengono mappati ai tipi primitivi corrispondenti. HealthOmics fornisce un supporto limitato per la coercizione dei tipi, quindi consigliamo di impostare tipi espliciti. 


**tipi primitivi**  

| Tipo WDL | Tipo JSON | Esempio WDL | Esempio di chiave e valore JSON | Note | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | Il valore deve essere minuscolo e senza virgolette. | 
| Int | integer | Int i | "i": 7 | Deve essere senza virgolette. | 
| Float | number | Float f | "f": 42.2 | Deve essere non quotato. | 
| String | string | String s | "s": "characters" | Le stringhe JSON che sono un URI devono essere mappate su un file WDL per essere importate. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 e HealthOmics lo storage URIs vengono importati purché il ruolo IAM fornito per il flusso di lavoro abbia accesso in lettura a questi oggetti. Non sono supportati altri schemi URI (come file://https://, eftp://). L'URI deve specificare un oggetto. Non può essere una directory, il che significa che non può terminare con un/. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | Il Directory tipo non è incluso in WDL 1.0 o 1.1, quindi sarà necessario aggiungerlo version development all'intestazione del file WDL. L'URI deve essere un URI Amazon S3 e deve avere un prefisso che termina con un '/'. Tutti i contenuti della directory verranno copiati in modo ricorsivo nel flusso di lavoro come singolo download. DirectoryDeve contenere solo file relativi al flusso di lavoro. | 

## Tipi complessi in WDL
<a name="workflow-wdl-complex-types"></a>

La tabella seguente mostra come gli input in WDL vengono mappati ai tipi JSON complessi corrispondenti. I tipi complessi in WDL sono strutture di dati composte da tipi primitivi. Le strutture di dati, come gli elenchi, verranno convertite in matrici.


**Tipi complessi**  

| Tipo WDL | Tipo JSON | Esempio WDL | Esempio di chiave e valore JSON | Note | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | I membri dell'array devono seguire il formato del tipo di array WDL. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Ogni valore della coppia deve utilizzare il formato JSON del tipo WDL corrispondente. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Ogni voce nella mappa deve utilizzare il formato JSON del tipo WDL corrispondente. | 
| 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>  | I nomi dei membri della struttura devono corrispondere esattamente ai nomi delle chiavi degli oggetti JSON. Ogni valore deve utilizzare il formato JSON del tipo WDL corrispondente. | 
| Object | N/D | N/D | N/D | Il Object tipo WDL è obsoleto e deve essere sostituito da Struct in tutti i casi. | 

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

HealthOmics supporta le seguenti direttive in tutte le versioni WDL che supportano. HealthOmics 

### Configura le risorse della GPU
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics supporta gli attributi di runtime **acceleratorType** e **acceleratorCount** con tutte le istanze [GPU](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html) supportate. HealthOmics supporta anche gli alias denominati **gpuType** and**gpuCount**, che hanno le stesse funzionalità delle controparti con acceleratore. Se la definizione WDL contiene entrambe le direttive, HealthOmics utilizza i valori dell'acceleratore.

L'esempio seguente mostra come utilizzare queste direttive:

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

### Configurare la ripetizione delle attività per gli errori di servizio
<a name="workflow-wdl-task-retry"></a>

HealthOmics supporta fino a due tentativi per un'operazione non riuscita a causa di errori di servizio (codici di stato HTTP 5XX). È possibile configurare il numero massimo di tentativi (1 o 2) e disattivare i tentativi per errori di servizio. Per impostazione predefinita, HealthOmics tenta un massimo di due nuovi tentativi. 

L'esempio seguente imposta `preemptible` la disattivazione dei nuovi tentativi per errori di servizio:

```
{
  preemptible: 0 
}
```

Per ulteriori informazioni sui nuovi tentativi di attività in HealthOmics, vedere. [Ritentativi di attività](monitoring-runs.md#run-status-task-retries)

### Configurare un nuovo tentativo di operazione in caso di esaurimento della memoria
<a name="workflow-wdl-retries"></a>

HealthOmics supporta nuovi tentativi per un'operazione che non è riuscita perché la memoria è esaurita (codice di uscita del contenitore 137, codice di stato HTTP 4XX). HealthOmics raddoppia la quantità di memoria per ogni nuovo tentativo.

Per impostazione predefinita, HealthOmics non riprova per questo tipo di errore. Utilizzate la `maxRetries` direttiva per specificare il numero massimo di tentativi.

L'esempio seguente è `maxRetries` impostato su 3, in modo che HealthOmics tenti un massimo di quattro tentativi di completare l'operazione (il tentativo iniziale più tre tentativi):

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

**Nota**  
Per riprovare l'operazione se la memoria non è sufficiente, è necessario GNU findutils 4.2.3\$1. Il contenitore di immagini predefinito include questo pacchetto. HealthOmics Se specificate un'immagine personalizzata nella definizione WDL, assicuratevi che l'immagine includa GNU findutils 4.2.3\$1.

### Configura i codici di restituzione
<a name="workflow-wdl-directive-returnCodes"></a>

L'attributo **ReturnCodes** fornisce un meccanismo per specificare un codice di ritorno, o un set di codici di ritorno, che indica l'esecuzione corretta di un'attività. Il motore WDL rispetta i codici restituiti specificati nella sezione **runtime** della definizione WDL e imposta lo stato delle attività di conseguenza. 

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

HealthOmics **supporta anche un alias denominato **continueOnReturnCode**, che ha le stesse funzionalità di ReturnCodes.** **Se si specificano entrambi gli attributi, HealthOmics utilizza il valore ReturnCodes.**

## Metadati delle attività in WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics supporta le seguenti opzioni di metadati per le attività WDL.

### Disattiva la memorizzazione nella cache a livello di attività con l'attributo volatile
<a name="workflow-wdl-volatile-attribute"></a>

L'attributo **volatile** consente di disabilitare la memorizzazione nella cache delle chiamate per attività specifiche nel flusso di lavoro WDL. Quando un'attività è contrassegnata come volatile, verrà sempre eseguita e non utilizzerà mai i risultati memorizzati nella cache, anche quando la memorizzazione nella cache è abilitata per l'esecuzione.

Aggiungi l'attributo **volatile** alla **meta-sezione della definizione** dell'attività:

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

## Esempio di definizione del flusso di lavoro WDL
<a name="wdl-example"></a>

Gli esempi seguenti mostrano le definizioni di workflow private per la conversione da `CRAM` a `BAM` in WDL. Il `BAM` flusso di lavoro `CRAM` to definisce due attività e utilizza gli strumenti del `genomes-in-the-cloud` contenitore, illustrato nell'esempio e disponibile pubblicamente. 

L'esempio seguente mostra come includere il contenitore Amazon ECR come parametro. Ciò consente di HealthOmics verificare le autorizzazioni di accesso al contenitore prima che inizi l'esecuzione.

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

L'esempio seguente mostra come specificare quali file utilizzare nell'esecuzione, quando i file si trovano in un bucket 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"
}
```

Se desideri specificare file da un archivio di sequenze, indicalo come mostrato nell'esempio seguente, utilizzando l'URI per l'archivio delle sequenze.

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

È quindi possibile definire il flusso di lavoro in WDL come illustrato nell'esempio seguente. 

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

# Specifiche della definizione del flusso di lavoro Nextflow
<a name="workflow-definition-nextflow"></a>

HealthOmics supporta Nextflow e. DSL1 DSL2 Per informazioni dettagliate, vedi [Supporto per la versione Nextflow](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow si DSL2 basa sul linguaggio di programmazione Groovy, quindi i parametri sono dinamici e la coercizione dei tipi è possibile utilizzando le stesse regole di Groovy. I parametri e i valori forniti dall'input JSON sono disponibili nella mappa parameters () del flusso di lavoro. `params`

**Topics**
+ [Usa i plugin nf-schema e nf-validation](#schema-and-validation-plugins-nextflow)
+ [Specificare l'archiviazione URIs](#storage-uris-nextflow)
+ [Direttive Nextflow](#workflow-nexflow-directives)
+ [Esporta il contenuto delle attività](#exporting-task-content-nextflow)

## Usa i plugin nf-schema e nf-validation
<a name="schema-and-validation-plugins-nextflow"></a>

**Nota**  
Riepilogo del supporto per i plugin: HealthOmics   
v22.04 — nessun supporto per i plugin
v23.10 — supporta e `nf-schema` `nf-validation`
v24.10 — supporta `nf-schema`

HealthOmics fornisce il seguente supporto per i plugin Nextflow:
+ Per Nextflow v23.10, preinstalla il plugin nf-validation @1 .1.1 HealthOmics . 
+ Per Nextflow v23.10 e versioni successive, preinstalla il plugin nf-schema @2 .3.0. HealthOmics 
+ Non è possibile recuperare plug-in aggiuntivi durante l'esecuzione di un flusso di lavoro. HealthOmics ignora qualsiasi altra versione del plugin specificata nel file. `nextflow.config`
+ Per Nextflow v24 e versioni successive, `nf-schema` è la nuova versione del plugin obsoleto. `nf-validation` [Per ulteriori informazioni, consulta nf-schema nel repository Nextflow.](https://github.com/nextflow-io/nf-schema) GitHub

## Specificare l'archiviazione URIs
<a name="storage-uris-nextflow"></a>

Quando un Amazon S3 o un HealthOmics URI viene utilizzato per costruire un file o un oggetto di percorso Nextflow, rende l'oggetto corrispondente disponibile per il flusso di lavoro, purché sia concesso l'accesso in lettura. L'uso di prefissi o directory è consentito per Amazon S3. URIs Per alcuni esempi, consulta [Formati dei parametri di input di Amazon S3](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics supporta parzialmente l'uso di modelli glob in Amazon URIs S3 HealthOmics o Storage. URIs Usa i pattern Glob nella definizione del flusso di lavoro per la creazione dei `path` nostri canali. `file` Per il comportamento previsto e i casi esatti, vedi[Gestione Nextflow del pattern Glob negli input di Amazon S3](workflows-run-inputs.md#wd-nextflow-s3-formats).

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

Le direttive Nextflow vengono configurate nel file di configurazione di Nextflow o nella definizione del flusso di lavoro. L'elenco seguente mostra l'ordine di precedenza HealthOmics utilizzato per applicare le impostazioni di configurazione, dalla priorità più bassa a quella più alta:

1. Configurazione globale nel file di configurazione.

1. Sezione delle attività della definizione del flusso di lavoro.

1. Selettori specifici dell'attività nel file di configurazione.

**Topics**
+ [Strategia di ripetizione delle attività utilizzando `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Tentativi di riprovare l'attività utilizzando `maxRetries`](#workflow-nexflow-task-retry)
+ [Disattiva la ripetizione dell'attività utilizzando `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [`time`Durata dell'attività utilizzando la direttiva](#time-directive-nextflow)

### Strategia di ripetizione delle attività utilizzando `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Usa la `errorStrategy` direttiva per definire la strategia per gli errori delle attività. Per impostazione predefinita, quando un'attività ritorna con un'indicazione di errore (uno stato di uscita diverso da zero), l'attività si interrompe e HealthOmics termina l'intera esecuzione. Se è impostata su `errorStrategy``retry`, HealthOmics tenta un nuovo tentativo dell'operazione non riuscita. Per aumentare il numero di tentativi, vedere. [Tentativi di riprovare l'attività utilizzando `maxRetries`](#workflow-nexflow-task-retry)

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

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

Per informazioni su come HealthOmics gestisce i nuovi tentativi di operazione durante un'esecuzione, vedere. [Ritentativi di attività](monitoring-runs.md#run-status-task-retries)

### Tentativi di riprovare l'attività utilizzando `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Per impostazione predefinita, HealthOmics non tenta di ripetere un'operazione non riuscita o tenta un solo tentativo se configurato. `errorStrategy` Per aumentare il numero massimo di tentativi, imposta `errorStrategy` `retry` e configura il numero massimo di tentativi utilizzando la direttiva. `maxRetries`

L'esempio seguente imposta il numero massimo di tentativi su 3 nella configurazione globale.

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

L'esempio seguente mostra come impostare `maxRetries` la definizione del flusso di lavoro nella sezione delle attività.

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

L'esempio seguente mostra come specificare la configurazione specifica dell'attività nel file di configurazione di Nextflow, in base ai selettori di nome o etichetta.

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

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

### Disattiva la ripetizione dell'attività utilizzando `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

Per Nextflow v23 e v24, HealthOmics supporta nuovi tentativi di attività se l'operazione non è riuscita a causa di errori di servizio (5XX codici di stato HTTP). Per impostazione predefinita, HealthOmics tenta fino a due nuovi tentativi di un'operazione non riuscita. 

È possibile `omicsRetryOn5xx` configurare la disattivazione del nuovo tentativo di operazione per errori di servizio. Per ulteriori informazioni su come riprovare l'attività HealthOmics, vedere. [Ritentativi di attività](monitoring-runs.md#run-status-task-retries)

L'esempio seguente configura `omicsRetryOn5xx` la configurazione globale per disattivare il nuovo tentativo di operazione.

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

L'esempio seguente mostra come eseguire la configurazione `omicsRetryOn5xx` nella sezione delle attività della definizione del flusso di lavoro.

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

L'esempio seguente mostra `omicsRetryOn5xx` come impostare una configurazione specifica per l'attività nel file di configurazione Nextflow, in base ai selettori di nome o etichetta.

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

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

### `time`Durata dell'attività utilizzando la direttiva
<a name="time-directive-nextflow"></a>

HealthOmics fornisce una quota regolabile (vedi[HealthOmics quote di servizio](service-quotas.md)) per specificare la durata massima di un'esecuzione. Per i flussi di lavoro Nextflow v23 e v24, puoi anche specificare la durata massima delle attività utilizzando la direttiva Nextflow. `time`

Durante lo sviluppo di nuovi flussi di lavoro, l'impostazione della durata massima delle attività consente di catturare attività inutili e attività di lunga durata. 

[Per ulteriori informazioni sulla direttiva time di Nextflow, consulta la direttiva time nel riferimento di Nextflow.](https://www.nextflow.io/docs/latest/reference/process.html#process-time)

HealthOmics fornisce il seguente supporto per la direttiva time Nextflow:

1. HealthOmics supporta la granularità di 1 minuto per la direttiva time. È possibile specificare un valore compreso tra 60 secondi e il valore massimo della durata dell'esecuzione.

1. Se si immette un valore inferiore a 60, lo HealthOmics arrotonda a 60 secondi. Per valori superiori a 60, HealthOmics arrotonda per difetto al minuto più vicino.

1. Se il flusso di lavoro supporta nuovi tentativi per un'operazione, HealthOmics riprova l'operazione in caso di timeout.

1. Se un'attività scade (o scade l'ultimo tentativo), HealthOmics annulla l'attività. Questa operazione può avere una durata da uno a due minuti.

1. In caso di timeout dell'attività, HealthOmics imposta l'esecuzione e lo stato dell'attività su Non riuscita e annulla le altre attività in esecuzione (per le attività con stato Avvio, In sospeso o In esecuzione). HealthOmics esporta gli output delle attività completate prima del timeout nella posizione di output S3 designata. 

1. Il tempo trascorso da un'attività in sospeso non viene conteggiato ai fini della durata dell'attività.

1. Se l'esecuzione fa parte di un gruppo di esecuzione e il gruppo di esecuzione scade prima del timer dell'attività, l'esecuzione e l'attività passano allo stato non riuscito.

Specificate la durata del timeout utilizzando una o più delle seguenti unità:`ms`,, `s` `m``h`, o. `d`

L'esempio seguente mostra come specificare la configurazione globale nel file di configurazione Nextflow. Imposta un timeout globale di 1 ora e 30 minuti.

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

L'esempio seguente mostra come specificare una direttiva temporale nella sezione delle attività della definizione del flusso di lavoro. Questo esempio imposta un timeout di 3 giorni, 5 ore e 4 minuti. Questo valore ha la precedenza sul valore globale nel file di configurazione, ma non ha la precedenza su una direttiva temporale specifica per l'attività nel file di configurazione. `my_label`

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

L'esempio seguente mostra come specificare le direttive temporali specifiche dell'attività nel file di configurazione Nextflow, in base ai selettori di nome o etichetta. Questo esempio imposta un valore di timeout globale dell'attività di 30 minuti. Imposta un valore di 2 ore per l'attività `myTask` e imposta un valore di 3 ore per le attività con etichetta`my_label`. Per le attività che corrispondono al selettore, questi valori hanno la precedenza sul valore globale e sul valore nella definizione del flusso di lavoro.

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

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

## Esporta il contenuto delle attività
<a name="exporting-task-content-nextflow"></a>

Per i flussi di lavoro scritti in Nextflow, definisci una direttiva **PublishDir** per esportare il contenuto delle attività nel tuo bucket Amazon S3 di output. **Come mostrato nell'esempio seguente, imposta il valore PublishDir su.** `/mnt/workflow/pubdir` Per esportare file in Amazon S3, i file devono trovarsi in questa directory.

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

# Specifiche della definizione del flusso di lavoro CWL
<a name="workflow-languages-cwl"></a>

I flussi di lavoro scritti in Common Workflow Language, o CWL, offrono funzionalità simili ai flussi di lavoro scritti in WDL e Nextflow. Puoi utilizzare Amazon S3 o HealthOmics lo storage URIs come parametri di input. 

Se definisci l'input in un SecondaryFile in un flusso di lavoro secondario, aggiungi la stessa definizione nel flusso di lavoro principale.

HealthOmics i flussi di lavoro non supportano i processi operativi. [Per ulteriori informazioni sui processi operativi nei flussi di lavoro CWL, consultate la documentazione CWL.](https://www.commonwl.org/user_guide/topics/operations.html)

La migliore pratica consiste nel definire un flusso di lavoro CWL separato per ogni contenitore utilizzato. Ti consigliamo di non codificare la voce DockerPull con un URI Amazon ECR fisso.

**Topics**
+ [Converti i flussi di lavoro CWL da utilizzare HealthOmics](#workflow-cwl-convert)
+ [Disattiva la ripetizione dell'attività utilizzando `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Ripeti una fase del flusso di lavoro](#workflow-cwl-loop)
+ [Riprova le attività con maggiore memoria](#workflow-cwl-out-of-memory-retry)
+ [Esempi](#workflow-cwl-examples)

## Converti i flussi di lavoro CWL da utilizzare HealthOmics
<a name="workflow-cwl-convert"></a>

Per convertire una definizione di workflow CWL esistente da utilizzare HealthOmics, apportate le seguenti modifiche:
+ Sostituisci tutti i container Docker URIs con Amazon URIs ECR.
+ Assicurati che tutti i file del flusso di lavoro siano dichiarati come input nel flusso di lavoro principale e che tutte le variabili siano definite in modo esplicito.
+ Assicurati che tutto il JavaScript codice sia conforme alla modalità rigorosa.

## Disattiva la ripetizione dell'attività utilizzando `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics supporta nuovi tentativi di attività se l'operazione non è riuscita a causa di errori di servizio (codici di stato HTTP 5XX). Per impostazione predefinita, HealthOmics tenta fino a due nuovi tentativi di un'operazione non riuscita. Per ulteriori informazioni su come riprovare l'operazione HealthOmics, vedere. [Ritentativi di attività](monitoring-runs.md#run-status-task-retries)

Per disattivare la ripetizione dell'attività a causa di errori di servizio, configura la `omicsRetryOn5xx` direttiva nella definizione del flusso di lavoro. È possibile definire questa direttiva in base a requisiti o suggerimenti. Consigliamo di aggiungere la direttiva come suggerimento per la portabilità.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

I requisiti hanno la precedenza sui suggerimenti. Se l'implementazione di un'attività fornisce un fabbisogno di risorse nei suggerimenti che è fornito anche dai requisiti in un flusso di lavoro che lo include, i requisiti di inclusione hanno la precedenza.

Se lo stesso requisito di attività viene visualizzato a livelli diversi del flusso di lavoro, HealthOmics utilizza la voce più specifica di `requirements` (o`hints`, se non sono presenti voci). `requirements` L'elenco seguente mostra l'ordine di precedenza HealthOmics utilizzato per applicare le impostazioni di configurazione, dalla priorità più bassa a quella più alta:
+ Livello di flusso di lavoro
+ Livello di gradino
+ Sezione delle attività della definizione del flusso di lavoro

L'esempio seguente mostra come configurare la `omicsRetryOn5xx` direttiva a diversi livelli del flusso di lavoro. In questo esempio, il requisito a livello di flusso di lavoro ha la precedenza sui suggerimenti a livello di flusso di lavoro. Le configurazioni dei requisiti a livello di attività e fase hanno la precedenza sulle configurazioni dei suggerimenti.

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

## Ripeti una fase del flusso di lavoro
<a name="workflow-cwl-loop"></a>

HealthOmics supporta la ripetizione ciclica di una fase del flusso di lavoro. È possibile utilizzare i loop per eseguire ripetutamente le fasi del flusso di lavoro fino a quando non viene soddisfatta una condizione specificata. Ciò è utile per i processi iterativi in cui è necessario ripetere un'operazione più volte o fino al raggiungimento di un determinato risultato.

**Nota:** la funzionalità Loop richiede la versione CWL 1.2 o successiva. I flussi di lavoro che utilizzano versioni CWL precedenti alla 1.2 non supportano le operazioni di loop.

Per utilizzare i loop nel flusso di lavoro CWL, definite un requisito di Loop. L'esempio seguente mostra la configurazione dei requisiti del loop:

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

Il `loopWhen` campo controlla quando il ciclo termina. In questo esempio, il ciclo continua finché il contatore è inferiore al valore massimo. Il `loop` campo definisce come i parametri di input vengono aggiornati tra le iterazioni. `loopSource`specifica quale output dell'iterazione precedente viene immesso nell'iterazione successiva. Il `outputMethod` campo impostato su `last` restituisce solo l'output dell'iterazione finale.

## Riprova le attività con maggiore memoria
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics supporta la ripetizione automatica degli errori delle out-of-memory attività. Quando un'attività termina con il codice 137 (out-of-memory), HealthOmics crea una nuova attività con una maggiore allocazione di memoria in base al moltiplicatore specificato.

**Nota**  
HealthOmics riprova gli out-of-memory errori fino a 3 volte o finché l'allocazione della memoria non raggiunge i 1536 GiB, a seconda del limite raggiunto per primo.

L'esempio seguente mostra come configurare retry: out-of-memory

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

Quando un'operazione fallisce a causa di out-of-memory, HealthOmics calcola l'allocazione della memoria tra tentativi utilizzando la formula:. `previous_run_memory × memoryRetryMultiplier` Nell'esempio precedente, se l'operazione con 4096 MB di memoria ha esito negativo, il nuovo tentativo utilizza 4096 × 2,5 = 10.240 MB di memoria.

Il `memoryRetryMultiplier` parametro controlla la quantità di memoria aggiuntiva da allocare per i tentativi di riprovare:
+ **Valore predefinito:** se non si specifica un valore, il valore predefinito è `2` (raddoppia la memoria)
+ **Intervallo valido:** deve essere un numero positivo maggiore di. `1` I valori non validi generano un errore di convalida 4XX
+ **Valore minimo effettivo:** i valori compresi tra `1` e `1.5` vengono aumentati automaticamente per `1.5` garantire un aumento significativo della memoria e prevenire tentativi eccessivi di nuovi tentativi

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

Di seguito è riportato un esempio di workflow scritto in 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
```

Il file seguente definisce l'`copy.cwl`attività.

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

Di seguito è riportato un esempio di flusso di lavoro scritto in CWL con un requisito 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: []
```

# Esempi di definizioni del flusso di lavoro
<a name="workflow-definition-examples"></a>

L'esempio seguente mostra la stessa definizione di flusso di lavoro in WDL, Nextflow e 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
```

------

# File modello di parametri per i flussi HealthOmics di lavoro
<a name="parameter-templates"></a>

I modelli di parametri definiscono i parametri di input per un flusso di lavoro. È possibile definire i parametri di input per rendere il flusso di lavoro più flessibile e versatile. Ad esempio, puoi definire un parametro per la posizione in Amazon S3 dei file del genoma di riferimento. I modelli di parametri possono essere forniti tramite un servizio di repository basato su Git o l'unità locale. Gli utenti possono quindi eseguire il flusso di lavoro utilizzando vari set di dati. 

È possibile creare il modello di parametri per il flusso di lavoro HealthOmics oppure generare il modello di parametri automaticamente.

Il modello di parametro è un file JSON. Nel file, ogni parametro di input è un oggetto denominato che deve corrispondere al nome dell'input del flusso di lavoro. Quando si avvia un'esecuzione, se non si forniscono valori per tutti i parametri richiesti, l'esecuzione ha esito negativo.

L'oggetto del parametro di input include i seguenti attributi:
+ **description**— Questo attributo obbligatorio è una stringa che la console visualizza nella pagina **Start run**. Questa descrizione viene conservata anche come metadati di esecuzione.
+ **optional**— Questo attributo opzionale indica se il parametro di input è facoltativo. Se non si specifica il **optional** campo, il parametro di input è obbligatorio.

Il seguente modello di parametri di esempio mostra come specificare i parametri di input.

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

## Generazione di modelli di parametri
<a name="parameter-parsing"></a>

HealthOmics genera il modello di parametri analizzando la definizione del flusso di lavoro per rilevare i parametri di input. Se fornite un file modello di parametri per un flusso di lavoro, i parametri del file sostituiscono i parametri rilevati nella definizione del flusso di lavoro.

Esistono lievi differenze tra la logica di analisi dei motori CWL, WDL e Nextflow, come descritto nelle sezioni seguenti. 

**Topics**
+ [Rilevamento dei parametri per CWL](#parameter-parsing-cwl)
+ [Rilevamento dei parametri per WDL](#parameter-parsing-wdl)
+ [Rilevamento dei parametri per Nextflow](#parameter-parsing-nextflow)

### Rilevamento dei parametri per CWL
<a name="parameter-parsing-cwl"></a>

Nel motore di workflow CWL, la logica di analisi si basa sui seguenti presupposti:
+ Tutti i tipi nullable supportati sono contrassegnati come parametri di input opzionali.
+ Tutti i tipi supportati non nulli sono contrassegnati come parametri di input obbligatori.
+ Tutti i parametri con valori predefiniti sono contrassegnati come parametri di input opzionali.
+ Le descrizioni vengono estratte dalla `label` sezione della definizione del `main` flusso di lavoro. Se non `label` è specificato, la descrizione sarà vuota (una stringa vuota). 

Le tabelle seguenti mostrano esempi di interpolazione CWL. Per ogni esempio, il nome del parametro è. `x` Se il parametro è obbligatorio, è necessario fornire un valore per il parametro. Se il parametro è facoltativo, non è necessario fornire un valore.

Questa tabella mostra esempi di interpolazione CWL per tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 o 2 o... | Sì | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | Il valore predefinito è 2. L'input valido è 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?</pre>  | L'input valido è Nessuno o 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | Il valore predefinito è 2. L'input valido è Nessuno o 1 o 2 o... | No | 

La tabella seguente mostra esempi di interpolazione CWL per tipi complessi. Un tipo complesso è una raccolta di tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] o [1,2,3]  | Sì | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Nessuno oppure [] o [1,2,3]  | No | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] o [Nessuno, 3, Nessuno]  | Sì | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Nessuno] o Nessuno o [1,2,3] o [Nessuno, 3] ma non []  | No | 

### Rilevamento dei parametri per WDL
<a name="parameter-parsing-wdl"></a>

Nel motore di workflow WDL, la logica di analisi si basa sui seguenti presupposti:
+ Tutti i tipi nullable supportati sono contrassegnati come parametri di input opzionali. 
+ Per i tipi supportati che non possono essere annullati:
  + Qualsiasi variabile di input con assegnazione di valori letterali o espressioni è contrassegnata come parametri opzionali. Per esempio:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Se non sono stati assegnati valori o espressioni ai parametri di input, questi verranno contrassegnati come parametri obbligatori. 
+ Le descrizioni vengono estratte dalla definizione `parameter_meta` del `main` flusso di lavoro. Se non `parameter_meta` è specificato, la descrizione sarà vuota (una stringa vuota). Per ulteriori informazioni, vedete la specifica WDL per i [metadati dei parametri](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

Le tabelle seguenti mostrano esempi di interpolazione WDL. Per ogni esempio, il nome del parametro è. `x` Se il parametro è obbligatorio, è necessario fornire un valore per il parametro. Se il parametro è facoltativo, non è necessario fornire un valore.

Questa tabella mostra esempi di interpolazione WDL per tipi primitivi.


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
| Int x | 1 o 2 o... | Sì | 
| Int x = 2 | 2 | No | 
| Intx = 1\$12 | 3 | No | 
| Int x = y\$1z | y\$1z | No | 
| Int? x | Nessuno o 1 o 2 o... | Sì | 
| Int? x = 2 | Nessuno o 2 | No | 
| Int? x = 1\$12 | Nessuno o 3 | No | 
| Int? x = y\$1z | Nessuno o y\$1z | No | 

La tabella seguente mostra esempi di interpolazione WDL per tipi complessi. Un tipo complesso è una raccolta di tipi primitivi. 


| Input | Esempio di input/output | Richiesto | 
| --- | --- | --- | 
| Array [Int] x | [1,2,3] o [] | Sì | 
| Matrice [Int] \$1 x | [1], ma non [] | Sì | 
| Array [Int]? x | Nessuno o [] o [1,2,3] | No | 
| Array [Int?] x | [] o [Nessuno, 3, Nessuno] | Sì | 
| Array [Int?] =? x | [Nessuno] o Nessuno o [1,2,3] o [Nessuno, 3] ma non [] | No | 
| Esempio di struttura \$1String a, Int y\$1 più avanti negli input: Sample MySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Sì | 
| Esempio di struttura \$1String a, Int y\$1 più avanti negli input: Sample? MySample |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | No | 

### Rilevamento dei parametri per Nextflow
<a name="parameter-parsing-nextflow"></a>

Per Nextflow, HealthOmics genera il modello di parametro analizzando il file. `nextflow_schema.json` Se la definizione del flusso di lavoro non include un file di schema, HealthOmics analizza il file di definizione del flusso di lavoro principale.

**Topics**
+ [Analisi del file di schema](#parameter-parsing-nextflow-schema)
+ [Analisi del file principale](#parameter-parsing-nextflow-main)
+ [Parametri annidati](#parameter-parsing-nextflow-nested)
+ [Esempi di interpolazione Nextflow](#parameter-parsing-nextflow-examples)

#### Analisi del file di schema
<a name="parameter-parsing-nextflow-schema"></a>

Affinché l'analisi funzioni correttamente, assicurati che il file di schema soddisfi i seguenti requisiti:
+ Il file di schema è denominato `nextflow_schema.json` e si trova nella stessa directory del file di workflow principale.
+ Il file di schema è JSON valido come definito in uno dei seguenti schemi:
  + [schema json. org/draft/2020-12/schema](https://json-schema.org/draft/2020-12/schema).
  + [schema json. org/draft-07/schema](https://json-schema.org/draft-07/schema).

HealthOmics analizza il `nextflow_schema.json` file per generare il modello di parametro:
+ Estrae tutto ciò **properties** che è definito nello schema.
+ Include la proprietà **description** se disponibile per la proprietà.
+ Identifica se ogni parametro è facoltativo o obbligatorio, in base al **required** campo della proprietà.

L'esempio seguente mostra un file di definizione e il file dei parametri generato.

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

Il modello di parametro generato:

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

#### Analisi del file principale
<a name="parameter-parsing-nextflow-main"></a>

Se la definizione del flusso di lavoro non include un `nextflow_schema.json` file, HealthOmics analizza il file di definizione del flusso di lavoro principale.

HealthOmics analizza le `params` espressioni presenti nel file di definizione del flusso di lavoro principale e nel `nextflow.config` file. Tutte le `params` versioni con valori predefiniti sono contrassegnate come opzionali.

Affinché l'analisi funzioni correttamente, tieni presente i seguenti requisiti:
+ HealthOmics analizza solo il file di definizione del flusso di lavoro principale. Per garantire che tutti i parametri vengano acquisiti, ti consigliamo di collegarlo a tutti **params** i sottomoduli e ai flussi di lavoro importati.
+ Il file di configurazione è facoltativo. Se ne definite uno, assegnategli un nome `nextflow.config` e inseritelo nella stessa directory del file di definizione del flusso di lavoro principale.

L'esempio seguente mostra un file di definizione e il modello di parametri generato.

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

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

Il modello di parametro generato:

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

Per i valori predefiniti definiti in nextflow.config, HealthOmics raccoglie le `params` assegnazioni e i parametri dichiarati all'interno`params {}`, come illustrato nell'esempio seguente. Nelle istruzioni di assegnazione, `params` deve apparire nella parte sinistra dell'istruzione.

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

Il modello di parametro generato:

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

#### Parametri annidati
<a name="parameter-parsing-nextflow-nested"></a>

Entrambi `nextflow.config` consentono `nextflow_schema.json` parametri annidati. Tuttavia, il modello di HealthOmics parametri richiede solo i parametri di primo livello. Se il flusso di lavoro utilizza un parametro annidato, è necessario fornire un oggetto JSON come input per quel parametro.

##### Parametri annidati nei file di schema
<a name="parameter-parsing-schema-nested"></a>

HealthOmics salti annidati **params** durante l'analisi di un file. `nextflow_schema.json` Ad esempio, se si definisce il seguente file: `nextflow_schema.json`

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

HealthOmics ignora `input_file` e `input_num` quando genera il modello di parametro:

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

Quando si esegue questo flusso di lavoro, HealthOmics si aspetta un `input.json` file simile al seguente:

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

##### Parametri annidati nei file di configurazione
<a name="parameter-parsing-config-nested"></a>

HealthOmics non raccoglie i dati annidati **params** in un `nextflow.config` file e li salta durante l'analisi. Ad esempio, se definisci il seguente file: `nextflow.config`

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

HealthOmics ignora `params.nested.beta` e `params.group.delta` quando genera il modello di parametro:

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

#### Esempi di interpolazione Nextflow
<a name="parameter-parsing-nextflow-examples"></a>

La tabella seguente mostra esempi di interpolazione Nextflow per i parametri nel file principale.


| Parametri | Richiesto | 
| --- | --- | 
| params.input\$1file | Sì | 
| params.input\$1file = "s3://bucket/data.json» | No | 
| params.nested.input\$1file | N/D | 
| params.nested.input\$1file = "s3://bucket/data.json» | N/D | 

La tabella seguente mostra esempi di interpolazione Nextflow per i parametri nel file. `nextflow.config`


| Parametri | Richiesto | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | No | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | No | 
|  <pre>params {<br />   nested {<br />     input_file = "s3://bucket/data.json"    <br />   }<br />}</pre>  | N/D | 
|  <pre>input_file = params.input_file</pre>  | N/D | 

# Immagini di container per flussi di lavoro privati
<a name="workflows-ecr"></a>

HealthOmics supporta immagini di container ospitate in repository privati di Amazon ECR. Puoi creare immagini di contenitori e caricarle nel repository privato. Puoi anche utilizzare il tuo registro privato Amazon ECR come cache pull through per sincronizzare il contenuto dei registri upstream.

Il tuo repository Amazon ECR deve risiedere nella stessa AWS regione dell'account che chiama il servizio. L'immagine del contenitore Account AWS può essere di proprietà di un altro soggetto, a condizione che l'archivio delle immagini di origine fornisca le autorizzazioni appropriate. Per ulteriori informazioni, consulta [Politiche per l'accesso ad Amazon ECR su più account](permissions-ecr.md#permissions-cross-account).

Ti consigliamo di definire l'immagine del contenitore Amazon ECR URIs come parametri del flusso di lavoro in modo che l'accesso possa essere verificato prima dell'inizio dell'esecuzione. Inoltre, semplifica l'esecuzione di un flusso di lavoro in una nuova regione modificando il parametro Region.

**Nota**  
HealthOmics non supporta i contenitori ARM e non supporta l'accesso agli archivi pubblici.

Per informazioni sulla configurazione delle autorizzazioni IAM per l'accesso HealthOmics ad Amazon ECR, consulta. [HealthOmics Autorizzazioni per le risorse](permissions-resource.md)

**Topics**
+ [Sincronizzazione con registri di container di terze parti](#ecr-pull-through)
+ [Considerazioni generali per le immagini dei container Amazon ECR](#ecr-considerations)
+ [Variabili di ambiente per i flussi HealthOmics di lavoro](#ecr-env-vars)
+ [Utilizzo di Java nelle immagini dei container Amazon ECR](#ecr-java-considerations)
+ [Aggiungi input di attività a un'immagine del contenitore Amazon ECR](#ecr-tasks)

## Sincronizzazione con registri di container di terze parti
<a name="ecr-pull-through"></a>

Puoi utilizzare le regole pull through cache di Amazon ECR per sincronizzare i repository in un registro upstream supportato con i tuoi repository privati Amazon ECR. Per ulteriori informazioni, consulta [Sincronizzare un registro upstream](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html) nella *Amazon ECR User Guide.*

La cache pull through crea automaticamente l'archivio di immagini nel registro privato al momento della creazione della cache e si sincronizza automaticamente con l'immagine memorizzata nella cache in caso di modifiche all'immagine upstream. 

HealthOmics supporta la cache pull through per i seguenti registri upstream: 
+ Amazon ECR Public
+ Registro delle immagini del contenitore Kubernetes
+ Quay
+ Docker Hub 
+ Microsoft Azure Container Registry
+ GitHub Registro dei contenitori 
+ GitLab Registro dei contenitori 

HealthOmics non supporta la cache pull through per un repository privato Amazon ECR upstream.

I vantaggi dell'utilizzo della cache pull through di Amazon ECR includono:

1. Evita di dover migrare manualmente le immagini dei container su Amazon ECR o sincronizzare gli aggiornamenti dal repository di terze parti. 

1. I flussi di lavoro accedono alle immagini sincronizzate dei contenitori nel tuo repository privato, che è più affidabile rispetto al download di contenuti in fase di esecuzione da un registro pubblico.

1. Poiché le cache pull through di Amazon ECR utilizzano una struttura URI prevedibile, il HealthOmics servizio può mappare automaticamente l'URI privato di Amazon ECR con l'URI del registro upstream. Non è necessario aggiornare e sostituire i valori URI nella definizione del flusso di lavoro.

**Topics**
+ [Configurazione della cache pull through](#ecr-pull-through-configure)
+ [Mappature del registro](#ecr-pull-through-registry-mapping)
+ [Mappature delle immagini](#ecr-pull-through-mapping-format)

### Configurazione della cache pull through
<a name="ecr-pull-through-configure"></a>

Amazon ECR fornisce un registro per ogni Account AWS regione. Assicurati di creare la configurazione Amazon ECR nella stessa regione in cui intendi eseguire il flusso di lavoro.

Le seguenti sezioni descrivono le attività di configurazione per il pull through cache.

**Topics**
+ [Crea una regola pull through cache](#create-ecr-ptc)
+ [Autorizzazioni di registro per il registro upstream](#reg-ecr-ptc)
+ [Modelli per la creazione di repository](#repo-create-templates-ptc)
+ [Creazione del flusso di lavoro](#reg-mapping-ecr-ptc)

#### Crea una regola pull through cache
<a name="create-ecr-ptc"></a>

Crea una regola pull through cache di Amazon ECR per ogni registro upstream contenente immagini che desideri memorizzare nella cache. Una regola specifica una mappatura tra un registro upstream e l'archivio privato Amazon ECR. 

Per un registro upstream che richiede l'autenticazione, fornisci le tue credenziali utilizzando AWS Secrets Manager.

**Nota**  
Non modificare una regola di pull through cache mentre un'esecuzione attiva utilizza il repository privato. L'esecuzione potrebbe fallire o, cosa ancora più importante, far sì che la pipeline utilizzi immagini inaspettate.

Per ulteriori informazioni, consulta [Creazione di una regola pull through cache](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) nella *Amazon Elastic Container Registry User Guide*.

##### Crea una regola pull through cache utilizzando la console
<a name="create-ecr-ptc-console"></a>

Per configurare la cache pull through, segui questi passaggi utilizzando la console Amazon ECR:

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

1. Dal menu a sinistra, in **Registro privato**, espandi **Caratteristiche e impostazioni**, quindi scegli **Pull** through cache.

1. Dalla pagina **Pull through cache**, scegli **Aggiungi regola**.

1. **Nel pannello del **registro Upstream**, scegli il registro upstream da sincronizzare con il registro privato, quindi scegli Avanti.**

1. Se il registro upstream richiede l'autenticazione, la console apre una nuova pagina in cui specifichi il segreto SageMaker AI che contiene le tue credenziali. Scegli **Next (Successivo)**.

1. In **Specificate namespaces**, nel pannello **Cache namespace**, scegliete se creare i repository privati utilizzando un prefisso di repository specifico o senza prefisso. **Se scegliete di utilizzare un prefisso, specificate il nome del prefisso nel prefisso del repository Cache.**

1. Nel pannello dello spazio dei **nomi Upstream**, scegliete se estrarre dai repository upstream utilizzando un prefisso di repository specifico o senza prefisso. **Se scegliete di utilizzare un prefisso, specificate il nome del prefisso nel prefisso del repository Upstream.**

   Il pannello di esempio **Namespace mostra un esempio** di pull request, un URL upstream e l'URL del cache repository che viene creato.

1. Scegli **Next (Successivo)**.

1. Rivedi la configurazione e scegli **Crea per creare** la regola.

Per ulteriori informazioni, consulta [Creare una regola pull through cache (AWS Management Console)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console).

##### Crea una regola pull through cache utilizzando la CLI
<a name="create-ecr-ptc-cli"></a>

Usa il **create-pull-through-cache-rule** comando Amazon ECR per creare una regola pull through cache. Per i registri upstream che richiedono l'autenticazione, memorizzate le credenziali in un segreto di Secrets Manager.

Le sezioni seguenti forniscono esempi per ogni registro upstream supportato.

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

L'esempio seguente crea una regola di cache pull-through per il registro pubblico di Amazon ECR. Specifica un prefisso di `ecr-public`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `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
```

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

L'esempio seguente crea una regola di cache pull through per il registro pubblico Kubernetes. Specifica un prefisso di `kubernetes`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `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
```

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

L'esempio seguente crea una regola di cache pull-through per il registro pubblico Quay. Specifica un prefisso di `quay`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `quay/upstream-repository-name`.

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

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

L'esempio seguente crea una regola di cache pull-through per il registro Docker Hub. Specifica un prefisso di `docker-hub`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `docker-hub/upstream-repository-name`. Devi specificare nella sua interezza il nome della risorsa Amazon (ARN) del segreto contenente le credenziali di 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
```

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

L'esempio seguente crea una regola pull through cache per il GitHub Container Registry. Specifica un prefisso di `github`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `github/upstream-repository-name`. È necessario specificare l'Amazon Resource Name (ARN) completo del segreto contenente le credenziali del GitHub Container Registry.

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

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

L'esempio seguente crea una regola pull through cache per il Microsoft Azure Container Registry. Specifica un prefisso di `azure`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `azure/upstream-repository-name`. Devi specificare nella sua interezza il nome della risorsa Amazon (ARN) del segreto contenente le credenziali di Microsoft 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
```

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

L'esempio seguente crea una regola pull through cache per il GitLab Container Registry. Specifica un prefisso di `gitlab`, che fa sì che ciascun repository creato utilizzando la regola della cache pull-through abbia lo schema di denominazione di `gitlab/upstream-repository-name`. È necessario specificare l'Amazon Resource Name (ARN) completo del segreto contenente le credenziali del GitLab Container Registry.

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

Per ulteriori informazioni, consulta [Create a pull through cache rule (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) nella *Amazon ECR* User Guide.

È possibile utilizzare il comando **get-run-task** CLI per recuperare informazioni sull'immagine del contenitore utilizzata per un'attività specifica:

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

L'output include le seguenti informazioni sull'immagine del contenitore:

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

#### Autorizzazioni di registro per il registro upstream
<a name="reg-ecr-ptc"></a>

Utilizza le autorizzazioni di registro HealthOmics per consentire l'utilizzo della cache pull through e per inserire le immagini del contenitore nel registro privato di Amazon ECR. Aggiungi una policy del registro Amazon ECR al registro che fornisce i contenitori utilizzati nelle esecuzioni. 

La seguente policy concede al HealthOmics servizio l'autorizzazione a creare repository con i prefissi pull through cache specificati e ad avviare recuperi upstream in questi repository. 

1. Dalla console Amazon ECR, apri il menu a sinistra, in **Registro privato**, espandi **le autorizzazioni del registro**, quindi scegli **Genera** dichiarazione.

1. In alto a destra, scegli JSON. Inserisci una politica simile alla seguente:

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

------

#### Modelli per la creazione di repository
<a name="repo-create-templates-ptc"></a>

Per utilizzare il pull through caching in HealthOmics, il repository Amazon ECR deve disporre di un modello di creazione del repository. Il modello definisce le impostazioni di configurazione per quando tu o Amazon ECR create un repository privato per un registro upstream. 

Ogni modello contiene un prefisso dello spazio dei nomi del repository, che Amazon ECR utilizza per abbinare i nuovi repository a un modello specifico. I modelli specificano la configurazione per tutte le impostazioni del repository, comprese le politiche di accesso basate sulle risorse, l'immutabilità dei tag, la crittografia e le politiche del ciclo di vita.

Per ulteriori informazioni, consulta [Modelli di creazione di repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html) nella *Amazon Elastic Container Registry User Guide*.

Come creare un modello per la creazione di un repository:

1. Dalla console Amazon ECR, apri il menu a sinistra, in **Registro privato**, espandi **Caratteristiche e impostazioni**, quindi scegli Modelli di **creazione di repository**.

1. Scegli **Crea modello**.

1. Nei **dettagli del modello**, scegli **Pull through cache**.

1. Scegli se applicare questo modello a un prefisso specifico o a tutti i repository che non corrispondono a un altro modello.

   **Se scegli **Un prefisso specifico, inserisci il valore del prefisso** dello spazio dei nomi in Prefisso.** Avete specificato questo prefisso quando avete creato la regola PTC.

1. Scegli **Next (Successivo)**.

1. **Nella pagina **Aggiungi configurazione per la creazione del repository**, immettete le autorizzazioni per la creazione del repository.** Utilizza una delle istruzioni politiche di esempio o inseriscine una simile all'esempio seguente:

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

****  

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

------

1. Facoltativamente, puoi aggiungere impostazioni del repository come i criteri del ciclo di vita e i tag. Amazon ECR applica queste regole a tutte le immagini di container create per la cache pull through che utilizzano il prefisso specificato.

1. Scegli **Next (Successivo)**.

1. **Controlla la configurazione e scegli Avanti.**

#### Creazione del flusso di lavoro
<a name="reg-mapping-ecr-ptc"></a>

Quando crei un nuovo flusso di lavoro o una nuova versione del flusso di lavoro, rivedi i mapping del registro e aggiornali se necessario. Per informazioni dettagliate, vedi [Creare un flusso di lavoro privato](create-private-workflow.md).

### Mappature del registro
<a name="ecr-pull-through-registry-mapping"></a>

Definisci le mappature del registro da mappare tra i prefissi nel tuo registro Amazon ECR privato e i nomi del registro upstream.

Per ulteriori informazioni sulle mappature del registro Amazon ECR, consulta [Creazione di una regola pull through cache in Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

L'esempio seguente mostra le mappature del registro su Docker Hub, Quay e Amazon ECR Public.

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

### Mappature delle immagini
<a name="ecr-pull-through-mapping-format"></a>

Definisci le mappature delle immagini da mappare tra i nomi delle immagini definiti nei flussi di lavoro privati di Amazon ECR e i nomi delle immagini nel registro upstream.

Puoi utilizzare le mappature delle immagini con registri che supportano la cache pull through. È inoltre possibile utilizzare le mappature delle immagini con registri upstream che non supportano il pull through cache. HealthOmics È necessario sincronizzare manualmente il registro upstream con il repository privato. 

Per ulteriori informazioni sulle mappature delle immagini di Amazon ECR, consulta [Creazione di una regola pull through cache in Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

L'esempio seguente mostra le mappature da immagini private di Amazon ECR a un'immagine genomica pubblica e all'ultima immagine di 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",
        }
    ]
}
```

## Considerazioni generali per le immagini dei container Amazon ECR
<a name="ecr-considerations"></a>
+ Architecture

  HealthOmics supporta contenitori x86\$164. Se il computer locale è basato su ARM, come Apple Mac, usa un comando come il seguente per creare un'immagine del contenitore x86\$164: 

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ Entrypoint e shell

  HealthOmics i motori di workflow iniettano gli script di bash come comando che sostituiscono le immagini dei contenitori utilizzate dalle attività del flusso di lavoro. Pertanto, le immagini dei contenitori dovrebbero essere create senza un ENTRYPOINT specificato in modo tale che una shell bash sia l'impostazione predefinita. 
+ Percorsi montati

  Un filesystem condiviso viene montato sulle attività del contenitore in /tmp. Tutti i dati o gli strumenti incorporati nell'immagine del contenitore in questa posizione verranno sovrascritti.

  La definizione del flusso di lavoro è disponibile per le attività tramite un montaggio in sola lettura in /mnt/workflow.
+ Dimensione dell’immagine

  Vedi per le dimensioni massime delle immagini dei contenitori. [HealthOmics quote a dimensione fissa per il flusso di lavoro](fixed-quotas.md#fixed-quotas-workflows)

## Variabili di ambiente per i flussi HealthOmics di lavoro
<a name="ecr-env-vars"></a>

HealthOmics fornisce variabili di ambiente che contengono informazioni sul flusso di lavoro in esecuzione nel contenitore. È possibile utilizzare i valori di queste variabili nella logica delle attività del flusso di lavoro.

Tutte le variabili HealthOmics del flusso di lavoro iniziano con il `AWS_WORKFLOW_` prefisso. Questo prefisso è un prefisso di variabile di ambiente protetto. Non utilizzate questo prefisso per le vostre variabili nei contenitori del flusso di lavoro. 

HealthOmics fornisce le seguenti variabili di ambiente di flusso di lavoro:

**AWS\$1REGION**  
Questa variabile è la regione in cui è in esecuzione il contenitore.

**AWS\$1WORKFLOW\$1ESEGUI**  
Questa variabile è il nome dell'esecuzione corrente.

**AWS\$1WORKFLOW\$1RUN\$1ID**  
Questa variabile è l'identificatore di esecuzione della corsa corrente.

**AWS\$1WORKFLOW\$1RUN\$1UUID**  
Questa variabile è l'UUID di esecuzione dell'esecuzione corrente.

**AWS\$1WORKFLOW\$1ATTIVITÀ**  
Questa variabile è il nome dell'attività corrente.

**AWS\$1WORKFLOW\$1TASK\$1ID**  
Questa variabile è l'identificatore dell'attività corrente.

**AWS\$1WORKFLOW\$1TASK\$1UUID**  
Questa variabile è l'UUID dell'attività corrente.

L'esempio seguente mostra i valori tipici per ogni variabile di ambiente:

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

## Utilizzo di Java nelle immagini dei container Amazon ECR
<a name="ecr-java-considerations"></a>

Se un'attività di workflow utilizza un'applicazione Java come GATK, considera i seguenti requisiti di memoria per il contenitore:
+ Le applicazioni Java utilizzano la memoria stack e la memoria heap. Per impostazione predefinita, la memoria heap massima è una percentuale della memoria totale disponibile nel contenitore. Questa impostazione predefinita dipende dalla distribuzione JVM specifica e dalla versione JVM, quindi consulta la documentazione pertinente per la tua JVM o imposta esplicitamente il massimo della memoria heap utilizzando le opzioni della riga di comando Java (come `-Xmx`). 
+ Non impostate che la memoria heap massima sia pari al 100% dell'allocazione di memoria del contenitore, poiché anche lo stack JVM richiede memoria. La memoria è richiesta anche per il Garbage Collector JVM e per qualsiasi altro processo del sistema operativo in esecuzione nel contenitore.
+ Alcune applicazioni Java, come GATK, possono utilizzare invocazioni di metodi nativi o altre ottimizzazioni come i file di mappatura della memoria. Queste tecniche richiedono allocazioni di memoria eseguite «off heap», che non sono controllate dal parametro JVM maximum heap. 

  Se sai (o sospetti) che la tua applicazione Java alloca memoria off-heap, assicurati che l'allocazione della memoria delle attività includa i requisiti di memoria off-heap.

  Se queste allocazioni off-heap causano l'esaurimento della memoria nel contenitore, in genere non viene visualizzato un **OutOfMemory** errore Java, perché la JVM non controlla questa memoria. 

## Aggiungi input di attività a un'immagine del contenitore Amazon ECR
<a name="ecr-tasks"></a>

Aggiungi tutti gli eseguibili, le librerie e gli script necessari per eseguire un'attività di workflow nell'immagine Amazon ECR utilizzata per eseguire l'attività. 

È consigliabile evitare l'uso di script, file binari e librerie esterni all'immagine del contenitore di attività. Ciò è particolarmente importante quando si utilizzano `nf-core` flussi di lavoro che utilizzano una `bin` directory come parte del pacchetto workflow. Sebbene questa directory sia disponibile per l'attività del flusso di lavoro, viene montata come directory di sola lettura. Le risorse richieste in questa directory devono essere copiate nell'immagine dell'attività e rese disponibili in fase di esecuzione o durante la creazione dell'immagine del contenitore utilizzata per l'attività. 

Vedi [HealthOmics quote a dimensione fissa per il flusso di lavoro](fixed-quotas.md#fixed-quotas-workflows) la dimensione massima dell'immagine del contenitore HealthOmics supportata.

# HealthOmics File README del flusso di lavoro
<a name="workflows-readme"></a>

Puoi caricare un file README.md contenente istruzioni, diagrammi e informazioni essenziali per il tuo flusso di lavoro. Ogni versione del flusso di lavoro supporta un file README, che è possibile aggiornare in qualsiasi momento.

**I requisiti README includono:**
+ Il file README deve essere in formato markdown (.md)
+ Dimensione massima del file: 500 KiB

**Topics**
+ [Usa un file README esistente](#workflows-add-readme)
+ [Condizioni di rendering](#workflows-rendering-readme)

## Usa un file README esistente
<a name="workflows-add-readme"></a>

READMEs i file esportati dai repository Git contengono collegamenti relativi che in genere non funzionano al di fuori del repository. HealthOmics L'integrazione con Git li converte automaticamente in link assoluti per un corretto rendering nella console, eliminando la necessità di aggiornamenti manuali degli URL. 

Per l' READMEs importazione da Amazon S3 o da unità locali, le immagini e i link devono essere pubblici URLs o avere i relativi percorsi aggiornati per un rendering corretto.

**Nota**  
Le immagini devono essere ospitate pubblicamente per essere visualizzate nella HealthOmics console. Le immagini archiviate nei GitHub Enterprise Server nostri GitLab Self-Managed archivi non possono essere renderizzate.

## Condizioni di rendering
<a name="workflows-rendering-readme"></a>

La HealthOmics console interpola immagini e collegamenti accessibili al pubblico utilizzando percorsi assoluti. Per eseguire il rendering URLs da archivi privati, l'utente deve avere accesso al repository. I nostri GitHub Enterprise Server GitLab Self-Managed repository, che utilizzano domini personalizzati, HealthOmics non possono risolvere collegamenti relativi o eseguire il rendering di immagini archiviate in questi archivi privati.

La tabella seguente mostra gli elementi markdown supportati dalla visualizzazione README della AWS console.


| Elemento | AWS console | 
| --- | --- | 
| Avvisi | Sì, ma senza icone | 
| Distintivi | Sì | 
| Formattazione di base del testo | Sì | 
| [Blocchi di codice](https://www.markdownguide.org/basic-syntax/#code-blocks) | Sì, ma non dispone della funzionalità di [evidenziazione della sintassi](https://www.markdownguide.org/extended-syntax/#syntax-highlighting) e del pulsante di copia  | 
| Sezioni pieghevoli | Sì | 
| [Titoli](https://www.markdownguide.org/basic-syntax/#headings) | Sì | 
| [Formati di immagine](https://www.markdownguide.org/basic-syntax/#images-1) | Sì | 
| [Immagine (cliccabile)](https://www.markdownguide.org/basic-syntax/#linking-images) | Sì | 
| [Interruzioni di riga](https://www.markdownguide.org/basic-syntax/#line-breaks) | Sì | 
| Diagramma a sirena | Solo può aprire il grafico, spostare la posizione del grafico e copiare il codice | 
| Preventivi | Sì | 
| [https://www.markdownguide.org/extended-syntax/#subscript](https://www.markdownguide.org/extended-syntax/#subscript) | Sì | 
| [Tabelle](https://www.markdownguide.org/extended-syntax/#tables) | Sì, ma non supporta l'allineamento del testo | 
| Allineamento del testo | Sì | 

### Utilizzo di immagini e link URLs
<a name="workflows-urls-readme"></a>

A seconda del provider di origine, struttura la base URLs per pagine e immagini nei seguenti formati.
+ `{username}`: il nome utente in cui è ospitato il repository.
+ `{repo}`: il nome del repository.
+ `{ref}`: il riferimento alla fonte (branch, tag e commit ID). 
+ `{path}`: il percorso del file alla pagina o all'immagine nel repository. 


| Provider di origine | URL della pagina | URL dell'immagine | 
| --- | --- | --- | 
| 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, e Bitbucket supporta sia la pagina URLs che l'immagine che rimandano a un archivio pubblico. La tabella seguente mostra il supporto di ciascun fornitore di sorgenti per il rendering di immagini e collegamenti URLs per repository privati.


| Supporto per repository privati | Provider di origine | URL della pagina | URL dell'immagine | 
| --- | --- | --- | --- | 
| GitHub | Solo con accesso al repository | No | 
| GitLab | Solo con accesso al repository | No | 
| Bitbucket | Solo con accesso al repository | No | 

# Richiesta di licenze Sentieon per flussi di lavoro privati
<a name="private-workflows-subscribe"></a>

Se il tuo flusso di lavoro privato utilizza il software Sentieon, hai bisogno di una licenza Senieon. Segui questi passaggi per richiedere e configurare una licenza per il software Sentieon:
+ Richiedi una licenza Sentieon 
  + Invia un'e-mail al gruppo di supporto Sentieon (support@sentieon.com) per richiedere una licenza software.
    + Fornisci il tuo ID utente AWS Canonical nell'e-mail.
    + [Trova il tuo ID utente AWS Canonical seguendo queste istruzioni.](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)
+ Aggiorna il tuo ruolo HealthOmics di servizio per concedergli l'accesso al proxy del server di licenza Sentieon e al bucket Sentieon Omics nella tua regione. L'esempio seguente concede l'accesso a. `us-east-1` Se necessario, sostituisci questo testo con la tua regione.

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

------
+ Genera una AWS richiesta di supporto per accedere al proxy del server di licenza Sentieon. 
  + [Per creare una richiesta di supporto, accedi a support.console.aws.amazon.com.](https://support.console.aws.amazon.com)
  + Fornisci la tua e la regione nella richiesta di assistenza. Account AWS Il tuo account viene aggiunto alla lista consentita per il proxy del server di licenza.
+ Crea il tuo flusso di lavoro privato utilizzando il contenitore Sentieon e lo script di licenza Sentieon.
  + [Per ulteriori istruzioni sull'uso degli strumenti Sentieon all'interno di flussi di lavoro privati, consulta Sentieon-Amazon-Omics in.](https://github.com/Sentieon/sentieon-amazon-omics) GitHub
+ La versione del software Sentieon 202112.07 e successive supportano il proxy del server di licenza. HealthOmics Per utilizzare le versioni del software Sentieon precedenti alla 202112.07, contatta l'assistenza Sentieon.

# Stampanti per flussi di lavoro in HealthOmics
<a name="workflows-linter"></a>

Dopo aver creato un flusso di lavoro, ti consigliamo di eseguire un linter sul flusso di lavoro prima di iniziare la prima esecuzione. Il linter rileva gli errori che possono causare il fallimento dell'esecuzione. 

Per WDL, esegue HealthOmics automaticamente un linter quando si crea il flusso di lavoro. L'output del linter è disponibile nel `statusMessage` campo della risposta. **get-workflow** Utilizzate il seguente comando CLI per recuperare l'output di stato (utilizzate l'ID del flusso di lavoro WDL che avete creato): 

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

HealthOmics fornisce linter che è possibile eseguire sulla definizione del flusso di lavoro prima di creare il flusso di lavoro. Esegui questi linter sulle pipeline esistenti verso cui stai migrando. HealthOmics
+ **WDL**— Un'immagine Amazon ECR pubblica per eseguire un linter [WDL](https://gallery.ecr.aws/aws-genomics/healthomics-linter).
+ **Nextflow**— Un'immagine Amazon ECR pubblica per eseguire le [regole Linter per]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow) Nextflow. Puoi accedere al codice sorgente di questo linter da. [GitHub](https://github.com/awslabs/linter-rules-for-nextflow)
+ **CWL**— non disponibile

# HealthOmics operazioni del flusso di lavoro
<a name="creating-private-workflows"></a>

Per creare un flusso di lavoro privato, devi:
+  **Workflow definition file:**Un file di definizione del flusso di lavoro scritto in WDLNextflow, oCWL. La definizione del flusso di lavoro specifica gli input e gli output per le esecuzioni che utilizzano il flusso di lavoro. Include inoltre le specifiche per le attività di esecuzione ed esecuzione del flusso di lavoro, inclusi i requisiti di calcolo e memoria. Il file di definizione del flusso di lavoro deve essere in `.zip` formato. Per ulteriori informazioni, vedere [File di definizione del flusso](workflow-definition-files.md) di lavoro in HealthOmics.
  + Puoi utilizzare [Amazon Q CLI per creare e convalidare i](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) file di definizione del flusso di lavoro in WDL, Nextflow e CWL. Per ulteriori informazioni, consulta le [istruzioni di esempio per la CLI di Amazon Q](getting-started.md#omics-q-prompts) e il tutorial sull'intelligenza artificiale generativa [HealthOmics Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) su. GitHub
+  **(Optional) Parameter template file:**Un file modello di parametro scritto in. JSON Crea il file per definire i parametri di esecuzione o HealthOmics genera automaticamente il modello dei parametri. Per ulteriori informazioni, consultate [File modello di parametri per i HealthOmics flussi di lavoro](parameter-templates.md). 
+ **Amazon ECR container images:**Crea repository Amazon ECR privati per ogni contenitore utilizzato nel flusso di lavoro. Crea immagini di container per il flusso di lavoro e memorizzale in un repository privato oppure sincronizza il contenuto di un registro upstream supportato con il tuo repository privato ECR. 
+  **(Optional) Sentieon licenses:**Richiedi una Sentieon licenza per utilizzare il software in flussi di lavoro privatiSentieon.

Per i file di definizione del flusso di lavoro più grandi di 4 MiB (compressi), scegli una di queste opzioni durante la creazione del flusso di lavoro:
+ Carica in una cartella Amazon Simple Storage Service e specifica la posizione.
+ Carica su un repository esterno (dimensione massima 1 GiB) e specifica i dettagli del repository.

Dopo aver creato un flusso di lavoro, è possibile aggiornare le seguenti informazioni sul flusso di lavoro con l'operazione: `UpdateWorkflow`
+ Nome
+ Description
+ Tipo di archiviazione predefinito
+ Capacità di archiviazione predefinita (con ID del flusso di lavoro)
+ File README.md

Per modificare altre informazioni nel flusso di lavoro, crea un nuovo flusso di lavoro o una nuova versione del flusso di lavoro.

Utilizza il controllo delle versioni del flusso di lavoro per organizzare e strutturare i flussi di lavoro. Le versioni consentono inoltre di gestire l'introduzione di aggiornamenti iterativi del flusso di lavoro. Per ulteriori informazioni sulle versioni, consulta [Creare una versione del flusso di lavoro](workflows-version-create.md).

**Topics**
+ [Creare un flusso di lavoro privato](create-private-workflow.md)
+ [Aggiornare un flusso di lavoro privato](update-private-workflow.md)
+ [Eliminare un flusso di lavoro privato](delete-private-workflow.md)
+ [Verifica lo stato del flusso di lavoro](using-get-workflow.md)
+ [Riferimento ai file del genoma da una definizione di workflow](create-ref-files.md)

# Creare un flusso di lavoro privato
<a name="create-private-workflow"></a>

Crea un flusso di lavoro utilizzando la HealthOmics console, i comandi AWS CLI o uno dei. AWS SDKs

**Nota**  
Non includere informazioni di identificazione personale (PII) nei nomi dei flussi di lavoro. Questi nomi sono visibili nei CloudWatch registri.

Quando crei un flusso di lavoro, HealthOmics assegna un identificatore univoco universale (UUID) al flusso di lavoro. L'UUID del flusso di lavoro è un identificatore univoco globale (GUID) unico per i flussi di lavoro e le versioni del flusso di lavoro. Ai fini della provenienza dei dati, si consiglia di utilizzare l'UUID del flusso di lavoro per identificare in modo univoco i flussi di lavoro.

Se le attività del flusso di lavoro utilizzano strumenti esterni (eseguibili, librerie o script), questi strumenti vengono incorporati in un'immagine contenitore. Sono disponibili le seguenti opzioni per ospitare l'immagine del contenitore:
+ Ospita l'immagine del contenitore nel registro privato ECR. Prerequisiti per questa opzione:
  + Crea un archivio privato ECR o scegli un repository esistente.
  + Configurare la politica delle risorse ECR come descritto in. [Autorizzazioni Amazon ECR](permissions-ecr.md)
  + Carica l'immagine del contenitore nell'archivio privato. 
+ Sincronizza l'immagine del contenitore con il contenuto di un registro di terze parti supportato. Prerequisiti per questa opzione:
  + Nel registro privato ECR, configura una regola pull through cache per ogni registro upstream. Per ulteriori informazioni, consulta [Mappature delle immagini](workflows-ecr.md#ecr-pull-through-mapping-format).
  + Configura la politica delle risorse ECR come descritto in. [Autorizzazioni Amazon ECR](permissions-ecr.md)
  + Crea modelli per la creazione di repository. Il modello definisce le impostazioni per quando Amazon ECR crea l'archivio privato per un registro upstream.
  + Crea mappature di prefissi per rimappare i riferimenti alle immagini dei contenitori nella definizione del flusso di lavoro ai namespace della cache ECR.

Quando si crea un flusso di lavoro, si fornisce una definizione del flusso di lavoro che contiene informazioni sul flusso di lavoro, sulle esecuzioni e sulle attività. HealthOmics può recuperare la definizione del flusso di lavoro come archivio.zip archiviato localmente o in un bucket Amazon S3 o da un repository basato su Git supportato. 

**Topics**
+ [Creare un flusso di lavoro utilizzando la console](#console-create-workflows)
+ [Creazione di un flusso di lavoro utilizzando la CLI](#api-create-workflows)
+ [Creazione di un flusso di lavoro utilizzando un SDK](#sdk-create-workflows)

## Creare un flusso di lavoro utilizzando la console
<a name="console-create-workflows"></a>

**Passaggi per creare un flusso di lavoro**

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

1.  Se necessario, apri il riquadro di navigazione a sinistra (≡). Scegli **Flussi di lavoro privati**.

1. Nella pagina **Flussi di lavoro privati**, scegli **Crea** flusso di lavoro.

1. Nella pagina **Definisci flusso di lavoro**, fornisci le seguenti informazioni:

   1. **Nome del flusso di lavoro**: un nome distintivo per questo flusso di lavoro. Ti consigliamo di impostare i nomi dei flussi di lavoro per organizzare le esecuzioni nella AWS HealthOmics console e nei CloudWatch registri.

   1. **Descrizione** (opzionale): una descrizione di questo flusso di lavoro.

1. Nel pannello **di definizione del flusso** di lavoro, fornite le seguenti informazioni:

   1. **Lingua del flusso** di lavoro (opzionale): seleziona la lingua specifica del flusso di lavoro. Altrimenti, HealthOmics determina la lingua dalla definizione del flusso di lavoro.

   1. Per l'**origine delle definizioni di Workflow**, scegli di importare la cartella delle definizioni da un repository basato su Git, una posizione Amazon S3 o da un'unità locale.

      1. Per l'**importazione da** un servizio di repository:
**Nota**  
HealthOmics supporta repository pubblici e privati perGitHub,,, GitLabBitbucket,GitHub self-managed. GitLab self-managed

         1. Scegli una **connessione** per connettere AWS le tue risorse al repository esterno. Per creare una connessione, consulta[Connect con repository di codice esterni](setting-up-new.md#setting-up-omics-repository).
**Nota**  
I clienti della TLV regione devono creare una connessione nella regione IAD (us-east-1) per creare un flusso di lavoro. 

         1. In **Full repository ID, inserisci l'ID del repository** come nome utente/nome del repository. Verifica di avere accesso ai file in questo repository.

         1. In **Riferimento alla fonte** (opzionale), inserisci un riferimento alla fonte del repository (branch, tag o ID di commit). HealthOmics utilizza il ramo predefinito se non viene specificato alcun riferimento alla fonte.

         1. In **Escludi modelli** di file, inserisci i modelli di file per escludere cartelle, file o estensioni specifici. Questo aiuta a gestire le dimensioni dei dati durante l'importazione dei file del repository. Esistono un massimo di 50 pattern e i pattern devono seguire la sintassi del modello [glob](https://fossil-scm.org/home/doc/tip/www/globs.md). Esempio: 

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. Per **Seleziona la cartella di definizione** da S3:

         1. Inserisci la posizione Amazon S3 che contiene la cartella di definizione del flusso di lavoro compressa. Il bucket Amazon S3 deve trovarsi nella stessa regione del flusso di lavoro.

         1. Se il tuo account non possiede il bucket Amazon S3, inserisci l'ID dell'account del proprietario del bucket nell'ID dell' AWS account del proprietario del **bucket S3**. Queste informazioni sono necessarie per verificare la proprietà del HealthOmics bucket.

      1. Per **Seleziona la cartella di definizione da una fonte locale:**

         1. Immettete la posizione sull'unità locale della cartella di definizione del flusso di lavoro compressa.

   1. **Percorso principale del file di definizione del flusso** di lavoro (opzionale): immettete il percorso del file dalla cartella o dall'archivio di definizione del flusso di lavoro compresso al file. `main` Questo parametro non è richiesto se è presente un solo file nella cartella di definizione del flusso di lavoro o se il file principale è denominato «principale».

1. Nel pannello del **file README** (opzionale), selezionate l'**origine del file README** e fornite le seguenti informazioni:
   + Per **Importazione da un servizio di repository**, nel **percorso del file README, inserisci il percorso** del file README all'interno del repository.
   + Per **Seleziona file da S3**, nel file **README in S3, inserisci l'URI Amazon S3 per il file** README.
   + Per **Seleziona file da una fonte locale**: in **README - opzionale**, **scegli Scegli file per selezionare il file** markdown (.md) da caricare.

1. Nel pannello di **configurazione dell'archiviazione di esecuzione predefinita**, fornisci il tipo e la capacità di archiviazione di esecuzione predefiniti per le esecuzioni che utilizzano questo flusso di lavoro:

   1. **Tipo di archiviazione di esecuzione**: scegli se utilizzare l'archiviazione statica o dinamica come impostazione predefinita per l'archiviazione di esecuzione temporanea. L'impostazione predefinita è l'archiviazione statica.

   1. **Capacità di archiviazione di esecuzione** (opzionale): per il tipo di storage di esecuzione statico, è possibile inserire la quantità predefinita di storage di esecuzione richiesta per questo flusso di lavoro. Il valore predefinito per questo parametro è 1200 GiB. È possibile sovrascrivere questi valori predefiniti quando si avvia un'esecuzione.

1. **Tag** (opzionale): puoi associare fino a 50 tag a questo flusso di lavoro.

1. Scegli **Next (Successivo)**.

1. Nella pagina **Aggiungi parametri del flusso** di lavoro (opzionale), seleziona l'**origine dei parametri**:

   1. Per **Analizza dal file di definizione del flusso di lavoro**, HealthOmics analizzerà automaticamente i parametri del flusso di lavoro dal file di definizione del flusso di lavoro.

   1. Per **Fornire un modello di parametro dal repository Git**, usa il percorso del file del modello di parametro dal tuo repository.

   1. Per **Seleziona il file JSON dalla fonte locale**, carica un JSON file da una fonte locale che specifichi i parametri.

   1. In **Inserisci manualmente i parametri del flusso di lavoro**, inserisci manualmente i nomi e le descrizioni dei parametri.

1. Nel pannello di **anteprima dei parametri**, è possibile rivedere o modificare i parametri per questa versione del flusso di lavoro. Se ripristinate il JSON file, perderete tutte le modifiche locali apportate.

1. Scegli **Next (Successivo)**.

1. Nella pagina di **rimappatura dell'URI del contenitore**, nel pannello **Regole di mappatura, puoi definire le regole** di mappatura URI per il tuo flusso di lavoro.

   Per **Origine del file di mappatura**, selezionate una delle seguenti opzioni:
   + **Nessuna**: non è richiesta alcuna regola di mappatura.
   + **Seleziona il file JSON da S3**: specifica la posizione S3 per il file di mappatura. 
   + **Seleziona il file JSON da una fonte locale**: specifica la posizione del file di mappatura sul tuo dispositivo locale.
   + **Inserisci manualmente le mappature: inserisci le mappature** **del registro e le mappature delle immagini nel pannello Mappature.**

1.  La console **visualizza** il pannello Mappature. Se avete scelto un file sorgente di mappatura, la console visualizza i valori del file.

   1. Nelle **mappature del registro**, è possibile modificare le mappature o aggiungere mappature (massimo 20 mappature del registro).

      Ogni mappatura del registro contiene i seguenti campi:
      + **URL del registro upstream**: l'URI del registro upstream.
      + Prefisso del **repository ECR: il prefisso** del repository da utilizzare nell'archivio privato Amazon ECR.
      + (Facoltativo) Prefisso del repository **upstream: il prefisso del repository** nel registro upstream.
      + (Facoltativo) ID account **ECR: ID account** dell'account proprietario dell'immagine del contenitore upstream.

   1. Nelle **mappature delle immagini**, è possibile modificare le mappature delle immagini o aggiungere mappature (massimo 100 mappature di immagini).

      Ogni mappatura di immagini contiene i seguenti campi:
      + **Immagine di origine**: specifica l'URI dell'immagine di origine nel registro upstream.
      + **Immagine di destinazione**: specifica l'URI dell'immagine corrispondente nel registro privato di Amazon ECR.

1. Scegli **Next (Successivo)**.

1. Controlla la configurazione del flusso di lavoro, quindi scegli **Crea** flusso di lavoro.

## Creazione di un flusso di lavoro utilizzando la CLI
<a name="api-create-workflows"></a>

Se i file del flusso di lavoro e il file del modello dei parametri si trovano sul computer locale, è possibile creare un flusso di lavoro utilizzando il seguente comando CLI. 

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

L'`create-workflow`operazione restituisce la seguente risposta:

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

### Parametri opzionali da utilizzare durante la creazione di un flusso di lavoro
<a name="other-create-parameters"></a>

È possibile specificare uno qualsiasi dei parametri opzionali quando si crea un flusso di lavoro. Per i dettagli sulla sintassi, [CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)consulta AWS HealthOmics API Reference. 

**Topics**
+ [Specificare la definizione del flusso di lavoro (posizione Amazon S3)](#create-defn-uri-parameter)
+ [Usa la definizione del flusso di lavoro da un repository basato su Git](#create-defn-uri-git)
+ [Specificare un file Readme](#specify-readme-file)
+ [Specificare il file di definizione **main**](#create-main-parameter)
+ [Specificate il tipo di archiviazione di esecuzione](#create-run-storage-parameter)
+ [Specificare la configurazione della GPU](#create-accelerator-parameter)
+ [Configura i parametri di mappatura pull through cache](#create-prefix-mapping-parameters)

#### Specificare la definizione del flusso di lavoro (posizione Amazon S3)
<a name="create-defn-uri-parameter"></a>

Se il file di definizione del flusso di lavoro si trova in una cartella Amazon S3, specifica la posizione utilizzando il `definition-uri` parametro, come mostrato nell'esempio seguente. Se il tuo account non possiede il bucket Amazon S3, fornisci l'ID del proprietario. Account AWS 

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

#### Usa la definizione del flusso di lavoro da un repository basato su Git
<a name="create-defn-uri-git"></a>

Per utilizzare la definizione del flusso di lavoro da un repository basato su Git supportato, usa il `definition-repository` parametro nella richiesta. Non fornire nessun altro `definition` parametro, poiché una richiesta ha esito negativo se include più di una fonte di input.

Il `definition-respository` parametro contiene i seguenti campi:
+ **connectionArn**— ARN della Code Connection che collega le risorse AWS al repository esterno.
+ **fullRepositoryId**— Inserisci l'ID del repository come. `owner-name/repo-name` Verifica di avere accesso ai file in questo repository.
+ **sourceReference**(Facoltativo): immettete un tipo di riferimento del repository (BRANCH, TAG o COMMIT) e un valore.

  HealthOmics utilizza il commit più recente sul ramo predefinito se non specificate un riferimento alla fonte.
+ **excludeFilePatterns**(Facoltativo): immettete i modelli di file per escludere cartelle, file o estensioni specifiche. Questo aiuta a gestire le dimensioni dei dati durante l'importazione dei file del repository. [Fornisci un massimo di 50 pattern. I pattern devono seguire la sintassi del modello glob.](https://fossil-scm.org/home/doc/tip/www/globs.md) Esempio:
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Quando specifichi la definizione del flusso di lavoro da un repository basato su Git, usa `parameter-template-path` per specificare il file modello dei parametri. Se non fornite questo parametro, HealthOmics crea il flusso di lavoro senza un modello di parametro.

L'esempio seguente mostra i parametri relativi al contenuto di un repository privato basato su 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" \
```

Per altri esempi, consulta il post sul 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).

#### Specificare un file Readme
<a name="specify-readme-file"></a>

È possibile specificare la posizione del file README utilizzando uno dei seguenti parametri:
+ **readme-markdown**— Inserimento di una stringa o di un file sul computer locale. 
+ **readme-uri**— L'URI di un file archiviato su S3. 
+ **readme-path **— Il percorso del file README nel repository. 

**Utilizza readme-path solo insieme a definition-repository.** Se non specificate alcun parametro README, HealthOmics importa il file README.md di livello root nel repository (se esiste).

Gli esempi seguenti mostrano come specificare la posizione del file README utilizzando readme-path e 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"
```

Per ulteriori informazioni, consulta [HealthOmics File README del flusso di lavoro](workflows-readme.md).

#### Specificare il file di definizione **main**
<a name="create-main-parameter"></a>

Se state includendo più file di definizione del flusso di lavoro, utilizzate il `main` parametro per specificare il file di definizione principale per il flusso di lavoro.

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

#### Specificate il tipo di archiviazione di esecuzione
<a name="create-run-storage-parameter"></a>

È possibile specificare il tipo di run storage predefinito (DYNAMIC o STATIC) e la capacità di storage di esecuzione (richiesta per lo storage statico). Per ulteriori informazioni sui tipi di run storage, consulta[Esegui tipi di storage nei flussi HealthOmics di lavoro](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  \
```

#### Specificare la configurazione della GPU
<a name="create-accelerator-parameter"></a>

Utilizza il parametro accelerators per creare un flusso di lavoro che viene eseguito su un'istanza di calcolo accelerato. L'esempio seguente mostra come utilizzare il parametro. `accelerators` La configurazione della GPU viene specificata nella definizione del flusso di lavoro. Per informazioni, consulta [Istanze di elaborazione accelerata](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
```

#### Configura i parametri di mappatura pull through cache
<a name="create-prefix-mapping-parameters"></a>

Se utilizzi la funzionalità di mappatura pull through della cache di Amazon ECR, puoi sostituire le mappature predefinite. Per ulteriori informazioni sui parametri di configurazione del contenitore, consulta. [Immagini di container per flussi di lavoro privati](workflows-ecr.md)

Nell'esempio seguente, il file `mappings.json` contiene questo contenuto:

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

Specificate i parametri di mappatura nel comando create-workflow:

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

È inoltre possibile specificare la posizione S3 del file dei parametri di mappatura:

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

## Creazione di un flusso di lavoro utilizzando un SDK
<a name="sdk-create-workflows"></a>

Puoi creare un flusso di lavoro utilizzando uno dei SDKs. L'esempio seguente mostra come creare un flusso di lavoro utilizzando Python SDK.

```
import boto3

omics = boto3.client('omics')

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

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

# Aggiornare un flusso di lavoro privato
<a name="update-private-workflow"></a>

È possibile aggiornare un flusso di lavoro utilizzando la HealthOmics console, i comandi AWS CLI o uno dei. AWS SDKs

**Nota**  
Non includere informazioni di identificazione personale (PII) nei nomi dei flussi di lavoro. Questi nomi sono visibili nei CloudWatch registri.

**Topics**
+ [Aggiornamento di un flusso di lavoro tramite la console](#console-update-workflows)
+ [Aggiornamento di un flusso di lavoro tramite la CLI](#api-update-workflows)
+ [Aggiornamento di un flusso di lavoro tramite un SDK](#sdk-update-workflows)

## Aggiornamento di un flusso di lavoro tramite la console
<a name="console-update-workflows"></a>

**Passaggi per aggiornare un flusso di lavoro**

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

1.  Se necessario, apri il riquadro di navigazione a sinistra (≡). Scegli **Flussi di lavoro privati**.

1. Nella pagina **Flussi di lavoro privati**, scegli il flusso di lavoro da aggiornare.

1. Nella pagina **Workflow**:
   + Se il flusso di lavoro ha delle versioni, assicurati di selezionare la **versione predefinita**.
   + Scegli **Modifica selezionato** dall'elenco **Azioni**. 

1. Nella pagina **Modifica flusso di lavoro**, puoi modificare uno qualsiasi dei seguenti valori:
   + **Nome del flusso** di lavoro.
   + **Descrizione del flusso** di lavoro.
   + Il **tipo di archiviazione Run** predefinito per il flusso di lavoro.
   + La **capacità di archiviazione Run** predefinita (se il tipo di archiviazione di esecuzione è statica). Per ulteriori informazioni sulla configurazione predefinita di Run Storage, consulta[Creare un flusso di lavoro utilizzando la console](create-private-workflow.md#console-create-workflows).

1. Scegli **Salva modifiche** per applicare le modifiche.

## Aggiornamento di un flusso di lavoro tramite la CLI
<a name="api-update-workflows"></a>

Come illustrato nell'esempio seguente, è possibile aggiornare il nome e la descrizione del flusso di lavoro. È inoltre possibile modificare il tipo di archiviazione di esecuzione (STATIC o DYNAMIC) e la capacità di archiviazione di esecuzione (per il tipo di archiviazione statica). Per ulteriori informazioni sui tipi di run storage, consulta[Esegui tipi di storage nei flussi HealthOmics di lavoro](workflows-run-types.md).

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

Non ricevi una risposta alla `update-workflow` richiesta.

## Aggiornamento di un flusso di lavoro tramite un SDK
<a name="sdk-update-workflows"></a>

Puoi aggiornare un flusso di lavoro utilizzando uno dei SDKs.

L'esempio seguente mostra come aggiornare un flusso di lavoro utilizzando Python SDK

```
import boto3

omics = boto3.client('omics')

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

# Eliminare un flusso di lavoro privato
<a name="delete-private-workflow"></a>

Quando non è più necessario un flusso di lavoro, è possibile eliminarlo utilizzando la HealthOmics console, i comandi AWS CLI o uno dei. AWS SDKs È possibile eliminare un flusso di lavoro che soddisfa i seguenti criteri:
+ Il suo stato è ATTIVO o FALLITO.
+ Non ha condivisioni attive. 
+ Hai eliminato tutte le versioni del flusso di lavoro.

L'eliminazione di un flusso di lavoro non influisce sulle esecuzioni in corso che utilizzano il flusso di lavoro.

**Topics**
+ [Eliminazione di un flusso di lavoro tramite la console](#console-delete-workflows)
+ [Eliminazione di un flusso di lavoro utilizzando la CLI](#api-delete-workflows)
+ [Eliminazione di un flusso di lavoro utilizzando un SDK](#sdk-delete-workflows)

## Eliminazione di un flusso di lavoro tramite la console
<a name="console-delete-workflows"></a>

**Per eliminare un flusso di lavoro**

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

1.  Se necessario, apri il riquadro di navigazione a sinistra (≡). Scegli **Flussi di lavoro privati**.

1. Nella pagina **Flussi di lavoro privati**, scegli il flusso di lavoro da eliminare.

1. Nella pagina **Workflow**, scegli **Elimina selezionato** dall'elenco **Azioni**.

1. Nella modalità **Elimina flusso di lavoro**, inserisci «conferma» per confermare l'eliminazione.

1. Scegli **Elimina**.

## Eliminazione di un flusso di lavoro utilizzando la CLI
<a name="api-delete-workflows"></a>

L'esempio seguente mostra come utilizzare il AWS CLI comando per eliminare un flusso di lavoro. Per eseguire l'esempio, sostituisci il `workflow id` con l'ID del flusso di lavoro che desideri eliminare. 

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

HealthOmics non invia una risposta alla `delete-workflow` richiesta. 

## Eliminazione di un flusso di lavoro utilizzando un SDK
<a name="sdk-delete-workflows"></a>

Puoi eliminare un flusso di lavoro utilizzando uno dei. SDKs

L'esempio seguente mostra come eliminare un flusso di lavoro utilizzando Python SDK.

```
import boto3

omics = boto3.client('omics')

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

# Verifica lo stato del flusso di lavoro
<a name="using-get-workflow"></a>

Dopo aver creato il flusso di lavoro, puoi verificare lo stato e visualizzare altri dettagli del flusso di lavoro utilizzando **get-workflow**, come illustrato.

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

La risposta include i dettagli del flusso di lavoro, incluso lo stato, come mostrato.

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

È possibile avviare un'esecuzione utilizzando questo flusso di lavoro dopo la transizione dello stato a`ACTIVE`.

# Riferimento ai file del genoma da una definizione di workflow
<a name="create-ref-files"></a>

È possibile HealthOmics fare riferimento a un oggetto dell'archivio di riferimento con un URI come il seguente. Usa il tuo `account ID` `reference store ID` e `reference ID` dove indicato.

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

Alcuni flussi di lavoro richiederanno sia `SOURCE` i `INDEX` file che per il genoma di riferimento. L'URI precedente è il formato abbreviato predefinito e per impostazione predefinita sarà il file SOURCE. Per specificare uno dei due file, è possibile utilizzare il formato URI lungo, come segue.

```
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'utilizzo di un set di lettura della sequenza avrebbe uno schema simile, come mostrato.

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

Alcuni set di lettura, come quelli basati su FASTQ, possono contenere letture accoppiate. Negli esempi seguenti, vengono denominati e. SOURCE1 SOURCE2 I formati come BAM e CRAM avranno solo un SOURCE1 file. Alcuni set di lettura conterranno file INDEX come i file `bai` or`crai`. L'URI precedente è il formato abbreviato predefinito e per impostazione predefinita sarà il SOURCE1 file. Per specificare il file o l'indice esatto, è possibile utilizzare il formato URI lungo, come segue.

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

Di seguito è riportato un esempio di file JSON di input che utilizza due 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>"
}
```

**Fai riferimento al file JSON di input in AWS CLI aggiungendolo `--inputs file://<input_file.json>` alla tua richiesta start-run.** 