

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Criação de fluxos de trabalho privados em HealthOmics
<a name="workflows-setup"></a>

*Os fluxos de trabalho privados* dependem de uma variedade de recursos que você cria e configura antes de criar o fluxo de trabalho:
+ **Workflow definition file:**Um arquivo de definição de fluxo de trabalho escrito em WDLNextflow,, ouCWL. A definição do fluxo de trabalho especifica as entradas e saídas para execuções que usam o fluxo de trabalho. Também inclui especificações para as execuções e tarefas de execução do seu fluxo de trabalho, incluindo requisitos de computação e memória. O arquivo de definição do fluxo de trabalho deve estar no `.zip` formato. Para obter mais informações, consulte [Arquivos de definição de fluxo de trabalho](workflow-definition-files.md).
  + Você pode usar o [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) para criar e validar seus arquivos de definição de fluxo de trabalho em WDL, Nextflow e CWL. Para obter mais informações, consulte [Exemplos de solicitações para a Amazon Q CLI](getting-started.md#omics-q-prompts) e [HealthOmics o tutorial de IA generativa da Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) sobre. GitHub
+ **(Optional) Parameter template file:**Um arquivo de modelo de parâmetro escrito emJSON. Crie o arquivo para definir os parâmetros de execução ou HealthOmics gere o modelo de parâmetro para você. Para obter mais informações, consulte [Arquivos de modelo de parâmetros para HealthOmics fluxos de trabalho](parameter-templates.md).
+ **Amazon ECR container images:**Crie um repositório Amazon ECR privado para o fluxo de trabalho. Crie imagens de contêiner no repositório privado ou sincronize o conteúdo de um registro upstream compatível com seu repositório privado Amazon ECR.
+ **(Optional) Sentieon licenses:**Solicite uma Sentieon licença para usar o Sentieon software em fluxos de trabalho privados.

Opcionalmente, você pode executar um linter na definição do fluxo de trabalho antes ou depois de criar o fluxo de trabalho. O **linter** tópico descreve as impressoras disponíveis em HealthOmics.

**Topics**
+ [HealthOmics integração do fluxo de trabalho com repositórios baseados em Git](workflows-git-integration.md)
+ [Arquivos de definição de fluxo de trabalho em HealthOmics](workflow-definition-files.md)
+ [Arquivos de modelo de parâmetros para HealthOmics fluxos de trabalho](parameter-templates.md)
+ [Imagens de contêiner para fluxos de trabalho privados](workflows-ecr.md)
+ [HealthOmics Arquivos README do fluxo de trabalho](workflows-readme.md)
+ [Solicitando licenças Sentieon para fluxos de trabalho privados](private-workflows-subscribe.md)
+ [Impressoras de fluxo de trabalho em HealthOmics](workflows-linter.md)
+ [HealthOmics operações de fluxo de trabalho](creating-private-workflows.md)

# HealthOmics integração do fluxo de trabalho com repositórios baseados em Git
<a name="workflows-git-integration"></a>

Ao criar um fluxo de trabalho (ou uma versão do fluxo de trabalho), você fornece uma definição de fluxo de trabalho para especificar informações sobre o fluxo de trabalho, as execuções e as tarefas. HealthOmics pode recuperar a definição do fluxo de trabalho como um arquivo.zip (armazenado localmente ou em um bucket do Amazon S3) ou de um repositório compatível baseado em Git.

A HealthOmics integração com repositórios baseados em Git permite os seguintes recursos:
+ Criação direta de fluxo de trabalho a partir de instâncias públicas, privadas e autogerenciadas.
+ Integração de arquivos README do fluxo de trabalho e modelos de parâmetros de repositórios.
+ Support para GitHub, GitLab, e repositórios Bitbucket.

Ao usar um repositório baseado em Git, você evita as etapas manuais de baixar arquivos de definição de fluxo de trabalho e arquivos de modelo de parâmetros de entrada, criar um arquivo.zip e, em seguida, preparar o arquivo para o S3. Isso simplifica a criação do fluxo de trabalho para cenários como os exemplos a seguir:

1. Você quer começar rapidamente usando um fluxo de trabalho comum de código aberto, como nf-core. HealthOmicsrecupera automaticamente todos os arquivos de modelo de definição de fluxo de trabalho e parâmetros de entrada do repositório nf-core GitHub e usa esses arquivos para criar seu novo fluxo de trabalho.

1. Você está usando um fluxo de trabalho público do GitHub, e algumas novas atualizações são disponibilizadas. Você pode criar facilmente uma nova versão do HealthOmics fluxo de trabalho usando a definição atualizada do fluxo de trabalho GitHub como fonte. Os usuários do seu fluxo de trabalho podem escolher entre o fluxo de trabalho original ou a nova versão do fluxo de trabalho que você criou.

1. Sua equipe está criando um funil proprietário que não é público. Você mantém seu código em um repositório git privado e usa essa definição de fluxo de trabalho para seus HealthOmics fluxos de trabalho. A equipe atualiza a definição do fluxo de trabalho com frequência como parte de um ciclo de vida de desenvolvimento de fluxo de trabalho iterativo. Você pode criar facilmente novas versões do fluxo de trabalho, conforme necessário, em seu repositório privado.

**Topics**
+ [Repositórios baseados em Git compatíveis](#workflows-git-supported)
+ [Configurar conexões com repositórios de código externos](#workflows-git-connections)
+ [Acessando repositórios autogerenciados](#workflows-git-self-managed)
+ [Cotas relacionadas a repositórios de código externos](#workflows-git-quotas)
+ [Permissões obrigatórias do IAM](#workflows-git-permissions)

## Repositórios baseados em Git compatíveis
<a name="workflows-git-supported"></a>

HealthOmics oferece suporte a repositórios públicos e privados para os seguintes provedores baseados em Git:
+ GitHub 
+ GitLab 
+ Bitbucket 

HealthOmics oferece suporte a repositórios autogerenciados para os seguintes provedores baseados em Git:
+ GitHubEnterpriseServer 
+ GitLabSelfManaged 

HealthOmics suporta o uso de conexões entre contas para GitHub GitLab, e Bitbucket. Configure permissões compartilhadas por meio do AWS Resource Access Manager. Por exemplo, consulte [Conexões compartilhadas](https://docs.aws.amazon.com/codepipeline/latest/userguide/connections-shared.html) no *guia CodePipeline do usuário*.

## Configurar conexões com repositórios de código externos
<a name="workflows-git-connections"></a>

Conecte seus fluxos de trabalho a repositórios baseados em Git usando a AWS. CodeConnection HealthOmics usa essa conexão para acessar seus repositórios de código-fonte.

**nota**  
O CodeConnections serviço da AWS não está disponível na região il-central-1. Para essa região, configure o serviço us-east-1 para criar fluxos de trabalho ou versões de fluxo de trabalho a partir de um repositório. 

### Criar uma conexão
<a name="workflows-git-connection-create"></a>

Antes de criar conexões, siga as instruções em [Como configurar conexões](https://docs.aws.amazon.com/dtconsole/latest/userguide/setting-up-connections.html) no *Guia do usuário das ferramentas do Developer Console*. 

Para criar uma conexão, siga as instruções em [Criar uma conexão](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html) no *Guia do usuário das ferramentas do Developer Console*. 

### Configurar a autorização para a conexão
<a name="workflows-git-connection-create"></a>

Você deve autorizar a conexão usando o OAuth fluxo do provedor. Verifique se o status da conexão é `AVAILABLE` antes de usá-la.

Para ver exemplos, consulte a postagem do blog [Como criar AWS HealthOmics fluxos de trabalho a partir de conteúdo no Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git). 

## Acessando repositórios autogerenciados
<a name="workflows-git-self-managed"></a>

Para configurar conexões com um repositório GitLab autogerenciado, use um token de acesso pessoal de administrador ao criar um host. A criação subsequente da conexão acessa o Oauth com a conta do cliente.

O exemplo a seguir configura uma conexão com um repositório GitLab autogerenciado:

1. Configure o acesso ao token de acesso pessoal de um usuário administrador.

   *Para configurar um PAT em um repositório GitLab autogerenciado, consulte [Tokens de acesso pessoal](https://docs.gitlab.com/user/profile/personal_access_tokens/) no GitLab Docs.*

1. Criar um host

   1. Navegue até **CodePipeline>Configurações>Conexões**.

   1. Escolha a guia **Hosts** e, em seguida, escolha **Create Host**.

   1. Configure os campos a seguir.
      + Insira o nome do host
      + Para o tipo de provedor, escolha **GitLab Autogerenciado**
      + Insira o **URL do host** 
      + Insira as informações da VPC se o host estiver definido em uma VPC

   1. Escolha **Criar host**, que cria o host no estado PENDENTE.

   1. Para concluir a configuração, escolha **Configurar host**.

   1. Insira o token de acesso pessoal (PAT) de um usuário administrador e escolha **Continuar**. 

1. Criar a conexão 

   1. Escolha **Criar conexões** **na guia Conexões**.

   1. Para o tipo de provedor, selecione **GitLab autogerenciado**.

   1. Em **Configurações de conexão > Inserir nome da conexão, insira** a URL do host que você criou anteriormente.

   1. Se sua instância GitLab autogerenciada só puder ser acessada por meio de uma VPC, configure os detalhes da VPC.

   1. Escolha **Atualizar conexão pendente**. A janela modal redireciona você para a página de login. GitLab 

   1. Insira o nome de usuário e a senha da conta do cliente e conclua o processo de autorização.

   1.  Para a primeira configuração, escolha **Autorizar AWS Connector for Gitlab** Self Managed.

## Cotas relacionadas a repositórios de código externos
<a name="workflows-git-quotas"></a>

Para HealthOmics integração com repositórios de código externos, há um tamanho máximo para um repositório, cada arquivo do repositório e cada arquivo README. Para obter detalhes, consulte [HealthOmics cotas de tamanho fixo do fluxo de trabalho](fixed-quotas.md#fixed-quotas-workflows).

## Permissões obrigatórias do IAM
<a name="workflows-git-permissions"></a>

Adicione as seguintes ações à sua política de IAM baseada em identidade:

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

# Arquivos de definição de fluxo de trabalho em HealthOmics
<a name="workflow-definition-files"></a>

Você usa uma definição de fluxo de trabalho para especificar informações sobre o fluxo de trabalho, as execuções e as tarefas nas execuções. Você cria definições de fluxo de trabalho em um ou mais arquivos usando uma linguagem de definição de fluxo de trabalho. HealthOmics suporta definições de fluxo de trabalho escritas em WDL, Nextflow ou CWL. 

HealthOmics suporta as seguintes opções para definições de fluxo de trabalho da WDL: 
+ WDL — Fornece um mecanismo WDL em conformidade com as especificações. 
+ WDL leniente — Projetado para lidar com fluxos de trabalho migrados de Cromwell. Ele suporta as diretivas Cromwell do cliente e algumas lógicas não conformes. Para obter detalhes, consulte [Conversão de tipo implícita em WDL leniente](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Para obter informações sobre cada uma das linguagens do fluxo de trabalho, consulte as seções detalhadas específicas do idioma abaixo.

Você especifica os seguintes tipos de informações na definição do fluxo de trabalho:
+ **Language version**— O idioma e a versão da definição do fluxo de trabalho.
+ **Compute and memory**— Os requisitos de computação e memória para tarefas no fluxo de trabalho.
+ **Inputs**— Localização das entradas para as tarefas do fluxo de trabalho. Para obter mais informações, consulte [HealthOmics entradas de execução](workflows-run-inputs.md).
+ **Outputs**— Localização para salvar as saídas que as tarefas geram.
+ **Task resources**— Requisitos de computação e memória para cada tarefa.
+ **Accelerators**— outros recursos que as tarefas exigem, como aceleradores.

**Topics**
+ [HealthOmics requisitos de definição de fluxo de trabalho](workflow-defn-requirements.md)
+ [Suporte de versão para linguagens HealthOmics de definição de fluxo de trabalho](workflows-lang-versions.md)
+ [Requisitos de computação e memória para tarefas HealthOmics](memory-and-compute-tasks.md)
+ [Saídas de tarefas em uma definição de HealthOmics fluxo de trabalho](workflows-task-outputs.md)
+ [Recursos de tarefas em uma definição de HealthOmics fluxo de trabalho](task-resources.md)
+ [Aceleradores de tarefas em uma definição de HealthOmics fluxo de trabalho](task-accelerators.md)
+ [Especificidades da definição do fluxo de trabalho da WDL](workflow-languages-wdl.md)
+ [Especificações da definição do fluxo de trabalho do Nextflow](workflow-definition-nextflow.md)
+ [Especificidades da definição do fluxo de trabalho do CWL](workflow-languages-cwl.md)
+ [Exemplos de definições de fluxo de trabalho](workflow-definition-examples.md)

# HealthOmics requisitos de definição de fluxo de trabalho
<a name="workflow-defn-requirements"></a>

Os arquivos HealthOmics de definição do fluxo de trabalho devem atender aos seguintes requisitos:
+ As tarefas devem definir input/output parâmetros, repositórios de contêineres do Amazon ECR e especificações de tempo de execução, como alocação de memória ou CPU.
+ Verifique se suas funções do IAM têm as permissões necessárias.<a name="lower"></a>
  + Seu fluxo de trabalho tem acesso aos dados de entrada de AWS recursos, como o Amazon S3. 
  + Seu fluxo de trabalho tem acesso aos serviços de repositório externo quando necessário.
+ Declare os arquivos de saída na definição do fluxo de trabalho. Para copiar arquivos de execução intermediários para o local de saída, declare-os como saídas do fluxo de trabalho. 
+ Os locais de entrada e saída devem estar na mesma região do fluxo de trabalho. 
+ HealthOmics as entradas do fluxo de trabalho de armazenamento devem estar em `ACTIVE` status. HealthOmics não importará entradas com um `ARCHIVED` status, fazendo com que o fluxo de trabalho falhe. Para obter informações sobre entradas de objetos do Amazon S3, consulte. [HealthOmics entradas de execução](workflows-run-inputs.md)
+ A **main** localização do fluxo de trabalho é opcional se o arquivo ZIP contiver uma única definição de fluxo de trabalho ou um arquivo chamado “principal”.<a name="lower"></a>
  + Exemplo de caminho: `workflow-definition/main-file.wdl`
+ Antes de criar um fluxo de trabalho a partir do Amazon S3 ou de sua unidade local, crie um arquivo zip dos arquivos de definição do fluxo de trabalho e de quaisquer dependências, como subfluxos de trabalho.
+ Recomendamos que você declare os contêineres do Amazon ECR no fluxo de trabalho como parâmetros de entrada para validação das permissões do Amazon ECR. 

Considerações adicionais sobre o Nextflow:
+ **/bin**

  As definições do fluxo de trabalho do Nextflow podem incluir uma pasta /bin com scripts executáveis. Esse caminho tem acesso somente para leitura e executável às tarefas. As tarefas que dependem desses scripts devem usar um contêiner criado com os intérpretes de script apropriados. A melhor prática é ligar diretamente para o intérprete. Por exemplo:

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

  As definições de fluxo de trabalho baseadas em Nextflow podem incluir arquivos nextflow.config que ajudam a abstrair definições de parâmetros ou perfis de recursos de processo. Para oferecer suporte ao desenvolvimento e à execução de pipelines Nextflow em vários ambientes, use uma configuração HealthOmics específica que você adiciona à configuração global usando a diretiva IncludeConfig. Para manter a portabilidade, configure o fluxo de trabalho para incluir o arquivo somente durante a execução HealthOmics usando o seguinte código:

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

  HealthOmics não oferece suporte a relatórios de arrastamento, rastreamento e execução gerados pelo mecanismo. Você pode gerar alternativas para os relatórios de rastreamento e execução usando uma combinação de GetRun chamadas de GetRunTask API. 

Considerações adicionais sobre a CWL:
+ **Container image uri interpolation**

  HealthOmics permite que a propriedade DockerPull do DockerRequirement seja uma expressão javascript embutida. Por exemplo:

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

  Isso permite que você especifique a imagem do contêiner URIs como parâmetros de entrada para o fluxo de trabalho.
+ **Javascript expressions**

  As expressões Javascript devem ser `strict mode` compatíveis.
+ **Operation process**

  HealthOmics não oferece suporte aos processos de operação do CWL.

# Suporte de versão para linguagens HealthOmics de definição de fluxo de trabalho
<a name="workflows-lang-versions"></a>

HealthOmics suporta arquivos de definição de fluxo de trabalho escritos em Nextflow, WDL ou CWL. As seções a seguir fornecem informações sobre o suporte de HealthOmics versão para esses idiomas.

**Topics**
+ [Suporte à versão WDL](#workflows-lang-versions-WDL)
+ [Suporte à versão CWL](#workflows-lang-versions-CWL)
+ [Suporte à versão Nextflow](#workflows-lang-versions-nextflow)

## Suporte à versão WDL
<a name="workflows-lang-versions-WDL"></a>

HealthOmics suporta as versões 1.0, 1.1 e a versão de desenvolvimento da especificação WDL.

Todo documento da Biblioteca Digital Mundial deve incluir uma declaração de versão para especificar a qual versão (principal e secundária) da especificação ele adere. Para obter mais informações sobre versões, consulte Controle de versão da [WDL](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

As versões 1.0 e 1.1 da especificação WDL não suportam o `Directory` tipo. Para usar o `Directory` tipo para entradas ou saídas, defina a versão como **development** na primeira linha do arquivo:

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

## Suporte à versão CWL
<a name="workflows-lang-versions-CWL"></a>

HealthOmics suporta as versões 1.0, 1.1 e 1.2 da linguagem CWL.

Você pode especificar a versão do idioma no arquivo de definição do fluxo de trabalho CWL. Para obter mais informações sobre o CWL, consulte o guia do usuário do [CWL](https://github.com/common-workflow-language/user_guide)

## Suporte à versão Nextflow
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics suporta três versões estáveis do Nextflow. O Nextflow normalmente lança uma versão estável a cada seis meses. HealthOmics não suporta os lançamentos mensais “edge”.

HealthOmics oferece suporte aos recursos lançados em cada versão, mas não aos recursos de pré-visualização.

### Versões aceitas
<a name="workflows-versions-nextflow-list"></a>

HealthOmics suporta as seguintes versões do Nextflow:
+ Nextflow v22.04.01 DSL 1 e DSL 2
+ Nextflow v23.10.0 DSL 2 (padrão)
+ Nextflow v24.10.8 DSL 2

[Para migrar seu fluxo de trabalho para a versão mais recente compatível (v24.10.8), siga o guia de atualização do Nextflow.](https://nextflow.io/docs/latest/migrations/24-10.html)

Há algumas mudanças importantes ao migrar do Nextflow v23 para a v24, conforme descrito nas seções a seguir do guia de migração do Nextflow:
+ [Mudanças recentes em 24.04](https://www.nextflow.io/docs/latest/migrations/24-04.html#breaking-changes)
+  [Alterações de última hora em 24.10](https://www.nextflow.io/docs/latest/migrations/24-10.html#breaking-changes)

### Detecte e processe versões do Nextflow
<a name="workflows-versions-processing"></a>

HealthOmics detecta a versão DSL e a versão do Nextflow que você especifica. Ele determina automaticamente a melhor versão do Nextflow a ser executada com base nessas entradas.

#### Versão DSL
<a name="workflows-versions-p1"></a>

HealthOmics detecta a versão DSL solicitada no arquivo de definição do fluxo de trabalho. Por exemplo, você pode especificar:`nextflow.enable.dsl=2`.

HealthOmics suporta DSL 2 por padrão. Ele fornece compatibilidade com versões anteriores do DSL 1, se especificado no arquivo de definição do fluxo de trabalho.
+ Se você especificar DSL 2, HealthOmics executará o Nextflow v23.10.0, a menos que você especifique o Nextflow v22.04.0 ou v24.10.8.
+ Se você especificar DSL 1, HealthOmics executa o Nextflow v22.04 DSL1 (a única versão compatível que executa DSL 1).
+ Se você não especificar uma versão da DSL ou se não HealthOmics conseguir analisar as informações da DSL por qualquer motivo (como erros de sintaxe no arquivo de definição do fluxo de trabalho), o HealthOmics padrão é DSL 2 e executa o Nextflow v23.10.0.
+ Para atualizar seu fluxo de trabalho do DSL 1 para o DSL 2 e aproveitar as versões mais recentes do Nextflow e os recursos do software, consulte [Migração](https://nextflow.io/docs/latest/dsl1.html) do DSL 1.

#### Versões do Nextflow
<a name="workflows-versions-p2"></a>

HealthOmics detecta a versão solicitada do Nextflow no arquivo de configuração do Nextflow (nextflow.config), se você fornecer esse arquivo. Recomendamos que você adicione a `nextflowVersion` cláusula no final do arquivo para evitar substituições inesperadas das configurações incluídas. Para obter mais informações, consulte Configuração do [Nextflow](https://nextflow.io/docs/latest/config.html).

Você pode especificar uma versão do Nextflow ou um intervalo de versões usando a seguinte sintaxe:

```
   // 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 processa as informações da versão do Nextflow da seguinte forma: 
+ Se você usar **=** para especificar uma versão exata que HealthOmics ofereça suporte, HealthOmics use essa versão. 
+ Se você usar **\$1** para especificar uma versão exata ou um intervalo de versões que não são suportadas, HealthOmics gera uma exceção e falha na execução. Considere usar essa opção se quiser ser rigoroso com as solicitações de versão e falhar rapidamente se a solicitação incluir versões sem suporte.
+ Se você especificar um intervalo de versões, HealthOmics usa a versão mais recente compatível nesse intervalo, a menos que o intervalo inclua v24.10.8. Nesse caso, HealthOmics dá preferência a uma versão anterior. Por exemplo, se o intervalo abranger v23.10.0 e v24.10.8, escolha v23.10.0. HealthOmics 
+ Se não houver uma versão solicitada ou se as versões solicitadas não forem válidas ou não puderem ser analisadas por algum motivo:
  + Se você especificou DSL 1, HealthOmics executa o Nextflow v22.04.
  + Caso contrário, HealthOmics executa o Nextflow v23.10.0.

 Você pode recuperar as seguintes informações sobre a versão do Nextflow HealthOmics usada para cada execução:
+ Os registros de execução contêm informações sobre a versão real do Nextflow HealthOmics usada para a execução.
+ HealthOmics adiciona avisos nos registros de execução se não houver uma correspondência direta com a versão solicitada ou se for necessário usar uma versão diferente da especificada.
+ A resposta à operação da **GetRun** API inclui um campo (`engineVersion`) com a versão real do Nextflow HealthOmics usada para a execução. Por exemplo:

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

# Requisitos de computação e memória para tarefas HealthOmics
<a name="memory-and-compute-tasks"></a>

HealthOmics executa suas tarefas privadas de fluxo de trabalho em uma instância omics. HealthOmics fornece uma variedade de tipos de instância para acomodar diferentes tipos de tarefas. Cada tipo de instância tem uma configuração fixa de memória e vCPU (e configuração de GPU fixa para tipos de instância de computação acelerada). O custo do uso de uma instância omics varia de acordo com o tipo de instância. Para obter detalhes, consulte a página [HealthOmics de preços](https://aws.amazon.com/healthomics/pricing/).

Para tarefas em um fluxo de trabalho, você especifica a memória necessária e v CPUs no arquivo de definição do fluxo de trabalho. Quando uma tarefa de fluxo de trabalho é executada, HealthOmics aloca a menor instância omics que acomoda a memória solicitada e v. CPUs Por exemplo, se uma tarefa precisar de 64 GiB de memória e 8 vCPUs, HealthOmics seleciona. `omics.r.2xlarge`

Recomendamos que você analise os tipos de instância e defina o v CPUs e o tamanho da memória solicitados para corresponder à instância que melhor atenda às suas necessidades. O contêiner de tarefas usa o número de v CPUs e o tamanho da memória que você especifica no arquivo de definição do fluxo de trabalho, mesmo que o tipo de instância tenha v CPUs e memória adicionais. 

A lista a seguir contém informações adicionais sobre alocação de vCPU e memória:
+ As alocações de recursos de contêineres são limites rígidos. Se uma tarefa ficar sem memória ou tentar usar v adicionalCPUs , a tarefa gerará um registro de erros e sairá.
+ Se você não especificar nenhum requisito de computação ou memória, HealthOmics seleciona **omics.c.large** e usa como padrão uma configuração com 1 vCPU e 1 GiB de memória.
+ A configuração mínima que você pode solicitar é de 1 vCPU e 1 GiB de memória. 
+ Se você especificar vCPUs, memory, or GPUs that exceda os tipos de instância compatíveis, HealthOmics gerará uma mensagem de erro e o fluxo de trabalho falhará nas validações
+ Se você especificar unidades fracionárias, HealthOmics arredonda para o número inteiro mais próximo.
+ HealthOmics reserva uma pequena quantidade de memória (5%) para agentes de gerenciamento e registro, portanto, a alocação total de memória pode nem sempre estar disponível para o aplicativo na tarefa.
+ HealthOmics combina os tipos de instância para atender aos requisitos de computação e memória que você especifica e pode usar uma combinação de gerações de hardware. Por esse motivo, pode haver algumas pequenas variações nos tempos de execução da mesma tarefa.

Esses tópicos fornecem detalhes sobre os tipos de instância HealthOmics compatíveis. 

**Topics**
+ [Tipos de instância padrão](#workflow-task-standard-instances)
+ [Instâncias otimizadas para computação](#workflow-task-compute-optimized-instances)
+ [Instâncias otimizadas para memória](#workflow-task-memory-optimized-instances)
+ [Instâncias de computação acelerada](#workflow-task-accelerated-computing-instances)

**nota**  
 Para instâncias padrão, otimizadas para computação e memória, aumente o tamanho da largura de banda da instância se a instância exigir uma taxa de transferência maior. As instâncias do Amazon EC2 com menos de 16 vCPUs (tamanho 4xl e menores) podem experimentar uma explosão de taxa de transferência. Para obter mais informações sobre a taxa de transferência de instâncias do Amazon EC2, consulte Largura de banda da instância disponível do [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Tipos de instância padrão
<a name="workflow-task-standard-instances"></a>

Para tipos de instância padrão, as configurações buscam um equilíbrio entre poder computacional e memória. 

HealthOmics oferece suporte às instâncias de 32xlarge e 48xlarge nas seguintes regiões: Oeste dos EUA (Oregon) e Leste dos EUA (Norte da Virgínia).


| Instância | Número de v CPUs | Memória | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiB | 
| omics.m.xlarge | 4 | 16 GiB | 
| omics.m.2xlarge | 8 | 32 GiB | 
| omics.m.4xlarge | 16 | 64 GiB | 
| omics.m.8xlarge | 32 | 128 GiB | 
| omics.m.12xlarge | 48 | 192 GiB | 
| omics.m.16xlarge | 64 | 256 GiB | 
| omics.m.24xlarge | 96 | 384 GiB | 
| omics.m.32xlarge | 128 | 512 GiB | 
| omics.m.48xlarge | 192 | 768 GiB | 

## Instâncias otimizadas para computação
<a name="workflow-task-compute-optimized-instances"></a>

Para tipos de instância otimizados para computação, as configurações têm mais poder computacional e menos memória.

HealthOmics oferece suporte às instâncias de 32xlarge e 48xlarge nas seguintes regiões: Oeste dos EUA (Oregon) e Leste dos EUA (Norte da Virgínia).


| Instância | Número de v CPUs | Memória | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| ômics.c.2xlarge | 8 | 16 GiB | 
| omics.c.4xlarge | 16 | 32 GiB | 
| omics.c.8xlarge | 32 | 64 GiB | 
| omics.c.12xlarge | 48 | 96 GiB | 
| omics.c.16xlarge | 64 | 128 GiB | 
| omics.c.24xlarge | 96 | 192 GiB | 
| omics.c.32xlarge | 128 | 256 GiB | 
| omics.c.48xlarge | 192 | 384 GiB | 

## Instâncias otimizadas para memória
<a name="workflow-task-memory-optimized-instances"></a>

Para tipos de instância otimizados para memória, as configurações têm menos poder computacional e mais memória.

HealthOmics oferece suporte às instâncias de 32xlarge e 48xlarge nas seguintes regiões: Oeste dos EUA (Oregon) e Leste dos EUA (Norte da Virgínia).


| Instância | Número de v CPUs | Memória | 
| --- | --- | --- | 
| 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.8xlarge | 32 | 256 GiB | 
| omics.r.12xlarge | 48 | 384 GiB | 
| omics.r.16xlarge | 64 | 512 GiB | 
| omics.r.24xlarge | 96 | 768 GiB | 
| omics.r.32xlarge | 128 | 1024 GiB | 
| omics.r.48xlarge | 192 | 1536 GiB | 

## Instâncias de computação acelerada
<a name="workflow-task-accelerated-computing-instances"></a>

Opcionalmente, você pode especificar recursos de GPU para cada tarefa em um fluxo de trabalho, de forma a HealthOmics alocar uma instância de computação acelerada para a tarefa. Para obter informações sobre como especificar as informações da GPU no arquivo de definição do fluxo de trabalho, consulte[Aceleradores de tarefas em uma definição de HealthOmics fluxo de trabalho](task-accelerators.md).

Se você especificar um acelerador de tarefas que ofereça suporte a vários tipos de instância, HealthOmics selecionará o tipo de instância com base na disponibilidade. Se houver mais de um tipo de instância disponível, HealthOmics dá preferência à instância de menor custo. A exceção é para o acelerador de tarefas nvidia-t4-a10g-l4, que dá preferência à instância de última geração disponível em sua região.

As instâncias G4 não são suportadas na região de Israel (Tel Aviv). As instâncias G5 não são suportadas na região Ásia-Pacífico (Cingapura). 



**Topics**
+ [Tipos de instância G6 e G6e](#workflow-task-accelerated-accelerated-g6)
+ [Instâncias G4 e G5](#workflow-task-accelerated-accelerated-g45)

### Tipos de instância G6 e G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics oferece suporte às seguintes configurações de instância de computação acelerada G6. Todas as instâncias omics.g6 usam a Nvidia L4. GPUs

HealthOmics oferece suporte às instâncias G6 e G6e nas seguintes regiões: Oeste dos EUA (Oregon) e Leste dos EUA (Norte da Virgínia).


| Instância | Número de v CPUs | Memória | Número de GPUs | Memória da GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g6.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g6.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g6.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g6.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g6.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g6.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

Todas as instâncias omics.g6e usam Nvidia L40s. GPUs


| Instância | Número de v CPUs | Memória | Número de GPUs | Memória da GPU | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4xlarge | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8xlarge | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12xlarge | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16xlarge | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24xlarge | 96 | 768 GiB | 4 | 192 GiB | 

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

HealthOmics oferece suporte às seguintes configurações de instância de computação acelerada G4 e G5. 

Todas as instâncias omics.g5 usam a Nvidia Tesla A10G. GPUs


| Instância | Número de v CPUs | Memória | Número de GPUs | Memória da GPU | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2xlarge | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g5.4xlarge | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g5.8xlarge | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g5.12xlarge | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g5.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g5.24xlarge | 96 | 384 GiB | 4 | 96 GiB | 

Todas as instâncias omics.g4dn usam Nvidia Tesla T4. GPUs


| Instância | Número de v CPUs | Memória | Número de GPUs | Memória da GPU | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xlarge | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xlarge | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn.12xlarge | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 

# Saídas de tarefas em uma definição de HealthOmics fluxo de trabalho
<a name="workflows-task-outputs"></a>

Você especifica as saídas da tarefa na definição do fluxo de trabalho. Por padrão, HealthOmics descarta todos os arquivos de tarefas intermediárias quando o fluxo de trabalho é concluído. Para exportar um arquivo intermediário, você o define como uma saída. 

Se você usar o cache de chamadas, HealthOmics salva as saídas da tarefa no cache, incluindo todos os arquivos intermediários que você definir como saídas.

Os tópicos a seguir incluem exemplos de definição de tarefas para cada uma das linguagens de definição de fluxo de trabalho.

**Topics**
+ [Saídas de tarefas para WDL](#workflow-task-outputs-wdl)
+ [Saídas de tarefas para Nextflow](#workflow-task-outputs-nextflow)
+ [Saídas de tarefas para CWL](#workflow-task-outputs-cwl)

## Saídas de tarefas para WDL
<a name="workflow-task-outputs-wdl"></a>

Para definições de fluxo de trabalho escritas em WDL, defina suas saídas na seção de fluxo **outputs** de trabalho de nível superior. 

HealthOmics

**Topics**
+ [Saída de tarefa para STDOUT](#task-outputs-wdl-stdout)
+ [Saída de tarefa para STDERR](#task-outputs-wdl-stderr)
+ [Saída da tarefa para um arquivo](#task-outputs-wdl-file)
+ [Saída de tarefas para uma matriz de arquivos](#task-outputs-wdl-files)

### Saída de tarefa para STDOUT
<a name="task-outputs-wdl-stdout"></a>

Este exemplo cria uma tarefa chamada `SayHello` que ecoa o conteúdo STDOUT no arquivo de saída da tarefa. **A **stdout** função WDL captura o conteúdo STDOUT (neste exemplo, a string de entrada Hello World\$1** ) no arquivo**stdout\$1file**. 

Como HealthOmics cria registros para todo o conteúdo STDOUT, a saída também aparece em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

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

### Saída de tarefa para STDERR
<a name="task-outputs-wdl-stderr"></a>

Este exemplo cria uma tarefa chamada `SayHello` que ecoa o conteúdo STDERR no arquivo de saída da tarefa. **A **stderr** função WDL captura o conteúdo STDERR (neste exemplo, a string de entrada Hello World\$1** ) no arquivo**stderr\$1file**. 

Como HealthOmics cria registros para todo o conteúdo STDERR, a saída aparecerá em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

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

### Saída da tarefa para um arquivo
<a name="task-outputs-wdl-file"></a>

Neste exemplo, a SayHello tarefa cria dois arquivos (message.txt e info.txt) e declara explicitamente esses arquivos como as saídas nomeadas (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"
    } 
}
```

### Saída de tarefas para uma matriz de arquivos
<a name="task-outputs-wdl-files"></a>

Neste exemplo, a `GenerateGreetings` tarefa gera uma matriz de arquivos como saída da tarefa. A tarefa gera dinamicamente um arquivo de saudação para cada membro da matriz de entrada. `names` Como os nomes dos arquivos não são conhecidos até o tempo de execução, a definição de saída usa a função WDL glob () para gerar todos os arquivos que correspondam ao padrão. `*_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")
    }       
 }
```

## Saídas de tarefas para Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Para definições de fluxo de trabalho escritas no Nextflow, defina uma diretiva **PublishDir** para exportar o conteúdo da tarefa para seu bucket de saída do Amazon S3. Defina o valor **PublishDir** como`/mnt/workflow/pubdir`. 

 HealthOmics Para exportar arquivos para o Amazon S3, os arquivos devem estar nesse diretório.

Se uma tarefa produzir um grupo de arquivos de saída para uso como entradas para uma tarefa subseqüente, recomendamos que você agrupe esses arquivos em um diretório e emita o diretório como uma saída de tarefa. A enumeração de cada arquivo individual pode resultar em um gargalo de E/S no sistema de arquivos subjacente. Por exemplo:

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

## Saídas de tarefas para CWL
<a name="workflow-task-outputs-cwl"></a>

Para definições de fluxo de trabalho escritas em CWL, você pode especificar as saídas da tarefa usando `CommandLineTool` tarefas. As seções a seguir mostram exemplos de `CommandLineTool` tarefas que definem diferentes tipos de saídas.

**Topics**
+ [Saída de tarefa para STDOUT](#task-outputs-cwl-stdout)
+ [Saída de tarefa para STDERR](#task-outputs-cwl-stderr)
+ [Saída da tarefa para um arquivo](#task-outputs-cwl-file)
+ [Saída de tarefas para uma matriz de arquivos](#task-outputs-cwl-files)

### Saída de tarefa para STDOUT
<a name="task-outputs-cwl-stdout"></a>

Este exemplo cria uma `CommandLineTool` tarefa que ecoa o conteúdo STDOUT em um arquivo de saída de texto chamado. **output.txt** Por exemplo, se você fornecer a seguinte entrada, a saída da tarefa resultante será **Hello World\$1** no **output.txt** arquivo.

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

A `outputs` diretiva especifica que o nome da saída é **example\$1out** e seu tipo é`stdout`. Para que uma tarefa posterior consuma a saída dessa tarefa, ela se referiria à saída como`example_out`.

Como HealthOmics cria registros para todo o conteúdo STDERR e STDOUT, a saída também aparece em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

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

### Saída de tarefa para STDERR
<a name="task-outputs-cwl-stderr"></a>

Este exemplo cria uma `CommandLineTool` tarefa que ecoa o conteúdo STDERR em um arquivo de saída de texto chamado. **stderr.txt** A tarefa modifica o `baseCommand` para que seja `echo` gravado em STDERR (em vez de STDOUT).

A `outputs` diretiva especifica que o nome da saída é **stderr\$1out** e seu tipo é`stderr`. 

Como HealthOmics cria registros para todo o conteúdo STDERR e STDOUT, a saída aparecerá em CloudWatch Logs, junto com outras informações de registro STDERR da tarefa.

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

### Saída da tarefa para um arquivo
<a name="task-outputs-cwl-file"></a>

Este exemplo cria uma `CommandLineTool` tarefa que cria um arquivo tar compactado a partir dos arquivos de entrada. Você fornece o nome do arquivo como um parâmetro de entrada (archive\$1name). 

A **outputs** diretiva especifica que o tipo de `archive_file` saída é `File` e usa uma referência ao parâmetro de entrada `archive_name` para vincular ao arquivo de saída.

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

### Saída de tarefas para uma matriz de arquivos
<a name="task-outputs-cwl-files"></a>

Neste exemplo, a `CommandLineTool` tarefa cria uma matriz de arquivos usando o `touch` comando. O comando usa as cadeias de caracteres no parâmetro `files-to-create` de entrada para nomear os arquivos. O comando gera uma matriz de arquivos. A matriz inclui todos os arquivos no diretório de trabalho que correspondam ao `glob` padrão. Este exemplo usa um padrão curinga (“\$1”) que corresponde a todos os arquivos.

```
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 tarefas em uma definição de HealthOmics fluxo de trabalho
<a name="task-resources"></a>

Na definição do fluxo de trabalho, defina o seguinte para cada tarefa:
+ A imagem do contêiner para a tarefa. Para obter mais informações, consulte [Imagens de contêiner para fluxos de trabalho privados](workflows-ecr.md).
+ O número CPUs e a memória necessários para a tarefa. Para obter mais informações, consulte [Requisitos de computação e memória para tarefas HealthOmics](memory-and-compute-tasks.md).

HealthOmics ignora todas as especificações de armazenamento por tarefa. HealthOmics fornece armazenamento de execução que todas as tarefas em execução podem acessar. Para obter mais informações, consulte [Execute tipos de armazenamento em HealthOmics fluxos de trabalho](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"
   }
   ...
}
```

Para um fluxo de trabalho WDL, tente até duas HealthOmics tentativas para uma tarefa que falha devido a erros de serviço (a solicitação de API retorna um código de status HTTP 5XX). Para obter mais informações sobre novas tentativas de tarefas, consulte[Tentativas de tarefas](monitoring-runs.md#run-status-task-retries).

Você pode desativar o comportamento de nova tentativa especificando a seguinte configuração para a tarefa no arquivo de definição da 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 tarefas em uma definição de HealthOmics fluxo de trabalho
<a name="task-accelerators"></a>

Na definição do fluxo de trabalho, você pode especificar opcionalmente a especificação do acelerador de GPU para uma tarefa. HealthOmics é compatível com os seguintes valores de especificação do acelerador, junto com os tipos de instância compatíveis:


| Especificação do acelerador | Tipos de instância do Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-a 10g | G4 e G5 | 
| nvidia-tesla-a10g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 e G6 | 
| nvidia-l4-a10g | G5 e G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40s | G6e | 

Se você especificar um tipo de acelerador que ofereça suporte a vários tipos de instância, HealthOmics selecionará o tipo de instância com base na capacidade disponível. Se os dois tipos de instância estiverem disponíveis, HealthOmics dará preferência à instância de menor custo. A exceção é para o acelerador de tarefas nvidia-t4-a10g-l4, que dá preferência à instância de última geração disponível.

Para obter detalhes sobre os tipos de instância, consulte[Instâncias de computação acelerada](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances).

No exemplo a seguir, a definição do fluxo de trabalho especifica `nvidia-l4` 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"
```

------

# Especificidades da definição do fluxo de trabalho da WDL
<a name="workflow-languages-wdl"></a>

Os tópicos a seguir fornecem detalhes sobre os tipos e diretivas disponíveis para as definições de fluxo de trabalho da WDL em. HealthOmics

**Topics**
+ [Conversão de tipo implícita em WDL leniente](#workflow-wdl-type-conversion)
+ [Definição de namespace em input.json](#workflow-wdl-namespace-defn)
+ [Tipos primitivos na Biblioteca Digital Mundial](#workflow-wdl-primitive-types)
+ [Tipos complexos em WDL](#workflow-wdl-complex-types)
+ [Diretivas na Biblioteca Digital Mundial](#workflow-wdl-directives)
+ [Metadados de tarefas na WDL](#workflow-wdl-task-metadata)
+ [Exemplo de definição de fluxo de trabalho WDL](#wdl-example)

## Conversão de tipo implícita em WDL leniente
<a name="workflow-wdl-type-conversion"></a>

HealthOmics oferece suporte à conversão de tipo implícita no arquivo input.json e na definição do fluxo de trabalho. Para usar a conversão de tipo implícita, especifique o mecanismo de fluxo de trabalho como tolerante à WDL ao criar o fluxo de trabalho. O WDL lenient foi projetado para lidar com fluxos de trabalho migrados de Cromwell. Ele suporta as diretivas Cromwell do cliente e algumas lógicas não conformes.

[A WDL lenient suporta a conversão de tipos para os seguintes itens na lista de exceções limitadas da WDL:](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ Flutue até Int, onde a coerção não resulta em perda de precisão (como 1,0 mapeia para 1).
+ String to Int/Float, onde a coerção não resulta em perda de precisão.
+ Mapeie [W, X] para Array [Pair [Y, Z]], no caso em que W é coercível para Y e X é coercível para Z.
+ Array [Pair [W, X]] para Map [Y, Z], no caso em que W é coercível para Y e X é coercível para Z (como 1,0 mapas para 1).

Para usar a conversão de tipo implícita, especifique o mecanismo do fluxo de trabalho como WDL\$1LENIENT ao criar o fluxo de trabalho ou a versão do fluxo de trabalho.

No console, o parâmetro do mecanismo de fluxo de trabalho é chamado de **Idioma**. Na API, o parâmetro do mecanismo de fluxo de trabalho é chamado de **mecanismo**. Para acessar mais informações, consulte [Crie um fluxo de trabalho privado](create-private-workflow.md) ou [Crie uma versão do fluxo de trabalho](workflows-version-create.md).

## Definição de namespace em input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics suporta variáveis totalmente qualificadas em input.json. Por exemplo, se você declarar duas variáveis de entrada chamadas número1 e número2 no fluxo de trabalho: **SumWorkflow**

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

 Você pode usá-las como variáveis totalmente qualificadas em input.json: 

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

## Tipos primitivos na Biblioteca Digital Mundial
<a name="workflow-wdl-primitive-types"></a>

A tabela a seguir mostra como as entradas na WDL são mapeadas para os tipos primitivos correspondentes. HealthOmics fornece suporte limitado para coerção de tipo, por isso recomendamos que você defina tipos explícitos. 


**Tipos primitivos**  

| Tipo WDL | Tipo JSON | Exemplo de WDL | Exemplo de chave e valor JSON | Observações | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | O valor deve estar em minúsculas e sem aspas. | 
| Int | integer | Int i | "i": 7 | Não deve ser citado. | 
| Float | number | Float f | "f": 42.2 | Não deve ser citado. | 
| String | string | String s | "s": "characters" | As cadeias de caracteres JSON que são um URI devem ser mapeadas para um arquivo WDL para serem importadas. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | O Amazon S3 e o HealthOmics armazenamento URIs são importados, desde que a função do IAM fornecida para o fluxo de trabalho tenha acesso de leitura a esses objetos. Nenhum outro esquema de URI é suportado (como file://https://, eftp://). O URI deve especificar um objeto. Não pode ser um diretório, o que significa que não pode terminar com / a. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | O Directory tipo não está incluído na WDL 1.0 ou 1.1, então você precisará version development adicioná-lo ao cabeçalho do arquivo WDL. O URI deve ser um URI do Amazon S3 e com um prefixo que termine com '/'. Todo o conteúdo do diretório será copiado recursivamente para o fluxo de trabalho como um único download. O Directory deve conter somente arquivos relacionados ao fluxo de trabalho. | 

## Tipos complexos em WDL
<a name="workflow-wdl-complex-types"></a>

A tabela a seguir mostra como as entradas na WDL são mapeadas para os tipos JSON complexos correspondentes. Os tipos complexos na Biblioteca Digital Mundial são estruturas de dados compostas por tipos primitivos. Estruturas de dados, como listas, serão convertidas em matrizes.


**Tipos complexos**  

| Tipo WDL | Tipo JSON | Exemplo de WDL | Exemplo de chave e valor JSON | Observações | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | Os membros da matriz devem seguir o formato do tipo de matriz WDL. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Cada valor do par deve usar o formato JSON do tipo WDL correspondente. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Cada entrada no mapa deve usar o formato JSON de seu tipo WDL correspondente. | 
| 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>  | Os nomes dos membros da estrutura devem corresponder exatamente aos nomes das chaves do objeto JSON. Cada valor deve usar o formato JSON do tipo de WDL correspondente. | 
| Object | N/D | N/D | N/D | O Object tipo WDL está desatualizado e deve ser substituído por Struct em todos os casos. | 

## Diretivas na Biblioteca Digital Mundial
<a name="workflow-wdl-directives"></a>

HealthOmics suporta as seguintes diretivas em todas as versões da WDL que HealthOmics oferecem suporte.

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

HealthOmics é compatível com atributos de tempo de execução **acceleratorType** e **acceleratorCount** com todas as [instâncias de GPU](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html) compatíveis. HealthOmics também oferece suporte a aliases chamados **gpuType** e**gpuCount**, que têm a mesma funcionalidade de seus equivalentes aceleradores. Se a definição da WDL contiver as duas diretivas, HealthOmics use os valores do acelerador.

O exemplo a seguir mostra como usar essas diretivas:

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

### Configurar a repetição de tarefas para erros de serviço
<a name="workflow-wdl-task-retry"></a>

HealthOmics suporta até duas tentativas para uma tarefa que falhou devido a erros de serviço (códigos de status HTTP 5XX). Você pode configurar o número máximo de novas tentativas (1 ou 2) e pode optar por não participar de novas tentativas por erros de serviço. Por padrão, HealthOmics tenta no máximo duas tentativas. 

O exemplo a seguir define `preemptible` a opção de não aceitar novas tentativas por erros de serviço:

```
{
  preemptible: 0 
}
```

Para obter mais informações sobre novas tentativas de tarefas em HealthOmics, consulte[Tentativas de tarefas](monitoring-runs.md#run-status-task-retries).

### Configurar a repetição da tarefa para falta de memória
<a name="workflow-wdl-retries"></a>

HealthOmics suporta novas tentativas para uma tarefa que falhou porque ficou sem memória (código de saída do contêiner 137, código de status HTTP 4XX). HealthOmics dobra a quantidade de memória para cada tentativa de repetição.

Por padrão, HealthOmics não tenta novamente para esse tipo de falha. Use a `maxRetries` diretiva para especificar o número máximo de novas tentativas.

O exemplo a seguir é definido `maxRetries` como 3, de modo que HealthOmics tente no máximo quatro tentativas para concluir a tarefa (a tentativa inicial mais três tentativas):

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

**nota**  
A repetição da tarefa em caso de falta de memória requer o GNU findutils 4.2.3\$1. O contêiner de HealthOmics imagem padrão inclui esse pacote. Se você especificar uma imagem personalizada em sua definição de WDL, certifique-se de que a imagem inclua GNU findutils 4.2.3\$1.

### Configurar códigos de devolução
<a name="workflow-wdl-directive-returnCodes"></a>

O atributo **returnCodes** fornece um mecanismo para especificar um código de retorno, ou um conjunto de códigos de retorno, que indica a execução bem-sucedida de uma tarefa. O mecanismo da WDL respeita os códigos de retorno que você especifica na seção de tempo de **execução** da definição da WDL e define o status das tarefas de acordo. 

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

HealthOmics também oferece suporte a um alias chamado **continueOnReturnCode**, que tem os mesmos recursos de **ReturnCodes**. Se você especificar os dois atributos, HealthOmics usa o valor **ReturnCodes**.

## Metadados de tarefas na WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics suporta as seguintes opções de metadados para tarefas de WDL.

### Desative o armazenamento em cache no nível da tarefa com o atributo volatile
<a name="workflow-wdl-volatile-attribute"></a>

O atributo **volatile** permite que você desabilite o cache de chamadas para tarefas específicas em seu fluxo de trabalho da WDL. Quando uma tarefa é marcada como volátil, ela sempre será executada e nunca usará resultados em cache, mesmo quando o cache estiver habilitado para execução.

Adicione o atributo **volatile** à seção **meta** da definição de sua tarefa:

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

## Exemplo de definição de fluxo de trabalho WDL
<a name="wdl-example"></a>

Os exemplos a seguir mostram definições de fluxo de trabalho privadas para conversão de `CRAM` para `BAM` em WDL. O `BAM` fluxo de trabalho `CRAM` to define duas tarefas e usa ferramentas do `genomes-in-the-cloud` contêiner, que são mostradas no exemplo e estão disponíveis publicamente. 

O exemplo a seguir mostra como incluir o contêiner Amazon ECR como parâmetro. Isso permite HealthOmics verificar as permissões de acesso ao seu contêiner antes que ele inicie a execução.

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

O exemplo a seguir mostra como especificar quais arquivos usar em sua execução, quando os arquivos estão em um bucket do Amazon S3.

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

Se você quiser especificar arquivos de um armazenamento de sequência, indique isso conforme mostrado no exemplo a seguir, usando o URI para o armazenamento de sequência.

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

Em seguida, você pode definir seu fluxo de trabalho na WDL, conforme mostrado no exemplo a seguir. 

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

# Especificações da definição do fluxo de trabalho do Nextflow
<a name="workflow-definition-nextflow"></a>

HealthOmics suporta Nextflow e. DSL1 DSL2 Para obter detalhes, consulte [Suporte à versão Nextflow](workflows-lang-versions.md#workflows-lang-versions-nextflow).

O Nextflow DSL2 é baseado na linguagem de programação Groovy, portanto, os parâmetros são dinâmicos e a coerção de tipos é possível usando as mesmas regras do Groovy. Os parâmetros e valores fornecidos pelo JSON de entrada estão disponíveis no mapa parameters (`params`) do fluxo de trabalho.

**Topics**
+ [Use plug-ins nf-schema e nf-validation](#schema-and-validation-plugins-nextflow)
+ [Especifique o armazenamento URIs](#storage-uris-nextflow)
+ [Diretivas Nextflow](#workflow-nexflow-directives)
+ [Exportar conteúdo da tarefa](#exporting-task-content-nextflow)

## Use plug-ins nf-schema e nf-validation
<a name="schema-and-validation-plugins-nextflow"></a>

**nota**  
Resumo do HealthOmics suporte para plug-ins:  
v22.04 — sem suporte para plug-ins
v23.10 — suporta e `nf-schema` `nf-validation`
v24.10 — suporta `nf-schema`

HealthOmics fornece o seguinte suporte para plug-ins Nextflow:
+ Para o Nextflow v23.10, HealthOmics pré-instala o plug-in nf-validation @1 .1.1. 
+ Para o Nextflow v23.10 e versões posteriores, HealthOmics pré-instala o plug-in nf-schema @2 .3.0.
+ Você não pode recuperar plug-ins adicionais durante a execução de um fluxo de trabalho. HealthOmics ignora todas as outras versões de plug-in que você especificar no `nextflow.config` arquivo.
+ Para o Nextflow v24 e superior, `nf-schema` é a nova versão do plug-in obsoleto. `nf-validation` Para obter mais informações, consulte [nf-schema](https://github.com/nextflow-io/nf-schema) no repositório Nextflow. GitHub

## Especifique o armazenamento URIs
<a name="storage-uris-nextflow"></a>

Quando um Amazon S3 ou HealthOmics URI é usado para construir um arquivo Nextflow ou objeto de caminho, ele disponibiliza o objeto correspondente para o fluxo de trabalho, desde que o acesso de leitura seja concedido. O uso de prefixos ou diretórios é permitido para o Amazon S3. URIs Para obter exemplos, consulte [Formatos de parâmetros de entrada do Amazon S3](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics suporta parcialmente o uso de padrões globais no Amazon URIs S3 HealthOmics ou no Storage. URIs Use padrões Glob na definição do fluxo de trabalho para a criação de `path` nossos `file` canais. Para o comportamento esperado e os casos exatos, consulte[Nextflow: Tratamento do padrão Glob nas entradas do Amazon S3](workflows-run-inputs.md#wd-nextflow-s3-formats).

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

Você configura as diretivas do Nextflow no arquivo de configuração ou na definição do fluxo de trabalho do Nextflow. A lista a seguir mostra a ordem de precedência HealthOmics usada para aplicar as definições de configuração, da prioridade mais baixa para a mais alta:

1. Configuração global no arquivo de configuração.

1. Seção de tarefas da definição do fluxo de trabalho.

1. Seletores específicos de tarefas no arquivo de configuração.

**Topics**
+ [Estratégia de repetição de tarefas usando `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Tentativas de repetição de tarefas usando `maxRetries`](#workflow-nexflow-task-retry)
+ [Opte por não participar da tarefa novamente usando `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Duração da tarefa usando a `time` diretiva](#time-directive-nextflow)

### Estratégia de repetição de tarefas usando `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Use a `errorStrategy` diretiva para definir a estratégia para erros de tarefas. Por padrão, quando uma tarefa retorna com uma indicação de erro (um status de saída diferente de zero), a tarefa para e HealthOmics encerra toda a execução. Se você definir como`retry`, `errorStrategy` HealthOmics tentará uma nova tentativa da tarefa que falhou. Para aumentar o número de novas tentativas, consulte[Tentativas de repetição de tarefas usando `maxRetries`](#workflow-nexflow-task-retry).

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

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

Para obter informações sobre como HealthOmics manipula novas tentativas de tarefas durante uma execução, consulte[Tentativas de tarefas](monitoring-runs.md#run-status-task-retries).

### Tentativas de repetição de tarefas usando `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Por padrão, HealthOmics não tenta nenhuma nova tentativa de uma tarefa com falha, nem tenta uma nova tentativa se você configurar. `errorStrategy` Para aumentar o número máximo de novas tentativas, `errorStrategy` defina `retry` e configure o número máximo de novas tentativas usando a `maxRetries` diretiva.

O exemplo a seguir define o número máximo de novas tentativas como 3 na configuração global.

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

O exemplo a seguir mostra como definir `maxRetries` na seção de tarefas da definição do fluxo de trabalho.

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

O exemplo a seguir mostra como especificar a configuração específica da tarefa no arquivo de configuração do Nextflow, com base nos seletores de nome ou rótulo.

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

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

### Opte por não participar da tarefa novamente usando `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

Para Nextflow v23 e v24, HealthOmics suporta novas tentativas de tarefas se a tarefa falhar devido a erros de serviço (códigos de status HTTP 5XX). Por padrão, HealthOmics tenta até duas tentativas de uma tarefa com falha. 

Você pode configurar `omicsRetryOn5xx` para desativar a repetição de tarefas em caso de erros de serviço. Para obter mais informações sobre a repetição de tarefas HealthOmics, consulte[Tentativas de tarefas](monitoring-runs.md#run-status-task-retries).

O exemplo a seguir é configurado `omicsRetryOn5xx` na configuração global para desativar a repetição da tarefa.

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

O exemplo a seguir mostra como configurar `omicsRetryOn5xx` na seção de tarefas da definição do fluxo de trabalho.

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

O exemplo a seguir mostra `omicsRetryOn5xx` como definir uma configuração específica da tarefa no arquivo de configuração do Nextflow, com base nos seletores de nome ou rótulo.

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

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

### Duração da tarefa usando a `time` diretiva
<a name="time-directive-nextflow"></a>

HealthOmics fornece uma cota ajustável (consulte[HealthOmics cotas de serviço](service-quotas.md)) para especificar a duração máxima de uma execução. Para fluxos de trabalho Nextflow v23 e v24, você também pode especificar durações máximas de tarefas usando a diretiva Nextflow. `time`

Durante o desenvolvimento de um novo fluxo de trabalho, definir a duração máxima da tarefa ajuda você a capturar tarefas descontroladas e tarefas de longa execução. 

Para obter mais informações sobre a diretiva de tempo do Nextflow, consulte a diretiva de [tempo na referência](https://www.nextflow.io/docs/latest/reference/process.html#process-time) do Nextflow.

HealthOmics fornece o seguinte suporte para a diretiva de tempo Nextflow:

1. HealthOmics suporta granularidade de 1 minuto para a diretiva de tempo. Você pode especificar um valor entre 60 segundos e o valor máximo da duração da execução.

1. Se você inserir um valor menor que 60, o HealthOmics arredonda para 60 segundos. Para valores acima de 60, HealthOmics arredonda para baixo para o minuto mais próximo.

1. Se o fluxo de trabalho suportar novas tentativas para uma tarefa, HealthOmics tente novamente a tarefa se o tempo limite atingir o tempo limite.

1. Se uma tarefa atingir o tempo limite (ou se a última tentativa atingir o tempo limite), a tarefa HealthOmics será cancelada. Essa operação pode ter uma duração de um a dois minutos.

1. No tempo limite da tarefa, HealthOmics define a execução e o status da tarefa como falha e cancela as outras tarefas na execução (para tarefas com status Inicial, Pendente ou Em execução). HealthOmics exporta as saídas das tarefas concluídas antes do tempo limite para o local de saída designado do S3. 

1. O tempo que uma tarefa passa no status pendente não conta para a duração da tarefa.

1. Se a execução fizer parte de um grupo de execução e o grupo de execução expirar antes do cronômetro da tarefa, a execução e a tarefa passarão para o status de falha.

Especifique a duração do tempo limite usando uma ou mais das seguintes unidades:`ms`,,`s`, `m``h`, ou`d`.

O exemplo a seguir mostra como especificar a configuração global no arquivo de configuração do Nextflow. Ele define um tempo limite global de 1 hora e 30 minutos.

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

O exemplo a seguir mostra como especificar uma diretiva de horário na seção de tarefas da definição do fluxo de trabalho. Este exemplo define um tempo limite de 3 dias, 5 horas e 4 minutos. Esse valor tem precedência sobre o valor global no arquivo de configuração, mas não tem precedência sobre uma diretiva de tempo específica da tarefa no arquivo de `my_label` configuração.

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

O exemplo a seguir mostra como especificar diretivas de horário específicas da tarefa no arquivo de configuração do Nextflow, com base nos seletores de nome ou rótulo. Este exemplo define um valor global de tempo limite da tarefa de 30 minutos. Ele define um valor de 2 horas para a tarefa `myTask` e define um valor de 3 horas para tarefas com rótulo`my_label`. Para tarefas que correspondem ao seletor, esses valores têm precedência sobre o valor global e o valor na definição do fluxo de trabalho.

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

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

## Exportar conteúdo da tarefa
<a name="exporting-task-content-nextflow"></a>

Para fluxos de trabalho escritos em Nextflow, defina uma diretiva **PublishDir** para exportar o conteúdo da tarefa para seu bucket de saída do Amazon S3. Conforme mostrado no exemplo a seguir, defina o valor **publishDir** como`/mnt/workflow/pubdir`. Para exportar arquivos para o Amazon S3, os arquivos devem estar nesse diretório.

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

# Especificidades da definição do fluxo de trabalho do CWL
<a name="workflow-languages-cwl"></a>

Os fluxos de trabalho escritos em Common Workflow Language, ou CWL, oferecem funcionalidade semelhante aos fluxos de trabalho escritos em WDL e Nextflow. Você pode usar o Amazon S3 ou o HealthOmics armazenamento URIs como parâmetros de entrada. 

Se você definir a entrada em um SecondaryFile em um subfluxo de trabalho, adicione a mesma definição no fluxo de trabalho principal.

HealthOmics os fluxos de trabalho não oferecem suporte aos processos operacionais. Para saber mais sobre os processos operacionais nos fluxos de trabalho da CWL, consulte a documentação da [CWL](https://www.commonwl.org/user_guide/topics/operations.html).

A melhor prática é definir um fluxo de trabalho CWL separado para cada contêiner que você usa. Recomendamos que você não codifique a entrada DockerPull com um URI fixo do Amazon ECR.

**Topics**
+ [Converta fluxos de trabalho CWL para uso HealthOmics](#workflow-cwl-convert)
+ [Opte por não participar da tarefa novamente usando `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Repetir uma etapa do fluxo de trabalho](#workflow-cwl-loop)
+ [Repita as tarefas com maior memória](#workflow-cwl-out-of-memory-retry)
+ [Exemplos](#workflow-cwl-examples)

## Converta fluxos de trabalho CWL para uso HealthOmics
<a name="workflow-cwl-convert"></a>

Para converter uma definição de fluxo de trabalho CWL existente para uso HealthOmics, faça as seguintes alterações:
+ Substitua todo o contêiner URIs Docker pelo Amazon URIs ECR.
+ Certifique-se de que todos os arquivos do fluxo de trabalho sejam declarados no fluxo de trabalho principal como entrada e que todas as variáveis estejam definidas explicitamente.
+ Certifique-se de que todo JavaScript código seja uma reclamação de modo estrito.

## Opte por não participar da tarefa novamente usando `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics suporta novas tentativas de tarefas se a tarefa falhar devido a erros de serviço (códigos de status HTTP 5XX). Por padrão, HealthOmics tenta até duas tentativas de uma tarefa com falha. Para obter mais informações sobre a repetição de tarefas HealthOmics, consulte[Tentativas de tarefas](monitoring-runs.md#run-status-task-retries).

Para desativar a repetição da tarefa devido a erros de serviço, configure a `omicsRetryOn5xx` diretiva na definição do fluxo de trabalho. Você pode definir essa diretiva em requisitos ou dicas. Recomendamos adicionar a diretiva como uma dica de portabilidade.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Os requisitos substituem as dicas. Se a implementação de uma tarefa fornece um requisito de recurso em dicas que também é fornecido pelos requisitos em um fluxo de trabalho envolvente, os requisitos anexos têm precedência.

Se o mesmo requisito de tarefa aparecer em níveis diferentes do fluxo de trabalho, HealthOmics usa a entrada mais específica de `requirements` (ou`hints`, se não houver entradas`requirements`). A lista a seguir mostra a ordem de precedência HealthOmics usada para aplicar as definições de configuração, da prioridade mais baixa para a mais alta:
+ Nível do fluxo de trabalho
+ Nível de etapa
+ Seção de tarefas da definição do fluxo de trabalho

O exemplo a seguir mostra como configurar a `omicsRetryOn5xx` diretiva em diferentes níveis do fluxo de trabalho. Neste exemplo, o requisito no nível do fluxo de trabalho substitui as dicas no nível do fluxo de trabalho. As configurações de requisitos nos níveis de tarefa e etapa substituem as configurações de dicas.

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

## Repetir uma etapa do fluxo de trabalho
<a name="workflow-cwl-loop"></a>

HealthOmics suporta o loop de uma etapa do fluxo de trabalho. Você pode usar loops para executar etapas do fluxo de trabalho repetidamente até que uma condição especificada seja atendida. Isso é útil para processos iterativos em que você precisa repetir uma tarefa várias vezes ou até que um determinado resultado seja alcançado.

**Nota: A** funcionalidade de loop requer a versão 1.2 ou posterior do CWL. Os fluxos de trabalho usando versões do CWL anteriores à 1.2 não oferecem suporte a operações de loop.

Para usar loops em seu fluxo de trabalho CWL, defina um requisito de loop. O exemplo a seguir mostra a configuração dos requisitos de loop:

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

O `loopWhen` campo controla quando o loop termina. Neste exemplo, o loop continua enquanto o contador for menor que o valor máximo. O `loop` campo define como os parâmetros de entrada são atualizados entre as iterações. O `loopSource` especifica qual saída da iteração anterior alimenta a próxima iteração. O `outputMethod` campo definido como `last` retorna somente a saída da iteração final.

## Repita as tarefas com maior memória
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics suporta repetição automática de falhas de out-of-memory tarefas. Quando uma tarefa sai com o código 137 (out-of-memory), HealthOmics cria uma nova tarefa com maior alocação de memória com base no multiplicador especificado.

**nota**  
HealthOmics repete as out-of-memory falhas até 3 vezes ou até que a alocação de memória alcance 1536 GiB, qualquer que seja o limite atingido primeiro.

O exemplo a seguir mostra como configurar a nova out-of-memory tentativa:

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

Quando uma tarefa falha devido a out-of-memory, HealthOmics calcula a alocação de memória de repetição usando a fórmula:. `previous_run_memory × memoryRetryMultiplier` No exemplo acima, se a tarefa com 4096 MB de memória falhar, a nova tentativa usará 4096 × 2,5 = 10.240 MB de memória.

O `memoryRetryMultiplier` parâmetro controla a quantidade de memória adicional a ser alocada para tentativas de repetição:
+ **Valor padrão:** se você não especificar um valor, o padrão é `2` (dobra a memória)
+ **Intervalo válido:** deve ser um número positivo maior que`1`. Valores inválidos resultam em um erro de validação 4XX
+ **Valor efetivo mínimo:** valores entre `1` e `1.5` são aumentados automaticamente `1.5` para garantir aumentos significativos de memória e evitar tentativas excessivas de repetição

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

Veja a seguir um exemplo de um fluxo de trabalho escrito em 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
```

O arquivo a seguir define a `copy.cwl` tarefa.

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

Veja a seguir um exemplo de um fluxo de trabalho escrito em CWL com um 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: []
```

# Exemplos de definições de fluxo de trabalho
<a name="workflow-definition-examples"></a>

O exemplo a seguir mostra a mesma definição de fluxo de trabalho em WDL, Nextflow e CWL.

------
#### [ WDL ]

```
version 1.1

task my_task {
   runtime { ... }
   inputs {
       File input_file
       String name
       Int threshold
   }
   
   command <<<
   my_tool --name ~{name} --threshold ~{threshold} ~{input_file}
   >>>
   
   output {
       File results = "results.txt"
   }
}

workflow my_workflow {
   inputs {
       File input_file
       String name
       Int threshold = 50
   }
   
   call my_task {
       input:
          input_file = input_file,
          name = name,
          threshold = threshold
   }
   outputs {
       File results = my_task.results
   }
}
```

------
#### [ Nextflow ]

```
nextflow.enable.dsl = 2

params.input_file = null
params.name = null
params.threshold = 50

process my_task {
   // <directives>
   
   input:
     path input_file
     val name
     val threshold
   
   output:
     path 'results.txt', emit: results
   
   script:
     """
     my_tool --name ${name} --threshold ${threshold} ${input_file}
     """
     
   
}

workflow MY_WORKFLOW {
   my_task(
       params.input_file,
       params.name,
       params.threshold
   )
}

workflow {
   MY_WORKFLOW()
}
```

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

```
cwlVersion: v1.2
class: Workflow

requirements:
    InlineJavascriptRequirement: {}

inputs:
   input_file: File
   name: string
   threshold: int

outputs:
    result:
        type: ...
        outputSource: ...

steps:
    my_task:
        run:
            class: CommandLineTool
            baseCommand: my_tool
            requirements:
                ...
            inputs:
                name:
                    type: string
                    inputBinding:
                        prefix: "--name"
                threshold:
                    type: int
                    inputBinding:
                        prefix: "--threshold"
                input_file:
                    type: File
                    inputBinding: {}
            outputs:
                results:
                    type: File
                    outputBinding:
                        glob: results.txt
```

------

# Arquivos de modelo de parâmetros para HealthOmics fluxos de trabalho
<a name="parameter-templates"></a>

Os modelos de parâmetros definem os parâmetros de entrada para um fluxo de trabalho. Você pode definir parâmetros de entrada para tornar seu fluxo de trabalho mais flexível e versátil. Por exemplo, você pode definir um parâmetro para a localização dos arquivos do genoma de referência no Amazon S3. Os modelos de parâmetros podem ser fornecidos por meio de um serviço de repositório baseado em Git ou de sua unidade local. Os usuários podem então executar o fluxo de trabalho usando vários conjuntos de dados. 

Você pode criar o modelo de parâmetro para seu fluxo de trabalho ou HealthOmics gerar o modelo de parâmetro para você.

O modelo de parâmetro é um arquivo JSON. No arquivo, cada parâmetro de entrada é um objeto nomeado que deve corresponder ao nome da entrada do fluxo de trabalho. Ao iniciar uma execução, se você não fornecer valores para todos os parâmetros necessários, a execução falhará.

O objeto do parâmetro de entrada inclui os seguintes atributos:
+ **description**— Esse atributo obrigatório é uma string que o console exibe na página **Iniciar execução**. Essa descrição também é mantida como metadados de execução.
+ **optional**— Esse atributo opcional indica se o parâmetro de entrada é opcional. Se você não especificar o **optional** campo, o parâmetro de entrada será obrigatório.

O exemplo de modelo de parâmetro a seguir mostra como especificar os 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
  }
}
```

## Geração de modelos de parâmetros
<a name="parameter-parsing"></a>

HealthOmics gera o modelo de parâmetros analisando a definição do fluxo de trabalho para detectar os parâmetros de entrada. Se você fornecer um arquivo de modelo de parâmetros para um fluxo de trabalho, os parâmetros em seu arquivo substituirão os parâmetros detectados na definição do fluxo de trabalho.

Há pequenas diferenças entre a lógica de análise dos mecanismos CWL, WDL e Nextflow, conforme descrito nas seções a seguir. 

**Topics**
+ [Detecção de parâmetros para CWL](#parameter-parsing-cwl)
+ [Detecção de parâmetros para WDL](#parameter-parsing-wdl)
+ [Detecção de parâmetros para Nextflow](#parameter-parsing-nextflow)

### Detecção de parâmetros para CWL
<a name="parameter-parsing-cwl"></a>

No mecanismo de fluxo de trabalho da CWL, a lógica de análise faz as seguintes suposições:
+ Todos os tipos anuláveis suportados são marcados como parâmetros de entrada opcionais.
+ Todos os tipos não nulos suportados são marcados como parâmetros de entrada obrigatórios.
+ Todos os parâmetros com valores padrão são marcados como parâmetros de entrada opcionais.
+ As descrições são extraídas da `label` seção da definição do `main` fluxo de trabalho. Se não `label` for especificado, a descrição ficará em branco (uma string vazia). 

As tabelas a seguir mostram exemplos de interpolação de CWL. Para cada exemplo, o nome do parâmetro é`x`. Se o parâmetro for necessário, você deverá fornecer um valor para o parâmetro. Se o parâmetro for opcional, você não precisará fornecer um valor.

Esta tabela mostra exemplos de interpolação CWL para tipos primitivos.


| Entrada | Exemplo de entrada/saída | Obrigatório | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: int</pre>  | 1 ou 2 ou... | Sim | 
|  <pre>x:               <br />  type: int<br />  default: 2</pre>  | O valor padrão é 2. A entrada válida é 1 ou 2 ou... | Não | 
|  <pre>x:               <br />  type: int?</pre>  | A entrada válida é Nenhuma ou 1 ou 2 ou... | Não | 
|  <pre>x:               <br />  type: int?<br />  default: 2</pre>  | O valor padrão é 2. A entrada válida é Nenhuma ou 1 ou 2 ou... | Não | 

A tabela a seguir mostra exemplos de interpolação CWL para tipos complexos. Um tipo complexo é uma coleção de tipos primitivos.


| Entrada | Exemplo de entrada/saída | Obrigatório | 
| --- | --- | --- | 
|  <pre>x:               <br />  type: array<br />  items: int</pre>  | [] ou [1,2,3]  | Sim | 
|  <pre>x:               <br />  type: array?<br />  items: int</pre>  | Nenhum ou [] ou [1,2,3]  | Não | 
|  <pre>x:               <br />  type: array<br />  items: int?</pre>  |  [] ou [Nenhum, 3, Nenhum]  | Sim | 
|  <pre>x:               <br />  type: array?<br />  items: int?</pre>  |  [Nenhum] ou Nenhum ou [1,2,3] ou [Nenhum, 3] mas não []  | Não | 

### Detecção de parâmetros para WDL
<a name="parameter-parsing-wdl"></a>

No mecanismo de fluxo de trabalho da WDL, a lógica de análise faz as seguintes suposições:
+ Todos os tipos anuláveis suportados são marcados como parâmetros de entrada opcionais. 
+ Para tipos suportados não anuláveis:
  + Qualquer variável de entrada com atribuição de literais ou expressão é marcada como parâmetros opcionais. Por exemplo:

    ```
     Int x = 2 
    Float f0 = 1.0 + f1
    ```
  + Se nenhum valor ou expressão tiver sido atribuído aos parâmetros de entrada, eles serão marcados como parâmetros obrigatórios. 
+ As descrições são extraídas da definição `parameter_meta` do `main` fluxo de trabalho. Se não `parameter_meta` for especificado, a descrição ficará em branco (uma string vazia). Para obter mais informações, consulte a especificação WDL para [metadados de parâmetros](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#metadata-sections).

As tabelas a seguir mostram exemplos de interpolação de WDL. Para cada exemplo, o nome do parâmetro é`x`. Se o parâmetro for necessário, você deverá fornecer um valor para o parâmetro. Se o parâmetro for opcional, você não precisará fornecer um valor.

Esta tabela mostra exemplos de interpolação de WDL para tipos primitivos.


| Entrada | Exemplo de entrada/saída | Obrigatório | 
| --- | --- | --- | 
| Int x | 1 ou 2 ou... | Sim | 
| Int x = 2 | 2 | Não | 
| Int x = 1\$12 | 3 | Não | 
| Int x = y\$1z | y\$1z | Não | 
| Int? x | Nenhum ou 1 ou 2 ou... | Sim | 
| Int? x = 2 | Nenhum ou 2 | Não | 
| Int? x = 1\$12 | Nenhum ou 3 | Não | 
| Int? x = y\$1z | Nenhum ou y\$1z | Não | 

A tabela a seguir mostra exemplos de interpolação de WDL para tipos complexos. Um tipo complexo é uma coleção de tipos primitivos. 


| Entrada | Exemplo de entrada/saída | Obrigatório | 
| --- | --- | --- | 
| Matriz [Int] x | [1,2,3] ou [] | Sim | 
| Matriz [Int] \$1 x | [1], mas não [] | Sim | 
| Matriz [Int]? x | Nenhum ou [] ou [1,2,3] | Não | 
| Matriz [Int?] x | [] ou [Nenhum, 3, Nenhum] | Sim | 
| Matriz [Int?] =? x | [Nenhum] ou Nenhum ou [1,2,3] ou [Nenhum, 3] mas não [] | Não | 
| Amostra de estrutura \$1String a, Int y\$1 posteriormente nas entradas: Sample MySample  |  <pre>String a = mySample.a<br />   Int y = mySample.y</pre>  | Sim | 
| Amostra de estrutura \$1String a, Int y\$1 posteriormente nas entradas: Amostra? Minha amostra |  <pre>if (defined(mySample)) { <br />     String a = mySample.a<br />     Int y = mySample.y<br />   } </pre>  | Não | 

### Detecção de parâmetros para Nextflow
<a name="parameter-parsing-nextflow"></a>

Para o Nextflow, HealthOmics gera o modelo de parâmetro analisando o arquivo. `nextflow_schema.json` Se a definição do fluxo de trabalho não incluir um arquivo de esquema, HealthOmics analisará o arquivo principal de definição do fluxo de trabalho.

**Topics**
+ [Analisando o arquivo do esquema](#parameter-parsing-nextflow-schema)
+ [Analisando o arquivo principal](#parameter-parsing-nextflow-main)
+ [Parâmetros aninhados](#parameter-parsing-nextflow-nested)
+ [Exemplos de interpolação Nextflow](#parameter-parsing-nextflow-examples)

#### Analisando o arquivo do esquema
<a name="parameter-parsing-nextflow-schema"></a>

Para que a análise funcione corretamente, verifique se o arquivo do esquema atende aos seguintes requisitos:
+ O arquivo do esquema tem um nome `nextflow_schema.json` e está localizado no mesmo diretório do arquivo do fluxo de trabalho principal.
+ O arquivo do esquema é um JSON válido, conforme definido em um dos seguintes 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 analisa o `nextflow_schema.json` arquivo para gerar o modelo de parâmetro:
+ Extrai tudo **properties** o que está definido no esquema.
+ Inclui a propriedade, **description** se disponível para a propriedade.
+ Identifica se cada parâmetro é opcional ou obrigatório, com base no **required** campo da propriedade.

O exemplo a seguir mostra um arquivo de definição e o arquivo de parâmetros gerado.

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

O modelo de parâmetro gerado:

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

#### Analisando o arquivo principal
<a name="parameter-parsing-nextflow-main"></a>

Se a definição do fluxo de trabalho não incluir um `nextflow_schema.json` arquivo, HealthOmics analisará o arquivo principal de definição do fluxo de trabalho.

HealthOmics analisa as `params` expressões encontradas no arquivo principal de definição do fluxo de trabalho e no `nextflow.config` arquivo. Todos `params` com valores padrão são marcados como opcionais.

Para que a análise funcione corretamente, observe os seguintes requisitos:
+ HealthOmics analisa somente o arquivo de definição do fluxo de trabalho principal. Para garantir que todos os parâmetros sejam capturados, recomendamos que você conecte tudo a todos **params** os submódulos e fluxos de trabalho importados.
+ O arquivo de configuração é opcional. Se você definir um, nomeie-o `nextflow.config` e coloque-o no mesmo diretório do arquivo principal de definição do fluxo de trabalho.

O exemplo a seguir mostra um arquivo de definição e o modelo de parâmetro gerado.

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

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

O modelo de parâmetro gerado:

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

Para valores padrão definidos em nextflow.config, HealthOmics coleta `params` atribuições e parâmetros declarados em, conforme mostrado no `params {}` exemplo a seguir. Nas declarações de atribuição, `params` devem aparecer no lado esquerdo da declaração.

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

O modelo de parâmetro gerado:

```
{
    // 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 aninhados
<a name="parameter-parsing-nextflow-nested"></a>

Ambos `nextflow_schema.json` e `nextflow.config` permitem parâmetros aninhados. No entanto, o modelo de HealthOmics parâmetros requer somente os parâmetros de nível superior. Se seu fluxo de trabalho usa um parâmetro aninhado, você deve fornecer um objeto JSON como entrada para esse parâmetro.

##### Parâmetros aninhados em arquivos de esquema
<a name="parameter-parsing-schema-nested"></a>

HealthOmics pula aninhado **params** ao analisar um arquivo. `nextflow_schema.json` Por exemplo, se você definir o seguinte `nextflow_schema.json` arquivo:

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

HealthOmics ignora `input_file` e `input_num` quando gera o modelo de parâmetro:

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

Quando você executa esse fluxo de trabalho, HealthOmics espera um `input.json` arquivo semelhante ao seguinte:

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

##### Parâmetros aninhados em arquivos de configuração
<a name="parameter-parsing-config-nested"></a>

HealthOmics não coleta aninhados **params** em um `nextflow.config` arquivo e os ignora durante a análise. Por exemplo, se você definir o seguinte `nextflow.config` arquivo:

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

HealthOmics ignora `params.nested.beta` e `params.group.delta` quando gera o modelo de parâmetro:

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

#### Exemplos de interpolação Nextflow
<a name="parameter-parsing-nextflow-examples"></a>

A tabela a seguir mostra exemplos de interpolação do Nextflow para parâmetros no arquivo principal.


| Parâmetros | Obrigatório | 
| --- | --- | 
| params.input\$1file | Sim | 
| params.input\$1file = "s3://bucket/data.json” | Não | 
| params.nested.input\$1file | N/D | 
| params.nested.input\$1file = "s3://bucket/data.json” | N/D | 

A tabela a seguir mostra exemplos de interpolação do Nextflow para parâmetros no arquivo. `nextflow.config`


| Parâmetros | Obrigatório | 
| --- | --- | 
|  <pre>params.input_file = "s3://bucket/data.json"</pre>  | Não | 
|  <pre>params {<br />   input_file = "s3://bucket/data.json"<br />}</pre>  | Não | 
|  <pre>params {<br />   nested {<br />     input_file = "s3://bucket/data.json"    <br />   }<br />}</pre>  | N/D | 
|  <pre>input_file = params.input_file</pre>  | N/D | 

# Imagens de contêiner para fluxos de trabalho privados
<a name="workflows-ecr"></a>

HealthOmics oferece suporte a imagens de contêineres hospedadas em repositórios privados do Amazon ECR. Você pode criar imagens de contêiner e enviá-las para o repositório privado. Você também pode usar seu registro privado do Amazon ECR como um cache para sincronizar o conteúdo dos registros upstream.

Seu repositório Amazon ECR deve residir na mesma AWS região da conta que está chamando o serviço. Uma pessoa diferente Conta da AWS pode possuir a imagem do contêiner, desde que o repositório de imagens de origem forneça as permissões apropriadas. Para obter mais informações, consulte [Políticas para acesso entre contas ao Amazon ECR](permissions-ecr.md#permissions-cross-account).

Recomendamos que você defina a imagem do contêiner do Amazon ECR URIs como parâmetros em seu fluxo de trabalho para que o acesso possa ser verificado antes do início da execução. Também facilita a execução de um fluxo de trabalho em uma nova região alterando o parâmetro Região.

**nota**  
HealthOmics não oferece suporte a contêineres ARM e não oferece suporte ao acesso a repositórios públicos.

Para obter informações sobre como configurar as permissões do IAM HealthOmics para acessar o Amazon ECR, consulte. [HealthOmics Permissões de recursos](permissions-resource.md)

**Topics**
+ [Sincronização com registros de contêineres de terceiros](#ecr-pull-through)
+ [Considerações gerais sobre imagens de contêineres do Amazon ECR](#ecr-considerations)
+ [Variáveis de ambiente para HealthOmics fluxos de trabalho](#ecr-env-vars)
+ [Usando Java em imagens de contêiner do Amazon ECR](#ecr-java-considerations)
+ [Adicionar entradas de tarefas a uma imagem de contêiner do Amazon ECR](#ecr-tasks)

## Sincronização com registros de contêineres de terceiros
<a name="ecr-pull-through"></a>

Você pode usar as regras de cache pull through do Amazon ECR para sincronizar repositórios em um registro upstream compatível com seus repositórios privados do Amazon ECR. Para obter mais informações, consulte [Sincronizar um registro upstream](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html) no Guia do *usuário do Amazon ECR.*

O cache de extração cria automaticamente o repositório de imagens em seu registro privado quando você cria o cache e sincroniza automaticamente com a imagem em cache quando há alterações na imagem upstream. 

HealthOmics suporta cache pull through para os seguintes registros upstream: 
+ Amazon ECR Public
+ Registro de imagens de contêineres do Kubernetes
+ Quay
+ Docker Hub 
+ Microsoft Azure Container Registry
+ GitHub Registro de contêiner 
+ GitLab Registro de contêiner 

HealthOmics não suporta cache pull through para um repositório privado upstream do Amazon ECR.

Os benefícios de usar o cache pull through do Amazon ECR incluem:

1. Você evita ter que migrar manualmente as imagens do contêiner para o Amazon ECR ou sincronizar atualizações do repositório de terceiros. 

1. Os fluxos de trabalho acessam as imagens sincronizadas do contêiner em seu repositório privado, o que é mais confiável do que baixar conteúdo em tempo de execução de um registro público.

1. Como os caches pull through do Amazon ECR usam uma estrutura de URI previsível, o HealthOmics serviço pode mapear automaticamente o URI privado do Amazon ECR com o URI do registro upstream. Você não precisa atualizar e substituir os valores de URI na definição do fluxo de trabalho.

**Topics**
+ [Configurando o cache pull through](#ecr-pull-through-configure)
+ [Mapeamentos de registro](#ecr-pull-through-registry-mapping)
+ [Mapeamentos de imagens](#ecr-pull-through-mapping-format)

### Configurando o cache pull through
<a name="ecr-pull-through-configure"></a>

O Amazon ECR fornece um registro para você Conta da AWS em cada região. Certifique-se de criar a configuração do Amazon ECR na mesma região em que planeja executar o fluxo de trabalho.

As seções a seguir descrevem as tarefas de configuração do cache pull through.

**Topics**
+ [Crie uma regra de cache de pull through](#create-ecr-ptc)
+ [Permissões de registro para registro upstream](#reg-ecr-ptc)
+ [Modelos de criação de repositório](#repo-create-templates-ptc)
+ [Criação do fluxo de trabalho](#reg-mapping-ecr-ptc)

#### Crie uma regra de cache de pull through
<a name="create-ecr-ptc"></a>

Crie uma regra de cache pull through do Amazon ECR para cada registro upstream que tenha imagens que você deseja armazenar em cache. Uma regra especifica um mapeamento entre um registro upstream e o repositório privado do Amazon ECR. 

Para um registro upstream que exija autenticação, você fornece suas credenciais usando o AWS Secrets Manager.

**nota**  
Não altere uma regra de cache de pull through enquanto uma execução ativa estiver usando o repositório privado. A execução pode falhar ou, mais criticamente, fazer com que seu pipeline use imagens inesperadas.

Para obter mais informações, consulte [Criação de uma regra de cache pull through](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) no *Guia do usuário do Amazon Elastic Container Registry*.

##### Crie uma regra de cache de pull through usando o console
<a name="create-ecr-ptc-console"></a>

Para configurar o cache pull through, siga estas etapas usando o console do Amazon ECR:

1. Abra o console do Amazon ECR: https://console.aws.amazon.com /ecr

1. No menu à esquerda, em **Registro privado**, expanda **Recursos e configurações**. Em seguida, escolha **Extrair pelo cache**.

1. Na página **Pull through cache**, escolha **Adicionar regra**.

1. **No painel **Registro upstream, escolha o registro** upstream para sincronizar com seu registro privado e, em seguida, escolha Avançar.**

1. Se o registro upstream exigir autenticação, o console abrirá uma nova página na qual você especifica o segredo de SageMaker IA que contém suas credenciais. Escolha **Próximo**.

1. Em **Especificar namespaces**, no painel **Namespace Cache**, escolha se deseja criar os repositórios privados usando um prefixo de repositório específico ou sem prefixo. Se você optar por usar um prefixo, especifique o nome do prefixo em Prefixo do **repositório de cache**.

1. No painel do **namespace Upstream**, escolha se deseja extrair dos repositórios upstream usando um prefixo de repositório específico ou sem prefixo. Se você optar por usar um prefixo, especifique o nome do prefixo no prefixo do repositório **Upstream**.

   O painel de **exemplo de Namespace** mostra um exemplo de pull request, URL upstream e a URL do repositório de cache criado.

1. Escolha **Próximo**.

1. Revise a configuração e escolha **Criar** para criar a regra.

Para obter mais informações, consulte [Criar uma regra de cache de pull through (AWS Management Console)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-console).

##### Crie uma regra de cache de pull through usando a CLI
<a name="create-ecr-ptc-cli"></a>

Use o **create-pull-through-cache-rule** comando Amazon ECR para criar uma regra de cache pull through. Para registros upstream que exigem autenticação, armazene as credenciais em um segredo do Secrets Manager.

As seções a seguir fornecem exemplos para cada registro upstream compatível.

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

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Amazon ECR. Ele especifica um prefixo de repositório de `ecr-public`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes 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 registro de contêineres Kubernetes
<a name="ecr-ptc-cli-kubernetes"></a>

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Kubernetes. Ele especifica um prefixo de repositório de `kubernetes`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes 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>

O exemplo a seguir cria uma regra de cache de pull-through para o registro público do Quay. Ele especifica um prefixo de repositório de `quay`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes 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 o Docker Hub
<a name="ecr-ptc-cli-docker-hub"></a>

O exemplo a seguir cria uma regra de cache de pull-through para o registro do Docker Hub. Ele especifica um prefixo de repositório de `docker-hub`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes de `docker-hub/upstream-repository-name`. É necessário especificar o nome completo do Amazon Resource Name (ARN) do segredo que contém suas credenciais do 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>

O exemplo a seguir cria uma regra de cache pull through para o GitHub Container Registry. Ele especifica um prefixo de repositório de `github`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes de `github/upstream-repository-name`. Você deve especificar o Amazon Resource Name (ARN) completo do segredo que contém suas credenciais do 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 o Registro de Contêiner do Microsoft Azure
<a name="ecr-ptc-cli-azure"></a>

O exemplo a seguir cria uma regra de cache de pull-through para o Microsoft Azure Container Registry. Ele especifica um prefixo de repositório de `azure`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes de `azure/upstream-repository-name`. É necessário especificar o nome completo do Amazon Resource Name (ARN) do segredo que contém suas credenciais do Docker Hub.

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

O exemplo a seguir cria uma regra de cache pull through para o GitLab Container Registry. Ele especifica um prefixo de repositório de `gitlab`, o que faz com que cada repositório criado usando a regra de cache de pull-through receba o esquema de nomes de `gitlab/upstream-repository-name`. Você deve especificar o Amazon Resource Name (ARN) completo do segredo que contém suas credenciais do 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 obter mais informações, consulte [Criar uma regra de cache pull through (CLI)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html#pull-through-cache-creating-rule-cli) no Guia do usuário do *Amazon ECR.*

Você pode usar o comando **get-run-task** CLI para recuperar informações sobre a imagem do contêiner usada para uma tarefa específica:

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

A saída inclui as seguintes informações sobre a imagem do contêiner:

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

#### Permissões de registro para registro upstream
<a name="reg-ecr-ptc"></a>

Use as permissões de registro HealthOmics para permitir o uso do cache de extração e a inserção das imagens do contêiner no registro privado do Amazon ECR. Adicione uma política de registro do Amazon ECR ao registro que fornece os contêineres usados nas execuções. 

A política a seguir concede permissão para que o HealthOmics serviço crie repositórios com os prefixos de cache pull through especificados e inicie pulls upstream nesses repositórios. 

1. No console do Amazon ECR, abra o menu à esquerda, em **Registro privado**, expanda **Permissões do registro**. Em seguida, escolha **Gerar declaração**.

1. No canto superior direito, escolha JSON. Insira uma política semelhante à seguinte:

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

------

#### Modelos de criação de repositório
<a name="repo-create-templates-ptc"></a>

Para usar o cache pull through HealthOmics, o repositório Amazon ECR deve ter um modelo de criação de repositório. O modelo define as configurações para quando você ou o Amazon ECR criam um repositório privado para um registro upstream. 

Cada modelo contém um prefixo de namespace de repositório, que o Amazon ECR usa para combinar novos repositórios com um modelo específico. Os modelos especificam a configuração de todas as configurações do repositório, incluindo políticas de acesso baseadas em recursos, imutabilidade de tags, criptografia e políticas de ciclo de vida.

Para obter mais informações, consulte [Modelos de criação de repositórios](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-creation-templates.html) no *Guia do usuário do Amazon Elastic Container Registry*.

Como criar um modelo de criação de repositório:

1. No console do Amazon ECR, abra o menu à esquerda, em **Registro privado**, expanda **Recursos e configurações**. Em seguida, escolha Modelos de **criação de repositório**.

1. Selecione **Criar modelo**.

1. Em **Detalhes do modelo**, escolha **Extrair cache**.

1. Escolha se deseja aplicar esse modelo a um prefixo específico ou a todos os repositórios que não correspondam a outro modelo.

   **Se você escolher **Um prefixo específico, insira o valor do prefixo** do namespace em Prefixo.** Você especificou esse prefixo ao criar a regra PTC.

1. Escolha **Próximo**.

1. Na página **Adicionar configuração de criação de repositório**, insira Permissões do **repositório.** Use um dos exemplos de declarações de política ou insira um semelhante ao exemplo a seguir:

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

****  

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

------

1. Opcionalmente, você pode adicionar configurações do repositório, como políticas de ciclo de vida e tags. O Amazon ECR aplica essas regras a todas as imagens de contêiner criadas para o cache pull through que usam o prefixo especificado.

1. Escolha **Próximo**.

1. Revise a configuração e escolha **Avançar**.

#### Criação do fluxo de trabalho
<a name="reg-mapping-ecr-ptc"></a>

Ao criar um novo fluxo de trabalho ou versão do fluxo de trabalho, revise os mapeamentos do registro e atualize-os, se necessário. Para obter detalhes, consulte [Crie um fluxo de trabalho privado](create-private-workflow.md).

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

Você define mapeamentos de registro para mapear entre prefixos em seu registro privado do Amazon ECR e os nomes de registro upstream.

Para obter mais informações sobre mapeamentos de registro do Amazon ECR, consulte [Criação de uma regra de cache pull through no Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

O exemplo a seguir mostra mapeamentos de registro para Docker Hub, Quay e Amazon ECR Public.

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

### Mapeamentos de imagens
<a name="ecr-pull-through-mapping-format"></a>

Você define mapeamentos de imagem para mapear entre os nomes das imagens, conforme definido em seus fluxos de trabalho privados do Amazon ECR, e os nomes das imagens no registro upstream.

Você pode usar mapeamentos de imagem com registros que oferecem suporte ao cache pull through. Você também pode usar mapeamentos de imagem com registros upstream que HealthOmics não oferecem suporte para pull through cache. Você precisa sincronizar manualmente o registro upstream com seu repositório privado. 

Para obter mais informações sobre mapeamentos de imagens do Amazon ECR, consulte [Criação de uma regra de cache pull through no Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html) ECR.

O exemplo a seguir mostra mapeamentos de imagens privadas do Amazon ECR para uma imagem genômica pública e a imagem mais recente do 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",
        }
    ]
}
```

## Considerações gerais sobre imagens de contêineres do Amazon ECR
<a name="ecr-considerations"></a>
+ Arquitetura

  HealthOmics suporta contêineres x86\$164. Se sua máquina local for baseada em ARM, como o Apple Mac, use um comando como o seguinte para criar uma imagem de contêiner x86\$164: 

  ```
  docker build --platform amd64 -t my_tool:latest .
  ```
+ Ponto de entrada e concha

  HealthOmics os mecanismos de fluxo de trabalho injetam scripts bash como uma substituição de comando nas imagens de contêiner usadas pelas tarefas do fluxo de trabalho. Portanto, as imagens de contêiner devem ser criadas sem um ENTRYPOINT especificado, de forma que um shell bash seja o padrão. 
+ Caminhos montados

  Um sistema de arquivos compartilhado é montado nas tarefas do contêiner em /tmp. Todos os dados ou ferramentas incorporados à imagem do contêiner nesse local serão substituídos.

  A definição do fluxo de trabalho está disponível para tarefas por meio de uma montagem somente para leitura em /mnt/workflow.
+ Tamanho da imagem

  Consulte [HealthOmics cotas de tamanho fixo do fluxo de trabalho](fixed-quotas.md#fixed-quotas-workflows) os tamanhos máximos de imagem do contêiner.

## Variáveis de ambiente para HealthOmics fluxos de trabalho
<a name="ecr-env-vars"></a>

HealthOmics fornece variáveis de ambiente que têm informações sobre o fluxo de trabalho em execução no contêiner. Você pode usar os valores dessas variáveis na lógica das tarefas do seu fluxo de trabalho.

Todas as variáveis do HealthOmics fluxo de trabalho começam com o `AWS_WORKFLOW_` prefixo. Esse prefixo é um prefixo de variável de ambiente protegido. Não use esse prefixo para suas próprias variáveis em contêineres de fluxo de trabalho. 

HealthOmics fornece as seguintes variáveis de ambiente de fluxo de trabalho:

**AWS\$1REGION**  
Essa variável é a região em que o contêiner está sendo executado.

**AWS\$1WORKFLOW\$1EXECUTAR**  
Essa variável é o nome da execução atual.

**AWS\$1WORKFLOW\$1ID DE EXECUÇÃO**  
Essa variável é o identificador da execução atual.

**AWS\$1WORKFLOW\$1EXECUTAR UUID**  
Essa variável é o UUID de execução da execução atual.

**AWS\$1WORKFLOW\$1TAREFA**  
Essa variável é o nome da tarefa atual.

**AWS\$1WORKFLOW\$1ID DA TAREFA**  
Essa variável é o identificador da tarefa atual.

**AWS\$1WORKFLOW\$1TASK\$1UUID**  
Essa variável é o UUID da tarefa atual.

O exemplo a seguir mostra valores típicos para cada variável de ambiente:

```
AWS Region: us-east-1
Workflow Run: arn:aws:omics:us-east-1:123456789012:run/6470304
Workflow Run ID: 6470304
Workflow Run UUID: f4d9ed47-192e-760e-f3a8-13afedbd4937
Workflow Task: arn:aws:omics:us-east-1:123456789012:task/4192063
Workflow Task ID: 4192063
Workflow Task UUID: f0c9ed49-652c-4a38-7646-60ad835e0a2e
```

## Usando Java em imagens de contêiner do Amazon ECR
<a name="ecr-java-considerations"></a>

Se uma tarefa de fluxo de trabalho usa um aplicativo Java, como o GATK, considere os seguintes requisitos de memória para o contêiner:
+ Os aplicativos Java usam memória de pilha e memória de pilha. Por padrão, a memória máxima da pilha é uma porcentagem da memória total disponível no contêiner. Esse padrão depende da distribuição específica da JVM e da versão da JVM, portanto, consulte a documentação relevante da sua JVM ou defina explicitamente o máximo de memória do heap usando as opções da linha de comando Java (como `-Xmx`). 
+ Não defina a memória máxima do heap como 100% da alocação de memória do contêiner, pois a pilha da JVM também requer memória. A memória também é necessária para o coletor de lixo da JVM e para qualquer outro processo do sistema operacional em execução no contêiner.
+ Alguns aplicativos Java, como o GATK, podem usar invocações de métodos nativos ou outras otimizações, como arquivos de mapeamento de memória. Essas técnicas exigem alocações de memória executadas “fora da pilha”, que não são controladas pelo parâmetro máximo de pilha da JVM. 

  Se você sabe (ou suspeita) que seu aplicativo Java aloca memória fora da pilha, certifique-se de que sua alocação de memória de tarefas inclua os requisitos de memória fora da pilha.

  Se essas alocações fora do heap fizerem com que o contêiner fique sem memória, você normalmente não verá um **OutOfMemory** erro de Java, porque a JVM não controla essa memória. 

## Adicionar entradas de tarefas a uma imagem de contêiner do Amazon ECR
<a name="ecr-tasks"></a>

Adicione todos os executáveis, bibliotecas e scripts necessários para executar uma tarefa de fluxo de trabalho na imagem do Amazon ECR usada para executar a tarefa. 

É uma prática recomendada evitar o uso de scripts, binários e bibliotecas externos à imagem do contêiner de tarefas. Isso é especialmente importante ao usar `nf-core` fluxos de trabalho que usam um `bin` diretório como parte do pacote de fluxo de trabalho. Embora esse diretório esteja disponível para a tarefa do fluxo de trabalho, ele é montado como um diretório somente para leitura. Os recursos necessários nesse diretório devem ser copiados na imagem da tarefa e disponibilizados em tempo de execução ou ao criar a imagem do contêiner usada para a tarefa. 

Consulte [HealthOmics cotas de tamanho fixo do fluxo de trabalho](fixed-quotas.md#fixed-quotas-workflows) o tamanho máximo da imagem do contêiner HealthOmics compatível.

# HealthOmics Arquivos README do fluxo de trabalho
<a name="workflows-readme"></a>

Você pode carregar um arquivo README.md contendo instruções, diagramas e informações essenciais para seu fluxo de trabalho. Cada versão do fluxo de trabalho oferece suporte a um arquivo README, que você pode atualizar a qualquer momento.

**Os requisitos do README incluem:**
+ O arquivo README deve estar no formato markdown (.md)
+ Tamanho máximo do arquivo: 500 KiB

**Topics**
+ [Use um README existente](#workflows-add-readme)
+ [Condições de renderização](#workflows-rendering-readme)

## Use um README existente
<a name="workflows-add-readme"></a>

READMEs exportados dos repositórios Git contêm links relativos que normalmente não funcionam fora do repositório. HealthOmics A integração com o Git os converte automaticamente em links absolutos para uma renderização adequada no console, eliminando a necessidade de atualizações manuais de URL. 

Para READMEs importados do Amazon S3 ou de unidades locais, as imagens e os links devem ser públicos URLs ou ter seus caminhos relativos atualizados para uma renderização adequada.

**nota**  
As imagens devem ser hospedadas publicamente para serem exibidas no HealthOmics console. Imagens armazenadas em repositórios GitHub Enterprise Server ou GitLab Self-Managed repositórios não podem ser renderizadas.

## Condições de renderização
<a name="workflows-rendering-readme"></a>

O HealthOmics console interpola imagens e links acessíveis ao público usando caminhos absolutos. Para renderizar URLs a partir de repositórios privados, o usuário deve ter acesso ao repositório. GitLab Self-ManagedOs repositórios for GitHub Enterprise Server or, que usam domínios personalizados, HealthOmics não conseguem resolver links relativos nem renderizar imagens armazenadas nesses repositórios privados.

A tabela a seguir mostra os elementos de marcação que são compatíveis com a visualização README do AWS console.


| Elemento | AWS console | 
| --- | --- | 
| Alertas | Sim, mas sem ícones | 
| Distintivos | Sim | 
| Formatação básica de texto | Sim | 
| [Blocos de código](https://www.markdownguide.org/basic-syntax/#code-blocks) | Sim, mas não tem a funcionalidade de [realce de sintaxe](https://www.markdownguide.org/extended-syntax/#syntax-highlighting) e botão de cópia  | 
| Seções dobráveis | Sim | 
| [Cabeçalhos](https://www.markdownguide.org/basic-syntax/#headings) | Sim | 
| [Formatos de imagem](https://www.markdownguide.org/basic-syntax/#images-1) | Sim | 
| [Imagem (clicável)](https://www.markdownguide.org/basic-syntax/#linking-images) | Sim | 
| [Quebras de linha](https://www.markdownguide.org/basic-syntax/#line-breaks) | Sim | 
| Diagrama de sereia | Só pode abrir o gráfico, mover a posição do gráfico e copiar o código | 
| Cotações | Sim | 
| [https://www.markdownguide.org/extended-syntax/#subscript](https://www.markdownguide.org/extended-syntax/#subscript) | Sim | 
| [Tabelas](https://www.markdownguide.org/extended-syntax/#tables) | Sim, mas não suporta alinhamento de texto | 
| Alinhamento de texto | Sim | 

### Usando imagem e link URLs
<a name="workflows-urls-readme"></a>

Dependendo do seu provedor de origem, estruture sua base URLs para páginas e imagens nos seguintes formatos.
+ `{username}`: o nome de usuário em que o repositório está hospedado.
+ `{repo}`: O nome do repositório.
+ `{ref}`: a referência da fonte (ramificação, tag e ID do commit). 
+ `{path}`: o caminho do arquivo para a página ou imagem no repositório. 


| Provedor de origem | URL da página | URL da imagem | 
| --- | --- | --- | 
| 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 | 

GitHub,GitLab, e Bitbucket suportam páginas e imagens URLs vinculadas a um repositório público. A tabela a seguir mostra o suporte de cada provedor de origem para renderizar imagens e links URLs para repositórios privados.


| Suporte a repositórios privados | Provedor de origem | URL da página | URL da imagem | 
| --- | --- | --- | --- | 
| GitHub | Somente com acesso ao repositório | Não | 
| GitLab | Somente com acesso ao repositório | Não | 
| Bitbucket | Somente com acesso ao repositório | Não | 

# Solicitando licenças Sentieon para fluxos de trabalho privados
<a name="private-workflows-subscribe"></a>

Se seu fluxo de trabalho privado usa o software Sentieon, você precisa de uma licença Senieon. Siga estas etapas para solicitar e configurar uma licença para o software Sentieon:
+ Solicite uma licença Sentieon 
  + Envie um e-mail para o grupo de suporte da Sentieon (support@sentieon.com) para solicitar uma licença de software.
    + Forneça seu ID de usuário AWS canônico no e-mail.
    + Encontre sua ID de usuário da AWS Canonical seguindo [estas](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId) instruções.
+ Atualize sua função HealthOmics de serviço para conceder acesso ao proxy do servidor de licenciamento Sentieon e ao bucket do Sentieon Omics em sua região. O exemplo a seguir concede acesso em`us-east-1`. Se necessário, substitua esse texto pela sua região.

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

------
+ Gere um caso de AWS suporte para obter acesso ao proxy do servidor de licenças Sentieon. 
  + Para criar um caso de suporte, navegue até [support.console.aws.amazon.com](https://support.console.aws.amazon.com).
  + Forneça sua região Conta da AWS e sua região no caso de suporte. Sua conta é adicionada à lista de permissões do proxy do servidor de licenciamento.
+ Crie seu fluxo de trabalho privado usando o contêiner Sentieon e o script de licença Sentieon.
  + Para obter instruções adicionais sobre o uso das ferramentas Sentieon em fluxos de trabalho privados, consulte [Sentieon-Amazon-Omics](https://github.com/Sentieon/sentieon-amazon-omics) em. GitHub
+ A versão 202112.07 e superior do software Sentieon oferece suporte ao proxy do HealthOmics servidor de licenciamento. Para usar as versões do software Sentieon anteriores a 202112.07, entre em contato com o suporte da Sentieon.

# Impressoras de fluxo de trabalho em HealthOmics
<a name="workflows-linter"></a>

Depois de criar um fluxo de trabalho, recomendamos que você execute um linter no fluxo de trabalho antes de iniciar a primeira execução. O linter detecta erros que podem fazer com que a execução falhe. 

Para a WDL, executa HealthOmics automaticamente um linter quando você cria o fluxo de trabalho. A saída do linter está disponível no `statusMessage` campo da **get-workflow** resposta. Use o seguinte comando da CLI para recuperar a saída de status (use a ID do fluxo de trabalho do fluxo de trabalho da WDL que você criou): 

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

HealthOmics fornece ponteiros que você pode executar na definição do fluxo de trabalho antes de criar o fluxo de trabalho. Execute esses linters nos pipelines existentes para os quais você está migrando. HealthOmics
+ **WDL**— Uma imagem pública do Amazon ECR para executar um linter [WDL](https://gallery.ecr.aws/aws-genomics/healthomics-linter).
+ **Nextflow**— Uma imagem pública do Amazon ECR para executar as [regras do Linter]( https://gallery.ecr.aws/aws-genomics/linter-rules-for-nextflow) para o Nextflow. Você pode acessar o código-fonte desse linter em. [GitHub](https://github.com/awslabs/linter-rules-for-nextflow)
+ **CWL**— não disponível

# HealthOmics operações de fluxo de trabalho
<a name="creating-private-workflows"></a>

Para criar um fluxo de trabalho privado, você precisa:
+  **Workflow definition file:**Um arquivo de definição de fluxo de trabalho escrito em WDLNextflow, ouCWL. A definição do fluxo de trabalho especifica as entradas e saídas para execuções que usam o fluxo de trabalho. Também inclui especificações para as execuções e tarefas de execução do seu fluxo de trabalho, incluindo requisitos de computação e memória. O arquivo de definição do fluxo de trabalho deve estar no `.zip` formato. Para obter mais informações, consulte [Arquivos de definição de fluxo](workflow-definition-files.md) de trabalho em HealthOmics.
  + Você pode usar o [Amazon Q CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) para criar e validar seus arquivos de definição de fluxo de trabalho em WDL, Nextflow e CWL. Para obter mais informações, consulte [Exemplos de solicitações para a Amazon Q CLI](getting-started.md#omics-q-prompts) e [HealthOmics o tutorial de IA generativa da Agentic](https://github.com/aws-samples/aws-healthomics-tutorials/tree/main/generative-ai) sobre. GitHub
+  **(Optional) Parameter template file:**Um arquivo de modelo de parâmetro escrito emJSON. Crie o arquivo para definir os parâmetros de execução ou HealthOmics gere o modelo de parâmetro para você. Para obter mais informações, consulte [Arquivos de modelo de parâmetros para HealthOmics fluxos de trabalho](parameter-templates.md). 
+ **Amazon ECR container images:**Crie repositórios privados do Amazon ECR para cada contêiner usado no fluxo de trabalho. Crie imagens de contêiner para o fluxo de trabalho e armazene-as em um repositório privado ou sincronize o conteúdo de um registro upstream compatível com seu repositório privado ECR. 
+  **(Optional) Sentieon licenses:**Solicite uma Sentieon licença para usar o Sentieon software em fluxos de trabalho privados.

Para arquivos de definição de fluxo de trabalho maiores que 4 MiB (zipados), escolha uma dessas opções durante a criação do fluxo de trabalho:
+ Faça o upload para uma pasta do Amazon Simple Storage Service e especifique a localização.
+ Faça o upload para um repositório externo (tamanho máximo de 1 GiB) e especifique os detalhes do repositório.

Depois de criar um fluxo de trabalho, você pode atualizar as seguintes informações do fluxo de trabalho com a `UpdateWorkflow` operação:
+ Name (Nome)
+ Description
+ Tipo de armazenamento padrão
+ Capacidade de armazenamento padrão (com ID do fluxo de trabalho)
+ Arquivo README.md

Para alterar outras informações no fluxo de trabalho, crie um novo fluxo de trabalho ou uma nova versão do fluxo de trabalho.

Use o controle de versão do fluxo de trabalho para organizar e estruturar seus fluxos de trabalho. As versões também ajudam você a gerenciar a introdução de atualizações iterativas do fluxo de trabalho. Para obter mais informações sobre versões, consulte [Crie uma versão do fluxo de trabalho](workflows-version-create.md).

**Topics**
+ [Crie um fluxo de trabalho privado](create-private-workflow.md)
+ [Atualizar um fluxo de trabalho privado](update-private-workflow.md)
+ [Excluir um fluxo de trabalho privado](delete-private-workflow.md)
+ [Verifique o status do fluxo de trabalho](using-get-workflow.md)
+ [Referenciando arquivos de genoma a partir de uma definição de fluxo de trabalho](create-ref-files.md)

# Crie um fluxo de trabalho privado
<a name="create-private-workflow"></a>

Crie um fluxo de trabalho usando o HealthOmics console, os comandos da AWS CLI ou um dos. AWS SDKs

**nota**  
Não inclua nenhuma informação de identificação pessoal (PII) nos nomes dos fluxos de trabalho. Esses nomes são visíveis nos CloudWatch registros.

Ao criar um fluxo de trabalho, HealthOmics atribui um identificador exclusivo universal (UUID) ao fluxo de trabalho. O UUID do fluxo de trabalho é um identificador global exclusivo (guid) exclusivo em todos os fluxos de trabalho e versões do fluxo de trabalho. Para fins de proveniência de dados, recomendamos que você use o UUID do fluxo de trabalho para identificar fluxos de trabalho de forma exclusiva.

Se suas tarefas de fluxo de trabalho usarem ferramentas externas (executáveis, bibliotecas ou scripts), você cria essas ferramentas em uma imagem de contêiner. Você tem as seguintes opções para hospedar a imagem do contêiner:
+ Hospede a imagem do contêiner no registro privado do ECR. Pré-requisitos para essa opção:
  + Crie um repositório privado ECR ou escolha um repositório existente.
  + Configure a política de recursos do ECR conforme descrito em[Permissões do Amazon ECR](permissions-ecr.md).
  + Faça upload da imagem do contêiner para o repositório privado. 
+ Sincronize a imagem do contêiner com o conteúdo de um registro de terceiros compatível. Pré-requisitos para essa opção:
  + No registro privado do ECR, configure uma regra de cache pull through para cada registro upstream. Para obter mais informações, consulte [Mapeamentos de imagens](workflows-ecr.md#ecr-pull-through-mapping-format).
  + Configure a política de recursos do ECR conforme descrito em[Permissões do Amazon ECR](permissions-ecr.md).
  + Crie modelos de criação de repositórios. O modelo define as configurações para quando o Amazon ECR cria o repositório privado para um registro upstream.
  + Crie mapeamentos de prefixo para remapear referências de imagem de contêiner na definição do fluxo de trabalho para namespaces de cache do ECR.

Ao criar um fluxo de trabalho, você fornece uma definição de fluxo de trabalho que contém informações sobre o fluxo de trabalho, as execuções e as tarefas. HealthOmics pode recuperar a definição do fluxo de trabalho como um arquivo.zip armazenado localmente ou em um bucket do Amazon S3, ou de um repositório compatível baseado em Git. 

**Topics**
+ [Criando um fluxo de trabalho usando o console](#console-create-workflows)
+ [Criação de um fluxo de trabalho usando a CLI](#api-create-workflows)
+ [Criação de um fluxo de trabalho usando um SDK](#sdk-create-workflows)

## Criando um fluxo de trabalho usando o console
<a name="console-create-workflows"></a>

**Etapas para criar um fluxo de trabalho**

1. Abra o [console do HealthOmics ](https://console.aws.amazon.com/omics/).

1.  Se necessário, abra o painel de navegação esquerdo (≡). Escolha **fluxos de trabalho privados**.

1. Na página **Fluxos de trabalho privados**, escolha **Criar fluxo de trabalho**.

1. Na página **Definir fluxo de trabalho**, forneça as seguintes informações:

   1. **Nome do fluxo de trabalho**: um nome distinto para esse fluxo de trabalho. Recomendamos definir nomes de fluxo de trabalho para organizar suas execuções no AWS HealthOmics console e nos CloudWatch registros.

   1. **Descrição** (opcional): uma descrição desse fluxo de trabalho.

1. No painel **Definição do fluxo** de trabalho, forneça as seguintes informações:

   1. **Idioma do fluxo** de trabalho (opcional): selecione o idioma de especificação do fluxo de trabalho. Caso contrário, HealthOmics determina o idioma a partir da definição do fluxo de trabalho.

   1. Para a **fonte de definição do fluxo** de trabalho, escolha importar a pasta de definição de um repositório baseado em Git, de um local do Amazon S3 ou de uma unidade local.

      1. Para **importar de um serviço de repositório**:
**nota**  
HealthOmics suporta repositórios públicos e privados paraGitHub,,GitLab, BitbucketGitHub self-managed,GitLab self-managed.

         1. Escolha uma **Conexão** para conectar seus AWS recursos ao repositório externo. Para criar uma conexão, consulte[Conecte-se com repositórios de código externos](setting-up-new.md#setting-up-omics-repository).
**nota**  
Os clientes da TLV região precisam criar uma conexão na região IAD (us-east-1) para criar um fluxo de trabalho. 

         1. Em ID **completa do repositório, insira sua ID do** repositório como nome de usuário/nome do repositório. Verifique se você tem acesso aos arquivos neste repositório.

         1. Em **Referência da fonte** (opcional), insira uma referência da fonte do repositório (ramificação, tag ou ID do commit). HealthOmics usa a ramificação padrão se nenhuma referência de origem for especificada.

         1. Em **Excluir padrões de arquivo**, insira os padrões de arquivo para excluir pastas, arquivos ou extensões específicas. Isso ajuda a gerenciar o tamanho dos dados ao importar arquivos do repositório. Há no máximo 50 padrões, e os padrões devem seguir a sintaxe do [padrão global](https://fossil-scm.org/home/doc/tip/www/globs.md). Por exemplo: 

            1. `tests/`

            1. `*.jpeg`

            1. `large_data.zip`

      1. Para **Selecionar pasta de definição do S3:**

         1. Insira a localização do Amazon S3 que contém a pasta de definição de fluxo de trabalho compactada. O bucket do Amazon S3 deve estar na mesma região do fluxo de trabalho.

         1. Se sua conta não for proprietária do bucket do Amazon S3, insira o ID da AWS conta do proprietário do bucket no ID da conta do **proprietário do bucket do S3**. Essas informações são necessárias para que HealthOmics possamos verificar a propriedade do bucket.

      1. Para **Selecionar pasta de definição de uma fonte local**:

         1. Insira a localização da unidade local da pasta de definição de fluxo de trabalho compactada.

   1. **Caminho do arquivo de definição do fluxo de trabalho principal** (opcional): insira o caminho do arquivo da pasta de definição do fluxo de trabalho compactado ou do repositório para o `main` arquivo. Esse parâmetro não é necessário se houver somente um arquivo na pasta de definição do fluxo de trabalho ou se o arquivo principal tiver o nome “principal”.

1. No painel **Arquivo README** (opcional), selecione a **Fonte do arquivo README** e forneça as seguintes informações:
   + Em **Importar de um serviço de repositório**, em **Caminho do arquivo README**, insira o caminho para o arquivo README dentro do repositório.
   + Em **Selecionar arquivo do S3**, em Arquivo **README no S3, insira o URI do Amazon S3 para o arquivo** README.
   + Em **Selecionar arquivo de uma fonte local**: em **README - opcional**, **escolha Escolher arquivo** para selecionar o arquivo markdown (.md) a ser carregado.

1. No painel **Configuração de armazenamento de execução padrão**, forneça o tipo de armazenamento de execução padrão e a capacidade para execuções que usam esse fluxo de trabalho:

   1. **Tipo de execução de armazenamento**: escolha se deseja usar armazenamento estático ou dinâmico como padrão para o armazenamento de execução temporária. O padrão é armazenamento estático.

   1. **Capacidade de armazenamento de execução** (opcional): para o tipo de armazenamento de execução estática, você pode inserir a quantidade padrão de armazenamento de execução necessária para esse fluxo de trabalho. O valor padrão para esse parâmetro é 1200 GiB. Você pode substituir esses valores padrão ao iniciar uma execução.

1. **Tags** (opcional): você pode associar até 50 tags a esse fluxo de trabalho.

1. Escolha **Próximo**.

1. Na página **Adicionar parâmetros de fluxo** de trabalho (opcional), selecione a **fonte do parâmetro**:

   1. Para **Analisar do arquivo de definição do fluxo de trabalho**, HealthOmics analisará automaticamente os parâmetros do fluxo de trabalho do arquivo de definição do fluxo de trabalho.

   1. Para **Fornecer modelo de parâmetro do repositório Git**, use o caminho para o arquivo de modelo de parâmetro do seu repositório.

   1. Em **Selecionar arquivo JSON da fonte local**, faça upload de um JSON arquivo de uma fonte local que especifique os parâmetros.

   1. Em **Inserir manualmente os parâmetros do fluxo de trabalho**, insira manualmente os nomes e as descrições dos parâmetros.

1. No painel de **visualização de parâmetros**, você pode revisar ou alterar os parâmetros dessa versão do fluxo de trabalho. Se você restaurar o JSON arquivo, perderá todas as alterações locais feitas.

1. Escolha **Próximo**.

1. Na página de **remapeamento de URI de contêiner**, no painel **Regras de mapeamento**, você pode definir regras de mapeamento de URI para seu fluxo de trabalho.

   Em **Fonte do arquivo de mapeamento**, selecione uma das seguintes opções:
   + **Nenhuma** — Não são necessárias regras de mapeamento.
   + **Selecione o arquivo JSON do S3** — Especifique a localização do arquivo de mapeamento no S3. 
   + **Selecione o arquivo JSON de uma fonte local** — Especifique a localização do arquivo de mapeamento em seu dispositivo local.
   + **Inserir mapeamentos manualmente** **— insira os mapeamentos do registro e os mapeamentos de imagem no painel Mapeamentos.**

1.  O console exibe o painel **Mapeamentos.** Se você escolher um arquivo de origem de mapeamento, o console exibirá os valores do arquivo.

   1. Em **Mapeamentos do registro**, você pode editar os mapeamentos ou adicionar mapeamentos (máximo de 20 mapeamentos do registro).

      Cada mapeamento do registro contém os seguintes campos:
      + **URL do registro upstream** — O URI do registro upstream.
      + Prefixo **do repositório ECR — O prefixo** do repositório a ser usado no repositório privado do Amazon ECR.
      + (Opcional) **Prefixo do repositório upstream** — O prefixo do repositório no registro upstream.
      + (Opcional) **ID da conta ECR** — ID da conta que possui a imagem do contêiner upstream.

   1. Em **Mapeamentos de imagem**, você pode editar os mapeamentos de imagem ou adicionar mapeamentos (máximo de 100 mapeamentos de imagem).

      Cada mapeamento de imagem contém os seguintes campos:
      + **Imagem de origem** — especifica o URI da imagem de origem no registro upstream.
      + **Imagem de destino** — Especifica o URI da imagem correspondente no registro privado do Amazon ECR.

1. Escolha **Próximo**.

1. Revise a configuração do fluxo de trabalho e escolha **Criar fluxo de trabalho**.

## Criação de um fluxo de trabalho usando a CLI
<a name="api-create-workflows"></a>

Se seus arquivos de fluxo de trabalho e o arquivo de modelo de parâmetros estiverem em sua máquina local, você poderá criar um fluxo de trabalho usando o seguinte comando da CLI. 

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

A `create-workflow` operação retorna a seguinte resposta:

```
{
  "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 opcionais a serem usados ao criar um fluxo de trabalho
<a name="other-create-parameters"></a>

Você pode especificar qualquer um dos parâmetros opcionais ao criar um fluxo de trabalho. Para obter detalhes de sintaxe, consulte [CreateWorkflow](https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html)a Referência da HealthOmics API da AWS. 

**Topics**
+ [Especifique a definição do fluxo de trabalho (localização do Amazon S3)](#create-defn-uri-parameter)
+ [Use a definição de fluxo de trabalho de um repositório baseado em Git](#create-defn-uri-git)
+ [Especificar um arquivo Readme](#specify-readme-file)
+ [Especifique o arquivo **main** de definição](#create-main-parameter)
+ [Especifique o tipo de armazenamento de execução](#create-run-storage-parameter)
+ [Especifique a configuração da GPU](#create-accelerator-parameter)
+ [Configurar parâmetros de mapeamento de cache pull through](#create-prefix-mapping-parameters)

#### Especifique a definição do fluxo de trabalho (localização do Amazon S3)
<a name="create-defn-uri-parameter"></a>

Se seu arquivo de definição de fluxo de trabalho estiver localizado em uma pasta do Amazon S3, especifique a localização usando o `definition-uri` parâmetro, conforme mostrado no exemplo a seguir. Se sua conta não for proprietária do bucket Amazon S3, forneça o ID do Conta da AWS proprietário.

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

#### Use a definição de fluxo de trabalho de um repositório baseado em Git
<a name="create-defn-uri-git"></a>

Para usar a definição de fluxo de trabalho de um repositório compatível baseado em Git, use o `definition-repository` parâmetro em sua solicitação. Não forneça nenhum outro `definition` parâmetro, pois uma solicitação falhará se incluir mais de uma fonte de entrada.

O `definition-respository` parâmetro contém os seguintes campos:
+ **connectionArn**— ARN da conexão de código que conecta seus recursos da AWS ao repositório externo.
+ **fullRepositoryId**— Insira o ID do repositório como`owner-name/repo-name`. Verifique se você tem acesso aos arquivos neste repositório.
+ **sourceReference**(Opcional) — Insira um tipo de referência do repositório (BRANCH, TAG ou COMMIT) e um valor.

  HealthOmics usa a confirmação mais recente na ramificação padrão se você não especificar uma referência de origem.
+ **excludeFilePatterns**(Opcional) — Insira os padrões de arquivo para excluir pastas, arquivos ou extensões específicas. Isso ajuda a gerenciar o tamanho dos dados ao importar arquivos do repositório. Forneça no máximo 50 padrões. Os padrões devem seguir a sintaxe do padrão [global.](https://fossil-scm.org/home/doc/tip/www/globs.md) Por exemplo:
  + `tests/`
  + `*.jpeg`
  + `large_data.zip`

Ao especificar a definição do fluxo de trabalho em um repositório baseado em Git, use `parameter-template-path` para especificar o arquivo de modelo de parâmetros. Se você não fornecer esse parâmetro, HealthOmics cria o fluxo de trabalho sem um modelo de parâmetro.

O exemplo a seguir mostra os parâmetros relacionados ao conteúdo de um repositório privado baseado em 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 mais exemplos, consulte a postagem do blog [Como criar HealthOmics fluxos de trabalho da AWS a partir de conteúdo no Git](https://repost.aws/articles/ARCEN7AjhaRSmteczRoc_QsA/how-to-create-an-aws-healthomics-workflows-from-content-in-git).

#### Especificar um arquivo Readme
<a name="specify-readme-file"></a>

Você pode especificar a localização do arquivo README usando um dos seguintes parâmetros:
+ **readme-markdown**— Entrada de string ou um arquivo em sua máquina local. 
+ **readme-uri**— O URI de um arquivo armazenado no S3. 
+ **readme-path **— O caminho para o arquivo README no repositório. 

**Use readme-path somente em conjunto com definition-respository.** Se você não especificar nenhum parâmetro README, HealthOmics importe o arquivo README.md de nível raiz no repositório (se ele existir).

Os exemplos a seguir mostram como especificar a localização do arquivo README usando readme-path e readme-uri.

```
# Using README from repository
aws omics create-workflow \
    --name "documented-workflow" \
    --definition-repository '...' \
    --readme-path "docs/workflow-guide.md"

# Using README from S3
aws omics create-workflow \
    --name "s3-readme-workflow" \
    --definition-repository '...' \
    --readme-uri "s3://my-bucket/workflow-docs/readme.md"
```

Para obter mais informações, consulte [HealthOmics Arquivos README do fluxo de trabalho](workflows-readme.md).

#### Especifique o arquivo **main** de definição
<a name="create-main-parameter"></a>

Se você estiver incluindo vários arquivos de definição de fluxo de trabalho, use o `main` parâmetro para especificar o arquivo de definição principal para seu fluxo de trabalho.

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

#### Especifique o tipo de armazenamento de execução
<a name="create-run-storage-parameter"></a>

Você pode especificar o tipo de armazenamento de execução padrão (DINÂMICO ou ESTÁTICO) e a capacidade de armazenamento de execução (necessária para armazenamento estático). Para obter mais informações sobre como executar tipos de armazenamento, consulte[Execute tipos de armazenamento em HealthOmics fluxos de trabalho](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 a configuração da GPU
<a name="create-accelerator-parameter"></a>

Use o parâmetro accelerators para criar um fluxo de trabalho executado em uma instância de computação acelerada. O exemplo a seguir mostra como usar o `accelerators` parâmetro. Você especifica a configuração da GPU na definição do fluxo de trabalho. Consulte [Instâncias de computação 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
```

#### Configurar parâmetros de mapeamento de cache pull through
<a name="create-prefix-mapping-parameters"></a>

Se você estiver usando o recurso de mapeamento de cache pull through do Amazon ECR, poderá substituir os mapeamentos padrão. Para obter mais informações sobre os parâmetros de configuração do contêiner, consulte[Imagens de contêiner para fluxos de trabalho privados](workflows-ecr.md).

No exemplo a seguir, o arquivo `mappings.json` contém esse conteúdo:

```
{
    "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 os parâmetros de mapeamento no comando create-workflow:

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

Você também pode especificar a localização do arquivo de parâmetros de mapeamento no S3:

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

## Criação de um fluxo de trabalho usando um SDK
<a name="sdk-create-workflows"></a>

Você pode criar um fluxo de trabalho usando um dos SDKs. O exemplo a seguir mostra como criar um fluxo de trabalho usando o SDK do 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={ ... }
)
```

# Atualizar um fluxo de trabalho privado
<a name="update-private-workflow"></a>

Você pode atualizar um fluxo de trabalho usando o HealthOmics console, os comandos da AWS CLI ou um dos. AWS SDKs

**nota**  
Não inclua nenhuma informação de identificação pessoal (PII) nos nomes dos fluxos de trabalho. Esses nomes são visíveis nos CloudWatch registros.

**Topics**
+ [Atualizando um fluxo de trabalho usando o console](#console-update-workflows)
+ [Atualizando um fluxo de trabalho usando a CLI](#api-update-workflows)
+ [Atualização de um fluxo de trabalho usando um SDK](#sdk-update-workflows)

## Atualizando um fluxo de trabalho usando o console
<a name="console-update-workflows"></a>

**Etapas para atualizar um fluxo de trabalho**

1. Abra o [console do HealthOmics ](https://console.aws.amazon.com/omics/).

1.  Se necessário, abra o painel de navegação esquerdo (≡). Escolha **fluxos de trabalho privados**.

1. Na página **Fluxos de trabalho privados**, escolha o fluxo de trabalho a ser atualizado.

1. Na página **Fluxo de trabalho**:
   + Se o fluxo de trabalho tiver versões, certifique-se de selecionar a **versão padrão**.
   + Escolha **Editar selecionado** na lista **Ações**. 

1. Na página **Editar fluxo de trabalho**, você pode alterar qualquer um dos seguintes valores:
   + **Nome do fluxo** de trabalho.
   + **Descrição do fluxo** de trabalho.
   + O **tipo padrão de armazenamento Executar** para o fluxo de trabalho.
   + A **capacidade de armazenamento de execução** padrão (se o tipo de armazenamento de execução for armazenamento estático). Para obter mais informações sobre a configuração padrão do armazenamento de execução, consulte[Criando um fluxo de trabalho usando o console](create-private-workflow.md#console-create-workflows).

1. Escolha **Salvar alterações** para aplicar as alterações.

## Atualizando um fluxo de trabalho usando a CLI
<a name="api-update-workflows"></a>

Conforme mostrado no exemplo a seguir, você pode atualizar o nome e a descrição do fluxo de trabalho. Você também pode alterar o tipo de armazenamento de execução padrão (ESTÁTICO ou DINÂMICO) e a capacidade de armazenamento de execução (para o tipo de armazenamento estático). Para obter mais informações sobre como executar tipos de armazenamento, consulte[Execute tipos de armazenamento em HealthOmics fluxos de trabalho](workflows-run-types.md).

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

Você não recebe uma resposta à `update-workflow` solicitação.

## Atualização de um fluxo de trabalho usando um SDK
<a name="sdk-update-workflows"></a>

Você pode atualizar um fluxo de trabalho usando um dos SDKs.

O exemplo a seguir mostra como atualizar um fluxo de trabalho usando o SDK do Python.

```
import boto3

omics = boto3.client('omics')

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

# Excluir um fluxo de trabalho privado
<a name="delete-private-workflow"></a>

Quando você não precisar mais de um fluxo de trabalho, poderá excluí-lo usando o HealthOmics console, os comandos da AWS CLI ou um dos. AWS SDKs Você pode excluir um fluxo de trabalho que atenda aos seguintes critérios:
+ Seu status é ATIVO ou FALHA.
+ Não tem compartilhamentos ativos. 
+ Você excluiu todas as versões do fluxo de trabalho.

A exclusão de um fluxo de trabalho não afeta nenhuma execução em andamento que esteja usando o fluxo de trabalho.

**Topics**
+ [Excluindo um fluxo de trabalho usando o console](#console-delete-workflows)
+ [Excluindo um fluxo de trabalho usando a CLI](#api-delete-workflows)
+ [Excluindo um fluxo de trabalho usando um SDK](#sdk-delete-workflows)

## Excluindo um fluxo de trabalho usando o console
<a name="console-delete-workflows"></a>

**Para excluir um fluxo de trabalho**

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

1.  Se necessário, abra o painel de navegação esquerdo (≡). Escolha **fluxos de trabalho privados**.

1. Na página **Fluxos de trabalho privados**, escolha o fluxo de trabalho a ser excluído.

1. Na página **Fluxo de trabalho**, escolha **Excluir selecionado** na lista **Ações**.

1. No modal **Excluir fluxo** de trabalho, insira “confirmar” para confirmar a exclusão.

1. Escolha **Excluir**.

## Excluindo um fluxo de trabalho usando a CLI
<a name="api-delete-workflows"></a>

O exemplo a seguir mostra como você pode usar o AWS CLI comando para excluir um fluxo de trabalho. Para executar o exemplo, `workflow id` substitua o pelo ID do fluxo de trabalho que você deseja excluir. 

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

HealthOmics não envia uma resposta à `delete-workflow` solicitação. 

## Excluindo um fluxo de trabalho usando um SDK
<a name="sdk-delete-workflows"></a>

Você pode excluir um fluxo de trabalho usando um dos SDKs.

O exemplo a seguir mostra como excluir um fluxo de trabalho usando o SDK do Python.

```
import boto3

omics = boto3.client('omics')

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

# Verifique o status do fluxo de trabalho
<a name="using-get-workflow"></a>

Depois de criar seu fluxo de trabalho, você pode verificar o status e visualizar outros detalhes do fluxo de trabalho usando **get-workflow**, conforme mostrado.

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

A resposta inclui detalhes do fluxo de trabalho, incluindo o status, conforme mostrado.

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

Você pode iniciar uma execução usando esse fluxo de trabalho após a transição do status para`ACTIVE`.

# Referenciando arquivos de genoma a partir de uma definição de fluxo de trabalho
<a name="create-ref-files"></a>

Um objeto de armazenamento de HealthOmics referência pode ser referenciado com um URI como o seguinte. Use o seu próprio `account ID` e `reference ID` onde indicado. `reference store ID`

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

Alguns fluxos de trabalho exigirão `INDEX` arquivos `SOURCE` e para o genoma de referência. O URI anterior é o formato abreviado padrão e usará como padrão o arquivo SOURCE. Para especificar qualquer um dos arquivos, você pode usar o formulário URI longo, da seguinte forma.

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

Usar um conjunto de leitura de sequência teria um padrão semelhante, conforme mostrado.

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

Alguns conjuntos de leitura, como os baseados no FASTQ, podem conter leituras emparelhadas. Nos exemplos a seguir, eles são chamados de SOURCE1 SOURCE2 e. Formatos como BAM e CRAM terão apenas um SOURCE1 arquivo. Alguns conjuntos de leitura conterão arquivos INDEX, como `crai` arquivos `bai` ou. O URI anterior é o formato abreviado padrão e usará o SOURCE1 arquivo como padrão. Para especificar o arquivo ou índice exato, você pode usar o formato URI longo, da seguinte forma.

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

Veja a seguir um exemplo de um arquivo JSON de entrada que usa dois 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>"
}
```

Faça referência ao arquivo JSON de entrada no AWS CLI adicionando `--inputs file://<input_file.json>` à sua solicitação de **início de execução**. 