

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.

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