# Configurações de workload

Um [workload](/pt-br/documentacao/plataforma/workloads/) é o objeto que recebe o tráfego de um conjunto de domínios. Ele carrega os domínios, a infraestrutura em que roda, as versões de HTTP e as portas, as configurações de TLS e o mTLS. Um subobjeto do workload, o deployment, nomeia a [aplicação](/pt-br/documentacao/plataforma/applications/), o [firewall](/pt-br/documentacao/plataforma/firewall/) e o [conjunto de custom pages](/pt-br/documentacao/plataforma/workloads/custom-pages/configuracoes/) que atendem esse tráfego. Esta página lista cada campo dos dois objetos pelo nome na API, com o controle do Console ao lado. Para os limites numéricos em um só lugar, consulte [Limites de Workloads](/pt-br/documentacao/plataforma/workloads/limites/). Para o caminho que uma requisição percorre por esses objetos, consulte [Como Workloads funciona](/pt-br/documentacao/plataforma/workloads/como-funciona/).

---

## Interfaces

Quatro interfaces escrevem os mesmos dois objetos. As tabelas desta página nomeiam o controle do Console, o campo da API e a flag da CLI de cada campo.

| Interface                                                      | Criar                                                                                                                                                                                   | Ler, atualizar, excluir                                                                                                                                                                                                                                                             |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Azion Console](https://console.azion.com/)                    | O menu **Workloads** e, em seguida, a página **Create Workload** em `/workloads/create`, com as seções **Infrastructure**, **Domains**, **Protocol Settings** e **Deployment Settings** | A página **Edit Workload** carrega as mesmas seções; sua seção **Deployment Settings** edita o deployment                                                                                                                                                                           |
| Azion API v4                                                   | `POST /v4/workspace/workloads`; `POST /v4/workspace/workloads/{workload_id}/deployments` para o deployment                                                                              | `GET`, `PUT`, `PATCH` e `DELETE /v4/workspace/workloads/{workload_id}`; `GET /v4/workspace/workloads` lista todos. `GET /v4/workspace/workloads/{workload_id}/deployments` lista o deployment, e `PATCH /v4/workspace/workloads/{workload_id}/deployments/{deployment_id}` o altera |
| Azion CLI                                                      | [`azion create workload`](/pt-br/documentacao/devtools/cli/recursos/) e `azion create workload-deployment`                                                                              | `azion describe workload`, `azion update workload --file` e `azion list workload-deployment`                                                                                                                                                                                        |
| [Terraform](/pt-br/documentacao/devtools/terraform/workloads/) | Os recursos `azion_workload` e `azion_workload_deployment`                                                                                                                              | Os mesmos recursos                                                                                                                                                                                                                                                                  |

`azion create workload` define `name` e `active` por flags; todos os outros campos do workload vão no arquivo JSON de `--file`. `azion update workload --file` lê o ID do workload de uma chave `"id"` dentro desse arquivo. A CLI não tem comando que atualize ou exclua um deployment. Altere a aplicação, o firewall ou o conjunto de custom pages de um deployment no Console ou com o `PATCH` da API.

Na API v3, as configurações de protocolo e de TLS desta página ficavam nas [Main Settings](/pt-br/documentacao/plataforma/applications/main-settings-v3/) de uma aplicação. Na API v4, elas pertencem ao workload. Para o mapeamento completo entre os dois modelos, consulte [Migração para API v4](/pt-br/documentacao/fundamentos/api-v4-migration/).

---

## Geral

Os campos gerais identificam o workload e registram quem o alterou. A API exige `name` e nada mais. Todos os outros campos desta tabela são somente leitura, exceto `active`.

| Campo da API      | Tipo              | Valores                                                           | Padrão                  | Flag da CLI                                  |
| ----------------- | ----------------- | ----------------------------------------------------------------- | ----------------------- | -------------------------------------------- |
| `id`              | integer           | atribuído pela Azion, somente leitura                             | nenhum                  | nenhuma                                      |
| `name`            | string            | 1 a 100 caracteres                                                | obrigatório, sem padrão | `--name` no `create`; `--file` no `update`   |
| `active`          | boolean           | `true`, `false`                                                   | `true`                  | `--active` no `create`; `--file` no `update` |
| `last_editor`     | string            | o email do último usuário que alterou o workload, somente leitura | nenhum                  | nenhuma                                      |
| `last_modified`   | string, date-time | somente leitura                                                   | nenhum                  | nenhuma                                      |
| `created_at`      | string, date-time | somente leitura                                                   | nenhum                  | nenhuma                                      |
| `product_version` | string            | somente leitura                                                   | `1.0`                   | nenhuma                                      |

O `name` identifica o workload na sua conta e não é um endereço de domínio, então você pode alterá-lo a qualquer momento. Um nome com 101 caracteres ou mais é recusado com `Ensure this field has no more than 100 characters.`

---

## Infraestrutura

O campo `infrastructure` escolhe a rede que atende o workload e o sufixo do seu workload domain. No Console, a seção **Infrastructure** diz: "Select the infrastructure type for your Workload. Once this option is saved, it cannot be modified."

| Controle do Console          | Campo da API     | Tipo    | Valores                                                                                | Padrão | Flag da CLI     |
| ---------------------------- | ---------------- | ------- | -------------------------------------------------------------------------------------- | ------ | --------------- |
| Radios de **Infrastructure** | `infrastructure` | integer | *Production Infrastructure (All Edge Locations)* (`1`), *Staging Infrastructure* (`2`) | `1`    | apenas `--file` |

Os dois valores diferem em onde o workload roda e nos domínios que ele aceita:

| Valor | Rede                                                    | Workload domain              | Domínios personalizados                                                                       |
| ----- | ------------------------------------------------------- | ---------------------------- | --------------------------------------------------------------------------------------------- |
| `1`   | A rede de produção, para disponibilidade global         | `<id>.map.azionedge.net`     | Aceitos em `domains`                                                                          |
| `2`   | A rede de staging, para testes, com propagação limitada | `<id>.preview.azionedge.net` | Recusados com `Custom hostname is not available in the environment 'Staging Infrastructure'.` |

Um workload de staging é acessado apenas pelo seu workload domain, e as alterações feitas nele não afetam o workload de produção. O valor é fixado na criação: uma atualização que o altere é recusada com `The infrastructure cannot be changed after Workload creation.` Por exemplo, para levar uma configuração testada em staging para produção, você cria um segundo workload com `infrastructure` definido como `1` em vez de editar o primeiro.

---

## Domínios

Os campos de domínio decidem a quais hostnames o workload responde. Todo workload recebe um workload domain somente leitura, e `domains` adiciona seus próprios hostnames e o hostname `azion.app` gratuito e opcional que o Console chama de **Azion Custom Domain**. A seção **Domains** do Console escreve os três campos.

| Controle do Console                                                                                                                                                         | Campo da API                   | Tipo            | Valores                                                                                        | Padrão               | Flag da CLI     |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | --------------- | ---------------------------------------------------------------------------------------------- | -------------------- | --------------- |
| **Subdomain** e **Domain**, uma linha por hostname, adicionada com **Add Domain**; o switch **Custom Domain** e o campo **Azion Custom Domain** para o hostname `azion.app` | `domains`                      | array of string | hostnames conformes à RFC 1035, exceto wildcards                                               | `[]`                 | apenas `--file` |
| **Workload Domain**                                                                                                                                                         | `workload_domain`              | string          | `<id>.map.azionedge.net` em produção, `<id>.preview.azionedge.net` em staging, somente leitura | atribuído na criação | nenhuma         |
| Switch **Workload Domain Allow Access**                                                                                                                                     | `workload_domain_allow_access` | boolean         | `true`, `false`                                                                                | `true`               | apenas `--file` |

O campo **Domain** aceita um domínio que você digita ou um que você seleciona no [Edge DNS](/pt-br/documentacao/plataforma/edge-dns/). O campo **Azion Custom Domain** aceita um nome como `my-custom-name` e acrescenta `.azion.app`, e o hostname completo é armazenado em `domains` ao lado dos seus. O hostname `azion.app` está disponível sem custo adicional.

`workload_domain_allow_access` definido como `true` permite que os clientes acessem o workload pelo seu workload domain, independentemente do que mais `domains` contenha. Defina-o como `false` quando o workload deve responder apenas nos seus próprios hostnames. Para apontar seu próprio domínio para o workload domain, consulte [Aponte um domínio para um workload](/pt-br/documentacao/guias/plataforma/migracao/apontar-dominio-para-a-azion/).

A API aplica estas regras a `domains`:

| Regra                                                                                                               | Recusada com                                                                                        |
| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| A conta precisa ter permissão para usar cada domínio da lista                                                       | `This account is not allowed to use the following CNAMEs: example.com.`                             |
| Um workload carrega no máximo um hostname `azion.app`, quer as duas entradas repitam um nome, quer sejam diferentes | `Duplicated usage of suffix in alternate_domains: 'azion.app'.`                                     |
| Um hostname `azion.app` que outro workload carrega não está disponível                                              | `The custom hostname is not available.`                                                             |
| Cada entrada está conforme à RFC 1035, então um wildcard como `*.azion.app` é recusado                              | `The domain does not conform to the format defined in RFC 1035.`                                    |
| Um workload de staging não aceita hostname personalizado                                                            | `Custom hostname is not available in the environment 'Staging Infrastructure'.`                     |
| Com `workload_domain_allow_access` definido como `false`, `domains` precisa conter pelo menos um hostname           | `When the workload hostname access is blocked, the workload requires alternate domains or domains.` |

A API armazena cada hostname com a caixa que você envia: `Docs-Rework-Upper.azion.app` é lido de volta sem alteração.

---

## Protocolos e portas

O objeto `protocols.http` define as versões de HTTP que o workload aceita e as portas em que ele escuta. No Console, a seção **Protocol Settings** o escreve, por meio de dois switches e três listas de portas.

| Controle do Console                                                        | Campo da API                 | Tipo                                            | Valores                                                                                       | Padrão                        | Flag da CLI     |
| -------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------- | ----------------------------- | --------------- |
| Switch **HTTP/3 support** para `http3`                                     | `protocols.http.versions`    | array of string, no máximo 3 itens              | `http1`, `http2`, `http3`                                                                     | `["http1", "http2", "http3"]` | apenas `--file` |
| **HTTP Ports**                                                             | `protocols.http.http_ports`  | array of integer, de 1 a 4 itens                | `80`, `8008`, `8080`, `8880`                                                                  | `[80]`                        | apenas `--file` |
| **HTTPS Ports**, disponível quando o switch **HTTPS support** está ativado | `protocols.http.https_ports` | array of integer, de 1 a 12 itens, ou `null`    | `443`, `8443`, `9440`, `9441`, `9442`, `9443`, `7777`, `8888`, `9553`, `9653`, `8035`, `8090` | `[443]`                       | apenas `--file` |
| **HTTP3 Port**, disponível quando o switch **HTTP/3 support** está ativado | `protocols.http.quic_ports`  | array of integer, no máximo 12 itens, ou `null` | números de porta; `443` e `8443` são aceitos                                                  | `[443]`                       | apenas `--file` |

O HTTP/3 roda sobre QUIC. O texto de ajuda do Console para **HTTP/3 support** diz "Enable HTTP/3 over QUIC. Requires HTTPS support to be enabled.", e a API acrescenta uma segunda dependência em `versions`: uma lista com `http3` também precisa conter `http1` e `http2`. Caso contrário, a API a recusa com `Missing required choices for multiple choices field: ['http1', 'http2'].`

Uma porta HTTP fora dos quatro valores é recusada com `Invalid choices for multiple choices field: [80, 8008, 8080, 8880].` Por exemplo, um workload que atende HTTP em `8080` junto com `80` envia `"http_ports": [80, 8080]`. Para as combinações de portas de entrega e de origem que uma aplicação pode usar, consulte [Configure portas HTTP e HTTPS](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/configurar-portas/).

---

## TLS

O Transport Layer Security (TLS) criptografa a conexão entre um cliente e o workload. O objeto `tls` nomeia o certificado que o workload apresenta, a versão mais baixa de TLS que ele aceita e o conjunto de cifras que ele oferece. No Console, esses controles ficam na seção **Protocol Settings**, e **Digital Certificate** aparece quando o switch **HTTPS support** está ativado.

| Controle do Console     | Campo da API          | Tipo               | Valores                                                                                                | Padrão    | Flag da CLI     |
| ----------------------- | --------------------- | ------------------ | ------------------------------------------------------------------------------------------------------ | --------- | --------------- |
| **Digital Certificate** | `tls.certificate`     | integer, ou `null` | o ID de um certificado do tipo `edge_certificate`, ou `null` para o certificado SAN da Azion           | `null`    | apenas `--file` |
| **Minimum TLS version** | `tls.minimum_version` | enum               | `tls_1_0` (TLS 1.0, obsoleto), `tls_1_1` (TLS 1.1, obsoleto), `tls_1_2` (TLS 1.2), `tls_1_3` (TLS 1.3) | `tls_1_3` | apenas `--file` |
| **Cipher suite**        | `tls.ciphers`         | integer            | `1` a `8`, um por conjunto em Conjuntos de cifras                                                      | `7`       | apenas `--file` |

O HTTPS precisa de um certificado X.509. Você pode fazer upload do seu próprio certificado no [Certificate Manager](/pt-br/documentacao/plataforma/workloads/certificate-manager/certificados/) ou solicitar um certificado Let's Encrypt gerenciado pela Azion, ambos sem custo adicional. Com `tls.certificate` definido como `null`, o workload apresenta o certificado SAN da Azion, que cobre o Azion Custom Domain e o workload domain. Um certificado de outro tipo é recusado: um certificado de CA confiável em `tls.certificate` retorna `Invalid certificate type, MUST be an Edge Certificate.`

`tls.minimum_version` define um piso, não a versão exata que uma sessão usa. Um workload com `tls_1_2` ainda pode atender uma sessão em TLS 1.3, dependendo da cifra que o cliente e o workload negociam a partir do conjunto. A Azion bloqueia a renegociação de TLS e a retomada de TLS por padrão. Para alterar isso, entre em contato com o time de Vendas.

O conjunto de cifras decide quais algoritmos criptográficos uma conexão TLS pode usar. O cliente e o workload negociam uma cifra do conjunto para cada sessão. A API recusa um valor fora de `1` a `8`. Para `9`, a mensagem é `"9" is not a valid choice.` Para alterar o conjunto passo a passo, consulte [Defina o conjunto de cifras TLS](/pt-br/documentacao/guias/seguranca-de-aplicacoes/tls-e-certificados/cifras/).

### Conjuntos de cifras

Cada valor de `tls.ciphers` seleciona um conjunto nomeado. As tabelas abaixo listam as cifras que cada conjunto contém, com a versão de TLS a que cada cifra pertence.

#### Conjunto 1, TLSv1.2\_2018

`ciphers: 1` seleciona `TLSv1.2_2018`, que contém três cifras de TLS 1.3 e 13 cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA384`     |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA384`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA256`     |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA256`       |
| TLS 1.2       | `AES256-GCM-SHA384`             |
| TLS 1.2       | `AES128-GCM-SHA256`             |
| TLS 1.2       | `AES128-SHA256`                 |

#### Conjunto 2, TLSv1.2\_2019

`ciphers: 2` seleciona `TLSv1.2_2019`, que contém três cifras de TLS 1.3 e 10 cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA384`     |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA384`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA256`     |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA256`       |

#### Conjunto 3, TLSv1.3\_2022

`ciphers: 3` seleciona `TLSv1.3_2022`, que contém seis cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |

#### Conjunto 4, TLSv1.2\_2021

`ciphers: 4` seleciona `TLSv1.2_2021`, que contém três cifras de TLS 1.3 e seis cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |

#### Conjunto 5, Legacy\_v2025Q1

`ciphers: 5` seleciona `Legacy_v2025Q1`, que contém três cifras de TLS 1.3 e 15 cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA384`     |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA384`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA256`     |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA256`       |
| TLS 1.2       | `AES256-GCM-SHA384`             |
| TLS 1.2       | `AES128-GCM-SHA256`             |
| TLS 1.2       | `AES256-SHA`                    |
| TLS 1.2       | `AES128-SHA256`                 |
| TLS 1.2       | `AES128-SHA`                    |

#### Conjunto 6, Compatible\_v2025Q1

`ciphers: 6` seleciona `Compatible_v2025Q1`, que contém três cifras de TLS 1.3 e 12 cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA384`     |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA384`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA256`     |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA256`       |
| TLS 1.2       | `AES256-GCM-SHA384`             |
| TLS 1.2       | `AES128-GCM-SHA256`             |

#### Conjunto 7, Modern\_v2025Q1

`ciphers: 7` seleciona `Modern_v2025Q1`, que contém três cifras de TLS 1.3 e seis cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-CHACHA20-POLY1305` |
| TLS 1.2       | `ECDHE-RSA-CHACHA20-POLY1305`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |

#### Conjunto 8, Legacy\_v2017Q1

`ciphers: 8` seleciona `Legacy_v2017Q1`, que contém três cifras de TLS 1.3 e 26 cifras de TLS 1.2:

| Versão de TLS | Cifra                           |
| ------------- | ------------------------------- |
| TLS 1.3       | `TLS_AES_256_GCM_SHA384`        |
| TLS 1.3       | `TLS_CHACHA20_POLY1305_SHA256`  |
| TLS 1.3       | `TLS_AES_128_GCM_SHA256`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-GCM-SHA384` |
| TLS 1.2       | `ECDHE-RSA-AES256-GCM-SHA384`   |
| TLS 1.2       | `ECDHE-ECDSA-AES128-GCM-SHA256` |
| TLS 1.2       | `ECDHE-RSA-AES128-GCM-SHA256`   |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA384`     |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA384`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA256`     |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA256`       |
| TLS 1.2       | `ECDHE-ECDSA-AES256-SHA`        |
| TLS 1.2       | `ECDHE-ECDSA-AES128-SHA`        |
| TLS 1.2       | `ECDHE-RSA-AES256-SHA`          |
| TLS 1.2       | `ECDHE-RSA-AES128-SHA`          |
| TLS 1.2       | `ECDHE-ECDSA-AES256-CCM`        |
| TLS 1.2       | `ECDHE-ECDSA-AES256-CCM8`       |
| TLS 1.2       | `ECDHE-ECDSA-AES128-CCM`        |
| TLS 1.2       | `ECDHE-ECDSA-AES128-CCM8`       |
| TLS 1.2       | `AES256-GCM-SHA384`             |
| TLS 1.2       | `AES128-GCM-SHA256`             |
| TLS 1.2       | `AES256-SHA256`                 |
| TLS 1.2       | `AES256-SHA`                    |
| TLS 1.2       | `AES128-SHA256`                 |
| TLS 1.2       | `AES128-SHA`                    |
| TLS 1.2       | `AES256-CCM`                    |
| TLS 1.2       | `AES256-CCM8`                   |
| TLS 1.2       | `AES128-CCM`                    |
| TLS 1.2       | `AES128-CCM8`                   |

---

## mTLS

O TLS mútuo (mTLS) faz o cliente também apresentar um certificado, e o workload o verifica contra uma autoridade certificadora em que você confia. O objeto `mtls` ativa a verificação e nomeia o certificado de CA confiável e as listas de revogação de certificados (CRLs) que ela usa. Defina-o pela API ou pelo arquivo JSON de `azion update workload --file`.

| Campo da API               | Tipo                                             | Valores                                                 | Padrão  | Flag da CLI     |
| -------------------------- | ------------------------------------------------ | ------------------------------------------------------- | ------- | --------------- |
| `mtls.enabled`             | boolean                                          | `true`, `false`                                         | `false` | apenas `--file` |
| `mtls.config.certificate`  | integer, ou `null`                               | o ID de um certificado do tipo `trusted_ca_certificate` | `null`  | apenas `--file` |
| `mtls.config.crl`          | array of integer, no máximo 100 itens, ou `null` | IDs de CRL                                              | `null`  | apenas `--file` |
| `mtls.config.verification` | enum, ou `null`                                  | `enforce`, `permissive`                                 | `null`  | apenas `--file` |

Um certificado de servidor em `mtls.config.certificate` é recusado com `Invalid certificate type, MUST be a Trusted CA.` Por exemplo, um workload que verifica certificados de cliente contra sua CA e uma CRL, no modo `enforce`, envia `"mtls": {"enabled": true, "config": {"certificate": <trusted-ca-id>, "crl": [<crl-id>], "verification": "enforce"}}`. Para saber como `enforce` e `permissive` tratam um certificado de cliente, consulte [mTLS](/pt-br/documentacao/plataforma/workloads/mtls/).

---

## Deployment

Um deployment vincula a aplicação, o firewall e o conjunto de custom pages que atendem o tráfego de um workload. Ele é um sub-recurso do workload, em `/v4/workspace/workloads/{workload_id}/deployments`, e um workload carrega um deployment. Um segundo é recusado com `The maximum number of deployments allowed per workload is 1.` No Console, a seção **Deployment Settings** do workload o escreve.

| Controle do Console | Campo da API                      | Tipo               | Valores                                                    | Flag da CLI        |
| ------------------- | --------------------------------- | ------------------ | ---------------------------------------------------------- | ------------------ |
| nenhum              | `name`                            | string             | o nome do deployment                                       | `--name`           |
| nenhum              | `active`                          | boolean            | `true`, `false`                                            | `--active`         |
| nenhum              | `current`                         | boolean            | `true` torna este deployment aquele que o workload executa | `--current`        |
| nenhum              | `strategy.type`                   | string             | `default`                                                  | `--strategy-type`  |
| **Application**     | `strategy.attributes.application` | integer            | o ID de uma aplicação                                      | `--application-id` |
| **Firewall**        | `strategy.attributes.firewall`    | integer            | o ID de um firewall                                        | `--firewall-id`    |
| **Custom Page**     | `strategy.attributes.custom_page` | integer, ou `null` | o ID de um conjunto de custom pages                        | `--custom-page`    |

`strategy.attributes` contém exatamente essas três chaves. Um deployment criado sem conjunto de custom pages contém `"custom_page": null`. Um deployment sem firewall mostra *Select a Firewall* no campo **Firewall** do Console e `0` em `azion list workload-deployment --details`. Um conjunto de custom pages só tem efeito quando o deployment o nomeia em `custom_page`. Um workload que ainda usa um firewall impede que esse firewall seja excluído, e excluir o deployment não o libera: exclua o workload primeiro.

---

## Corpo da requisição

O corpo JSON abaixo cria um workload de staging com TLS 1.2 como piso, o conjunto de cifras 4 e duas portas HTTP e duas HTTPS. O mesmo corpo funciona para `POST /v4/workspace/workloads` e para o arquivo de `azion create workload --file`:

```json
{
  "name": "my-workload",
  "active": true,
  "infrastructure": 2,
  "tls": { "certificate": null, "ciphers": 4, "minimum_version": "tls_1_2" },
  "protocols": { "http": { "versions": ["http1", "http2"], "http_ports": [80, 8080], "https_ports": [443, 8443], "quic_ports": null } },
  "domains": [],
  "workload_domain_allow_access": true
}
```

Envie-o com a CLI, com o corpo salvo como `wl-staging.json`:

```bash
azion create workload --file wl-staging.json
```

O comando imprime o ID do novo workload:

```text
Created Workload with ID <workload-id>
```

`azion describe workload --workload-id <workload-id> --format json` então retorna o workload como a API o armazena, com seu workload domain de staging:

```json
{
 "active": true,
 "created_at": "2026-01-01T12:00:00.000000Z",
 "domains": [],
 "id": <workload-id>,
 "infrastructure": 2,
 "last_editor": "<your-email>",
 "last_modified": "2026-01-01T12:00:00.000000Z",
 "mtls": {
  "config": {
   "certificate": null,
   "verification": null
  },
  "enabled": false
 },
 "name": "my-workload",
 "product_version": "1.0",
 "protocols": {
  "http": {
   "http_ports": [
    80,
    8080
   ],
   "https_ports": [
    443,
    8443
   ],
   "versions": [
    "http1",
    "http2"
   ]
  }
 },
 "tls": {
  "certificate": null,
  "ciphers": 4,
  "minimum_version": "tls_1_2"
 },
 "workload_domain": "<id>.preview.azionedge.net",
 "workload_domain_allow_access": true
}
```

Pela API, `POST /v4/workspace/workloads` responde com HTTP `202` e `state` definido como `pending`. Um workload de produção criado apenas com `name`, `active`, `infrastructure` e `workload_domain_allow_access` retorna todos os padrões:

```json
{"state":"pending","data":{"id":<workload-id>,"name":"my-workload","active":true,"last_editor":"<your-email>","last_modified":"2026-01-01T12:00:00.000000Z","created_at":"2026-01-01T12:00:00.000000Z","infrastructure":1,"tls":{"certificate":null,"ciphers":7,"minimum_version":"tls_1_3"},"protocols":{"http":{"versions":["http1","http2","http3"],"http_ports":[80],"https_ports":[443],"quic_ports":[443]}},"mtls":{"enabled":false,"config":{"certificate":null,"crl":null,"verification":null}},"domains":[],"workload_domain_allow_access":true,"workload_domain":"<id>.map.azionedge.net","product_version":"1.0"}}
```

O corpo de deployment abaixo vincula uma aplicação e um firewall por meio de `POST /v4/workspace/workloads/{workload_id}/deployments`:

```json
{"name":"my-deployment","current":true,"active":true,
 "strategy":{"type":"default","attributes":{"application":<application-id>,"firewall":<firewall-id>}}}
```

A API responde com HTTP `202`, `state` definido como `pending` e o deployment com `custom_page` definido como `null`:

```json
{"state":"pending","data":{"id":<deployment-id>,"name":"my-deployment","current":true,
 "active":true,"strategy":{"type":"default","attributes":{"application":<application-id>,
 "firewall":<firewall-id>,"custom_page":null}},"last_editor":"<your-email>",
 "last_modified":"2026-01-01T12:00:00.000000Z","created_at":"2026-01-01T12:00:00.000000Z"}}
```

A CLI cria o mesmo vínculo por flags, aqui com uma aplicação e um conjunto de custom pages:

```bash
azion create workload-deployment \
  --workload-id <workload-id> \
  --name my-deployment \
  --application-id <application-id> \
  --custom-page <custom-page-id> \
  --strategy-type default \
  --active true \
  --current true
```

O comando imprime o ID do novo deployment:

```text
Created Workload Deployment with ID <deployment-id>
```

`azion list workload-deployment --workload-id <workload-id> --details` mostra o deployment, sua aplicação e seu firewall, com `0` quando não há firewall:

```text
ID      CURRENT  EDGE APPLICATION  EDGE FIREWALL  
<deployment-id>  true     <application-id>        0              
```

---

## Erros

A API recusa cada requisição abaixo com a mensagem da primeira coluna. Para uma recusa de workload ou de deployment, a CLI imprime a mensagem dentro de `Error: Failed to create the Workload: [...]`, `Error: Failed to update the Workload: [...]` ou `Error: Failed to create the Workload Deployment: [...]`, seguida de `Check your settings and try again. If the error persists, contact Azion support.` A linha `24003` é a resposta da API a um `DELETE` de firewall.

| Mensagem                                                                                                                         | Causa                                                                                                                  | O que fazer                                                                                                                                 |
| -------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `Ensure this field has no more than 100 characters.`                                                                             | `name` tem mais de 100 caracteres.                                                                                     | Encurte o nome para 100 caracteres ou menos.                                                                                                |
| `The infrastructure cannot be changed after Workload creation.`                                                                  | Uma atualização altera `infrastructure`.                                                                               | Deixe `infrastructure` fora da atualização, ou crie um novo workload na outra infraestrutura.                                               |
| `Custom hostname is not available in the environment 'Staging Infrastructure'.`                                                  | `domains` contém um hostname em um workload com `infrastructure` definido como `2`.                                    | Envie `"domains": []` e acesse o workload pelo seu workload domain, ou use um workload de produção.                                         |
| `When the workload hostname access is blocked, the workload requires alternate domains or domains.`                              | `workload_domain_allow_access` é `false` e `domains` está vazio.                                                       | Adicione um hostname a `domains`, ou defina `workload_domain_allow_access` como `true`.                                                     |
| `This account is not allowed to use the following CNAMEs: example.com.`                                                          | `domains` contém um domínio para o qual a conta não tem permissão; a mensagem o nomeia.                                | Remova o domínio, ou use um domínio para o qual a conta tenha permissão.                                                                    |
| `Duplicated usage of suffix in alternate_domains: 'azion.app'.`                                                                  | `domains` contém dois hostnames `azion.app`, o mesmo nome duas vezes ou dois nomes diferentes.                         | Mantenha um hostname `azion.app`.                                                                                                           |
| `The custom hostname is not available.`                                                                                          | Outro workload já carrega o hostname `azion.app`.                                                                      | Escolha outro nome, ou remova-o do outro workload primeiro.                                                                                 |
| `The domain does not conform to the format defined in RFC 1035.`                                                                 | Uma entrada de `domains` é um wildcard, como `*.azion.app`, ou outro nome malformado.                                  | Liste cada hostname por completo.                                                                                                           |
| `Invalid choices for multiple choices field: [80, 8008, 8080, 8880].`                                                            | `http_ports` contém uma porta fora dos quatro valores permitidos.                                                      | Use apenas `80`, `8008`, `8080` ou `8880`.                                                                                                  |
| `Missing required choices for multiple choices field: ['http1', 'http2'].`                                                       | `versions` contém `http3` sem `http1` e `http2`.                                                                       | Envie `["http1", "http2", "http3"]`, ou remova `http3`.                                                                                     |
| `"9" is not a valid choice.`                                                                                                     | `tls.ciphers` está fora de `1` a `8`; a mensagem cita o valor enviado.                                                 | Envie um número de conjunto de `1` a `8`.                                                                                                   |
| `Invalid certificate type, MUST be an Edge Certificate.`                                                                         | `tls.certificate` contém o ID de um certificado de CA confiável.                                                       | Envie o ID de um certificado do tipo `edge_certificate`, ou `null`.                                                                         |
| `Invalid certificate type, MUST be a Trusted CA.`                                                                                | `mtls.config.certificate` contém o ID de um certificado de servidor.                                                   | Envie o ID de um certificado do tipo `trusted_ca_certificate`.                                                                              |
| `The maximum number of deployments allowed per workload is 1.`                                                                   | Um segundo deployment é criado em um workload que já tem um.                                                           | Altere o deployment existente com `PATCH /v4/workspace/workloads/{workload_id}/deployments/{deployment_id}`, ou em **Deployment Settings**. |
| `24003` `Cannot Delete Firewall`: `To delete this firewall, you must first remove its usage in the following workloads: [<id>].` | Um `DELETE` tem como alvo um firewall que o deployment de um workload ainda nomeia. Excluir o deployment não o libera. | Exclua os workloads que a mensagem lista e repita o `DELETE`.                                                                               |

---

## Recursos relacionados

- [mTLS](/pt-br/documentacao/plataforma/workloads/mtls.md): Como um workload verifica certificados de cliente nos modos enforce e permissive, com a CA confiável e as CRLs que usa.
- [Limites de Workloads](/pt-br/documentacao/plataforma/workloads/limites.md): Cada limite de um workload, dos seus domínios e do seu deployment, com o que acontece além de cada um.
- [Como Workloads funciona](/pt-br/documentacao/plataforma/workloads/como-funciona.md): O caminho que uma requisição percorre de um domínio, pelo workload, até sua aplicação e seu firewall.
- [Certificados](/pt-br/documentacao/plataforma/workloads/certificate-manager/certificados.md): Os certificados de servidor e de CA confiável que um workload aceita, e como fazer upload de um ou solicitá-lo.
