---
name: azion-use-um-bucket-como-origem-de-uma-aplicacao
description: >-
  Sirva os objetos de um bucket do Object Storage por uma aplicação, com um connector do tipo storage e uma regra do Rules Engine que envia requisições a ele.
---

# Use um bucket como origem de uma aplicação

Você pode servir os objetos de um bucket do [Object Storage](/pt-br/documentacao/plataforma/object-storage/) por uma [aplicação](/pt-br/documentacao/plataforma/applications/) ao combinar um [connector](/pt-br/documentacao/plataforma/connectors/) para o bucket com uma regra do [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/). Uma requisição para o domínio do [workload](/pt-br/documentacao/plataforma/workloads/) que serve a aplicação passa então a retornar o objeto armazenado sob a chave correspondente. Para conectar uma aplicação a um servidor HTTP em vez de um bucket, consulte [Conecte uma aplicação a uma origem](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/definir-origens/).

Uma conta que [não migrou para a API v4](/pt-br/documentacao/guias/seguranca-de-aplicacoes/acesso-e-compliance/verificar-migracao-conta/) monta o mesmo caminho pelas Origins legadas da aplicação. Para mais informações, consulte [Origins](/pt-br/documentacao/plataforma/connectors/origins/).

---

Escolha a interface em que você trabalha. Os pré-requisitos e os procedimentos mudam conforme a sua escolha.

## Pré-requisitos

- Um bucket cujo `workloads_access` é `read_only` ou `read_write`. Um bucket `restricted` não pode servir de origem para uma aplicação. Para criar um bucket, consulte [Primeiros passos com Object Storage](/pt-br/documentacao/plataforma/object-storage/primeiros-passos/).
- Uma aplicação servida por um workload. Para criar os dois, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).
- Um personal token, enviado no header `Authorization` como `Token [TOKEN VALUE]`, porque esta página faz upload dos objetos com a API. Para criar um token, consulte [Gerencie um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).
- `curl` ou outro cliente HTTP.

**Console**

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

**API**

- O ID da aplicação. Azion Console mostra o ID no endereço da página da aplicação, depois de `/applications/edit/`.

> **Atenção**
>
> Uma aplicação que serve um bucket `read_write` permite que qualquer requisição que chegue a ela modifique o bucket, por exemplo, ao sobrescrever um objeto. Sirva conteúdo estático de um bucket `read_only` e [coloque uma função na frente do bucket](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/dados/camada-autenticacao-object-storage-functions/) quando um caminho precisar aceitar escritas. Para mais informações, consulte [Boas práticas de Object Storage](/pt-br/documentacao/plataforma/object-storage/boas-praticas/).

---

## Faça upload dos objetos a servir

O connector serve o que o bucket já guarda, então os objetos entram primeiro. O exemplo desta página serve uma página de dois objetos, ambos armazenados sob o prefixo `src` de um bucket chamado `app-origin`:

```text
src/index.html
src/styles/style.css
```

Em um diretório local `src`, crie `index.html`. A página vincula a folha de estilos dela por um caminho relativo:

```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="styles/style.css">
</head>
<body>
    <h1>Hello world!</h1>
    <p>I am an object from a bucket.</p>
</body>
</html>
```

Em um diretório `styles` dentro de `src`, crie `style.css`, o arquivo que a página vincula:

```css
body {
  background-color: black;
}

h1,
p {
  color: white;
}
```

Para fazer upload do arquivo HTML com a API, envie uma requisição `POST` com a chave do objeto no caminho. `Content-Type` define o tipo com que o objeto é armazenado e servido:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/storage/buckets/app-origin/objects/src/index.html \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: text/html' \
  --data-binary '@./src/index.html'
```

A API responde `201` com a chave sob a qual o objeto é armazenado:

```json
{
  "state": "executed",
  "data": {
    "object_key": "src/index.html"
  }
}
```

Para fazer upload da folha de estilos, envie a mesma requisição com a chave e o tipo dela:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/storage/buckets/app-origin/objects/src/styles/style.css \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: text/css' \
  --data-binary '@./src/styles/style.css'
```

A resposta traz a chave do segundo objeto:

```json
{
  "state": "executed",
  "data": {
    "object_key": "src/styles/style.css"
  }
}
```

O bucket guarda os dois objetos. O segmento `src/` de cada chave faz parte da chave, não é uma pasta, e a plataforma o cria junto com o objeto. Sem um header `Content-Type`, a plataforma detecta o tipo do objeto. Azion Console e Azion CLI também fazem upload de objetos. Para mais informações, consulte [Primeiros passos com Object Storage](/pt-br/documentacao/plataforma/object-storage/primeiros-passos/).

---

## Crie um connector para o bucket

Um connector para um bucket nomeia o bucket do qual uma aplicação lê e o prefixo dentro dele. O prefixo define onde os caminhos da aplicação começam. Com o prefixo `/src`, o objeto armazenado sob `src/index.html` responde em `/index.html`, e `src/styles/style.css` responde em `/styles/style.css`. O prefixo é opcional na API e obrigatório no Azion Console.

No Azion Console, você configura connectors no menu Connectors, e não em uma aba da aplicação. Para cada campo do formulário do Console e do corpo da requisição, consulte [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes/#storage).

**Console**

Para criar o connector pelo Azion Console:

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

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

2. **Inicie um novo connector**

3. **Nomeie o connector**

   Na seção **General**, insira `app-origin-connector` em **Name**.

4. **Selecione o tipo Object Storage**

   Na seção **Connector Type**, selecione *Object Storage*.

5. **Selecione o bucket**

   Selecione `app-origin` como o bucket do qual o connector lê.

6. **Defina o prefixo**

   Insira `/src` em **Prefix**, o prefixo sob o qual você fez upload dos objetos.

7. **Selecione Create**

Azion Console mostra `Connector successfully created`.

**API**

Na API, o `type` do connector é `storage`, e os `attributes` dele carregam `bucket`, o nome do bucket, e `prefix`. No exemplo desta página, `bucket` é `app-origin` e `prefix` é `/src`.

Crie o connector com uma requisição `POST` para `/v4/workspace/connectors`. Em seguida, copie o ID do connector, que a API retorna em `data.id`: a regra que envia as requisições para o bucket nomeia o connector por esse ID.

---

## Envie as requisições para o bucket

Um connector não recebe nenhuma requisição até que uma regra o defina. A regra desta seção roda na fase de requisição da aplicação. O critério dela corresponde a todo caminho, com a variável `${uri}`, o operador `starts_with` e `/` como argumento, então a aplicação inteira lê do bucket. O behavior dela define o connector.

A variável `${uri}` funciona em toda aplicação. Um critério com `${request_uri}` precisa de [Application Accelerator](/pt-br/documentacao/plataforma/applications/application-accelerator/primeiros-passos/) ativado na aplicação. Para todas as variáveis e operadores, consulte [Rules Engine para Applications](/pt-br/documentacao/plataforma/applications/rules-engine/#criterios).

**Console**

Para criar a regra pelo Azion Console:

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

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

2. **Selecione a aba Rules Engine**

3. **Inicie uma regra**

   Selecione **+ Rule**.

4. **Nomeie a regra**

   Na seção **General**, insira um **Name**, como `serve-the-bucket`.

5. **Selecione a fase**

   Na seção **Phase**, selecione *Request Phase*. Uma regra mantém a fase em que é criada.

6. **Defina o critério**

   Na seção **Criteria**, defina a variável como `${uri}`, o operador como `starts_with` e o argumento como `/`.

7. **Defina o connector**

   Na seção **Behaviors**, selecione *Set Connector* e, em seguida, selecione o connector para o bucket em **Connector**.

8. **Salve a regra**

   Selecione **Save**.

A regra aparece na aba **Rules Engine** da aplicação, sob **Request**.

**API**

Para criar a regra com a API, envie uma requisição `POST` para o endpoint `request_rules` da aplicação. Substitua `<application-id>` pelo ID da sua aplicação e `<connector-id>` pelo ID do connector para o bucket:

```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 '{
  "name": "serve-the-bucket",
  "active": true,
  "criteria": [
    [
      {
        "variable": "${uri}",
        "conditional": "if",
        "operator": "starts_with",
        "argument": "/"
      }
    ]
  ],
  "behaviors": [
    {
      "type": "set_connector",
      "attributes": {
        "value": <connector-id>
      }
    }
  ]
}'
```

A API responde `202` e retorna a regra:

```json
{
  "state": "pending",
  "data": {
    "id": <rule-id>,
    "name": "serve-the-bucket",
    "active": true,
    "criteria": [
      [
        {
          "conditional": "if",
          "variable": "${uri}",
          "operator": "starts_with",
          "argument": "/"
        }
      ]
    ],
    "behaviors": [
      {
        "type": "set_connector",
        "attributes": {
          "value": <connector-id>
        }
      }
    ],
    "description": "",
    "order": 0,
    "last_editor": "user@example.com",
    "last_modified": "2026-01-01T12:00:26.750242Z",
    "created_at": "2026-01-01T12:00:26.750262Z"
  }
}
```

A regra é a primeira da fase de requisição da aplicação, com `order` `0`.

Para o behavior e os atributos dele, consulte [Set Connector](/pt-br/documentacao/plataforma/applications/rules-engine/#set-connector).

---

## Confirme que a aplicação serve o bucket

A regra leva algum tempo para propagar. Até lá, o domínio do workload não responde com os objetos.

Para confirmar o caminho de entrega, requisite a página pelo domínio do seu workload, com esse domínio no lugar de `<your-workload-domain>`:

```bash
curl https://<your-workload-domain>/index.html
```

O corpo da resposta é o objeto armazenado sob `src/index.html`, que o prefixo `/src` serve em `/index.html`. Ele traz o título `Hello world!` e o parágrafo `I am an object from a bucket.` O domínio de um workload termina em `.map.azionedge.net`, e a API o retorna em `workload_domain` quando cria o workload.

Acesse o mesmo endereço em um navegador. O navegador renderiza a página com a folha de estilos aplicada, que ele carrega de `/styles/style.css` sob o mesmo prefixo.

Se o domínio ainda não retorna o objeto, a regra não propagou. Envie a requisição de novo e procure outra causa somente depois disso. Para mais informações, consulte [Solucionar problemas de Applications](/pt-br/documentacao/plataforma/applications/solucao-de-problemas/).

---

## Próximos passos

- [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings.md): Defina por quanto tempo os objetos que a aplicação serve ficam em cache.
- [Connectors](/pt-br/documentacao/plataforma/connectors.md): Todos os campos de um connector para um bucket e os outros tipos de connector.
- [Como Object Storage funciona](/pt-br/documentacao/plataforma/object-storage/como-funciona.md): O que o nível de acesso muda e o caminho que uma requisição percorre até um objeto.
- [Buckets e objetos](/pt-br/documentacao/plataforma/object-storage/buckets-e-objetos.md): Nomes de bucket, níveis de acesso, chaves de objeto e prefixos.
