# Primeiros passos com Connectors

Este guia orienta você a enviar o seu primeiro caminho para uma segunda origem com um [connector](/pt-br/documentacao/plataforma/connectors/).

- Crie um connector do tipo `http` que alcança uma segunda origem por HTTPS e envia o próprio header `Host` dessa origem.
- Adicione uma regra que aponta um caminho da sua aplicação para o connector com o behavior *Set Connector*.
- Envie uma requisição para esse caminho pelo seu workload e receba a resposta da segunda origem.

Quatro partes formam a cadeia, listadas na ordem em que este guia as usa:

1. O **connector** guarda o endereço da segunda origem, o header `Host` que ele envia e o protocolo que ele usa para se conectar.
2. A **regra** na sua aplicação corresponde a um caminho na fase de requisição. O behavior *Set Connector* dela nomeia o connector.
3. O **workload** que já atende a sua aplicação recebe a requisição. O deployment dele não precisa de nenhuma mudança.
4. A **requisição** para esse caminho encontra a regra, e o connector a envia para a segunda origem. Todos os outros caminhos continuam chegando à origem do seu primeiro connector.

Um connector não recebe tráfego até que uma regra o nomeie. Este guia usa `httpbin.org` como segunda origem, um serviço público que responde a toda requisição sob `/anything` com uma cópia em JSON da requisição que recebeu. Por isso, a resposta que você verifica no fim mostra o que o connector enviou. Para usar a sua própria origem, substitua `httpbin.org` pelo hostname dela e `/anything` pelo caminho dela, como `/api/`.

O connector que este guia deixa pronto é o ponto de partida dos produtos de Connectors. [Load Balancer](/pt-br/documentacao/plataforma/connectors/#load-balancer) distribui as requisições entre até 15 endereços de um connector. [Origin Shield](/pt-br/documentacao/plataforma/connectors/#origin-shield) protege a origem com um Origin IP ACL e com assinatura HMAC. [Live Ingest](/pt-br/documentacao/plataforma/connectors/#live-ingest) recebe uma transmissão ao vivo por um connector do tipo `live_ingest`.

---

Os pré-requisitos e as três etapas mostram os passos de uma interface por vez. Selecione a sua:

## Pré-requisitos

- Uma aplicação atendida por um workload, com uma regra que envia toda requisição para um primeiro connector. Para criar os três, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).
- O workload domain desse [workload](/pt-br/documentacao/plataforma/workloads/), no formato `<id>.map.azionedge.net`. Este guia o escreve como `<workload-domain>`.
- `curl`, para requisitar o caminho pelo seu workload.

**Console**

- Acesso ao [Azion Console](https://console.azion.com/).

**CLI**

- A [Azion CLI](/pt-br/documentacao/devtools/cli/) na sua máquina, autorizada com um personal token.
- O ID da sua aplicação.

**API**

- Um personal token para o header `Authorization`.
- O ID da sua aplicação.

---

## Crie um connector para a sua segunda origem

Um connector do tipo `http` guarda o endereço de uma origem e as configurações que a Azion usa para alcançá-la. Você o cria à parte, fora de qualquer aplicação. Este connector tem um endereço, `httpbin.org`, e se conecta a ele somente por HTTPS.

O header `Host` informa à origem para qual site é uma requisição. Por padrão, um connector envia o host que o cliente requisitou, que é o seu workload domain. Este connector envia `httpbin.org` no lugar, então a origem recebe o próprio nome. Para mais informações, consulte [Header Host](/pt-br/documentacao/plataforma/connectors/como-funciona/#header-host).

O connector mantém o caminho de cada requisição como o cliente o enviou. Para adicionar um diretório da origem na frente de todo caminho, consulte [Prefixo de caminho](/pt-br/documentacao/plataforma/connectors/como-funciona/#prefixo-de-caminho). Para servir os objetos de um bucket no lugar de uma origem HTTP, consulte [Use um bucket como origem de uma aplicação](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/dados/bucket-como-connector/).

**Console**

Para criar o connector no Azion Console:

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

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

2. **Inicie um connector**

   A página **Create Connector** abre.

3. **Nomeie o connector**

   Em **General**, digite `my-connector` em **Name**.

4. **Selecione o tipo HTTP**

   Em **Connector Type**, selecione *HTTP*.

5. **Digite o endereço da segunda origem**

   Em **Address Management**, digite `httpbin.org` em **Address**, sem protocolo e sem porta.

6. **Envie o próprio nome da origem no header Host**

   Em **Host**, digite `httpbin.org`.

7. **Conecte-se à origem somente por HTTPS**

   Em **Transport Protocol Policy**, selecione *Force HTTPS*.

8. **Selecione Create**

O connector existe na sua conta, e a regra que você adiciona à sua aplicação o seleciona.

**CLI**

Para criar o connector com a Azion CLI, coloque-o primeiro em um arquivo JSON. Salve este corpo como `connector.json`:

```json
{
  "name": "my-connector",
  "active": true,
  "type": "http",
  "attributes": {
    "addresses": [{ "address": "httpbin.org" }],
    "connection_options": {
      "transport_policy": "force_https",
      "host": "httpbin.org"
    }
  }
}
```

`addresses` lista os servidores de origem, e `connection_options.host` é o header `Host` que o connector envia. `force_https` faz toda conexão com a origem usar HTTPS.

Crie o connector a partir do arquivo. O comando precisa de `--type`, mesmo que o arquivo nomeie o tipo:

```bash
azion create connector --type http --file connector.json
```

A saída traz o ID do connector novo:

```text
Created Connector with ID <connector-id>
```

Leia o connector de volta em JSON. Substitua `<connector-id>` pelo ID do comando anterior:

```bash
azion describe connector --connector-id <connector-id> --format json
```

Este trecho da saída mostra as opções de conexão, com um valor para cada opção que o arquivo deixou de fora:

```json
{
 "active": true,
 "attributes": {
  "addresses": [
   {
    "active": true,
    "address": "httpbin.org",
    "http_port": 80,
    "https_port": 443,
    "modules": null
   }
  ],
  "connection_options": {
   "dns_resolution": "both",
   "following_redirect": false,
   "host": "httpbin.org",
   "http_version_policy": "http1_1",
   "path_prefix": "",
   "real_ip_header": "X-Real-IP",
   "real_port_header": "X-Real-PORT",
   "transport_policy": "force_https"
  },
  …
 },
 …
 "id": <connector-id>,
 …
 "name": "my-connector",
 …
 "type": "http",
 …
}
```

`path_prefix` está vazio, então o caminho chega à origem sem mudança. Anote o `id`: a regra o passa como `<connector-id>`. O connector existe na sua conta.

**API**

Para criar o connector com a API, envie uma requisição `POST` para o endpoint de connectors. Substitua `[TOKEN VALUE]` pelo seu personal token:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/connectors \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "my-connector",
  "type": "http",
  "attributes": {
    "addresses": [{ "address": "httpbin.org" }],
    "connection_options": {
      "transport_policy": "force_https",
      "host": "httpbin.org"
    }
  }
}'
```

`addresses` lista os servidores de origem, e `connection_options.host` é o header `Host` que o connector envia. A API responde com `202`. Este trecho da resposta mostra o connector, com um valor para cada configuração que a requisição deixou de fora:

```json
{
  "state": "pending",
  "data": {
    …
    "id": <connector-id>,
    "name": "my-connector",
    …
    "active": true,
    "product_version": "1.0",
    "type": "http",
    "attributes": {
      "addresses": [
        {
          "active": true,
          "address": "httpbin.org",
          "http_port": 80,
          "https_port": 443,
          "modules": null
        }
      ],
      "connection_options": {
        "dns_resolution": "both",
        "transport_policy": "force_https",
        "http_version_policy": "http1_1",
        "host": "httpbin.org",
        "path_prefix": "",
        "following_redirect": false,
        "real_ip_header": "X-Real-IP",
        "real_port_header": "X-Real-PORT"
      },
      "modules": {
        "load_balancer": { "enabled": false, "config": null },
        "origin_shield": { "enabled": false, "config": null }
      }
    },
    …
  }
}
```

`path_prefix` está vazio, então o caminho chega à origem sem mudança. Anote o `id`: a regra o passa como `<connector-id>`. O connector existe na sua conta.

---

## Envie um caminho para o connector

Uma regra no [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine/) combina critérios com behaviors. Esta regra roda na fase de requisição da sua aplicação. O critério dela, `${uri}` começando com `/anything`, corresponde a toda requisição sob esse caminho. O behavior dela, *Set Connector*, envia cada requisição correspondente para o connector novo. Para mais informações, consulte [Set Connector](/pt-br/documentacao/plataforma/applications/rules-engine/#set-connector).

A regra dos primeiros passos com Applications corresponde a todo caminho, inclusive `/anything`. Quando várias regras correspondentes carregam *Set Connector*, somente a última roda. Mantenha esta regra depois da regra que corresponde a tudo, para que ela decida o connector de `/anything`. Na API, uma regra nova vai depois das regras que a aplicação já tem: a segunda regra de uma aplicação é armazenada com `order` definido como `1`.

**Console**

Para criar a regra no Azion Console:

1. **Abra a aplicação**

   Acesse [Azion Console](https://console.azion.com/) > **Applications** e selecione a aplicação dos primeiros passos com Applications.

2. **Selecione a aba Rules Engine**

3. **Selecione + Rule**

4. **Nomeie a regra**

   Em **General**, digite `send-path-to-connector` em **Name**.

5. **Selecione a fase de requisição**

   Em **Phase**, selecione *Request Phase*. A fase de uma regra não pode mudar depois que você cria a regra.

6. **Defina o critério**

   Em **Criteria**, selecione a variável `${uri}` e o operador `starts_with` e digite `/anything` como argumento.

7. **Selecione o behavior Set Connector**

   Em **Behaviors**, selecione *Set Connector*.

8. **Selecione o seu connector**

   Em **Connector**, selecione `my-connector`, o connector que você criou para a segunda origem.

9. **Selecione Save**

A regra aparece na aba **Rules Engine**, sob o título **Request**.

**CLI**

Para criar a regra com a Azion CLI, mantenha a regra em um arquivo: em uma linha de comando, o shell expandiria `${uri}`. Salve este corpo como `rule.json` e substitua `<connector-id>` pelo ID do connector novo:

```json
{
  "name": "send-path-to-connector",
  "active": true,
  "criteria": [
    [
      {
        "variable": "${uri}",
        "conditional": "if",
        "operator": "starts_with",
        "argument": "/anything"
      }
    ]
  ],
  "behaviors": [
    {
      "type": "set_connector",
      "attributes": { "value": <connector-id> }
    }
  ]
}
```

Crie a regra na fase de requisição da sua aplicação. Substitua `<application-id>` pelo ID da sua aplicação:

```bash
azion create rules-engine --application-id <application-id> --phase request --file rule.json
```

A saída traz o ID da regra nova:

```text
Created Rules Engine with ID <rule-id>
```

A regra está ativa na sua aplicação e envia toda requisição sob `/anything` para o connector.

**API**

Para criar a regra com a API, mantenha o corpo da requisição em um arquivo: em uma linha de comando, o shell expandiria `${uri}`. Salve este corpo como `rule.json` e substitua `<connector-id>` pelo ID do connector novo:

```json
{
  "name": "send-path-to-connector",
  "active": true,
  "criteria": [
    [
      {
        "variable": "${uri}",
        "conditional": "if",
        "operator": "starts_with",
        "argument": "/anything"
      }
    ]
  ],
  "behaviors": [
    {
      "type": "set_connector",
      "attributes": { "value": <connector-id> }
    }
  ]
}
```

Envie uma requisição `POST` para as regras da fase de requisição da sua aplicação. Substitua `<application-id>` pelo ID da sua aplicação:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/applications/<application-id>/request_rules \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data @rule.json
```

A API responde com `202` e `"state": "pending"`, e a resposta retorna a regra armazenada com o `id` e o `order` dela. A regra está ativa na sua aplicação e envia toda requisição sob `/anything` para o connector.

---

## Verifique a resposta

A verificação é a mesma, qualquer que seja a interface que criou o connector e a regra. No comando, substitua `<workload-domain>` pelo workload domain do seu workload.

Um connector novo e uma regra nova levam vários minutos para chegar à infraestrutura distribuída da Azion, e os data centers os aplicam em momentos diferentes. Até lá, uma requisição para `/anything` ainda pode chegar à origem do seu primeiro connector. Repita a requisição até a segunda origem responder. Para mais informações, consulte [Propagação](/pt-br/documentacao/plataforma/connectors/como-funciona/#propagacao).

Envie uma requisição para o caminho a que a regra corresponde:

```bash
curl -s https://<workload-domain>/anything
```

`httpbin.org` responde com uma cópia em JSON da requisição que recebeu. Este trecho mantém o header `Host` e a URL:

```json
{
  …
  "headers": {
    …
    "Host": "httpbin.org",
    …
  },
  …
  "url": "https://httpbin.org/anything"
}
```

`Host` é `httpbin.org`, o valor que o connector envia, e não o seu workload domain. `url` mostra que o caminho chegou à origem sem mudança. Uma requisição para qualquer outro caminho, como `/`, continua chegando à origem do seu primeiro connector. A sua aplicação envia um caminho para uma segunda origem por um connector próprio.

---

## Próximos passos

- [Primeiros passos com Load Balancer](/pt-br/documentacao/plataforma/connectors/load-balancer/primeiros-passos.md): Ative Load Balancer no connector, adicione um segundo endereço e distribua as requisições entre os dois.
- [Origin IP ACL e HMAC](/pt-br/documentacao/plataforma/connectors/origin-shield/origin-ip-acl-e-hmac.md): Ative Origin Shield no connector para permitir somente os endereços da Azion na sua origem e assinar requisições com HMAC.
- [Ingestão e entrega](/pt-br/documentacao/plataforma/connectors/live-ingest/ingestao-e-entrega.md): Como um connector do tipo live\_ingest recebe uma transmissão ao vivo para entrega.
- [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes.md): Cada campo de um connector, com o tipo, o padrão, os valores permitidos e os erros que a API retorna.
