

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Crear flujos de trabajo privados en HealthOmics
<a name="workflows-setup"></a>

*Los flujos de trabajo privados* dependen de una variedad de recursos que se crean y configuran antes de crear el flujo de trabajo:
+ **Workflow definition file:**Un archivo de definición de flujo de trabajo escrito en WDLNextflow, oCWL. La definición del flujo de trabajo especifica las entradas y salidas de las ejecuciones que utilizan el flujo de trabajo. También incluye especificaciones para las ejecuciones y tareas de ejecución del flujo de trabajo, incluidos los requisitos de procesamiento y memoria. El archivo de definición del flujo de trabajo debe estar en `.zip` formato. Para obtener más información, consulte [Archivos de definición de flujos](workflow-definition-files.md) de trabajo.
  + Puede usar [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) para crear y validar sus archivos de definición de flujo de trabajo en WDL, Nextflow y CWL. Para obtener más información, consulte [Ejemplos de instrucciones para Amazon Q CLI](getting-started.md#omics-q-prompts) y el tutorial sobre [HealthOmics IA generativa de Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) en. GitHub
+ **(Optional) Parameter template file:**Un archivo de plantilla de parámetros escrito en. JSON Cree el archivo para definir los parámetros de ejecución o HealthOmics genere la plantilla de parámetros automáticamente. Para obtener más información, consulte [Archivos de plantillas de parámetros para HealthOmics flujos de trabajo](parameter-templates.md).
+ **Amazon ECR container images:**Cree un repositorio privado de Amazon ECR para el flujo de trabajo. Cree imágenes de contenedores en el repositorio privado o sincronice el contenido de un registro upstream compatible con su repositorio privado de Amazon ECR.
+ **(Optional) Sentieon licenses:**Solicite una Sentieon licencia para usar el Sentieon software en flujos de trabajo privados.

Si lo desea, puede ejecutar un resumen de la definición del flujo de trabajo antes o después de crearlo. En **linter** este tema se describen las linters disponibles en. HealthOmics

**Topics**
+ [HealthOmics integración del flujo de trabajo con repositorios basados en Git](workflows-git-integration.md)
+ [Archivos de definición de flujos de trabajo en HealthOmics](workflow-definition-files.md)
+ [Archivos de plantillas de parámetros para HealthOmics flujos de trabajo](parameter-templates.md)
+ [Imágenes de contenedores para flujos de trabajo privados](workflows-ecr.md)
+ [HealthOmics Archivos README de flujo de trabajo](workflows-readme.md)
+ [Solicitud de licencias de Sentieon para flujos de trabajo privados](private-workflows-subscribe.md)
+ [Lentes de flujo de trabajo en HealthOmics](workflows-linter.md)
+ [HealthOmics operaciones de flujo de trabajo](creating-private-workflows.md)

# HealthOmics integración del flujo de trabajo con repositorios basados en Git
<a name="workflows-git-integration"></a>

Al crear un flujo de trabajo (o una versión del flujo de trabajo), se proporciona una definición del flujo de trabajo para especificar información sobre el flujo de trabajo, las ejecuciones y las tareas. HealthOmics puede recuperar la definición del flujo de trabajo como un archivo.zip (almacenado localmente o en un bucket de Amazon S3) o desde un repositorio compatible basado en Git.

La HealthOmics integración con los repositorios basados en Git permite las siguientes capacidades:
+ Creación directa de flujos de trabajo a partir de instancias públicas, privadas y autogestionadas.
+ Integración de los archivos README del flujo de trabajo y las plantillas de parámetros de los repositorios.
+ Support para GitHub GitLab, y repositorios de Bitbucket.

Al utilizar un repositorio basado en Git, se evitan los pasos manuales de descargar archivos de definición de flujo de trabajo y archivos de plantillas de parámetros de entrada, crear un archivo.zip y, a continuación, almacenar el archivo en S3. Esto simplifica la creación de flujos de trabajo para escenarios como los siguientes:

1. Desea empezar rápidamente a utilizar un flujo de trabajo común de código abierto, como nf-core. HealthOmicsrecupera automáticamente todos los archivos de plantillas de parámetros de entrada y definición del flujo de trabajo del repositorio de nf-core GitHub y los utiliza para crear su nuevo flujo de trabajo.

1. Está utilizando un flujo de trabajo público de GitHub, y estarán disponibles algunas actualizaciones nuevas. Puede crear fácilmente una nueva versión del HealthOmics flujo de trabajo utilizando la definición de flujo de trabajo actualizada GitHub como fuente. Los usuarios del flujo de trabajo pueden elegir entre el flujo de trabajo original o la nueva versión del flujo de trabajo que haya creado.

1. Tu equipo está creando una canalización propia que no es pública. Guardas tu código en un repositorio de git privado y utilizas esta definición de flujo de trabajo para tus HealthOmics flujos de trabajo. El equipo actualiza la definición del flujo de trabajo con frecuencia como parte de un ciclo de vida de desarrollo del flujo de trabajo iterativo. Puedes crear fácilmente nuevas versiones del flujo de trabajo según sea necesario desde tu repositorio privado.

**Topics**
+ [Repositorios basados en Git compatibles](#workflows-git-supported)
+ [Configure las conexiones a repositorios de código externos](#workflows-git-connections)
+ [Acceder a repositorios autogestionados](#workflows-git-self-managed)
+ [Cuotas relacionadas con los repositorios de código externos](#workflows-git-quotas)
+ [Permisos de IAM necesarios](#workflows-git-permissions)

## Repositorios basados en Git compatibles
<a name="workflows-git-supported"></a>

HealthOmics admite repositorios públicos y privados para los siguientes proveedores basados en Git:
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics admite repositorios autogestionados para los siguientes proveedores basados en Git:
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics admite el uso de conexiones entre cuentas para GitHub, GitLab y Bitbucket. Configure los permisos compartidos a través de AWS Resource Access Manager. Para ver un ejemplo, consulte [Conexiones compartidas](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html) en la *guía del CodePipeline usuario*.

## Configure las conexiones a repositorios de código externos
<a name="workflows-git-connections"></a>

Conecte sus flujos de trabajo a repositorios basados en Git mediante AWS. CodeConnection HealthOmics utiliza esta conexión para acceder a sus repositorios de código fuente.

**nota**  
El CodeConnections servicio de AWS no está disponible en la región il-central-1. Para esta región, configure el servicio us-east-1 para crear flujos de trabajo o versiones de flujos de trabajo desde un repositorio. 

### Cree una conexión de
<a name="workflows-git-connection-create"></a>

Antes de poder crear conexiones, siga las instrucciones de [Configuración de las conexiones](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html) de la Guía del *usuario de las herramientas de la consola para desarrolladores*. 

[Para crear una conexión, siga las instrucciones de la *Guía del usuario de las herramientas de la consola para desarrolladores*.](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html) 

### Configure la autorización para la conexión
<a name="workflows-git-connection-create"></a>

Debe autorizar la conexión mediante el OAuth flujo del proveedor. Asegúrese de que el estado de la conexión es `AVAILABLE` antes de usarla.

Para ver ejemplos, consulta la entrada del blog [Cómo crear AWS HealthOmics flujos de trabajo a partir del contenido de Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git). 

## Acceder a repositorios autogestionados
<a name="workflows-git-self-managed"></a>

Para configurar las conexiones a un repositorio GitLab autogestionado, utiliza un token de acceso personal de administrador al crear un host. Al crear la conexión subsiguiente, se accede a Oauth con la cuenta del cliente.

El siguiente ejemplo configura una conexión a un repositorio autogestionado: GitLab 

1. Configure el acceso al token de acceso personal de un usuario administrador.

   Para configurar una PAT en un repositorio GitLab autogestionado, consulta los [tokens de acceso personal](https://docs.gitlab.com/user/profile/personal_access_tokens/) en *GitLab Docs*.

1. Creación de un alojamiento

   1. Ve a **CodePipeline>Configuración>Conexiones**.

   1. **Seleccione la pestaña **Anfitriones** y, a continuación, elija Crear anfitrión.**

   1. Configure los siguientes campos:
      + Introduzca el nombre del anfitrión
      + Para el tipo de proveedor, elija **GitLab Autogestionado**
      + Introduzca la **URL del host** 
      + Introduzca la información de la VPC si el host está definido en una VPC

   1. Elija **Crear host**, que crea el host en estado PENDIENTE.

   1. Para completar la configuración, elija **Configurar anfitrión**.

   1. Introduzca el token de acceso personal (PAT) de un usuario administrador y, a continuación, seleccione **Continuar**. 

1. Creación de la conexión

   1. Seleccione **Crear conexiones** en la pestaña **Conexiones**.

   1. Para el tipo de proveedor, seleccione **GitLab autogestionado**.

   1. En **Configuración de conexión > Introducir nombre de conexión**, introduzca la URL del host que creó anteriormente.

   1. Si solo se puede acceder a la instancia GitLab autogestionada a través de una VPC, configure los detalles de la VPC.

   1. Elija **Actualizar conexión pendiente**. La ventana modal lo redirige a la página de GitLab inicio de sesión.

   1. Introduzca el nombre de usuario y la contraseña de la cuenta del cliente y complete el proceso de autorización.

   1.  Para configurarla por primera vez, selecciona **Autorizar AWS Connector para Gitlab Self Managed**.

## Cuotas relacionadas con los repositorios de código externos
<a name="workflows-git-quotas"></a>

Para HealthOmics la integración con repositorios de código externos, hay un tamaño máximo para un repositorio, cada archivo del repositorio y cada archivo README. Para obtener más información, consulte [HealthOmics cuotas de tamaño fijas en el flujo de trabajo](fixed-quotas.md#fixed-quotas-workflows).

## Permisos de IAM necesarios
<a name="workflows-git-permissions"></a>

Añada las siguientes acciones a su política de IAM basada en la identidad:

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

# Archivos de definición de flujos de trabajo en HealthOmics
<a name="workflow-definition-files"></a>

Utilice una definición de flujo de trabajo para especificar información sobre el flujo de trabajo, las ejecuciones y las tareas de las ejecuciones. Las definiciones de flujo de trabajo se crean en uno o más archivos mediante un lenguaje de definición de flujos de trabajo. HealthOmics admite definiciones de flujo de trabajo escritas en WDL, Nextflow o CWL. 

HealthOmics admite las siguientes opciones para las definiciones de flujos de trabajo de WDL: 
+ WDL: proporciona un motor WDL que cumple con las especificaciones. 
+ WDL indulgente: diseñado para gestionar los flujos de trabajo migrados desde Cromwell. Es compatible con las directivas de Cromwell de los clientes y con algunas lógicas no conformes. Para obtener más información, consulte [Conversión de tipos implícita en WDL lenient](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Para obtener información sobre cada uno de los lenguajes del flujo de trabajo, consulte las secciones detalladas específicas del idioma que aparecen a continuación.

Los siguientes tipos de información se especifican en la definición del flujo de trabajo:
+ **Language version**— El idioma y la versión de la definición del flujo de trabajo.
+ **Compute and memory**— Los requisitos de cómputo y memoria para las tareas del flujo de trabajo.
+ **Inputs**— Ubicación de las entradas a las tareas del flujo de trabajo. Para obtener más información, consulte [HealthOmics ejecutar entradas](workflows-run-inputs.md).
+ **Outputs**— Ubicación para guardar las salidas que generan las tareas.
+ **Task resources**— Requisitos de cómputo y memoria para cada tarea.
+ **Accelerators**— otros recursos que requieran las tareas, como los aceleradores.

**Topics**
+ [HealthOmics requisitos de definición del flujo de trabajo](workflow-defn-requirements.md)
+ [Soporte de versiones para lenguajes de definición HealthOmics de flujos de trabajo](workflows-lang-versions.md)
+ [Requisitos de cómputo y memoria para HealthOmics las tareas](memory-and-compute-tasks.md)
+ [Resultados de tareas en una definición de HealthOmics flujo de trabajo](workflows-task-outputs.md)
+ [Recursos de tareas en una definición de HealthOmics flujo de trabajo](task-resources.md)
+ [Aceleradores de tareas en una definición de flujo de trabajo HealthOmics](task-accelerators.md)
+ [Especificaciones de la definición del flujo de trabajo de WDL](workflow-languages-wdl.md)
+ [Especificaciones de la definición del flujo de trabajo de Nextflow](workflow-definition-nextflow.md)
+ [Especificaciones de la definición del flujo de trabajo de CWL](workflow-languages-cwl.md)
+ [Ejemplos de definiciones de flujo de trabajo](workflow-definition-examples.md)

# HealthOmics requisitos de definición del flujo de trabajo
<a name="workflow-defn-requirements"></a>

Los archivos HealthOmics de definición del flujo de trabajo deben cumplir los siguientes requisitos:
+ Las tareas deben definir input/output los parámetros, los repositorios de contenedores de Amazon ECR y las especificaciones de tiempo de ejecución, como la asignación de memoria o CPU.
+ Compruebe que sus funciones de IAM tienen los permisos necesarios.<a name="lower"></a>
  + Su flujo de trabajo tiene acceso a los datos de entrada de AWS recursos, como Amazon S3. 
  + Su flujo de trabajo tiene acceso a los servicios de repositorio externos cuando los necesita.
+ Declare los archivos de salida en la definición del flujo de trabajo. Para copiar los archivos de ejecución intermedia a la ubicación de salida, declare que son salidas del flujo de trabajo. 
+ Las ubicaciones de entrada y salida deben estar en la misma región que el flujo de trabajo. 
+ HealthOmics Las entradas del flujo de trabajo de almacenamiento deben estar en `ACTIVE` estado. HealthOmics no importará las entradas con un `ARCHIVED` estado, lo que provocará un error en el flujo de trabajo. Para obtener información sobre las entradas de objetos de Amazon S3, consulte[HealthOmics ejecutar entradas](workflows-run-inputs.md).
+ La **main** ubicación del flujo de trabajo es opcional si el archivo ZIP contiene una única definición de flujo de trabajo o un archivo denominado «principal».<a name="lower"></a>
  + Ruta de ejemplo: `workflow-definition/main-file.wdl`
+ Antes de crear un flujo de trabajo desde Amazon S3 o desde su unidad local, cree un archivo zip con los archivos de definición del flujo de trabajo y cualquier dependencia, como los subflujos de trabajo.
+ Le recomendamos que declare los contenedores de Amazon ECR en el flujo de trabajo como parámetros de entrada para la validación de los permisos de Amazon ECR. 

Consideraciones adicionales sobre Nextflow:
+ **/bin**

  Las definiciones del flujo de trabajo de Nextflow pueden incluir una carpeta /bin con scripts ejecutables. Esta ruta tiene acceso a las tareas de solo lectura y a los ejecutables. Las tareas que se basan en estos scripts deben usar un contenedor creado con los intérpretes de scripts adecuados. La mejor práctica es llamar directamente al intérprete. Por ejemplo:

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

  Las definiciones de flujo de trabajo basadas en NextFlow pueden incluir archivos nextflow.config que ayudan a abstraer las definiciones de parámetros o procesar los perfiles de recursos. Para facilitar el desarrollo y la ejecución de canalizaciones de Nextflow en varios entornos, utilice una configuración HealthOmics específica que añada a la configuración global mediante la directiva IncludeConfig. Para mantener la portabilidad, configure el flujo de trabajo para que incluya el archivo solo cuando se esté ejecutando mediante el HealthOmics siguiente código:

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

  HealthOmics no admite los informes de arrastre, rastreo y ejecución generados por el motor. Puede generar alternativas a los informes de seguimiento y ejecución mediante una combinación de GetRun llamadas a la GetRunTask API. 

Consideraciones adicionales sobre la CWL:
+ **Container image uri interpolation**

  HealthOmics permite que la propiedad DockerPull del sea una expresión DockerRequirement de javascript en línea. Por ejemplo:

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

  Esto le permite especificar la imagen del contenedor URIs como parámetros de entrada al flujo de trabajo.
+ **Javascript expressions**

  Las expresiones de JavaScript deben ser `strict mode` compatibles.
+ **Operation process**

  HealthOmics no es compatible con los procesos de operación de CWL.

# Soporte de versiones para lenguajes de definición HealthOmics de flujos de trabajo
<a name="workflows-lang-versions"></a>

HealthOmics admite archivos de definición de flujos de trabajo escritos en Nextflow, WDL o CWL. En las siguientes secciones se proporciona información sobre la compatibilidad de las HealthOmics versiones con estos idiomas.

**Topics**
+ [Compatibilidad con las versiones WDL](#workflows-lang-versions-WDL)
+ [Compatibilidad con la versión CWL](#workflows-lang-versions-CWL)
+ [Compatibilidad con la versión de Nextflow](#workflows-lang-versions-nextflow)

## Compatibilidad con las versiones WDL
<a name="workflows-lang-versions-WDL"></a>

HealthOmics admite las versiones 1.0 y 1.1 y la versión de desarrollo de la especificación WDL.

Cada documento de la WDL debe incluir una declaración de versión para especificar la versión (principal y secundaria) de la especificación a la que se adhiere. [Para obtener más información sobre las versiones, consulte Control de versiones de la WDL](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

Las versiones 1.0 y 1.1 de la especificación WDL no admiten este tipo. `Directory` Para usar el `Directory` tipo para entradas o salidas, defina la versión **development** en la primera línea del archivo:

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

## Compatibilidad con la versión CWL
<a name="workflows-lang-versions-CWL"></a>

HealthOmics es compatible con las versiones 1.0, 1.1 y 1.2 del lenguaje CWL.

Puede especificar la versión de idioma en el archivo de definición del flujo de trabajo de CWL. Para obtener más información sobre CWL, consulte la guía del usuario de [CWL](https://github.com/common-workflow-language/user_guide)

## Compatibilidad con la versión de Nextflow
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics admite tres versiones estables de Nextflow. Nextflow suele lanzar una versión estable cada seis meses. HealthOmics no es compatible con las versiones «edge» mensuales.

HealthOmics admite las funciones publicadas en cada versión, pero no las funciones de vista previa.

### Versiones compatibles
<a name="workflows-versions-nextflow-list"></a>

HealthOmics es compatible con las siguientes versiones de Nextflow:
+ Nextflow v22.04.01 DSL 1 y DSL 2
+ Nextflow v23.10.0 DSL 2 (predeterminado)
+ Nextflow v24.10.8 DSL 2

[Para migrar su flujo de trabajo a la última versión compatible (v24.10.8), siga la guía de actualización de Nextflow.](https://nextflow.io/docs/latest/migrations/24-10.html)

Hay algunos cambios importantes al migrar de la versión 23 a la 24 de Nextflow, tal y como se describe en las siguientes secciones de la guía de migración de Nextflow:
+ [Cambios importantes en la versión 24.04](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [Cambios importantes en la versión 24.10](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Detecta y procesa las versiones de Nextflow
<a name="workflows-versions-processing"></a>

HealthOmics detecta la versión de DSL y la versión de Nextflow que especifique. Determina automáticamente la mejor versión de Nextflow para ejecutar en función de estas entradas.

#### Versión DSL
<a name="workflows-versions-p1"></a>

HealthOmics detecta la versión DSL solicitada en el archivo de definición del flujo de trabajo. Por ejemplo, puede especificar:`nextflow.enable.dsl=2`.

HealthOmics es compatible con DSL 2 de forma predeterminada. Proporciona compatibilidad con versiones anteriores de DSL 1, si se especifica en el archivo de definición del flujo de trabajo.
+ Si especifica DSL 2, HealthOmics ejecuta Nextflow v23.10.0, a menos que especifique Nextflow v22.04.0 o v24.10.8.
+ Si especifica DSL 1, ejecuta Nextflow v22.04 (la única versión compatible que HealthOmics ejecuta DSL 1). DSL1 
+ Si no especificas una versión de DSL o si no HealthOmics puedes analizar la información de DSL por algún motivo (por ejemplo, por errores de sintaxis en el archivo de definición del flujo de trabajo), el HealthOmics valor predeterminado es DSL 2 y ejecuta Nextflow v23.10.0.
+ [Para actualizar su flujo de trabajo de DSL 1 a DSL 2 y aprovechar las últimas versiones y funciones del software de Nextflow, consulte Migración desde DSL 1.](https://nextflow.io/docs/latest/dsl1.html)

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

HealthOmics detecta la versión de Nextflow solicitada en el archivo de configuración de Nextflow (nextflow.config), si usted proporciona este archivo. Le recomendamos que añada la `nextflowVersion` cláusula al final del archivo para evitar anulaciones inesperadas de las configuraciones incluidas. Para obtener más información, consulte Configuración de [Nextflow](https://nextflow.io/docs/latest/config.html).

Puede especificar una versión o un rango de versiones de Nextflow mediante la siguiente sintaxis:

```
   // 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 procesa la información de la versión de Nextflow de la siguiente manera: 
+ Si especifica una versión exacta que HealthOmics sea compatible, HealthOmics utilizará **=** esa versión. 
+ Si se utiliza **\$1** para especificar una versión exacta o un rango de versiones que no son compatibles, se HealthOmics genera una excepción y no se ejecuta correctamente. Considere usar esta opción si quiere ser estricto con las solicitudes de versión y fallar rápidamente si la solicitud incluye versiones no compatibles.
+ Si especifica un rango de versiones, HealthOmics usa la última versión compatible de ese rango, a menos que el rango incluya la versión 24.10.8. En este caso, HealthOmics da preferencia a una versión anterior. Por ejemplo, si el rango abarca tanto la versión 23.10.0 como la 24.10.8, elige la versión 23.10.0. HealthOmics 
+ Si no hay ninguna versión solicitada, o si las versiones solicitadas no son válidas o no se pueden analizar por algún motivo:
  + Si especificó DSL 1, HealthOmics ejecute Nextflow v22.04.
  + De lo contrario, ejecuta Nextflow v23.10.0 HealthOmics .

 Puede recuperar la siguiente información sobre la versión de Nextflow que HealthOmics se utilizó en cada ejecución:
+ Los registros de ejecución contienen información sobre la versión real de Nextflow que HealthOmics se utilizó para la ejecución.
+ HealthOmics agrega advertencias en los registros de ejecución si no hay una coincidencia directa con la versión solicitada o si necesita usar una versión diferente a la que especificó.
+ La respuesta a la operación de la **GetRun** API incluye un campo (`engineVersion`) con la versión real de Nextflow que HealthOmics se utilizó para la ejecución. Por ejemplo:

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

# Requisitos de cómputo y memoria para HealthOmics las tareas
<a name="memory-and-compute-tasks"></a>

HealthOmics ejecuta tus tareas de flujo de trabajo privadas en una instancia ómica. HealthOmics proporciona varios tipos de instancias para adaptarse a distintos tipos de tareas. Cada tipo de instancia tiene una configuración fija de memoria y vCPU (y una configuración de GPU fija para los tipos de instancias de computación acelerada). El costo de usar una instancia ómica varía según el tipo de instancia. Para obtener más información, consulta la página [HealthOmics de precios](https://aws.amazon.com/healthomics/pricing/).

Para las tareas de un flujo de trabajo, especifique la memoria necesaria y v CPUs en el archivo de definición del flujo de trabajo. Cuando se ejecuta una tarea de flujo de trabajo, HealthOmics asigna la instancia ómica más pequeña que aloje la memoria solicitada y v. CPUs Por ejemplo, si una tarea necesita 64 GiB de memoria y 8 vCPUs, HealthOmics selecciona. `omics.r.2xlarge`

Te recomendamos que revises los tipos de instancias y establezcas la v CPUs y el tamaño de memoria solicitados para que coincidan con la instancia que mejor se adapte a tus necesidades. El contenedor de tareas utiliza el número de v CPUs y el tamaño de memoria que especifiques en el archivo de definición del flujo de trabajo, incluso si el tipo de instancia tiene v CPUs y memoria adicionales. 

La siguiente lista contiene información adicional sobre la asignación de vCPU y memoria:
+ Las asignaciones de recursos de contenedores son límites estrictos. Si una tarea se queda sin memoria o intenta utilizar una v adicionalCPUs , la tarea genera un registro de errores y se cierra.
+ Si no especificas ningún requisito de procesamiento o memoria, HealthOmics selecciona una configuración con 1 vCPU **omics.c.large** y 1 GiB de memoria, y la establece de forma predeterminada.
+ La configuración mínima que puede solicitar es de 1 vCPU y 1 GiB de memoria. 
+ Si especificas vCPUs, memoria o GPUs que supere los tipos de instancia admitidos, HealthOmics se mostrará un mensaje de error y el flujo de trabajo no pasará las validaciones
+ Si especificas unidades fraccionarias, HealthOmics redondea al entero más cercano.
+ HealthOmics reserva una pequeña cantidad de memoria (un 5%) para los agentes de administración y registro, por lo que es posible que la aplicación de la tarea no disponga siempre de toda la memoria asignada.
+ HealthOmics hace coincidir los tipos de instancias para adaptarse a los requisitos de procesamiento y memoria que especifiques y puede usar una combinación de generaciones de hardware. Por este motivo, puede haber pequeñas variaciones en los tiempos de ejecución de una misma tarea.

En estos temas se proporcionan detalles sobre los tipos de instancias HealthOmics compatibles. 

**Topics**
+ [Tipos de instancias estándar](#workflow-task-standard-instances)
+ [Instancias optimizadas para computación](#workflow-task-compute-optimized-instances)
+ [Instancias optimizadas para memoria](#workflow-task-memory-optimized-instances)
+ [Instancias de computación acelerada](#workflow-task-accelerated-computing-instances)

**nota**  
 En el caso de las instancias estándar, optimizadas para cómputo y memoria, aumenta el tamaño del ancho de banda de la instancia si la instancia requiere un mayor rendimiento. Las instancias Amazon EC2 con menos de 16 vCPU (tamaño 4xl o menor) pueden experimentar un aumento de rendimiento. Para obtener más información sobre el rendimiento de las instancias de Amazon EC2, consulte el ancho de banda disponible de las instancias de [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Tipos de instancias estándar
<a name="workflow-task-standard-instances"></a>

Para los tipos de instancias estándar, las configuraciones buscan un equilibrio entre la potencia de procesamiento y la memoria. 

HealthOmics admite las instancias de 32 y 48 tamaños en estas regiones: EE.UU. Oeste (Oregón) y EE.UU. Este (Norte de Virginia).


| Instancia | Número de 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. 8 x grande | 32 | 128 GiB | 
| omics.m. 12 x grande | 48 | 192 GiB | 
| omics.m. 16 x grande | 64 | 256 GiB | 
| omics.m. 24 x grande | 96 | 384 GiB | 
| omics.m. 32 x grande | 128 | 512 GiB | 
| omics.m. 48 x grande | 192 | 768 GiB | 

## Instancias optimizadas para computación
<a name="workflow-task-compute-optimized-instances"></a>

En el caso de los tipos de instancias optimizadas para la informática, las configuraciones tienen más potencia informática y menos memoria.

HealthOmics admite las instancias de 32 y 48 tamaños en estas regiones: EE.UU. Oeste (Oregón) y EE.UU. Este (Norte de Virginia).


| Instancia | Número de v CPUs | Memoria | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| omics.c.2xlarge | 8 | 16 GiB | 
| omics.c.4 x grande | 16 | 32 GiB | 
| omics.c.8 x grande | 32 | 64 GiB | 
| omics.c.12 x grande | 48 | 96 GiB | 
| omics.c.16 x grande | 64 | 128 GiB | 
| omics.c.24 x grande | 96 | 192 GiB | 
| omics.c.32xgrande | 128 | 256 GiB | 
| omics.c.48 x grande | 192 | 384 GiB | 

## Instancias optimizadas para memoria
<a name="workflow-task-memory-optimized-instances"></a>

En el caso de los tipos de instancias optimizadas para la memoria, las configuraciones tienen menos potencia de procesamiento y más memoria.

HealthOmics admite las instancias de 32 y 48 tamaños en estas regiones: EE.UU. Oeste (Oregón) y EE.UU. Este (Norte de Virginia).


| Instancia | Número de v CPUs | Memoria | 
| --- | --- | --- | 
| omics.r.large | 2 | 16 GiB | 
| omics.r.xlarge | 4 | 32 GiB | 
| omics.r.2xlarge | 8 | 64 GiB | 
| omics.r.4xlarge | 16 | 128 GiB | 
| omics.r. 8 x grande | 32 | 256 GiB | 
| omics.r. 12 x grande | 48 | 384 GiB | 
| omics.r. 16 x grande | 64 | 512 GiB | 
| omics.r. 24 x grande | 96 | 768 GiB | 
| omics.r. 32 x grande | 128 | 1024 GiB | 
| omics.r. 48 veces más grande | 192 | 1536 GiB | 

## Instancias de computación acelerada
<a name="workflow-task-accelerated-computing-instances"></a>

Si lo desea, puede especificar los recursos de la GPU para cada tarea de un flujo de trabajo, de modo que se HealthOmics asigne una instancia de computación acelerada a la tarea. Para obtener información sobre cómo especificar la información de la GPU en el archivo de definición del flujo de trabajo, consulte. [Aceleradores de tareas en una definición de flujo de trabajo HealthOmics](task-accelerators.md)

Si especificas un acelerador de tareas que admite varios tipos de instancias, HealthOmics selecciona el tipo de instancia en función de la disponibilidad. Si hay más de un tipo de instancia disponible, HealthOmics da preferencia a la instancia de menor coste. La excepción es el acelerador de tareas nvidia-t4-a10g-l4, que da preferencia a la instancia de última generación disponible en su región.

Las instancias G4 no son compatibles en la región de Israel (Tel Aviv). Las instancias G5 no son compatibles en la región de Asia Pacífico (Singapur). 



**Topics**
+ [Tipos de instancias G6 y G6e](#workflow-task-accelerated-accelerated-g6)
+ [Instancias G4 y G5](#workflow-task-accelerated-accelerated-g45)

### Tipos de instancias G6 y G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics admite las siguientes configuraciones de instancias de computación acelerada G6. Todas las instancias de omics.g6 utilizan Nvidia L4. GPUs

HealthOmics admite las instancias G6 y G6e en las siguientes regiones: EE.UU. Oeste (Oregón) y EE.UU. Este (Norte de Virginia).


| Instancia | Número de v CPUs | Memoria | Número de GPUs | Memoria de GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g6.2xgrande | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g6.4 x grande | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g6.8 x grande | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g6.12x grande | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g6.16x grande | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g6.24x grande | 96 | 384 GiB | 4 | 96 GiB | 

Todas las instancias de omics.g6e utilizan Nvidia L40s. GPUs


| Instancia | Número de v CPUs | Memoria | Número de GPUs | Memoria de GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4xgrande | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8x grande | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12x grande | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16x grande | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24x grande | 96 | 768 GiB | 4 | 192 GiB | 

### Instancias G4 y G5
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics admite las siguientes configuraciones de instancias de computación acelerada G4 y G5. 

Todas las instancias de omics.g5 utilizan Nvidia Tesla A10G. GPUs


| Instancia | Número de v CPUs | Memoria | Número de GPUs | Memoria de GPU | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g5.4 x grande | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g5.8 x grande | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g5.12x grande | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g5.16x grande | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g5.24x grande | 96 | 384 GiB | 4 | 96 GiB | 

Todas las instancias de omics.g4dn utilizan Nvidia Tesla T4. GPUs


| Instancia | Número de v CPUs | Memoria | Número de GPUs | Memoria de GPU | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xgrande | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xlarge | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn. 12 x grande | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn. 16 x grande | 64 | 256 GiB | 1 | 24 GiB | 

# Resultados de tareas en una definición de HealthOmics flujo de trabajo
<a name="workflows-task-outputs"></a>

Los resultados de las tareas se especifican en la definición del flujo de trabajo. De forma predeterminada, HealthOmics descarta todos los archivos de tareas intermedias cuando se completa el flujo de trabajo. Para exportar un archivo intermedio, debe definirlo como una salida. 

Si utiliza el almacenamiento en caché de llamadas, HealthOmics guarda los resultados de las tareas en la memoria caché, incluidos los archivos intermedios que defina como resultados.

Los siguientes temas incluyen ejemplos de definiciones de tareas para cada uno de los lenguajes de definición de flujos de trabajo.

**Topics**
+ [Resultados de tareas para WDL](#workflow-task-outputs-wdl)
+ [Resultados de tareas para Nextflow](#workflow-task-outputs-nextflow)
+ [Resultados de tareas para CWL](#workflow-task-outputs-cwl)

## Resultados de tareas para WDL
<a name="workflow-task-outputs-wdl"></a>

Para las definiciones de flujo de trabajo escritas en WDL, defina los resultados en la sección de flujo **outputs** de trabajo de nivel superior. 

HealthOmics

**Topics**
+ [Resultado de la tarea para STDOUT](#task-outputs-wdl-stdout)
+ [Resultado de la tarea para STDERR](#task-outputs-wdl-stderr)
+ [Salida de la tarea a un archivo](#task-outputs-wdl-file)
+ [Salida de la tarea a una matriz de archivos](#task-outputs-wdl-files)

### Resultado de la tarea para STDOUT
<a name="task-outputs-wdl-stdout"></a>

En este ejemplo, se crea una tarea con un nombre `SayHello` que refleja el contenido de STDOUT en el archivo de resultados de la tarea. **La **stdout** función WDL captura el contenido de STDOUT (en este ejemplo, la cadena de entrada Hello World\$1** ) en un archivo. **stdout\$1file** 

Como HealthOmics crea registros para todo el contenido de STDOUT, el resultado también aparece en los CloudWatch registros, junto con otra información de registro de STDERR para la tarea.

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

### Resultado de la tarea para STDERR
<a name="task-outputs-wdl-stderr"></a>

En este ejemplo, se crea una tarea con un nombre `SayHello` que refleja el contenido de STDERR en el archivo de resultados de la tarea. **La **stderr** función WDL captura el contenido STDERR (en este ejemplo, la cadena de entrada Hello World\$1** ) en un archivo. **stderr\$1file** 

Como HealthOmics crea registros para todo el contenido de STDERR, el resultado aparecerá en CloudWatch Registros junto con otra información de registro de STDERR correspondiente a la tarea.

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

### Salida de la tarea a un archivo
<a name="task-outputs-wdl-file"></a>

En este ejemplo, la SayHello tarea crea dos archivos (message.txt y info.txt) y los declara explícitamente como las salidas con nombre (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"
    } 
}
```

### Salida de la tarea a una matriz de archivos
<a name="task-outputs-wdl-files"></a>

En este ejemplo, la `GenerateGreetings` tarea genera una matriz de archivos como resultado de la tarea. La tarea genera dinámicamente un archivo de saludo para cada miembro de la matriz de entrada`names`. Como los nombres de los archivos no se conocen hasta el momento de ejecución, la definición de salida utiliza la función WDL glob () para generar todos los archivos que coincidan con el patrón. `*_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")
    }       
 }
```

## Resultados de tareas para Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Para las definiciones de flujo de trabajo escritas en Nextflow, defina una directiva **PublishDir** para exportar el contenido de las tareas a su bucket de Amazon S3 de salida. Establezca el valor **PublishDir** en. `/mnt/workflow/pubdir` 

 HealthOmics Para poder exportar archivos a Amazon S3, los archivos deben estar en este directorio.

Si una tarea genera un grupo de archivos de salida para usarlos como entradas en una tarea posterior, le recomendamos que agrupe estos archivos en un directorio y emita el directorio como resultado de la tarea. La enumeración de cada archivo individual puede provocar un cuello de botella de E/S en el sistema de archivos subyacente. Por ejemplo:

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

## Resultados de tareas para CWL
<a name="workflow-task-outputs-cwl"></a>

Para las definiciones de flujo de trabajo escritas en CWL, puede especificar los resultados de las tareas mediante `CommandLineTool` tareas. En las siguientes secciones se muestran ejemplos de `CommandLineTool` tareas que definen distintos tipos de resultados.

**Topics**
+ [Resultado de la tarea para STDOUT](#task-outputs-cwl-stdout)
+ [Resultado de la tarea para STDERR](#task-outputs-cwl-stderr)
+ [Salida de la tarea a un archivo](#task-outputs-cwl-file)
+ [Salida de la tarea a una matriz de archivos](#task-outputs-cwl-files)

### Resultado de la tarea para STDOUT
<a name="task-outputs-cwl-stdout"></a>

En este ejemplo se crea una `CommandLineTool` tarea que reproduce el contenido de STDOUT en un archivo de salida de texto denominado. **output.txt** **Por ejemplo, si proporciona la siguiente entrada, el resultado de la tarea será ¡Hola mundo\$1** en el **output.txt** archivo.

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

La `outputs` directiva especifica que el nombre de la salida es **example\$1out** y su tipo es`stdout`. Para que una tarea posterior consuma el resultado de esta tarea, se referirá al resultado como`example_out`.

Como HealthOmics crea registros para todo el contenido de STDERR y STDOUT, el resultado también aparece en los CloudWatch registros, junto con otra información de registro de STDERR para la tarea.

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

### Resultado de la tarea para STDERR
<a name="task-outputs-cwl-stderr"></a>

En este ejemplo se crea una `CommandLineTool` tarea que reproduce el contenido de STDERR en un archivo de salida de texto denominado. **stderr.txt** La tarea modifica el `baseCommand` modo que se `echo` escribe en STDERR (en lugar de en STDOUT).

La `outputs` directiva especifica que el nombre de la salida es **stderr\$1out** y su tipo es. `stderr` 

Como HealthOmics crea registros para todo el contenido de STDERR y STDOUT, el resultado aparecerá en los CloudWatch registros, junto con otra información de registro de STDERR para la tarea.

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

### Salida de la tarea a un archivo
<a name="task-outputs-cwl-file"></a>

En este ejemplo se crea una `CommandLineTool` tarea que crea un archivo tar comprimido a partir de los archivos de entrada. El nombre del archivo se proporciona como parámetro de entrada (archive\$1name). 

La **outputs** directiva especifica que el tipo `archive_file` de salida es `File` y utiliza una referencia al parámetro de entrada para enlazarlo `archive_name` al archivo de salida.

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

### Salida de la tarea a una matriz de archivos
<a name="task-outputs-cwl-files"></a>

En este ejemplo, la `CommandLineTool` tarea crea una matriz de archivos mediante el `touch` comando. El comando usa las cadenas del parámetro `files-to-create` de entrada para nombrar los archivos. El comando genera una matriz de archivos. La matriz incluye todos los archivos del directorio de trabajo que coincidan con el `glob` patrón. En este ejemplo se utiliza un patrón comodín («\$1») que coincide con todos los archivos.

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

# Recursos de tareas en una definición de HealthOmics flujo de trabajo
<a name="task-resources"></a>

En la definición del flujo de trabajo, defina lo siguiente para cada tarea:
+ La imagen del contenedor de la tarea. Para obtener más información, consulte [Imágenes de contenedores para flujos de trabajo privados](workflows-ecr.md).
+ El número CPUs y la memoria necesarios para la tarea. Para obtener más información, consulte [Requisitos de cómputo y memoria para HealthOmics las tareas](memory-and-compute-tasks.md).

HealthOmics ignora las especificaciones de almacenamiento por tarea. HealthOmics proporciona almacenamiento de ejecución al que pueden acceder todas las tareas de la ejecución. Para obtener más información, consulte [Ejecute tipos de almacenamiento en HealthOmics flujos de trabajo](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"
   }
   ...
}
```

En el caso de un flujo de trabajo de WDL, intenta realizar hasta dos HealthOmics reintentos para una tarea que no funcione debido a errores de servicio (la solicitud de API devuelve un código de estado HTTP 5XX). Para obtener más información sobre los reintentos de tareas, consulte. [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

Puede excluirse del comportamiento de reintento especificando la siguiente configuración para la tarea en el archivo de definición de la 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
```

------

# Aceleradores de tareas en una definición de flujo de trabajo HealthOmics
<a name="task-accelerators"></a>

En la definición del flujo de trabajo, si lo desea, puede especificar las especificaciones del acelerador de la GPU para una tarea. HealthOmics admite los siguientes valores de especificación de aceleración, junto con los tipos de instancias compatibles:


| Especificaciones del acelerador | Tipos de instancias de Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-a10g | G4 y G5 | 
| nvidia-tesla-a10 g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 y G6 | 
| nvidia-l4-a10g | G5 y G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40s | G6e | 

Si especificas un tipo de acelerador que admite varios tipos de instancias, HealthOmics selecciona el tipo de instancia en función de la capacidad disponible. Si ambos tipos de instancias están disponibles, HealthOmics da preferencia a la instancia de menor coste. La excepción es el acelerador de tareas nvidia-t4-a10g-l4, que da preferencia a la instancia de última generación disponible.

Para obtener más información sobre los tipos de instancias[Instancias de computación acelerada](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances), consulte.

En el siguiente ejemplo, la definición del flujo de trabajo `nvidia-l4` se especifica como acelerador:

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

------

# Especificaciones de la definición del flujo de trabajo de WDL
<a name="workflow-languages-wdl"></a>

En los siguientes temas se proporcionan detalles sobre los tipos y directivas disponibles para las definiciones de flujos de trabajo de la WDL en. HealthOmics

**Topics**
+ [Conversión de tipos implícita en WDL lenient](#workflow-wdl-type-conversion)
+ [Definición del espacio de nombres en input.json](#workflow-wdl-namespace-defn)
+ [Tipos primitivos en WDL](#workflow-wdl-primitive-types)
+ [Tipos complejos en WDL](#workflow-wdl-complex-types)
+ [Directivas de la WDL](#workflow-wdl-directives)
+ [Metadatos de tareas en WDL](#workflow-wdl-task-metadata)
+ [Ejemplo de definición de flujo de trabajo de WDL](#wdl-example)

## Conversión de tipos implícita en WDL lenient
<a name="workflow-wdl-type-conversion"></a>

HealthOmics admite la conversión de tipos implícita en el archivo input.json y en la definición del flujo de trabajo. Para utilizar la conversión de tipos implícita, especifique el motor de flujo de trabajo como compatible con la WDL al crear el flujo de trabajo. WDL lenient está diseñado para gestionar los flujos de trabajo migrados desde Cromwell. Es compatible con las directivas de Cromwell de los clientes y con algunas lógicas no conformes.

[WDL lenient admite la conversión de tipos para los siguientes elementos de la lista de excepciones limitadas de WDL:](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ De flote a Int, donde la coerción no produce pérdida de precisión (por ejemplo, 1,0 se asigna a 1).
+ Coloque la cadena en Int/Float, donde la coerción no produce pérdida de precisión.
+ Asigne [W, X] a Array [Pair [Y, Z]], en el caso de que W sea coercible para Y y X sea coercible para Z.
+ Array [Pair [W, X]] para mapear [Y, Z], en el caso de que W sea coercible para Y y X sea coercible para Z (por ejemplo, 1.0 se mapea con 1).

Para utilizar la conversión de tipos implícita, especifique el motor de flujo de trabajo como WDL\$1LENIENT al crear el flujo de trabajo o la versión del flujo de trabajo.

**En la consola, el parámetro del motor de flujo de trabajo se denomina Idioma.** En la API, el parámetro del motor de flujo de trabajo se denomina **motor**. Para obtener más información, consulte [Crear un flujo de trabajo privado](create-private-workflow.md) o [Crear una versión de flujo de trabajo](workflows-version-create.md).

## Definición del espacio de nombres en input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics admite variables totalmente calificadas en input.json. Por ejemplo, si declara dos variables de entrada denominadas número1 y número2 en el flujo de trabajo: **SumWorkflow**

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

 Puedes usarlas como variables totalmente calificadas en input.json: 

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

## Tipos primitivos en WDL
<a name="workflow-wdl-primitive-types"></a>

La siguiente tabla muestra cómo las entradas de la WDL se asignan a los tipos primitivos coincidentes. HealthOmics proporciona una compatibilidad limitada con la coerción de tipos, por lo que se recomienda establecer tipos explícitos. 


**Tipos primitivos**  

| Tipo WDL | Tipo JSON | Ejemplo de WDL | Ejemplo de clave y valor de JSON | Notas | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | El valor debe estar en minúsculas y sin comillas. | 
| Int | integer | Int i | "i": 7 | No debe estar entre comillas. | 
| Float | number | Float f | "f": 42.2 | No debe estar entre comillas. | 
| String | string | String s | "s": "characters" | Las cadenas JSON que son un URI deben asignarse a un archivo WDL para importarlas. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 y el HealthOmics almacenamiento URIs se importan siempre que la función de IAM proporcionada para el flujo de trabajo tenga acceso de lectura a estos objetos. No se admite ningún otro esquema de URI (como file://https://, yftp://). El URI debe especificar un objeto. No puede ser un directorio, lo que significa que no puede terminar con un/. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | El Directory tipo no está incluido en WDL 1.0 ni 1.1, por lo que tendrá que añadirlo version development al encabezado del archivo WDL. El URI debe ser un URI de Amazon S3 y tener un prefijo que termine en «/». Todo el contenido del directorio se copiará de forma recursiva en el flujo de trabajo como una sola descarga. Solo Directory debe contener archivos relacionados con el flujo de trabajo. | 

## Tipos complejos en WDL
<a name="workflow-wdl-complex-types"></a>

La siguiente tabla muestra cómo las entradas de la WDL se asignan a los tipos JSON complejos coincidentes. Los tipos complejos de WDL son estructuras de datos compuestas por tipos primitivos. Las estructuras de datos, como las listas, se convertirán en matrices.


**Tipos complejos**  

| Tipo WDL | Tipo JSON | Ejemplo de WDL | Ejemplo de clave y valor de JSON | Notas | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | Los miembros de la matriz deben seguir el formato del tipo de matriz WDL. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Cada valor del par debe usar el formato JSON del tipo de WDL correspondiente. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Cada entrada del mapa debe usar el formato JSON del tipo de WDL correspondiente. | 
| 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>  | Los nombres de los miembros de la estructura deben coincidir exactamente con los nombres de las claves de los objetos JSON. Cada valor debe usar el formato JSON del tipo WDL correspondiente. | 
| Object | N/A | N/A | N/A | El Object tipo WDL está desactualizado y debe sustituirse por él Struct en todos los casos. | 

## Directivas de la WDL
<a name="workflow-wdl-directives"></a>

HealthOmics admite las siguientes directivas en todas las versiones de la WDL compatibles HealthOmics .

### Configure los recursos de la GPU
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics admite los atributos de tiempo de ejecución **acceleratorType** y **acceleratorCount** con todas las [instancias de GPU](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html) compatibles. HealthOmics también admite los alias denominados **gpuType** y**gpuCount**, que tienen la misma funcionalidad que sus homólogos aceleradores. Si la definición de WDL contiene ambas directivas, HealthOmics utiliza los valores del acelerador.

El siguiente ejemplo muestra cómo utilizar estas directivas:

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

### Configure el reintento de tareas para los errores de servicio
<a name="workflow-wdl-task-retry"></a>

HealthOmics admite hasta dos reintentos para una tarea que haya fallado debido a errores de servicio (5XX códigos de estado HTTP). Puede configurar el número máximo de reintentos (1 o 2) y optar por no volver a intentarlo en caso de errores de servicio. De forma predeterminada, HealthOmics intenta un máximo de dos reintentos. 

En el siguiente ejemplo, se establece `preemptible` la exclusión de los reintentos en caso de errores de servicio:

```
{
  preemptible: 0 
}
```

Para obtener más información sobre los reintentos de tareas HealthOmics, consulte. [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

### Configure el reintento de tareas para que no haya memoria suficiente
<a name="workflow-wdl-retries"></a>

HealthOmics admite los reintentos de una tarea que ha fallado porque se ha quedado sin memoria (código de salida del contenedor 137, código de estado HTTP 4XX). HealthOmics duplica la cantidad de memoria para cada reintento.

De forma predeterminada, HealthOmics no lo vuelve a intentar en este tipo de errores. Utilice la `maxRetries` directiva para especificar el número máximo de reintentos.

El ejemplo siguiente se establece `maxRetries` en 3, de modo que se HealthOmics intenta completar la tarea un máximo de cuatro intentos (el intento inicial más tres reintentos):

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

**nota**  
Para reintentar la tarea por falta de memoria, se requiere la versión 4.2.3 o posterior de GNU findutils. El contenedor de imágenes predeterminado incluye este paquete. HealthOmics Si especifica una imagen personalizada en su definición de WDL, asegúrese de que la imagen incluya GNU findutils 4.2.3\$1.

### Configure los códigos de retorno
<a name="workflow-wdl-directive-returnCodes"></a>

El atributo **returnCodes** proporciona un mecanismo para especificar un código de retorno, o un conjunto de códigos de retorno, que indica que una tarea se ha ejecutado correctamente. El motor WDL respeta los códigos de retorno que se especifican en la sección de tiempo de **ejecución** de la definición de la WDL y establece el estado de las tareas en consecuencia. 

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

HealthOmics **también admite un alias denominado **continueOnReturnCode**, que tiene las mismas funciones que ReturnCodes.** Si especifica ambos atributos, HealthOmics utiliza el valor **ReturnCodes**.

## Metadatos de tareas en WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics admite las siguientes opciones de metadatos para las tareas de la WDL.

### Deshabilite el almacenamiento en caché a nivel de tarea con el atributo volatile
<a name="workflow-wdl-volatile-attribute"></a>

El atributo **volatile** le permite deshabilitar el almacenamiento en caché de llamadas para tareas específicas de su flujo de trabajo de WDL. Cuando una tarea está marcada como volátil, siempre se ejecutará y nunca utilizará los resultados almacenados en caché, incluso cuando el almacenamiento en caché esté habilitado para su ejecución.

Añada el atributo **volátil** a la sección de **metadatos** de la definición de la tarea:

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

## Ejemplo de definición de flujo de trabajo de WDL
<a name="wdl-example"></a>

Los siguientes ejemplos muestran las definiciones de flujos de trabajo privados para convertir de `CRAM` a `BAM` en WDL. El `BAM` flujo de trabajo `CRAM` to define dos tareas y utiliza las herramientas del `genomes-in-the-cloud` contenedor, como se muestra en el ejemplo y que está disponible públicamente. 

El siguiente ejemplo muestra cómo incluir el contenedor Amazon ECR como parámetro. Esto permite HealthOmics verificar los permisos de acceso a su contenedor antes de que comience la ejecución.

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

En el siguiente ejemplo, se muestra cómo especificar los archivos que se van a utilizar en la ejecución cuando los archivos se encuentran en un bucket de Amazon S3.

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

Si desea especificar archivos de un almacén de secuencias, indíquelo como se muestra en el siguiente ejemplo, utilizando el URI del almacén de secuencias.

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

A continuación, puede definir su flujo de trabajo en WDL, como se muestra en el siguiente ejemplo. 

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

# Especificaciones de la definición del flujo de trabajo de Nextflow
<a name="workflow-definition-nextflow"></a>

HealthOmics es compatible con Nextflow y. DSL1 DSL2 Para obtener más información, consulte [Compatibilidad con la versión de Nextflow](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow DSL2 se basa en el lenguaje de programación Groovy, por lo que los parámetros son dinámicos y la coerción de tipos es posible utilizando las mismas reglas que Groovy. Los parámetros y valores proporcionados por el JSON de entrada están disponibles en el mapa de parámetros () `params` del flujo de trabajo.

**Topics**
+ [Utilice los complementos nf-schema y nf-validation](#schema-and-validation-plugins-nextflow)
+ [Especifique el almacenamiento URIs](#storage-uris-nextflow)
+ [Directivas de Nextflow](#workflow-nexflow-directives)
+ [Exporta el contenido de la tarea](#exporting-task-content-nextflow)

## Utilice los complementos nf-schema y nf-validation
<a name="schema-and-validation-plugins-nextflow"></a>

**nota**  
Resumen del soporte para complementos HealthOmics :  
v22.04: no hay soporte para complementos
v23.10: admite y `nf-schema` `nf-validation`
v24.10 — admite `nf-schema`

HealthOmics proporciona el siguiente soporte para los complementos de Nextflow:
+ Para la versión 23.10 de Nextflow, HealthOmics preinstala el complemento nf-validation @1 .1.1. 
+ Para Nextflow v23.10 y versiones posteriores, preinstala el complemento nf-schema @2 .3.0. HealthOmics 
+ No puede recuperar complementos adicionales durante la ejecución de un flujo de trabajo. HealthOmics ignora cualquier otra versión del complemento que especifique en el `nextflow.config` archivo.
+ Para Nextflow v24 y versiones posteriores, `nf-schema` es la nueva versión del complemento obsoleto. `nf-validation` Para obtener más información, consulte [nf-schema en el repositorio de Nextflow](https://github.com/nextflow-io/nf-schema). GitHub

## Especifique el almacenamiento URIs
<a name="storage-uris-nextflow"></a>

Cuando se utiliza un Amazon S3 o un HealthOmics URI para crear un archivo o un objeto de ruta de Nextflow, el objeto coincidente está disponible para el flujo de trabajo, siempre y cuando se conceda el acceso de lectura. Se permite el uso de prefijos o directorios en Amazon S3 URIs. Para ver ejemplos, consulte [Formatos de parámetros de entrada de Amazon S3](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics admite parcialmente el uso de patrones globales en Amazon S3 URIs o HealthOmics Storage URIs. Utilice patrones globales en la definición del flujo de trabajo para la creación de nuestros canales`path`. `file` Para conocer el comportamiento esperado y los casos exactos, consulte[Manejo de Nextflow del patrón Glob en las entradas de Amazon S3](workflows-run-inputs.md#wd-nextflow-s3-formats).

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

Las directivas de Nextflow se configuran en el archivo de configuración o en la definición del flujo de trabajo de Nextflow. La siguiente lista muestra el orden de prioridad que se HealthOmics utiliza para aplicar los ajustes de configuración, de menor a mayor prioridad:

1. Configuración global en el archivo de configuración.

1. Sección de tareas de la definición del flujo de trabajo.

1. Selectores específicos de la tarea en el archivo de configuración.

**Topics**
+ [Estrategia de reintento de tareas mediante `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [El intento de reintento de la tarea se realiza mediante `maxRetries`](#workflow-nexflow-task-retry)
+ [Opte por no participar en la tarea y vuelva a intentarlo con `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Duración de la tarea según la directiva `time`](#time-directive-nextflow)

### Estrategia de reintento de tareas mediante `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Utilice la `errorStrategy` directiva para definir la estrategia en caso de errores en las tareas. De forma predeterminada, cuando una tarea regresa con una indicación de error (un estado de salida distinto de cero), la tarea se detiene y HealthOmics finaliza toda la ejecución. Si lo estableces`retry`, `errorStrategy` HealthOmics intenta volver a intentar la tarea fallida una vez. Para aumentar el número de reintentos, consulte. [El intento de reintento de la tarea se realiza mediante `maxRetries`](#workflow-nexflow-task-retry)

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

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

Para obtener información sobre cómo HealthOmics gestiona los reintentos de tareas durante una ejecución, consulte. [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

### El intento de reintento de la tarea se realiza mediante `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

De forma predeterminada, HealthOmics no intenta reintentar una tarea fallida ni intenta volver a intentarlo si se configura. `errorStrategy` Para aumentar el número máximo de reintentos, `errorStrategy` defina `retry` y configure el número máximo de reintentos mediante la directiva. `maxRetries`

El siguiente ejemplo establece el número máximo de reintentos en 3 en la configuración global.

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

El siguiente ejemplo muestra cómo configurarlo `maxRetries` en la sección de tareas de la definición del flujo de trabajo.

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

El siguiente ejemplo muestra cómo especificar la configuración específica de la tarea en el archivo de configuración de Nextflow, en función de los selectores de nombres o etiquetas.

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

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

### Opte por no participar en la tarea y vuelva a intentarlo con `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

En las versiones 23 y 24 de Nextflow, HealthOmics admite reintentos de tareas si la tarea falló debido a errores de servicio (códigos de estado HTTP 5XX). De forma predeterminada, HealthOmics intenta reintentar hasta dos veces una tarea fallida. 

Puede configurarlo `omicsRetryOn5xx` para excluirse del reintento de la tarea en caso de errores de servicio. Para obtener más información sobre cómo volver a intentar una tarea HealthOmics, consulte. [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

El siguiente ejemplo se configura `omicsRetryOn5xx` en la configuración global para optar por no volver a intentar la tarea.

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

El siguiente ejemplo muestra cómo realizar la configuración `omicsRetryOn5xx` en la sección de tareas de la definición del flujo de trabajo.

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

El siguiente ejemplo muestra cómo establecer `omicsRetryOn5xx` una configuración específica para una tarea en el archivo de configuración de Nextflow, en función de los selectores de nombres o etiquetas.

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

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

### Duración de la tarea según la directiva `time`
<a name="time-directive-nextflow"></a>

HealthOmics proporciona una cuota ajustable (consulte[HealthOmics cuotas de servicio](service-quotas.md)) para especificar la duración máxima de una ejecución. Para los flujos de trabajo de las versiones 23 y 24 de Nextflow, también puede especificar la duración máxima de las tareas mediante la directiva Nextflow. `time`

Durante el desarrollo de un nuevo flujo de trabajo, establecer la duración máxima de las tareas te ayuda a atrapar las tareas fuera de control y las tareas de larga duración. 

Para obtener más información sobre la directiva horaria de Nextflow, consulta la directiva horaria en [la referencia](https://www.nextflow.io/docs/latest/reference/process.html#process-time) de Nextflow.

HealthOmics proporciona el siguiente soporte para la directiva horaria de Nextflow:

1. HealthOmics admite una granularidad de 1 minuto para la directiva de tiempo. Puede especificar un valor entre 60 segundos y el valor de duración máxima de la ejecución.

1. Si introduce un valor inferior a 60, lo HealthOmics redondea a 60 segundos. Para valores superiores a 60, HealthOmics redondea al minuto más cercano.

1. Si el flujo de trabajo admite reintentos para una tarea, HealthOmics reintenta la tarea si se agota el tiempo de espera.

1. Si se agota el tiempo de espera de una tarea (o se agota el tiempo de espera del último reintento), HealthOmics cancela la tarea. Esta operación puede tener una duración de uno a dos minutos.

1. Cuando se agota el tiempo de espera de la tarea, HealthOmics establece el estado de ejecución y tarea como fallido y cancela las demás tareas en ejecución (para las tareas en estado Iniciativo, Pendiente o En ejecución). HealthOmics exporta los resultados de las tareas que completó antes de que se agotara el tiempo de espera a la ubicación de salida de S3 que haya designado. 

1. El tiempo que una tarea pasa en estado pendiente no se tiene en cuenta para la duración de la tarea.

1. Si la ejecución forma parte de un grupo de ejecución y se agota el tiempo de espera antes que el temporizador de la tarea, la ejecución y la tarea pasan al estado fallido.

Especifique la duración del tiempo de espera mediante una o más de las siguientes unidades:`ms`,`s`, `m``h`, o`d`.

El siguiente ejemplo muestra cómo especificar la configuración global en el archivo de configuración de Nextflow. Establece un tiempo de espera global de 1 hora y 30 minutos.

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

El siguiente ejemplo muestra cómo especificar una directiva horaria en la sección de tareas de la definición del flujo de trabajo. En este ejemplo se establece un tiempo de espera de 3 días, 5 horas y 4 minutos. Este valor tiene prioridad sobre el valor global del archivo de configuración, pero no tiene prioridad sobre una directiva de tiempo específica de la tarea en el archivo de `my_label` configuración.

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

En el siguiente ejemplo, se muestra cómo especificar las directivas horarias específicas de la tarea en el archivo de configuración de Nextflow, en función de los selectores de nombres o etiquetas. En este ejemplo, se establece un valor de tiempo de espera global de la tarea de 30 minutos. Establece un valor de 2 horas para la tarea `myTask` y establece un valor de 3 horas para las tareas con etiqueta`my_label`. Para las tareas que coinciden con el selector, estos valores tienen prioridad sobre el valor global y el valor de la definición del flujo de trabajo.

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

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

## Exporta el contenido de la tarea
<a name="exporting-task-content-nextflow"></a>

Para los flujos de trabajo escritos en Nextflow, defina una directiva **PublishDir** para exportar el contenido de las tareas a su bucket de salida de Amazon S3. Como se muestra en el siguiente ejemplo, defina el valor **PublishDir** en. `/mnt/workflow/pubdir` Para exportar archivos a Amazon S3, los archivos deben estar en este directorio.

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

# Especificaciones de la definición del flujo de trabajo de CWL
<a name="workflow-languages-cwl"></a>

Los flujos de trabajo escritos en Common Workflow Language, o CWL, ofrecen una funcionalidad similar a los flujos de trabajo escritos en WDL y Nextflow. Puede utilizar Amazon S3 o el HealthOmics almacenamiento URIs como parámetros de entrada. 

Si define la entrada en un archivo secundario de un subflujo de trabajo, añada la misma definición en el flujo de trabajo principal.

HealthOmics los flujos de trabajo no admiten los procesos de operación. Para obtener más información sobre los procesos operativos en los flujos de trabajo de CWL, consulte la documentación de [CWL](https://www.commonwl.org/user_guide/topics/operations.html).

La mejor práctica es definir un flujo de trabajo de CWL independiente para cada contenedor que utilice. Le recomendamos que no codifique la entrada de DockerPull con una URI de Amazon ECR fija.

**Topics**
+ [Convierta los flujos de trabajo de CWL para usarlos HealthOmics](#workflow-cwl-convert)
+ [Opte por no participar en la tarea, vuelva a intentarlo utilizando `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Repite un paso del flujo de trabajo](#workflow-cwl-loop)
+ [Vuelva a intentar las tareas con más memoria](#workflow-cwl-out-of-memory-retry)
+ [Ejemplos](#workflow-cwl-examples)

## Convierta los flujos de trabajo de CWL para usarlos HealthOmics
<a name="workflow-cwl-convert"></a>

Para convertir una definición de flujo de trabajo de CWL existente y utilizarla HealthOmics, realice los siguientes cambios:
+ Sustituya todos los contenedores URIs de Docker por Amazon URIs ECR.
+ Asegúrese de que todos los archivos del flujo de trabajo estén declarados en el flujo de trabajo principal como entrada y de que todas las variables estén definidas de forma explícita.
+ Asegúrese de que todo el JavaScript código cumpla con el modo estricto.

## Opte por no participar en la tarea, vuelva a intentarlo utilizando `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics admite reintentos de tareas si la tarea ha fallado debido a errores de servicio (5XX códigos de estado HTTP). De forma predeterminada, HealthOmics intenta reintentar hasta dos veces una tarea fallida. Para obtener más información sobre cómo volver a intentar una tarea HealthOmics, consulte. [La tarea se reintenta](monitoring-runs.md#run-status-task-retries)

Para excluirse del reintento de tareas por errores de servicio, configure la `omicsRetryOn5xx` directiva en la definición del flujo de trabajo. Puede definir esta directiva en los requisitos o en las sugerencias. Recomendamos añadir la directiva como sugerencia de portabilidad.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Los requisitos anulan las sugerencias. Si la implementación de una tarea proporciona un requisito de recursos en sugerencias que también se proporcionan en los requisitos de un flujo de trabajo adjunto, los requisitos adjuntos tienen prioridad.

Si el mismo requisito de tarea aparece en distintos niveles del flujo de trabajo, HealthOmics utiliza la entrada más específica de `requirements` (o`hints`, si no hay ninguna entrada). `requirements` La siguiente lista muestra el orden de prioridad que se HealthOmics utiliza para aplicar los valores de configuración, de menor a mayor prioridad:
+ Nivel de flujo de trabajo
+ Nivel de escalón
+ Sección de tareas de la definición del flujo de trabajo

El siguiente ejemplo muestra cómo configurar la `omicsRetryOn5xx` directiva en los diferentes niveles del flujo de trabajo. En este ejemplo, el requisito de nivel de flujo de trabajo anula las sugerencias de nivel de flujo de trabajo. Las configuraciones de requisitos en los niveles de tarea y paso anulan las configuraciones de las sugerencias.

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

## Repite un paso del flujo de trabajo
<a name="workflow-cwl-loop"></a>

HealthOmics admite la repetición en bucle de un paso del flujo de trabajo. Puede usar bucles para ejecutar los pasos del flujo de trabajo repetidamente hasta que se cumpla una condición específica. Esto resulta útil para los procesos iterativos en los que es necesario repetir una tarea varias veces o hasta conseguir un resultado determinado.

**Nota:** La funcionalidad de bucle requiere la versión 1.2 o posterior de CWL. Los flujos de trabajo que utilizan versiones de CWL anteriores a la 1.2 no admiten las operaciones de bucle.

Para utilizar bucles en su flujo de trabajo de CWL, defina un requisito de bucle. El siguiente ejemplo muestra la configuración de los requisitos de bucles:

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

El `loopWhen` campo controla cuándo termina el bucle. En este ejemplo, el bucle continúa mientras el contador sea inferior al valor máximo. El `loop` campo define cómo se actualizan los parámetros de entrada entre iteraciones. `loopSource`Especifica qué salida de la iteración anterior se transfiere a la siguiente iteración. El `outputMethod` campo configurado para `last` devolver solo el resultado de la iteración final.

## Vuelva a intentar las tareas con más memoria
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics admite el reintento automático de los errores de las out-of-memory tareas. Cuando se cierra una tarea con el código 137 (out-of-memory), HealthOmics crea una nueva tarea con una mayor asignación de memoria en función del multiplicador especificado.

**nota**  
HealthOmics reintenta out-of-memory los errores hasta 3 veces o hasta que la asignación de memoria alcance los 1536 GiB, el límite que se alcance primero.

El siguiente ejemplo muestra cómo configurar el reintento: out-of-memory

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

Cuando se produce un error en una tarea debido a out-of-memory, HealthOmics calcula la asignación de memoria de los reintentos mediante la fórmula:. `previous_run_memory × memoryRetryMultiplier` En el ejemplo anterior, si se produce un error en la tarea con 4096 MB de memoria, el reintento utilizará 4096 × 2,5 = 10.240 MB de memoria.

El `memoryRetryMultiplier` parámetro controla la cantidad de memoria adicional que se debe asignar a los reintentos:
+ **Valor predeterminado:** si no especificas un valor, el valor predeterminado es `2` (duplica la memoria)
+ **Rango válido:** debe ser un número positivo superior `1` a. Los valores no válidos provocan un error de validación de 4 XX
+ **Valor mínimo efectivo:** los valores entre `1` y `1.5` se incrementan automáticamente `1.5` para garantizar un aumento significativo de la memoria y evitar reintentos excesivos

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

El siguiente es un ejemplo de un flujo de trabajo escrito en CWL. 

```
cwlVersion: v1.2
class: Workflow

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

out_filename: string
docker_image: string


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

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

El siguiente archivo define la `copy.cwl` tarea.

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

El siguiente es un ejemplo de un flujo de trabajo escrito en CWL con un requisito de GPU.

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

inputs: []
outputs: []
```

# Ejemplos de definiciones de flujo de trabajo
<a name="workflow-definition-examples"></a>

El siguiente ejemplo muestra la misma definición de flujo de trabajo en WDL, Nextflow y 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
```

------

# Archivos de plantillas de parámetros para HealthOmics flujos de trabajo
<a name="parameter-templates"></a>

Las plantillas de parámetros definen los parámetros de entrada de un flujo de trabajo. Puede definir los parámetros de entrada para que su flujo de trabajo sea más flexible y versátil. Por ejemplo, puede definir un parámetro para la ubicación en Amazon S3 de los archivos del genoma de referencia. Las plantillas de parámetros se pueden proporcionar a través de un servicio de repositorio basado en Git o de su unidad local. A continuación, los usuarios pueden ejecutar el flujo de trabajo utilizando varios conjuntos de datos. 

Puede crear la plantilla de parámetros para su flujo de trabajo o HealthOmics puede generar la plantilla de parámetros automáticamente.

La plantilla de parámetros es un archivo JSON. En el archivo, cada parámetro de entrada es un objeto con nombre que debe coincidir con el nombre de la entrada del flujo de trabajo. Cuando se inicia una ejecución, si no se proporcionan valores para todos los parámetros necesarios, se produce un error en la ejecución.

El objeto de parámetro de entrada incluye los siguientes atributos:
+ **description**— Este atributo obligatorio es una cadena que la consola muestra en la página de **inicio de la ejecución**. Esta descripción también se conserva como metadatos de ejecución.
+ **optional**— Este atributo opcional indica si el parámetro de entrada es opcional. Si no especifica el **optional** campo, el parámetro de entrada es obligatorio.

En el siguiente ejemplo de plantilla de parámetros se muestra cómo especificar los parámetros de entrada.

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

## Generación de plantillas de parámetros
<a name="parameter-parsing"></a>

HealthOmics genera la plantilla de parámetros analizando la definición del flujo de trabajo para detectar los parámetros de entrada. Si proporciona un archivo de plantilla de parámetros para un flujo de trabajo, los parámetros del archivo anulan los parámetros detectados en la definición del flujo de trabajo.

Existen pequeñas diferencias entre la lógica de análisis de los motores CWL, WDL y Nextflow, como se describe en las siguientes secciones. 

**Topics**
+ [Detección de parámetros para CWL](#parameter-parsing-cwl)
+ [Detección de parámetros para WDL](#parameter-parsing-wdl)
+ [Detección de parámetros para Nextflow](#parameter-parsing-nextflow)

### Detección de parámetros para CWL
<a name="parameter-parsing-cwl"></a>

En el motor de flujo de trabajo CWL, la lógica de análisis hace las siguientes suposiciones:
+ Todos los tipos admitidos que admiten valores NULL se marcan como parámetros de entrada opcionales.
+ Todos los tipos admitidos que no sean nulos se marcan como parámetros de entrada obligatorios.
+ Todos los parámetros con valores predeterminados se marcan como parámetros de entrada opcionales.
+ Las descripciones se extraen de la `label` sección de la definición del `main` flujo de trabajo. Si no `label` se especifica, la descripción estará en blanco (una cadena vacía). 

En las tablas siguientes se muestran ejemplos de interpolación de CWL. Para cada ejemplo, el nombre del parámetro es. `x` Si el parámetro es obligatorio, debe proporcionar un valor para el parámetro. Si el parámetro es opcional, no es necesario que proporcione un valor.

En esta tabla se muestran ejemplos de interpolación de CWL para tipos primitivos.


| Input | Ejemplo de entrada/salida | Obligatorio | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 o 2 o... | Sí | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | El valor predeterminado es 2. La entrada válida es 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?</pre>  | La entrada válida es Ninguna o 1 o 2 o... | No | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | El valor predeterminado es 2. La entrada válida es Ninguna o 1 o 2 o... | No | 

La siguiente tabla muestra ejemplos de interpolación de CWL para tipos complejos. Un tipo complejo es una colección de tipos primitivos.


| Input | Ejemplo de entrada/salida | Obligatorio | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] o [1,2,3]  | Sí | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Ninguno o [] o [1,2,3]  | No | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] o [Ninguno, 3, Ninguno]  | Sí | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Ninguno] o Ninguno o [1,2,3] o [Ninguno, 3] pero no []  | No | 

### Detección de parámetros para WDL
<a name="parameter-parsing-wdl"></a>

En el motor de flujo de trabajo de la WDL, la lógica de análisis hace las siguientes suposiciones:
+ Todos los tipos admitidos que admiten valores NULL se marcan como parámetros de entrada opcionales. 
+ Para los tipos admitidos que no admiten valores nulos:
  + Cualquier variable de entrada con asignación de literales o expresiones se marca como parámetro opcional. Por ejemplo:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Si no se ha asignado ningún valor o expresión a los parámetros de entrada, se marcarán como parámetros obligatorios. 
+ Las descripciones se `parameter_meta` extraen de la definición del `main` flujo de trabajo. Si no `parameter_meta` se especifica, la descripción aparecerá en blanco (una cadena vacía). Para obtener más información, consulte la especificación WDL para los [metadatos de los parámetros](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

En las tablas siguientes se muestran ejemplos de interpolación de la WDL. Para cada ejemplo, el nombre del parámetro es. `x` Si el parámetro es obligatorio, debe proporcionar un valor para el parámetro. Si el parámetro es opcional, no es necesario que proporcione un valor.

En esta tabla se muestran ejemplos de interpolación de WDL para tipos primitivos.


| Input | Ejemplo de entrada/salida | Obligatorio | 
| --- | --- | --- | 
| Int x | 1 o 2 o... | Sí | 
| Int x = 2 | 2 | No | 
| Int x = 1\$12 | 3 | No | 
| Int x = y\$1z | y\$1z | No | 
| ¿Int? x | Ninguno o 1 o 2 o... | Sí | 
| ¿Int? x = 2 | Ninguno o 2 | No | 
| ¿Int? x = 1\$12 | Ninguno o 3 | No | 
| ¿Int? x = y\$1z | Ninguno o y\$1z | No | 

La siguiente tabla muestra ejemplos de interpolación de WDL para tipos complejos. Un tipo complejo es un conjunto de tipos primitivos. 


| Input | Ejemplo de entrada/salida | Obligatorio | 
| --- | --- | --- | 
| Array [Int] x | [1,2,3] o [] | Sí | 
| Matriz [Int] \$1 x | [1], pero no [] | Sí | 
| ¿Matriz [Int]? x | Ninguno o [] o [1,2,3] | No | 
| Matriz [Int?] x | [] o [Ninguno, 3, Ninguno] | Sí | 
| Matriz [Int?] =? x | [Ninguno] o Ninguno o [1,2,3] o [Ninguno, 3] pero no [] | No | 
| Ejemplo de estructura \$1String a, Int y\$1 más adelante en las entradas: Sample mySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Sí | 
| Ejemplo de estructura \$1String a, Int y\$1 más adelante en las entradas: ¿Ejemplo? ¿Mi muestra |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | No | 

### Detección de parámetros para Nextflow
<a name="parameter-parsing-nextflow"></a>

En el caso de Nextflow, HealthOmics genera la plantilla de parámetros analizando el archivo. `nextflow_schema.json` Si la definición del flujo de trabajo no incluye un archivo de esquema, HealthOmics analiza el archivo de definición del flujo de trabajo principal.

**Topics**
+ [Analizar el archivo de esquema](#parameter-parsing-nextflow-schema)
+ [Analizando el archivo principal](#parameter-parsing-nextflow-main)
+ [Parámetros anidados](#parameter-parsing-nextflow-nested)
+ [Ejemplos de interpolación de Nextflow](#parameter-parsing-nextflow-examples)

#### Analizar el archivo de esquema
<a name="parameter-parsing-nextflow-schema"></a>

Para que el análisis funcione correctamente, asegúrese de que el archivo de esquema cumpla los siguientes requisitos:
+ El archivo de esquema recibe un nombre `nextflow_schema.json` y se encuentra en el mismo directorio que el archivo de flujo de trabajo principal.
+ El archivo de esquema es un JSON válido, tal como se define en cualquiera de los siguientes esquemas:
  + [esquema json. org/draft/2020-12/schema](https://json-schema.org/draft/2020-12/schema).
  + [esquema json. org/draft-07/schema](https://json-schema.org/draft-07/schema).

HealthOmics analiza el `nextflow_schema.json` archivo para generar la plantilla de parámetros:
+ Extrae todo **properties** lo que está definido en el esquema.
+ Incluye la propiedad **description** si está disponible para la propiedad.
+ Identifica si cada parámetro es opcional u obligatorio, en función del **required** campo de la propiedad.

El siguiente ejemplo muestra un archivo de definición y el archivo de parámetros generado.

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

La plantilla de parámetros generada:

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

#### Analizando el archivo principal
<a name="parameter-parsing-nextflow-main"></a>

Si la definición del flujo de trabajo no incluye un `nextflow_schema.json` archivo, HealthOmics analiza el archivo de definición del flujo de trabajo principal.

HealthOmics analiza las `params` expresiones que se encuentran en el archivo principal de definición del flujo de trabajo y en el `nextflow.config` archivo. Todas `params` las que tengan valores predeterminados se marcan como opcionales.

Para que el análisis funcione correctamente, tenga en cuenta los siguientes requisitos:
+ HealthOmics analiza solo el archivo de definición del flujo de trabajo principal. Para garantizar que se capturen todos los parámetros, le recomendamos que los conecte todos los **params** submódulos y flujos de trabajo importados.
+ El archivo de configuración es opcional. Si define uno, asígnele un nombre `nextflow.config` y colóquelo en el mismo directorio que el archivo de definición del flujo de trabajo principal.

El siguiente ejemplo muestra un archivo de definición y la plantilla de parámetros generada.

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

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

La plantilla de parámetros generada:

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

Para los valores predeterminados que se definen en nextflow.config, HealthOmics recopila `params` las asignaciones y los parámetros declarados en ellos`params {}`, como se muestra en el siguiente ejemplo. En las sentencias de asignación, `params` debe aparecer en el lado izquierdo de la sentencia.

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

La plantilla de parámetros generada:

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

#### Parámetros anidados
<a name="parameter-parsing-nextflow-nested"></a>

Ambos `nextflow.config` permiten `nextflow_schema.json` parámetros anidados. Sin embargo, la plantilla de HealthOmics parámetros solo requiere los parámetros de nivel superior. Si su flujo de trabajo utiliza un parámetro anidado, debe proporcionar un objeto JSON como entrada para ese parámetro.

##### Parámetros anidados en archivos de esquema
<a name="parameter-parsing-schema-nested"></a>

HealthOmics omite los anidados **params** al analizar un archivo. `nextflow_schema.json` Por ejemplo, si define el siguiente archivo: `nextflow_schema.json`

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

HealthOmics ignora `input_file` y `input_num` cuando genera la plantilla de parámetros:

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

Al ejecutar este flujo de trabajo, HealthOmics espera un `input.json` archivo similar al siguiente:

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

##### Parámetros anidados en los archivos de configuración
<a name="parameter-parsing-config-nested"></a>

HealthOmics no recopila los anidados **params** en un `nextflow.config` archivo y los omite durante el análisis. Por ejemplo, si define el siguiente archivo: `nextflow.config`

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

HealthOmics ignora `params.nested.beta` y `params.group.delta` cuando genera la plantilla de parámetros:

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

#### Ejemplos de interpolación de Nextflow
<a name="parameter-parsing-nextflow-examples"></a>

La siguiente tabla muestra ejemplos de interpolación de Nextflow para los parámetros del archivo principal.


| Parámetros | Obligatorio | 
| --- | --- | 
| params.input\$1file | Sí | 
| params.input\$1file = "s3://bucket/data.json» | No | 
| params.nested.input\$1file | N/A | 
| params.nested.input\$1file = "s3://bucket/data.json» | N/A | 

La siguiente tabla muestra ejemplos de interpolación de Nextflow para los parámetros del archivo. `nextflow.config`


| Parámetros | Obligatorio | 
| --- | --- | 
|  <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/A | 
|  <pre>input_file = params.input_file</pre>  | N/A | 

# Imágenes de contenedores para flujos de trabajo privados
<a name="workflows-ecr"></a>

HealthOmics admite imágenes de contenedores alojadas en repositorios privados de Amazon ECR. Puede crear imágenes de contenedores y subirlas al repositorio privado. También puede usar su registro privado de Amazon ECR como caché de extracción para sincronizar el contenido de los registros anteriores.

Su repositorio de Amazon ECR debe residir en la misma AWS región que la cuenta que llama al servicio. La imagen del contenedor Cuenta de AWS puede ser propiedad de otra persona, siempre que el repositorio de imágenes de origen proporcione los permisos adecuados. Para obtener más información, consulte [Políticas de acceso multicuenta a Amazon ECR](permissions-ecr.md#permissions-cross-account).

Le recomendamos que defina la imagen del contenedor de Amazon ECR URIs como parámetros de su flujo de trabajo para poder verificar el acceso antes de que comience la ejecución. También facilita la ejecución de un flujo de trabajo en una nueva región al cambiar el parámetro de región.

**nota**  
HealthOmics no admite contenedores ARM ni admite el acceso a repositorios públicos.

Para obtener información sobre la configuración de los permisos de IAM para acceder HealthOmics a Amazon ECR, consulte. [HealthOmics Permisos de recursos](permissions-resource.md)

**Topics**
+ [Sincronización con registros de contenedores de terceros](#ecr-pull-through)
+ [Consideraciones generales sobre las imágenes de contenedores de Amazon ECR](#ecr-considerations)
+ [Variables de entorno para los HealthOmics flujos de trabajo](#ecr-env-vars)
+ [Uso de Java en imágenes de contenedores de Amazon ECR](#ecr-java-considerations)
+ [Añadir entradas de tareas a una imagen de contenedor de Amazon ECR](#ecr-tasks)

## Sincronización con registros de contenedores de terceros
<a name="ecr-pull-through"></a>

Puede utilizar las reglas de caché de extracción de Amazon ECR para sincronizar los repositorios de un registro ascendente compatible con sus repositorios privados de Amazon ECR. Para obtener más información, consulte [Sincronizar un registro ascendente](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html) en la Guía del *usuario de Amazon ECR.*

La memoria caché extraíble crea automáticamente el repositorio de imágenes en su registro privado al crear la memoria caché y se sincroniza automáticamente con la imagen almacenada en caché cuando se producen cambios en la imagen original. 

HealthOmics admite la caché extraíble para los siguientes registros ascendentes: 
+ Amazon ECR Public
+ Registro de imágenes de contenedores de Kubernetes
+ Quay
+ Docker Hub 
+ Para Microsoft Azure Container Registry
+ GitHub Registro de contenedores 
+ GitLab Registro de contenedores 

HealthOmics no admite la extracción de caché para un repositorio privado upstream de Amazon ECR.

Entre las ventajas de utilizar la memoria caché de extracción de Amazon ECR se incluyen las siguientes:

1. Evita tener que migrar manualmente las imágenes del contenedor a Amazon ECR o sincronizar las actualizaciones del repositorio de terceros. 

1. Los flujos de trabajo acceden a las imágenes de contenedores sincronizadas de su repositorio privado, lo que resulta más fiable que descargar contenido en tiempo de ejecución desde un registro público.

1. Como las cachés de extracción de Amazon ECR utilizan una estructura de URI predecible, el HealthOmics servicio puede mapear automáticamente el URI privado de Amazon ECR con el URI del registro anterior. No es necesario que actualice ni sustituya los valores de URI en la definición del flujo de trabajo.

**Topics**
+ [Configuración de la memoria caché de extracción](#ecr-pull-through-configure)
+ [Asignaciones de registro](#ecr-pull-through-registry-mapping)
+ [Mapeos de imágenes](#ecr-pull-through-mapping-format)

### Configuración de la memoria caché de extracción
<a name="ecr-pull-through-configure"></a>

Amazon ECR proporciona un registro para usted Cuenta de AWS en cada región. Asegúrese de crear la configuración de Amazon ECR en la misma región en la que planea ejecutar el flujo de trabajo.

En las siguientes secciones se describen las tareas de configuración de la memoria caché extraíble.

**Topics**
+ [Cree una regla de extracción de caché](#create-ecr-ptc)
+ [Permisos de registro para el registro inicial](#reg-ecr-ptc)
+ [Plantillas de creación de repositorios](#repo-create-templates-ptc)
+ [Creación de un flujo de trabajo](#reg-mapping-ecr-ptc)

#### Cree una regla de extracción de caché
<a name="create-ecr-ptc"></a>

Cree una regla de caché de extracción de Amazon ECR para cada registro ascendente que contenga imágenes que desee almacenar en caché. Una regla especifica un mapeo entre un registro ascendente y el repositorio privado de Amazon ECR. 

En el caso de un registro previo que requiera autenticación, debe proporcionar sus credenciales mediante AWS Secrets Manager.

**nota**  
No modifique una regla de extracción de caché mientras una ejecución activa utilice el repositorio privado. La ejecución podría fallar o, lo que es más grave, provocar que tu canalización utilice imágenes inesperadas.

Para obtener más información, consulte [Creación de una regla de extracción de caché](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) en la *Guía del usuario de Amazon Elastic Container Registry*.

##### Cree una regla de extracción de caché mediante la consola
<a name="create-ecr-ptc-console"></a>

Para configurar la memoria caché de extracción, siga estos pasos con la consola Amazon ECR:

1. Abra la consola de Amazon ECR: https://console.aws.amazon.com /ecr

1. En el menú de la izquierda, en **Registro privado**, expanda **Características y configuración y**, a continuación, seleccione **Extraer** caché.

1. En la página **de extracción de caché**, selecciona **Añadir regla**.

1. **En el panel de **registro inicial**, selecciona el registro inicial para sincronizarlo con tu registro privado y, a continuación, selecciona Siguiente.**

1. Si el registro principal requiere autenticación, la consola abre una nueva página en la que puede especificar el secreto de SageMaker IA que contiene sus credenciales. Elija **Siguiente**.

1. En **Especificar espacios de nombres**, en el panel de espacios de **nombres de Cache**, elige si quieres crear los repositorios privados con un prefijo de repositorio específico o sin prefijo. **Si opta por usar un prefijo, especifique el nombre del prefijo en el prefijo del repositorio de caché.**

1. En el panel del espacio de **nombres de Upstream**, elija si desea extraer datos de los repositorios ascendentes con un prefijo de repositorio específico o sin prefijo. **Si opta por utilizar un prefijo, especifique el nombre del prefijo en el prefijo del repositorio de Upstream.**

   El panel de **ejemplos del espacio de nombres** muestra un ejemplo de solicitud de cambios, una URL anterior y la URL del repositorio de caché que se ha creado.

1. Elija **Siguiente**.

1. Revisa la configuración y selecciona **Crear para crear** la regla.

Para obtener más información, consulte [Crear una regla de extracción de memoria caché (consola AWS de administración)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console).

##### Cree una regla de extracción de caché mediante la CLI
<a name="create-ecr-ptc-cli"></a>

Utilice el **create-pull-through-cache-rule** comando Amazon ECR para crear una regla de extracción de caché. En el caso de los registros anteriores que requieren autenticación, almacene las credenciales en un secreto de Secrets Manager.

En las siguientes secciones se proporcionan ejemplos de cada registro ascendente compatible.

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

En el siguiente ejemplo se crea una regla de caché de extracción para el registro público de Amazon ECR. Especifica un prefijo de repositorio `ecr-public`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `ecr-public/upstream-repository-name`.

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

##### Para el registro de contenedores de Kubernetes
<a name="ecr-ptc-cli-kubernetes"></a>

En el siguiente ejemplo se crea una regla de extracción de caché para el registro público de Kubernetes. Especifica un prefijo de repositorio `kubernetes`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `kubernetes/upstream-repository-name`.

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

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

El siguiente ejemplo crea una regla de extracción de caché para el registro público de Quay. Especifica un prefijo de repositorio `quay`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `quay/upstream-repository-name`.

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

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

El siguiente ejemplo crea una regla de caché de extracción para el registro de Docker Hub. Especifica un prefijo de repositorio `docker-hub`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `docker-hub/upstream-repository-name`. Debe especificar el nombre de recurso de Amazon (ARN) completo del secreto que contiene las credenciales de 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
```

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

En el siguiente ejemplo, se crea una regla de extracción de caché para el GitHub Container Registry. Especifica un prefijo de repositorio `github`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `github/upstream-repository-name`. Debe especificar el nombre de recurso de Amazon (ARN) completo del secreto que contiene sus credenciales de 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
```

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

El siguiente ejemplo crea una regla de caché de extracción para el Microsoft Azure Container Registry. Especifica un prefijo de repositorio `azure`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `azure/upstream-repository-name`. Debe especificar el nombre de recurso de Amazon (ARN) completo del secreto que contiene las credenciales de 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
```

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

En el siguiente ejemplo, se crea una regla de extracción de caché para el GitLab Container Registry. Especifica un prefijo de repositorio `gitlab`, lo que da como resultado que cada repositorio se cree mediante la regla de caché de extracción para tener el esquema de nomenclatura de `gitlab/upstream-repository-name`. Debe especificar el nombre de recurso de Amazon (ARN) completo del secreto que contiene sus credenciales de 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
```

Para obtener más información, consulte [Crear una regla de extracción de caché (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) en la *Guía del usuario de Amazon ECR.*

Puede usar el comando **get-run-task** CLI para recuperar información sobre la imagen del contenedor utilizada para una tarea específica:

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

El resultado incluye la siguiente información sobre la imagen del contenedor:

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

#### Permisos de registro para el registro inicial
<a name="reg-ecr-ptc"></a>

Utilice los permisos de registro HealthOmics para poder utilizar la caché de extracción y extraer las imágenes del contenedor al registro privado de Amazon ECR. Añada una política de registro de Amazon ECR al registro que proporcione los contenedores utilizados en las ejecuciones. 

La siguiente política otorga permiso al HealthOmics servicio para crear repositorios con los prefijos de caché de extracción especificados e iniciar extracciones ascendentes en estos repositorios. 

1. En la consola Amazon ECR, abra el menú de la izquierda, en **Registro privado**, expanda **Permisos de registro** y, a continuación, seleccione **Generar declaración**.

1. En la parte superior derecha, selecciona JSON. Introduce una política similar a la siguiente:

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

------

#### Plantillas de creación de repositorios
<a name="repo-create-templates-ptc"></a>

Para utilizar el almacenamiento en caché mediante extracción HealthOmics, el repositorio de Amazon ECR debe tener una plantilla de creación de repositorios. La plantilla define los ajustes de configuración para cuando usted o Amazon ECR creen un repositorio privado para un registro principal. 

Cada plantilla contiene un prefijo de espacio de nombres de repositorio, que Amazon ECR utiliza para hacer coincidir los nuevos repositorios con una plantilla específica. Las plantillas especifican la configuración de todos los ajustes del repositorio, incluidas las políticas de acceso basadas en los recursos, la inmutabilidad de las etiquetas, el cifrado y las políticas de ciclo de vida.

Para obtener más información, consulte las [plantillas de creación de repositorios](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html) en la *Guía del usuario de Amazon Elastic Container Registry*.

Cómo crear una plantilla de creación de repositorios:

1. En la consola de Amazon ECR, abra el menú de la izquierda, en **Registro privado**, expanda **Características y configuración y**, a continuación, seleccione **Plantillas de creación de repositorios**.

1. Seleccione **Crear plantilla**.

1. En **Detalles de la plantilla**, selecciona **Extraer caché**.

1. Elige si quieres aplicar esta plantilla a un prefijo específico o a todos los repositorios que no coincidan con otra plantilla.

   **Si eliges **un prefijo específico, introduce el valor del prefijo** del espacio de nombres en Prefix.** Especificó este prefijo al crear la regla de PTC.

1. Elija **Siguiente**.

1. En la página **Añadir configuración de creación de repositorios**, introduzca los permisos **del repositorio**. Utilice uno de los ejemplos de declaraciones de política o introduzca uno similar al ejemplo siguiente:

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

****  

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

------

1. Si lo desea, puede añadir la configuración del repositorio, como la política del ciclo de vida y las etiquetas. Amazon ECR aplica estas reglas a todas las imágenes de contenedores creadas para la caché de extracción que utilizan el prefijo especificado.

1. Elija **Siguiente**.

1. **Revise la configuración y seleccione Siguiente.**

#### Creación de un flujo de trabajo
<a name="reg-mapping-ecr-ptc"></a>

Al crear un nuevo flujo de trabajo o una nueva versión del flujo de trabajo, revise las asignaciones del registro y actualícelas si es necesario. Para obtener más información, consulte [Crear un flujo de trabajo privado](create-private-workflow.md).

### Asignaciones de registro
<a name="ecr-pull-through-registry-mapping"></a>

Defina las asignaciones de registro para mapear entre los prefijos de su registro privado de Amazon ECR y los nombres de registro anteriores.

Para obtener más información sobre las asignaciones de registro de Amazon ECR, consulte [Creación de una regla de extracción de caché en Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

El siguiente ejemplo muestra las asignaciones de registro a Docker Hub, Quay y Amazon ECR Public.

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

### Mapeos de imágenes
<a name="ecr-pull-through-mapping-format"></a>

Defina las asignaciones de imágenes para mapearlas entre los nombres de las imágenes tal como se definen en sus flujos de trabajo privados de Amazon ECR y los nombres de las imágenes en el registro principal.

Puede utilizar las asignaciones de imágenes con registros que admitan la extracción de memoria caché. También puedes usar mapeos de imágenes con registros anteriores en los que no se HealthOmics admite la extracción de memoria caché. Tienes que sincronizar manualmente el registro original con tu repositorio privado. 

Para obtener más información sobre las asignaciones de imágenes de Amazon ECR, consulte [Creación de una regla de extracción de caché en Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

El siguiente ejemplo muestra las asignaciones de imágenes privadas de Amazon ECR a una imagen genómica pública y a la imagen más reciente de 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",
        }
    ]
}
```

## Consideraciones generales sobre las imágenes de contenedores de Amazon ECR
<a name="ecr-considerations"></a>
+ Arquitectura

  HealthOmics admite contenedores x86\$164. Si su máquina local está basada en ARM, como Apple Mac, utilice un comando como el siguiente para crear una imagen de contenedor x86\$164: 

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ Punto de entrada y carcasa

  HealthOmics Los motores de flujo de trabajo inyectan scripts bash como una sustitución de comandos en las imágenes del contenedor utilizadas en las tareas del flujo de trabajo. Por lo tanto, las imágenes de los contenedores deben crearse sin un PUNTO DE ENTRADA específico, de modo que el shell bash sea el predeterminado. 
+ Rutas montadas

  Un sistema de archivos compartido se monta en las tareas del contenedor en /tmp. Se anularán todos los datos o herramientas integrados en la imagen del contenedor en esta ubicación.

  La definición del flujo de trabajo está disponible para las tareas mediante un montaje de solo lectura en /mnt/workflow.
+ Tamaño de imagen

  Consulte los tamaños máximos [HealthOmics cuotas de tamaño fijas en el flujo de trabajo](fixed-quotas.md#fixed-quotas-workflows) de imagen del contenedor.

## Variables de entorno para los HealthOmics flujos de trabajo
<a name="ecr-env-vars"></a>

HealthOmics proporciona variables de entorno que contienen información sobre el flujo de trabajo que se ejecuta en el contenedor. Puede utilizar los valores de estas variables en la lógica de las tareas del flujo de trabajo.

Todas las variables HealthOmics del flujo de trabajo comienzan con el `AWS_WORKFLOW_` prefijo. Este prefijo es un prefijo de variable de entorno protegido. No utilice este prefijo para sus propias variables en los contenedores de flujo de trabajo. 

HealthOmics proporciona las siguientes variables de entorno de flujo de trabajo:

**AWS\$1REGION**  
Esta variable es la región en la que se ejecuta el contenedor.

**AWS\$1WORKFLOW\$1EJECUTAR**  
Esta variable es el nombre de la ejecución actual.

**AWS\$1WORKFLOW\$1RUN\$1ID**  
Esta variable es el identificador de ejecución de la ejecución actual.

**AWS\$1WORKFLOW\$1RUN\$1UUID**  
Esta variable es el UUID de ejecución de la ejecución actual.

**AWS\$1WORKFLOW\$1TAREA**  
Esta variable es el nombre de la tarea actual.

**AWS\$1WORKFLOW\$1TASK\$1ID**  
Esta variable es el identificador de la tarea actual.

**AWS\$1WORKFLOW\$1TASK\$1UUID**  
Esta variable es el UUID de la tarea actual.

El siguiente ejemplo muestra los valores típicos de cada variable de entorno:

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

## Uso de Java en imágenes de contenedores de Amazon ECR
<a name="ecr-java-considerations"></a>

Si una tarea de flujo de trabajo utiliza una aplicación Java como GATK, tenga en cuenta los siguientes requisitos de memoria para el contenedor:
+ Las aplicaciones Java utilizan memoria de pila y memoria de pila. De forma predeterminada, la memoria de pila máxima es un porcentaje de la memoria total disponible en el contenedor. Este valor predeterminado depende de la distribución específica de la JVM y de la versión de la JVM, así que consulte la documentación correspondiente a su JVM o establezca explícitamente el máximo de memoria de pila mediante las opciones de la línea de comandos de Java (como `-Xmx`). 
+ No establezcas que la memoria de pila máxima sea el 100% de la asignación de memoria del contenedor, ya que la pila de JVM también requiere memoria. También se necesita memoria para el recolector de elementos no utilizados de la JVM y para cualquier otro proceso del sistema operativo que se ejecute en el contenedor.
+ Algunas aplicaciones Java, como GATK, pueden utilizar invocaciones de métodos nativos u otras optimizaciones, como los archivos de mapeo de memoria. Estas técnicas requieren asignaciones de memoria que se realicen «fuera del montón», que no están controladas por el parámetro de pila máxima de la JVM. 

  Si sabe (o sospecha) que su aplicación Java asigna memoria fuera del montón, asegúrese de que la asignación de la memoria a las tareas incluya los requisitos de memoria fuera del montón.

  Si estas asignaciones fuera del montón provocan que el contenedor se quede sin memoria, normalmente no aparecerá ningún **OutOfMemory** error de Java, ya que la JVM no controla esta memoria. 

## Añadir entradas de tareas a una imagen de contenedor de Amazon ECR
<a name="ecr-tasks"></a>

Añada todos los ejecutables, bibliotecas y scripts necesarios para ejecutar una tarea de flujo de trabajo a la imagen de Amazon ECR que se utiliza para ejecutar la tarea. 

Se recomienda evitar el uso de scripts, archivos binarios y bibliotecas externos a la imagen del contenedor de tareas. Esto es especialmente importante cuando se utilizan `nf-core` flujos de trabajo que utilizan un `bin` directorio como parte del paquete de flujo de trabajo. Si bien este directorio estará disponible para la tarea de flujo de trabajo, se monta como un directorio de solo lectura. Los recursos necesarios de este directorio deben copiarse en la imagen de la tarea y estar disponibles en tiempo de ejecución o al crear la imagen del contenedor utilizada para la tarea. 

Consulte [HealthOmics cuotas de tamaño fijas en el flujo de trabajo](fixed-quotas.md#fixed-quotas-workflows) el tamaño máximo de la imagen del contenedor que HealthOmics admite.

# HealthOmics Archivos README de flujo de trabajo
<a name="workflows-readme"></a>

Puede cargar un archivo README.md que contenga instrucciones, diagramas e información esencial para su flujo de trabajo. Cada versión del flujo de trabajo admite un archivo README, que puede actualizar en cualquier momento.

**Los requisitos de README incluyen:**
+ El archivo README debe estar en formato markdown (.md)
+ Tamaño máximo de archivo: 500 KiB

**Topics**
+ [Utilice un archivo README existente](#workflows-add-readme)
+ [Condiciones de renderizado](#workflows-rendering-readme)

## Utilice un archivo README existente
<a name="workflows-add-readme"></a>

READMEs los archivos exportados desde los repositorios de Git contienen enlaces relativos que normalmente no funcionan fuera del repositorio. HealthOmics La integración de Git los convierte automáticamente en enlaces absolutos para una representación adecuada en la consola, lo que elimina la necesidad de actualizar manualmente las URL. 

En el caso de READMEs importar desde Amazon S3 o unidades locales, las imágenes y los enlaces deben ser públicas URLs o tener sus rutas relativas actualizadas para que se representen correctamente.

**nota**  
Las imágenes deben estar alojadas públicamente para poder mostrarse en la HealthOmics consola. Las imágenes almacenadas en GitHub Enterprise Server GitLab Self-Managed los repositorios no se pueden renderizar.

## Condiciones de renderizado
<a name="workflows-rendering-readme"></a>

La HealthOmics consola interpola imágenes y enlaces de acceso público mediante rutas absolutas. Para renderizar URLs desde repositorios privados, el usuario debe tener acceso al repositorio. Nuestros GitHub Enterprise Server GitLab Self-Managed repositorios, que utilizan dominios personalizados, HealthOmics no pueden resolver los enlaces relativos ni renderizar las imágenes almacenadas en estos repositorios privados.

En la siguiente tabla se muestran los elementos de marcado compatibles con la vista README de la AWS consola.


| Elemento | AWS consola | 
| --- | --- | 
| Alertas | Sí, pero sin iconos | 
| Insignias | Sí | 
| Formato de texto básico | Sí | 
| [Bloques de código](https://www.markdownguide.org/basic-syntax/#code-blocks) | Sí, pero no tiene la funcionalidad de [resaltar la sintaxis](https://www.markdownguide.org/extended-syntax/#syntax-highlighting) ni de copiar  | 
| Secciones plegables | Sí | 
| [Encabezados](https://www.markdownguide.org/basic-syntax/#headings) | Sí | 
| [Formatos de imagen](https://www.markdownguide.org/basic-syntax/#images-1) | Sí | 
| [Imagen (en la que se puede hacer clic)](https://www.markdownguide.org/basic-syntax/#linking-images) | Sí | 
| [Saltos de línea](https://www.markdownguide.org/basic-syntax/#line-breaks) | Sí | 
| Diagrama de sirena | Solo puede abrir un gráfico, mover la posición del gráfico y copiar código | 
| Cuotas | Sí | 
| [https://www.markdownguide.org/extended-syntax/#subscript](https://www.markdownguide.org/extended-syntax/#subscript) | Sí | 
| [Tablas](https://www.markdownguide.org/extended-syntax/#tables) | Sí, pero no admite la alineación del texto | 
| Alineación de texto | Sí | 

### Uso de imagen y enlace URLs
<a name="workflows-urls-readme"></a>

En función del proveedor de fuentes, estructura tu base URLs para las páginas e imágenes en los siguientes formatos.
+ `{username}`: El nombre de usuario en el que está alojado el repositorio.
+ `{repo}`: el nombre del repositorio.
+ `{ref}`: La referencia de origen (rama, etiqueta e ID de confirmación). 
+ `{path}`: la ruta del archivo a la página o imagen del repositorio. 


| Proveedor de fuentes | URL de la página | URL de la imagen | 
| --- | --- | --- | 
| 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, y Bitbucket admiten tanto páginas como imágenes URLs que enlazan a un repositorio público. En la siguiente tabla, se muestra la compatibilidad de cada proveedor de fuentes con la representación de imágenes y enlaces URLs en repositorios privados.


| Soporte para repositorios privados | Proveedor de fuentes | URL de la página | URL de la imagen | 
| --- | --- | --- | --- | 
| GitHub | Solo con acceso al repositorio | No | 
| GitLab | Solo con acceso al repositorio | No | 
| Bitbucket | Solo con acceso al repositorio | No | 

# Solicitud de licencias de Sentieon para flujos de trabajo privados
<a name="private-workflows-subscribe"></a>

Si su flujo de trabajo privado utiliza el software Sentieon, necesitará una licencia de Senieon. Siga estos pasos para solicitar y configurar una licencia para el software Sentieon:
+ Solicite una licencia de Sentieon 
  + Envíe un correo electrónico al grupo de soporte de Sentieon (support@sentieon.com) para solicitar una licencia de software.
    + Introduce tu AWS seudónimo de Canonical en el correo electrónico.
    + [Sigue estas instrucciones para encontrar tu seudónimo de AWS Canonical.](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)
+ Actualiza tu rol HealthOmics de servicio para concederle acceso al proxy del servidor de licencias de Sentieon y al depósito Omics de Sentieon en tu región. El siguiente ejemplo permite el acceso a. `us-east-1` Si es necesario, sustituya este texto por su región.

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

------
+ Genere un caso de AWS soporte para acceder al proxy del servidor de licencias de Sentieon. 
  + Para crear un caso de soporte, vaya a [support.console.aws.amazon.com](https://support.console.aws.amazon.com).
  + Indique su región y su Cuenta de AWS región en el caso de soporte. Su cuenta se añade a la lista de permitidos para el proxy del servidor de licencias.
+ Cree su flujo de trabajo privado utilizando el contenedor Sentieon y el script de licencia Sentieon.
  + Para obtener instrucciones adicionales sobre el uso de las herramientas de Sentieon en flujos de trabajo privados, consulte [Sentieon-Amazon-Omics](https://github.com/Sentieon/sentieon-amazon-omics) en. GitHub
+ La versión 202112.07 y superior del software Sentieon son compatibles con el servidor proxy de licencias. HealthOmics Para utilizar las versiones del software Sentieon anteriores a la 202112.07, póngase en contacto con el servicio de asistencia de Sentieon.

# Lentes de flujo de trabajo en HealthOmics
<a name="workflows-linter"></a>

Tras crear un flujo de trabajo, le recomendamos que ejecute un filtro en el flujo de trabajo antes de iniciar la primera ejecución. El linter detecta errores que pueden provocar un error en la ejecución. 

En el caso de WDL, ejecuta HealthOmics automáticamente un linter al crear el flujo de trabajo. El resultado del linter está disponible en el `statusMessage` campo de la respuesta. **get-workflow** Utilice el siguiente comando CLI para recuperar la salida de estado (utilice el ID de flujo de trabajo del flujo de trabajo de WDL que creó): 

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

HealthOmics proporciona linters que puede ejecutar en la definición del flujo de trabajo antes de crearlo. Ejecuta estos linters en las canalizaciones existentes a las que vayas a migrar. HealthOmics
+ **WDL**— Una imagen pública de Amazon ECR para ejecutar un linter de [WDL](https://gallery.ecr.aws/aws-genomics/healthomics-linter).
+ **Nextflow**— Una imagen pública de Amazon ECR para ejecutar [las reglas de Linter para]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow) Nextflow. Puede acceder al código fuente de este linter desde. [GitHub](https://github.com/awslabs/linter-rules-for-nextflow)
+ **CWL**— no disponible

# HealthOmics operaciones de flujo de trabajo
<a name="creating-private-workflows"></a>

Para crear un flujo de trabajo privado, necesitas:
+  **Workflow definition file:**Un archivo de definición de flujo de trabajo escrito en WDLNextflow, oCWL. La definición del flujo de trabajo especifica las entradas y salidas de las ejecuciones que utilizan el flujo de trabajo. También incluye especificaciones para las ejecuciones y tareas de ejecución del flujo de trabajo, incluidos los requisitos de procesamiento y memoria. El archivo de definición del flujo de trabajo debe estar en `.zip` formato. Para obtener más información, consulte [Archivos de definición de flujo](workflow-definition-files.md) de trabajo en HealthOmics.
  + Puede usar [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) para crear y validar sus archivos de definición de flujo de trabajo en WDL, Nextflow y CWL. Para obtener más información, consulte [Ejemplos de instrucciones para Amazon Q CLI](getting-started.md#omics-q-prompts) y el tutorial sobre [HealthOmics IA generativa de Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) en. GitHub
+  **(Optional) Parameter template file:**Un archivo de plantilla de parámetros escrito en. JSON Cree el archivo para definir los parámetros de ejecución o HealthOmics genere la plantilla de parámetros automáticamente. Para obtener más información, consulte [Archivos de plantillas de parámetros para HealthOmics flujos de trabajo](parameter-templates.md). 
+ **Amazon ECR container images:**Cree repositorios privados de Amazon ECR para cada contenedor utilizado en el flujo de trabajo. Cree imágenes de contenedores para el flujo de trabajo y guárdelas en un repositorio privado, o sincronice el contenido de un registro anterior compatible con su repositorio privado de ECR. 
+  **(Optional) Sentieon licenses:**Solicita una Sentieon licencia para usar el Sentieon software en flujos de trabajo privados.

Para archivos de definición de flujo de trabajo de más de 4 MiB (comprimidos), elija una de estas opciones durante la creación del flujo de trabajo:
+ Cárguelo en una carpeta de Amazon Simple Storage Service y especifique la ubicación.
+ Cargue en un repositorio externo (tamaño máximo de 1 GiB) y especifique los detalles del repositorio.

Tras crear un flujo de trabajo, puede actualizar la siguiente información del flujo de trabajo con la `UpdateWorkflow` operación:
+ Name
+ Description (Descripción)
+ Tipo de almacenamiento predeterminado
+ Capacidad de almacenamiento predeterminada (con ID de flujo de trabajo)
+ Archivo README.md

Para cambiar otra información del flujo de trabajo, cree un nuevo flujo de trabajo o versión del flujo de trabajo.

Utilice el control de versiones del flujo de trabajo para organizar y estructurar sus flujos de trabajo. Las versiones también le ayudan a gestionar la introducción de actualizaciones iterativas del flujo de trabajo. Para obtener más información acerca de las versiones, consulte [Crear una versión de flujo de trabajo](workflows-version-create.md).

**Topics**
+ [Crear un flujo de trabajo privado](create-private-workflow.md)
+ [Actualizar un flujo de trabajo privado](update-private-workflow.md)
+ [Eliminar un flujo de trabajo privado](delete-private-workflow.md)
+ [Compruebe el estado del flujo de trabajo](using-get-workflow.md)
+ [Hacer referencia a los archivos del genoma a partir de una definición de flujo de trabajo](create-ref-files.md)

# Crear un flujo de trabajo privado
<a name="create-private-workflow"></a>

Cree un flujo de trabajo mediante la HealthOmics consola, los comandos AWS CLI o uno de los AWS SDKs.

**nota**  
No incluya ninguna información de identificación personal (PII) en los nombres de los flujos de trabajo. Estos nombres están visibles en CloudWatch los registros.

Al crear un flujo de trabajo, HealthOmics asigna un identificador único universal (UUID) al flujo de trabajo. El UUID del flujo de trabajo es un identificador único global (GUID) que es único en todos los flujos de trabajo y versiones del flujo de trabajo. Para la procedencia de los datos, le recomendamos que utilice el UUID del flujo de trabajo para identificar los flujos de trabajo de forma exclusiva.

Si sus tareas de flujo de trabajo utilizan herramientas externas (ejecutables, bibliotecas o scripts), cree estas herramientas en una imagen contenedora. Dispone de las siguientes opciones para alojar la imagen del contenedor:
+ Aloje la imagen del contenedor en el registro privado del ECR. Requisitos previos para esta opción:
  + Cree un repositorio privado de ECR o elija uno existente.
  + Configure la política de recursos de ECR como se describe en. [Permisos de Amazon ECR](permissions-ecr.md)
  + Sube la imagen de tu contenedor al repositorio privado. 
+ Sincronice la imagen del contenedor con el contenido de un registro de terceros compatible. Requisitos previos para esta opción:
  + En el registro privado del ECR, configure una regla de extracción de memoria caché para cada registro ascendente. Para obtener más información, consulte [Mapeos de imágenes](workflows-ecr.md#ecr-pull-through-mapping-format).
  + Configure la política de recursos de ECR como se describe en. [Permisos de Amazon ECR](permissions-ecr.md)
  + Cree plantillas de creación de repositorios. La plantilla define la configuración para cuando Amazon ECR cree el repositorio privado para un registro ascendente.
  + Cree asignaciones de prefijos para reasignar las referencias de las imágenes del contenedor en la definición del flujo de trabajo a los espacios de nombres de la caché de ECR.

Al crear un flujo de trabajo, se proporciona una definición de flujo de trabajo que contiene información sobre el flujo de trabajo, las ejecuciones y las tareas. HealthOmics puede recuperar la definición del flujo de trabajo como un archivo.zip almacenado localmente o en un bucket de Amazon S3, o desde un repositorio compatible basado en Git. 

**Topics**
+ [Crear un flujo de trabajo mediante la consola](#console-create-workflows)
+ [Creación de un flujo de trabajo mediante la CLI](#api-create-workflows)
+ [Crear un flujo de trabajo mediante un SDK](#sdk-create-workflows)

## Crear un flujo de trabajo mediante la consola
<a name="console-create-workflows"></a>

**Pasos para crear un flujo de trabajo**

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

1.  Si es necesario, abra el panel de navegación izquierdo (≡). Elija **Flujos de trabajo privados**.

1. En la página **Flujos de trabajo privados**, selecciona **Crear flujo de trabajo**.

1. En la página **Definir flujo** de trabajo, proporciona la siguiente información:

   1. **Nombre del flujo** de trabajo: nombre distintivo de este flujo de trabajo. Recomendamos configurar los nombres de los flujos de trabajo para organizar las ejecuciones en la AWS HealthOmics consola y en CloudWatch los registros.

   1. **Descripción** (opcional): descripción de este flujo de trabajo.

1. En el panel **de definición del flujo** de trabajo, proporcione la siguiente información:

   1. **Idioma del flujo** de trabajo (opcional): seleccione el idioma de especificación del flujo de trabajo. De lo contrario, HealthOmics determina el idioma a partir de la definición del flujo de trabajo.

   1. Para **la fuente de definición de flujo** de trabajo, elija importar la carpeta de definición desde un repositorio basado en Git, una ubicación de Amazon S3 o desde una unidad local.

      1. Para **importar desde un servicio de repositorio**:
**nota**  
HealthOmics admite repositorios públicos y privados paraGitHub,GitLab, BitbucketGitHub self-managed,GitLab self-managed.

         1. Elija una **conexión** para conectar sus AWS recursos al repositorio externo. Para crear una conexión, consulte[Conéctese con repositorios de código externos](setting-up-new.md#setting-up-omics-repository).
**nota**  
Los clientes de la TLV región deben crear una conexión en la región IAD (us-east-1) para crear un flujo de trabajo. 

         1. En ID de **repositorio completo, introduce tu ID** de repositorio como nombre de usuario/nombre de repositorio. Comprueba que tienes acceso a los archivos de este repositorio.

         1. En **Referencia de origen** (opcional), introduce una referencia de origen del repositorio (rama, etiqueta o ID de confirmación). HealthOmics usa la rama predeterminada si no se especifica ninguna referencia a la fuente.

         1. En **Excluir patrones de archivos**, introduzca los patrones de archivo para excluir carpetas, archivos o extensiones específicos. Esto ayuda a administrar el tamaño de los datos al importar archivos del repositorio. Hay un máximo de 50 patrones y los patrones deben seguir la sintaxis del [patrón global](https://fossil-scm.org/home/doc/tip/www/globs.md). Por ejemplo: 

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. Para **seleccionar la carpeta de definiciones de S3**:

         1. Introduzca la ubicación de Amazon S3 que contiene la carpeta comprimida de definiciones de flujos de trabajo. El bucket de Amazon S3 debe estar en la misma región que el flujo de trabajo.

         1. Si su cuenta no es propietaria del depósito de Amazon S3, introduzca el ID de AWS cuenta del propietario del depósito en el ID de **cuenta del propietario del depósito de S3**. Esta información es necesaria para HealthOmics poder verificar la propiedad del bucket.

      1. Para **seleccionar la carpeta de definiciones de una fuente local**:

         1. Introduzca la ubicación de la unidad local de la carpeta comprimida de definiciones de flujo de trabajo.

   1. **Ruta principal del archivo de definición del flujo** de trabajo (opcional): introduzca la ruta del archivo desde la carpeta o el repositorio de definiciones de flujo de trabajo comprimido hasta el `main` archivo. Este parámetro no es necesario si solo hay un archivo en la carpeta de definición del flujo de trabajo o si el archivo principal se denomina «principal».

1. En el panel del **archivo README** (opcional), seleccione la **fuente del archivo README** y proporcione la siguiente información:
   + Para **Importar desde un servicio de repositorio**, en la **ruta del archivo README**, introduzca la ruta al archivo README del repositorio.
   + En **Seleccione un archivo de S3**, en el **archivo README de S3**, introduzca el URI de Amazon S3 para el archivo README.
   + En **Seleccionar un archivo de una fuente local**: en **README (opcional)**, **elija Elegir archivo para seleccionar el archivo** marcado (.md) que desea cargar.

1. En el panel de **configuración del almacenamiento de ejecución predeterminado**, proporciona el tipo de almacenamiento de ejecución predeterminado y la capacidad para las ejecuciones que utilizan este flujo de trabajo:

   1. **Tipo de almacenamiento de ejecución**: elija si desea utilizar el almacenamiento estático o dinámico como predeterminado para el almacenamiento de ejecución temporal. El valor predeterminado es el almacenamiento estático.

   1. **Capacidad de almacenamiento de ejecución** (opcional): para el tipo de almacenamiento de ejecución estático, puede introducir la cantidad predeterminada de almacenamiento de ejecución necesaria para este flujo de trabajo. El valor predeterminado de este parámetro es 1200 GiB. Puede anular estos valores predeterminados al iniciar una ejecución.

1. **Etiquetas** (opcional): puedes asociar hasta 50 etiquetas a este flujo de trabajo.

1. Elija **Siguiente**.

1. En la página **Añadir parámetros de flujo** de trabajo (opcional), seleccione la **fuente de parámetros**:

   1. Para **analizar desde un archivo de definición de flujo** de trabajo, HealthOmics analizará automáticamente los parámetros del flujo de trabajo del archivo de definición del flujo de trabajo.

   1. Para **Proporcionar una plantilla de parámetros desde el repositorio de Git**, usa la ruta al archivo de plantillas de parámetros de tu repositorio.

   1. Para **seleccionar un archivo JSON de una fuente local**, sube un JSON archivo de una fuente local que especifique los parámetros.

   1. En **Introducir manualmente los parámetros del flujo** de trabajo, introduzca manualmente los nombres y las descripciones de los parámetros.

1. En el panel de **vista previa de los parámetros**, puede revisar o cambiar los parámetros de esta versión del flujo de trabajo. Si restaura el JSON archivo, perderá los cambios locales que haya realizado.

1. Elija **Siguiente**.

1. En la página de **reasignación de URI del contenedor**, en el panel **Reglas de mapeo**, puede definir las reglas de mapeo de URI para su flujo de trabajo.

   En **Fuente del archivo de mapeo**, selecciona una de las siguientes opciones:
   + **Ninguna**: no se requieren reglas de mapeo.
   + **Seleccione el archivo JSON de S3**: especifique la ubicación en S3 para el archivo de mapeo. 
   + **Seleccione el archivo JSON de una fuente local**: especifique la ubicación del archivo de mapeo en su dispositivo local.
   + **Introduzca los mapeos manualmente****: introduzca los mapeos de registro y los mapeos de imágenes en el panel de mapeos.**

1.  La consola **muestra** el panel de mapeos. Si elige un archivo fuente de mapeo, la consola muestra los valores del archivo.

   1. En **las asignaciones del registro**, puede editar las asignaciones o añadir asignaciones (máximo 20 asignaciones del registro).

      Cada mapeo de registro contiene los siguientes campos:
      + **URL del registro ascendente**: el URI del registro ascendente.
      + **Prefijo del repositorio ECR: el prefijo** del repositorio que se utilizará en el repositorio privado de Amazon ECR.
      + (Opcional) Prefijo del **repositorio ascendente: el prefijo** del repositorio en el registro ascendente.
      + (Opcional) ID de **cuenta ECR: ID** de cuenta de la cuenta propietaria de la imagen del contenedor ascendente.

   1. En los **mapeos de imágenes**, puede editar los mapeos de imágenes o añadir mapeos (máximo 100 mapeos de imágenes).

      Cada mapeo de imágenes contiene los siguientes campos:
      + **Imagen de origen**: especifica el URI de la imagen de origen en el registro original.
      + **Imagen de destino**: especifica el URI de la imagen correspondiente en el registro privado de Amazon ECR.

1. Elija **Siguiente**.

1. Revise la configuración del flujo de trabajo y, a continuación, seleccione **Crear flujo de trabajo**.

## Creación de un flujo de trabajo mediante la CLI
<a name="api-create-workflows"></a>

Si los archivos de flujo de trabajo y el archivo de plantilla de parámetros están en su máquina local, puede crear un flujo de trabajo mediante el siguiente comando CLI. 

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

La `create-workflow` operación devuelve la siguiente respuesta:

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

### Parámetros opcionales que se deben usar al crear un flujo de trabajo
<a name="other-create-parameters"></a>

Puede especificar cualquiera de los parámetros opcionales al crear un flujo de trabajo. Para obtener información sobre la sintaxis, consulte [CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)la referencia de la HealthOmics API de AWS. 

**Topics**
+ [Especifique la ubicación de Amazon S3 de la definición del flujo de trabajo](#create-defn-uri-parameter)
+ [Usa la definición de flujo de trabajo de un repositorio basado en Git](#create-defn-uri-git)
+ [Especifique un archivo readme](#specify-readme-file)
+ [**main**Especifique el archivo de definición](#create-main-parameter)
+ [Especifique el tipo de almacenamiento de ejecución](#create-run-storage-parameter)
+ [Especifique la configuración de la GPU](#create-accelerator-parameter)
+ [Configure los parámetros de mapeo de la memoria caché extraíble](#create-prefix-mapping-parameters)

#### Especifique la ubicación de Amazon S3 de la definición del flujo de trabajo
<a name="create-defn-uri-parameter"></a>

Si el archivo de definición de flujo de trabajo se encuentra en una carpeta de Amazon S3, especifique la ubicación mediante el `definition-uri` parámetro, como se muestra en el siguiente ejemplo. Si su cuenta no es propietaria del bucket de Amazon S3, proporcione el Cuenta de AWS ID del propietario.

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

#### Usa la definición de flujo de trabajo de un repositorio basado en Git
<a name="create-defn-uri-git"></a>

Para usar la definición de flujo de trabajo de un repositorio compatible basado en Git, usa el `definition-repository` parámetro en tu solicitud. No proporciones ningún otro `definition` parámetro, ya que una solicitud falla si incluye más de una fuente de entrada.

El `definition-respository` parámetro contiene los siguientes campos:
+ **connectionArn**— ARN de la conexión de código que conecta los recursos de AWS al repositorio externo.
+ **fullRepositoryId**— Introduzca el ID del repositorio como`owner-name/repo-name`. Compruebe que tiene acceso a los archivos de este repositorio.
+ **sourceReference**(Opcional): introduzca un tipo de referencia de repositorio (BRANCH, TAG o COMMIT) y un valor.

  HealthOmics usa la última confirmación de la rama predeterminada si no especificas una referencia de origen.
+ **excludeFilePatterns**(Opcional): introduce los patrones de los archivos para excluir carpetas, archivos o extensiones específicos. Esto ayuda a administrar el tamaño de los datos al importar archivos del repositorio. Proporcione un máximo de 50 patrones. Los patrones deben seguir la sintaxis del patrón [global.](https://fossil-scm.org/home/doc/tip/www/globs.md) Por ejemplo:
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Al especificar la definición del flujo de trabajo desde un repositorio basado en Git, utilícela `parameter-template-path` para especificar el archivo de plantilla de parámetros. Si no proporciona este parámetro, HealthOmics crea el flujo de trabajo sin una plantilla de parámetros.

El siguiente ejemplo muestra los parámetros relacionados con el contenido de un repositorio privado basado en 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" \
```

Para ver más ejemplos, consulte la entrada del blog [Cómo crear HealthOmics flujos de trabajo de AWS a partir del contenido de Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git).

#### Especifique un archivo readme
<a name="specify-readme-file"></a>

Puede especificar la ubicación del archivo README mediante uno de los siguientes parámetros:
+ **readme-markdown**— Entrada de cadena o un archivo en su máquina local. 
+ **readme-uri**— El URI de un archivo almacenado en S3. 
+ **readme-path **— La ruta al archivo README del repositorio. 

**Utilice readme-path solo junto con definition-respository.** Si no especificas ningún parámetro README, HealthOmics importa el archivo README.md de nivel raíz en el repositorio (si existe).

Los siguientes ejemplos muestran cómo especificar la ubicación del archivo README mediante readme-path y 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"
```

Para obtener más información, consulte [HealthOmics Archivos README de flujo de trabajo](workflows-readme.md).

#### **main**Especifique el archivo de definición
<a name="create-main-parameter"></a>

Si incluye varios archivos de definición del flujo de trabajo, utilice el `main` parámetro para especificar el archivo de definición principal del flujo de trabajo.

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

#### Especifique el tipo de almacenamiento de ejecución
<a name="create-run-storage-parameter"></a>

Puede especificar el tipo de almacenamiento de ejecución predeterminado (DINÁMICO o ESTÁTICO) y la capacidad de almacenamiento de ejecución (necesaria para el almacenamiento estático). Para obtener más información sobre los tipos de almacenamiento de ejecución, consulte[Ejecute tipos de almacenamiento en HealthOmics flujos de trabajo](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  \
```

#### Especifique la configuración de la GPU
<a name="create-accelerator-parameter"></a>

Usa el parámetro accelerators para crear un flujo de trabajo que se ejecute en una instancia de procesamiento acelerado. En el siguiente ejemplo, se muestra cómo utilizar el parámetro. `accelerators` La configuración de la GPU se especifica en la definición del flujo de trabajo. Consulte [Instancias de computación acelerada](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
```

#### Configure los parámetros de mapeo de la memoria caché extraíble
<a name="create-prefix-mapping-parameters"></a>

Si utiliza la función de mapeo de caché extraíble de Amazon ECR, puede anular los mapeos predeterminados. Para obtener más información sobre los parámetros de configuración del contenedor, consulte. [Imágenes de contenedores para flujos de trabajo privados](workflows-ecr.md)

En el siguiente ejemplo, el archivo `mappings.json` contiene este contenido:

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

Especifique los parámetros de mapeo en el comando create-workflow:

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

También puede especificar la ubicación en S3 del archivo de parámetros de mapeo:

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

## Crear un flujo de trabajo mediante un SDK
<a name="sdk-create-workflows"></a>

Puede crear un flujo de trabajo mediante uno de los SDKs. El siguiente ejemplo muestra cómo crear un flujo de trabajo mediante el SDK de Python.

```
import boto3

omics = boto3.client('omics')

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

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

# Actualizar un flujo de trabajo privado
<a name="update-private-workflow"></a>

Puede actualizar un flujo de trabajo mediante la HealthOmics consola, los comandos AWS CLI o uno de los AWS SDKs.

**nota**  
No incluya ninguna información de identificación personal (PII) en los nombres de los flujos de trabajo. Estos nombres están visibles en CloudWatch los registros.

**Topics**
+ [Actualización de un flujo de trabajo mediante la consola](#console-update-workflows)
+ [Actualización de un flujo de trabajo mediante la CLI](#api-update-workflows)
+ [Actualizar un flujo de trabajo mediante un SDK](#sdk-update-workflows)

## Actualización de un flujo de trabajo mediante la consola
<a name="console-update-workflows"></a>

**Pasos para actualizar un flujo de trabajo**

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

1.  Si es necesario, abra el panel de navegación izquierdo (≡). Elija **Flujos de trabajo privados**.

1. En la página **Flujos de trabajo privados**, elija el flujo de trabajo que desee actualizar.

1. En la página **de flujo de trabajo**:
   + Si el flujo de trabajo tiene versiones, asegúrese de seleccionar la **versión predeterminada**.
   + Elija **Editar seleccionado** en la lista de **acciones**. 

1. En la página **Editar flujo** de trabajo, puede cambiar cualquiera de los siguientes valores:
   + **Nombre del flujo de trabajo**.
   + **Descripción del flujo** de trabajo.
   + El **tipo de almacenamiento de ejecución** predeterminado para el flujo de trabajo.
   + La **capacidad de almacenamiento de ejecución** predeterminada (si el tipo de almacenamiento de ejecución es almacenamiento estático). Para obtener más información sobre la configuración de almacenamiento de ejecución predeterminada, consulte[Crear un flujo de trabajo mediante la consola](create-private-workflow.md#console-create-workflows).

1. Seleccione **Guardar cambios** para aplicar los cambios.

## Actualización de un flujo de trabajo mediante la CLI
<a name="api-update-workflows"></a>

Como se muestra en el siguiente ejemplo, puede actualizar el nombre y la descripción del flujo de trabajo. También puede cambiar el tipo de almacenamiento de ejecución predeterminado (ESTÁTICO o DINÁMICO) y la capacidad de almacenamiento de ejecución (para el tipo de almacenamiento estático). Para obtener más información sobre los tipos de almacenamiento de ejecución, consulte[Ejecute tipos de almacenamiento en HealthOmics flujos de trabajo](workflows-run-types.md).

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

No recibes una respuesta a la `update-workflow` solicitud.

## Actualizar un flujo de trabajo mediante un SDK
<a name="sdk-update-workflows"></a>

Puede actualizar un flujo de trabajo mediante uno de los SDKs.

El siguiente ejemplo muestra cómo actualizar un flujo de trabajo mediante el SDK de Python.

```
import boto3

omics = boto3.client('omics')

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

# Eliminar un flujo de trabajo privado
<a name="delete-private-workflow"></a>

Cuando ya no necesite un flujo de trabajo, puede eliminarlo mediante la HealthOmics consola, los comandos AWS CLI o uno de los AWS SDKs. Puede eliminar un flujo de trabajo que cumpla los siguientes criterios:
+ Su estado es ACTIVO o FALLIDO.
+ No tiene acciones activas. 
+ Has eliminado todas las versiones del flujo de trabajo.

La eliminación de un flujo de trabajo no afecta a las ejecuciones en curso que estén utilizando el flujo de trabajo.

**Topics**
+ [Eliminar un flujo de trabajo mediante la consola](#console-delete-workflows)
+ [Eliminar un flujo de trabajo mediante la CLI](#api-delete-workflows)
+ [Eliminar un flujo de trabajo mediante un SDK](#sdk-delete-workflows)

## Eliminar un flujo de trabajo mediante la consola
<a name="console-delete-workflows"></a>

**Para eliminar un flujo de trabajo**

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

1.  Si es necesario, abra el panel de navegación izquierdo (≡). Elija **Flujos de trabajo privados**.

1. En la página **Flujos de trabajo privados**, elija el flujo de trabajo que desee eliminar.

1. En la página **de flujo** de trabajo, elija **Eliminar lo seleccionado** en la lista de **acciones**.

1. En el modal **Eliminar flujo** de trabajo, introduce «confirmar» para confirmar la eliminación.

1. Elija **Eliminar**.

## Eliminar un flujo de trabajo mediante la CLI
<a name="api-delete-workflows"></a>

El siguiente ejemplo muestra cómo se puede utilizar el AWS CLI comando para eliminar un flujo de trabajo. Para ejecutar el ejemplo, sustituya el `workflow id` identificador por el ID del flujo de trabajo que desee eliminar. 

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

HealthOmics no envía una respuesta a la `delete-workflow` solicitud. 

## Eliminar un flujo de trabajo mediante un SDK
<a name="sdk-delete-workflows"></a>

Puede eliminar un flujo de trabajo mediante uno de los SDKs.

El siguiente ejemplo muestra cómo eliminar un flujo de trabajo mediante el SDK de Python.

```
import boto3

omics = boto3.client('omics')

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

# Compruebe el estado del flujo de trabajo
<a name="using-get-workflow"></a>

Tras crear el flujo de trabajo, puede verificar el estado y ver otros detalles del flujo de trabajo mediante **get-workflow**, como se muestra.

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

La respuesta incluye los detalles del flujo de trabajo, incluido el estado, como se muestra.

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

Puede iniciar una ejecución con este flujo de trabajo una vez que el estado pase a`ACTIVE`.

# Hacer referencia a los archivos del genoma a partir de una definición de flujo de trabajo
<a name="create-ref-files"></a>

Se puede hacer HealthOmics referencia a un objeto de almacén de referencia con un URI como el siguiente. Usa el tuyo propio `account ID` `reference store ID` y `reference ID` donde se indique.

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

Algunos flujos de trabajo requerirán tanto `SOURCE` los `INDEX` archivos como los del genoma de referencia. El URI anterior es la forma abreviada predeterminada y, de forma predeterminada, será el archivo FUENTE. Para especificar cualquiera de los archivos, puede utilizar el formulario URI largo, de la siguiente manera.

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

El uso de un conjunto de lecturas secuenciales tendría un patrón similar, como se muestra.

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

Algunos conjuntos de lecturas, como los basados en FASTQ, pueden contener lecturas emparejadas. En los siguientes ejemplos, se denominan SOURCE1 y SOURCE2. Los formatos como BAM y CRAM solo tendrán un SOURCE1 archivo. Algunos conjuntos de lectura contendrán archivos de índice, como archivos `bai` o`crai`. El URI anterior es la forma abreviada predeterminada y se utilizará de forma predeterminada en el SOURCE1 archivo. Para especificar el archivo o índice exacto, puede utilizar el formulario URI largo, de la siguiente manera.

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

El siguiente es un ejemplo de un archivo JSON de entrada que usa dos 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>"
}
```

Haga referencia al archivo JSON de entrada en el AWS CLI agregándolo `--inputs file://<input_file.json>` a su solicitud de **inicio y ejecución**. 