# Primeiros passos com Custom Pages

Este guia orienta você a substituir o `404` que a sua origem retorna pela sua primeira página de [Custom Pages](/pt-br/documentacao/plataforma/workloads/#custom-pages).

- Crie um conjunto de custom pages com uma página para o código de status `404`.
- Atribua o conjunto no deployment do seu [workload](/pt-br/documentacao/plataforma/workloads/).
- Envie uma requisição para um caminho que a sua origem não tem e receba a sua própria página no lugar.

Quatro objetos participam, e cada um se liga ao seguinte:

1. O **connector** guarda a sua página de erro em um caminho. Ele já existe. Para mais informações, consulte [Connectors](/pt-br/documentacao/plataforma/connectors/).
2. O **conjunto de custom pages** vincula o código de status `404` a esse caminho no connector.
3. O **deployment** do workload nomeia o conjunto, ao lado da aplicação que ele já nomeia.
4. A **requisição** chega a um caminho que o connector da aplicação responde com `404`, e o conjunto substitui essa resposta.

Um conjunto não altera nada até que um deployment o nomeie. Quando o connector da aplicação responde `404`, o visitante recebe o conteúdo da sua página no lugar, sem redirecionamento e com o código de status que a página define. Este guia trata do Azion Console e da API. Azion CLI não altera um deployment que já existe, por isso não consegue atribuir um conjunto ao seu workload.

---

Selecione a interface que você usa. Os pré-requisitos e cada etapa desta página seguem essa escolha.

## Pré-requisitos

- Um workload cujo deployment nomeia uma aplicação. Para criar um, consulte [Primeiros passos com Workloads](/pt-br/documentacao/plataforma/workloads/primeiros-passos/).
- Um caminho que o connector da sua aplicação responde com `404`, como uma página que não existe.
- Um connector que serve a sua página de erro em um caminho. Para criar um, consulte [Connectors](/pt-br/documentacao/plataforma/connectors/).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**API**

- Um personal token e `curl`. Para criar um token, consulte [Tokens pessoais](/pt-br/documentacao/fundamentos/personal-tokens/).
- O ID do connector que serve a sua página de erro.
- O ID do seu workload, do deployment dele e da aplicação que o deployment nomeia. Se o deployment nomeia um firewall, o ID dele também.

---

## Crie o conjunto de custom pages

Um conjunto de custom pages é uma lista nomeada de páginas e precisa de pelo menos uma. Cada página vincula um código de status a um caminho em um connector e pode responder com um código de status próprio. O conjunto desta etapa mantém a página em cache por `0` segundos e responde com `404`.

**Console**

Para criar o conjunto no Azion Console:

1. **Abra a página Custom Pages**

   Acesse [Azion Console](https://console.azion.com/) > **Custom Pages**.

2. **Inicie um conjunto**

   Selecione **Create Custom Page**. A página **Create Custom Page** abre.

3. **Nomeie o conjunto**

   Em **Name**, digite um nome para o conjunto, como `my-custom-pages`.

4. **Adicione um código de página**

   Selecione **Create Custom Page Code**.

5. **Selecione o código de status**

   Em **Page Code**, selecione `404`.

6. **Mantenha o tipo de página connector**

   Em **Type**, mantenha *Page Connector*.

7. **Selecione o seu connector**

   Em **Connector**, selecione o connector que serve a sua página de erro.

8. **Digite o caminho da página**

   Em **Page Path (URI)**, digite o caminho no qual o connector serve a sua página, como `/html`.

9. **Defina o tempo de cache**

   Em **Response TTL**, digite `0`.

10. **Defina o status da resposta**

    Em **Response Custom Status Code**, digite `404`.

11. **Selecione Create**

O conjunto existe com uma página para o código `404`. Ele não serve nada até que você o atribua ao seu workload. Um conjunto sem código de página é recusado com a mensagem "You must have at least one custom page code".

**API**

Para criar o conjunto com a API, envie uma requisição `POST` para o endpoint de custom pages. Substitua `[TOKEN VALUE]` pelo seu personal token e `<connector-id>` pelo ID do seu connector. Substitua `/html` pelo caminho no qual o connector serve a sua página:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/custom_pages \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{"name": "my-custom-pages", "active": true, "pages": [
  {"code": "404", "page": {"type": "page_connector", "attributes": {"connector": <connector-id>, "ttl": 0, "uri": "/html", "custom_status_code": 404}}}
]}'
```

A API responde com `201` e o conjunto novo, incluindo o `id` dele. Uma requisição com a lista `pages` vazia é recusada com `Ensure this field has at least 1 elements.` Anote o `id` do conjunto novo para atribuí-lo ao seu workload. O conjunto existe com uma página para o código `404` e não serve nada até que você o atribua.

---

## Atribua o conjunto ao seu workload

O deployment de um workload nomeia a aplicação, o firewall e o conjunto de custom pages que atendem o tráfego dele. Um workload contém um deployment, então você atribui o conjunto editando esse deployment. A aplicação que ele já nomeia continua no lugar.

**Console**

Para atribuir o conjunto no Azion Console:

1. **Abra a página Workloads**

   Acesse [Azion Console](https://console.azion.com/) > **Workloads**.

2. **Abra o seu workload**

   Selecione o seu workload. A página **Edit Workload** abre.

3. **Selecione o conjunto**

   Em **Deployment Settings**, selecione o seu conjunto em **Custom Page**. Mantenha **Application** como está.

4. **Selecione Save**

Azion Console mostra a mensagem "Your workload has been updated". O deployment do workload nomeia o seu conjunto.

**API**

Para atribuir o conjunto com a API, envie uma requisição `PATCH` para o deployment do seu workload. `strategy.attributes` contém a aplicação, o firewall e o conjunto de custom pages do deployment. Envie a aplicação que o deployment nomeia hoje, e o firewall dele se houver um, com o ID do seu conjunto em `custom_page`. Substitua `<workload-id>`, `<deployment-id>`, `<application-id>` e `<custom-page-id>`:

```bash
curl --request PATCH \
  --url https://api.azion.com/v4/workspace/workloads/<workload-id>/deployments/<deployment-id> \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "strategy": {
    "type": "default",
    "attributes": {
      "application": <application-id>,
      "custom_page": <custom-page-id>
    }
  }
}'
```

A API responde com `202`. O deployment do workload nomeia o seu conjunto em `strategy.attributes.custom_page`.

---

## Solicite uma página que a sua origem responde com 404

A verificação é a mesma, qualquer que seja a interface que atribuiu o conjunto. No comando, substitua `<your-workload-domain>` pelo workload domain do seu workload, no formato `<id>.map.azionedge.net`. Substitua `<missing-path>` pelo caminho que o connector da sua aplicação responde com `404`.

Um conjunto atribuído não serve de imediato. A alteração no deployment se espalha pela infraestrutura distribuída da Azion, e isso leva vários minutos, sem duração garantida. Enquanto ela se espalha, uma requisição pode receber o `404` da sua origem ou a sua página. Repita a requisição até a sua página responder. Para mais informações, consulte [Propagação](/pt-br/documentacao/plataforma/workloads/como-funciona/#propagacao).

Envie uma requisição para o caminho ausente e imprima os cabeçalhos da resposta com o corpo:

```bash
curl -s -D - https://<your-workload-domain>/<missing-path>
```

A resposta mantém o status `404`, que vem do `custom_status_code` da página. O corpo dela é o documento que o seu connector serve no caminho da página. Quando esse documento é uma página HTML, a resposta fica assim:

```text
HTTP/2 404 
content-type: text/html; charset=utf-8

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
      <h1>Herman Melville - Moby-Dick</h1>
```

A resposta não traz o cabeçalho `Location`, então o cliente não é redirecionado. O seu workload responde a um caminho ausente com a sua própria página.

---

## Próximos passos

- [Configurações de custom page](/pt-br/documentacao/plataforma/workloads/custom-pages/configuracoes.md): Cada campo de um conjunto e das páginas dele, e os 22 códigos de status que uma página pode substituir.
- [Personalize uma página de erro](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/personalizar-pagina-resposta-erro.md): Substitua as respostas de erro de vários códigos de status de uma vez, cada página com o próprio tempo de cache.
- [Configurações de workload](/pt-br/documentacao/plataforma/workloads/configuracoes.md#deployment): Os campos do deployment que nomeiam a aplicação, o firewall e o conjunto de custom pages.
- [Solucionar problemas de Workloads](/pt-br/documentacao/plataforma/workloads/solucao-de-problemas.md): Encontre a causa quando um workload responde com um erro em vez da resposta que você espera.
