

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Spesifikasi definisi alur kerja alur berikutnya
<a name="workflow-definition-nextflow"></a>

HealthOmics mendukung DSL1 Nextflow dan. DSL2 Lihat perinciannya di [Dukungan versi Nextflow](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow DSL2 didasarkan pada bahasa pemrograman Groovy, sehingga parameternya dinamis dan pemaksaan tipe dimungkinkan menggunakan aturan yang sama seperti Groovy. Parameter dan nilai yang disediakan oleh input JSON tersedia di parameter (`params`) peta alur kerja.

**Topics**
+ [Gunakan plugin nf-schema dan nf-validation](#schema-and-validation-plugins-nextflow)
+ [Tentukan penyimpanan URIs](#storage-uris-nextflow)
+ [Arahan Nextflow](#workflow-nexflow-directives)
+ [Ekspor konten tugas](#exporting-task-content-nextflow)

## Gunakan plugin nf-schema dan nf-validation
<a name="schema-and-validation-plugins-nextflow"></a>

**catatan**  
Ringkasan HealthOmics dukungan untuk plugin:  
v22.04 - tidak ada dukungan untuk plugin
v23.10 — mendukung dan `nf-schema` `nf-validation`
v24.10 - mendukung `nf-schema`

HealthOmics menyediakan dukungan berikut untuk plugin Nextflow:
+ Untuk Nextflow v23.10, HealthOmics pra-instal plugin nf-validation @1 .1.1. 
+ Untuk Nextflow v23.10 dan yang lebih baru, HealthOmics pra-instal plugin nf-schema @2 .3.0.
+ Anda tidak dapat mengambil plugin tambahan selama menjalankan alur kerja. HealthOmics mengabaikan versi plugin lain yang Anda tentukan dalam `nextflow.config` file.
+ Untuk Nextflow v24 dan yang lebih tinggi, `nf-schema` adalah versi baru dari plugin yang tidak digunakan lagi. `nf-validation` Untuk informasi selengkapnya, lihat [skema nf di repositori](https://github.com/nextflow-io/nf-schema) Nextflow. GitHub

## Tentukan penyimpanan URIs
<a name="storage-uris-nextflow"></a>

Ketika Amazon S3 atau HealthOmics URI digunakan untuk membuat file atau objek jalur Nextflow, itu membuat objek yang cocok tersedia untuk alur kerja, selama akses baca diberikan. Penggunaan awalan atau direktori diizinkan untuk Amazon S3. URIs Sebagai contoh, lihat [Format parameter masukan Amazon S3](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics sebagian mendukung penggunaan pola glob di Amazon URIs S3 atau Storage HealthOmics . URIs Gunakan pola Glob dalam definisi alur kerja untuk pembuatan `path` atau `file` saluran. Untuk perilaku yang diharapkan dan kasus yang tepat, lihat[Nextflow Penanganan pola Glob di input Amazon S3](workflows-run-inputs.md#wd-nextflow-s3-formats).

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

Anda mengonfigurasi arahan Nextflow dalam file konfigurasi Nextflow atau definisi alur kerja. Daftar berikut menunjukkan urutan prioritas yang HealthOmics digunakan untuk menerapkan pengaturan konfigurasi, dari prioritas terendah hingga tertinggi:

1. Konfigurasi global dalam file konfigurasi.

1. Bagian tugas dari definisi alur kerja.

1. Selektor khusus tugas dalam file konfigurasi.

**Topics**
+ [Strategi coba lagi tugas menggunakan `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Upaya coba lagi tugas menggunakan `maxRetries`](#workflow-nexflow-task-retry)
+ [Menyisih dari tugas coba lagi menggunakan `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Durasi tugas menggunakan `time` direktif](#time-directive-nextflow)

### Strategi coba lagi tugas menggunakan `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Gunakan `errorStrategy` direktif untuk menentukan strategi kesalahan tugas. Secara default, ketika tugas kembali dengan indikasi kesalahan (status keluar bukan nol), tugas berhenti dan HealthOmics mengakhiri seluruh proses. Jika Anda menyetel `errorStrategy` ke`retry`, HealthOmics coba satu coba lagi tugas yang gagal. Untuk menambah jumlah percobaan ulang, lihat[Upaya coba lagi tugas menggunakan `maxRetries`](#workflow-nexflow-task-retry).

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

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

Untuk informasi tentang cara HealthOmics menangani percobaan ulang tugas selama proses, lihat[Tugas Mencoba Ulang](monitoring-runs.md#run-status-task-retries).

### Upaya coba lagi tugas menggunakan `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Secara default, HealthOmics tidak mencoba mencoba ulang tugas yang gagal, atau mencoba satu percobaan lagi jika Anda mengonfigurasi. `errorStrategy` Untuk meningkatkan jumlah percobaan ulang maksimum, atur `errorStrategy` ke `retry` dan konfigurasikan jumlah maksimum percobaan ulang menggunakan arahan`maxRetries`.

Contoh berikut menetapkan jumlah maksimum percobaan ulang ke 3 dalam konfigurasi global.

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

Contoh berikut menunjukkan cara mengatur `maxRetries` di bagian tugas definisi alur kerja.

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

Contoh berikut menunjukkan cara menentukan konfigurasi khusus tugas dalam file konfigurasi Nextflow, berdasarkan pemilih nama atau label.

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

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

### Menyisih dari tugas coba lagi menggunakan `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

Untuk Nextflow v23 dan v24, HealthOmics mendukung percobaan ulang tugas jika tugas gagal karena kesalahan layanan (kode status HTTP 5XX). Secara default, HealthOmics mencoba hingga dua percobaan ulang dari tugas yang gagal. 

Anda dapat mengonfigurasi `omicsRetryOn5xx` untuk memilih keluar dari percobaan ulang tugas untuk kesalahan layanan. Untuk informasi selengkapnya tentang coba lagi tugas HealthOmics, lihat[Tugas Mencoba Ulang](monitoring-runs.md#run-status-task-retries).

Contoh berikut mengkonfigurasi `omicsRetryOn5xx` dalam konfigurasi global untuk memilih keluar dari tugas coba lagi.

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

Contoh berikut menunjukkan cara mengkonfigurasi `omicsRetryOn5xx` di bagian tugas definisi alur kerja.

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

Contoh berikut menunjukkan cara menyetel `omicsRetryOn5xx` konfigurasi khusus tugas dalam file konfigurasi Nextflow, berdasarkan pemilih nama atau label.

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

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

### Durasi tugas menggunakan `time` direktif
<a name="time-directive-nextflow"></a>

HealthOmics menyediakan kuota yang dapat disesuaikan (lihat[HealthOmics kuota layanan](service-quotas.md)) untuk menentukan durasi maksimum untuk menjalankan. Untuk alur kerja Nextflow v23 dan v24, Anda juga dapat menentukan durasi tugas maksimum menggunakan direktif Nextflow. `time`

Selama pengembangan alur kerja baru, menyetel durasi tugas maksimum membantu Anda menangkap tugas runaway dan tugas yang berjalan lama. 

Untuk informasi selengkapnya tentang direktif waktu Nextflow, lihat direktif [waktu](https://www.nextflow.io/docs/latest/reference/process.html#process-time) di referensi Nextflow.

HealthOmics memberikan dukungan berikut untuk arahan waktu Nextflow:

1. HealthOmics mendukung granularitas 1 menit untuk arahan waktu. Anda dapat menentukan nilai antara 60 detik dan nilai durasi lari maksimum.

1. Jika Anda memasukkan nilai kurang dari 60, HealthOmics bulatkan hingga 60 detik. Untuk nilai di atas 60, HealthOmics bulatkan ke menit terdekat.

1. Jika alur kerja mendukung percobaan ulang untuk tugas, HealthOmics coba ulang tugas jika waktu habis.

1. Jika tugas habis waktu (atau waktu coba lagi terakhir habis), HealthOmics batalkan tugas. Operasi ini dapat memiliki durasi satu hingga dua menit.

1. Pada batas waktu tugas, HealthOmics menetapkan status run dan task menjadi gagal, dan membatalkan tugas lain dalam proses (untuk tugas dalam status Mulai, Pending, atau Running). HealthOmics mengekspor output dari tugas yang diselesaikan sebelum batas waktu ke lokasi output S3 yang Anda tentukan. 

1. Waktu yang dihabiskan tugas dalam status tertunda tidak dihitung terhadap durasi tugas.

1. Jika run adalah bagian dari grup run dan grup run habis lebih cepat dari pengatur waktu tugas, proses dan tugas akan beralih ke status gagal.

Tentukan durasi batas waktu menggunakan satu atau beberapa unit berikut:`ms`,,`s`, `m``h`, atau`d`.

Contoh berikut menunjukkan cara menentukan konfigurasi global dalam file konfigurasi Nextflow. Ini menetapkan batas waktu global 1 jam dan 30 menit.

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

Contoh berikut menunjukkan cara menentukan direktif waktu di bagian tugas definisi alur kerja. Contoh ini menetapkan batas waktu 3 hari, 5 jam, dan 4 menit. Nilai ini lebih diutamakan daripada nilai global dalam file konfigurasi, tetapi tidak diutamakan daripada arahan waktu khusus tugas untuk dalam file konfigurasi. `my_label`

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

Contoh berikut menunjukkan cara menentukan arahan waktu khusus tugas dalam file konfigurasi Nextflow, berdasarkan pemilih nama atau label. Contoh ini menetapkan nilai batas waktu tugas global 30 menit. Ini menetapkan nilai 2 jam untuk tugas `myTask` dan menetapkan nilai 3 jam untuk tugas dengan label`my_label`. Untuk tugas yang cocok dengan pemilih, nilai ini lebih diutamakan daripada nilai global dan nilai dalam definisi alur kerja.

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

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

## Ekspor konten tugas
<a name="exporting-task-content-nextflow"></a>

Untuk alur kerja yang ditulis dalam Nextflow, tentukan direktif **PublishDir** untuk mengekspor konten tugas ke bucket Amazon S3 keluaran Anda. Seperti yang ditunjukkan pada contoh berikut, atur nilai **publishDir** ke. `/mnt/workflow/pubdir` Untuk mengekspor file ke Amazon S3, file harus ada di direktori ini.

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