---
name: azion-envie-dados-do-data-stream-para-o-object-storage
description: >-
  Aponte um stream do Data Stream para um bucket do Object Storage pelo endpoint S3, no Azion Console ou com a Azion API, e confirme a entrega.
---

# Envie dados do Data Stream para o Object Storage

Você pode enviar os logs de um stream a um bucket do [Object Storage](/pt-br/documentacao/plataforma/object-storage/) pelo Azion Console ou com a Azion API. Para criar um stream que grava em um bucket desde o início, consulte [Primeiros passos do Data Stream](/pt-br/documentacao/plataforma/data-stream/primeiros-passos/). Para enviar os logs a um bucket do Amazon S3, consulte [Envie logs para o Amazon S3](/pt-br/documentacao/guias/plataforma/observabilidade/amazon-s3-endpoint/).

O [Data Stream](/pt-br/documentacao/plataforma/data-stream/) alcança o bucket pelo endpoint S3 e grava cada lote de linhas de log como um objeto. No formulário do stream, o endpoint é definido no campo **Connector**, e a opção dele é *Simple Storage Service (S3)*. Para cada campo e seus limites, consulte [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/#azion-object-storage).

---

Selecione sua interface uma vez. Os pré-requisitos e cada tarefa abaixo mostram apenas esse caminho.

## Pré-requisitos

- A permissão **Edit Data Stream**. Para as permissões, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#permissoes).
- Um stream na conta. Para criar um, consulte [Primeiros passos do Data Stream](/pt-br/documentacao/plataforma/data-stream/primeiros-passos/).
- Um bucket do Object Storage. Para criar um, consulte [Primeiros passos com Object Storage](/pt-br/documentacao/plataforma/object-storage/primeiros-passos/).
- Uma credencial do Object Storage que alcance o bucket, com quatro capabilities: **List Files**, **Write Files**, **List All Bucket Names** e **List Buckets**. Na API, elas são `listFiles`, `writeFiles`, `listAllBucketNames` e `listBuckets`. Sem as duas capabilities de listagem de buckets, cada envio falha com o status `503` e nenhum objeto chega ao bucket. A secret key é exibida apenas uma vez, quando a credencial é criada. Para criar a credencial, consulte [Credenciais de compatibilidade com o protocolo S3](/pt-br/documentacao/plataforma/object-storage/compatibilidade-s3/#credenciais).

**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. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).
- `curl`.
- O ID do stream. A resposta de listagem de `GET /v4/workspace/stream/streams` o traz no campo `id` de cada stream.

---

## Aponte o stream para o bucket

O stream mantém a fonte de dados, os filtros e o template dele. Apenas o endpoint muda, com o endereço S3 do bucket, a região dele e o par de chaves da credencial.

**Console**

Para apontar o stream para o bucket no Azion Console:

1. **Abra a página Data Stream**

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

2. **Abra o stream**

   Na lista, selecione a linha do stream.

3. **Selecione o endpoint S3**

   Na seção **Output**, selecione *Simple Storage Service (S3)* em **Connector**.

4. **Insira a localização do bucket**

   Insira os valores do seu bucket:

   - **URL**: `https://s3.us-east-005.azionstorage.net`
   - **Bucket Name**: o nome do seu bucket
   - **Region**: `us-east-005`

5. **Insira a credencial**

   Insira a access key em **Access Key** e a secret key em **Secret Key**. O Console mascara os dois campos. Em uma conta apenas com **View Data Stream**, um ícone de cadeado substitui o ícone de revelar.

   Em uma edição, o Console não exige **Secret Key**.

6. **(Opcional) Insira o prefixo do objeto**

   Em **Object Key Prefix**, insira o início do nome de cada objeto. Por exemplo: `activity`. Sem um prefixo, os objetos vão para a raiz do bucket.

7. **Selecione o tipo de conteúdo**

   Em **Content Type**, selecione *plain/text* ou *application/gzip*. Com *plain/text*, cada objeto contém uma linha de log por linha.

8. **Mantenha o stream ativo**

   Na seção **Status**, mantenha **Active** ativado.

9. **Selecione Save**

10. **Confirme o aviso de sampling**

    Se a caixa de diálogo **Attention** abrir, selecione **Confirm**.

O Console mostra `Your data stream has been updated`. Na lista **Data Stream**, a coluna **Connector** mostra `Amazon S3` para o stream.

**API**

Para apontar o stream para o bucket com a API, envie uma requisição `PATCH` apenas com a chave `outputs`. Substitua `<stream-id>` pelo ID do seu stream, `<your-bucket>` pelo nome do seu bucket e as duas chaves pelas chaves da sua credencial:

```bash
curl -X PATCH 'https://api.azion.com/v4/workspace/stream/streams/<stream-id>' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{
    "outputs": [
      {
        "type": "s3",
        "attributes": {
          "host_url": "https://s3.us-east-005.azionstorage.net",
          "bucket_name": "<your-bucket>",
          "region": "us-east-005",
          "access_key": "[ACCESS KEY]",
          "secret_key": "[SECRET KEY]",
          "object_key_prefix": "activity",
          "content_type": "plain/text"
        }
      }
    ]
  }'
```

A API responde `200` com o stream armazenado:

```json
{
  "state": "executed",
  "data": {
    "id": 12345,
    "name": "activity-to-bucket",
    "last_editor": "user@example.com",
    "created": "2026-01-01T11:30:47.000000Z",
    "last_modified": "2026-01-01T11:58:54.000000Z",
    "product_version": "1.0",
    …
    "outputs": [
      {
        "type": "s3",
        "attributes": {
          "access_key": "[ACCESS KEY]",
          "secret_key": "[SECRET KEY]",
          "region": "us-east-005",
          "object_key_prefix": "activity",
          "bucket_name": "<your-bucket>",
          "content_type": "plain/text",
          "host_url": "https://s3.us-east-005.azionstorage.net"
        }
      }
    ]
  }
}
```

A entrada de `outputs` contém o bucket, e `last_modified` avança. A fonte de dados e os transforms permanecem como estavam. Para cada chave do corpo, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#objeto-do-stream).

Salvar verifica o formato de cada campo e não contata o bucket. Uma chave errada ou uma capability ausente aparece apenas como um envio que falhou. Uma ativação entra em vigor depois de um a dois minutos. Se o stream usa sampling, salvá-lo como ativo desativa todos os outros streams da conta; um filtro de workloads os mantém ativos.

---

## Confirme a entrega

Um stream envia um lote a cada 60 segundos, ou antes, quando chega a 2.000 linhas de log. Duas verificações confirmam a entrega: o objeto no bucket e o envio que o Real-Time Events registra.

### Encontre o objeto no bucket

O nome de cada objeto é o **Object Key Prefix**, uma `/`, a data e a hora do envio no formato `YYYY/MM/DD/hh/mm/` e um UUID. O Data Stream adiciona a `/` depois do prefixo.

**Console**

Para encontrar o objeto no Azion Console:

1. **Abra a lista de buckets**

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

2. **Selecione o bucket**

   Selecione o bucket para o qual o stream envia.

3. **Encontre o objeto sob o prefixo**

   Com o prefixo `activity`, o objeto aparece listado sob uma chave que começa com `activity/`.

O objeto está no bucket, o que confirma que o stream entregou um lote.

**API**

Para listar os objetos do bucket com a API, envie uma requisição `GET` ao bucket. Substitua `<your-bucket>` pelo nome do seu bucket:

```bash
curl -X GET 'https://api.azion.com/v4/workspace/storage/buckets/<your-bucket>/objects' \
  -H 'Accept: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]'
```

A API responde `200` com uma entrada por objeto, cada uma com a chave, o horário e o tamanho em bytes dele:

```json
{
  "continuation_token": null,
  "results": [
    {
      "key": "activity/2026/01/01/12/02/11111111-1111-1111-1111-111111111111",
      "last_modified": "2026-01-01T12:02:03.000000Z",
      "size": 2797,
      "is_folder": false
    },
    …
  ]
}
```

A chave começa com o prefixo `activity`, seguido da data e da hora do envio, o que confirma que o stream entregou um lote.

### Leia o envio no Real-Time Events

O [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/#data-stream) registra cada envio de um stream, entregue ou não, com o código de status que o endpoint retornou.

**Console**

Para encontrar os envios no Azion Console:

1. **Abra o Real-Time Events**

   Acesse [Azion Console](https://console.azion.com/) > **Real-Time Events**.

2. **Selecione a fonte de dados Data Stream**

3. **Leia os envios mais recentes**

   Cada linha é um envio. Encontre as linhas com `S3` em **Endpoint Type** e leia o **Status Code** delas.

Um **Status Code** `200` significa que o bucket aceitou o lote. **Streamed Lines** informa o número de linhas de log do lote.

**API**

Para ler os envios com a API, consulte o dataset `dataStreamedEvents` da API GraphQL do Real-Time Events. Substitua as datas por um intervalo que cubra a alteração do stream:

```bash
curl -X POST 'https://api.azion.com/v4/events/graphql' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{"query":"query { dataStreamedEvents(limit: 20, filter: {tsRange: {begin: \"2026-01-01T12:00:00\", end: \"2026-01-01T12:45:00\"}}, orderBy: [ts_DESC]) { ts endpointType statusCode streamedLines dataStreamed } }"}'
```

A API responde `200` com um registro para cada envio, o mais recente primeiro:

```json
{
  "data": {
    "dataStreamedEvents": [
      {
        "ts": "2026-01-01T12:02:04Z",
        "endpointType": "S3",
        "statusCode": 200,
        "streamedLines": 2,
        "dataStreamed": 2797
      }
    ]
  }
}
```

Um `statusCode` `200` significa que o bucket aceitou o lote, e `streamedLines` e `dataStreamed` dão o tamanho dele em linhas de log e em bytes. Uma lista `dataStreamedEvents` vazia significa que o stream não enviou no intervalo. Para cada campo, consulte [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/#datastreamedevents-data-stream).

Um objeto sob o prefixo e um envio com o status `200` juntos confirmam a entrega. Um status `503` significa que o Data Stream encontrou o endpoint indisponível. Com o Object Storage, verifique primeiro se a credencial traz `listAllBucketNames` e `listBuckets`. Para as causas, consulte [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas/#real-time-events-mostra-o-status-503-e-nada-chega-ao-endpoint).

---

## Próximos passos

- [Primeiros passos do Data Stream](/pt-br/documentacao/plataforma/data-stream/primeiros-passos.md): Crie um stream que grava em um bucket e confirme os primeiros logs dele.
- [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints.md#azion-object-storage): Cada campo do endpoint S3, com o tipo, os limites e o nome na API.
- [Object Storage](/pt-br/documentacao/plataforma/object-storage.md): Gerencie o bucket, os objetos dele e as credenciais que o alcançam.
- [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas.md): Descubra o que mudar quando um envio retorna um status diferente de 200.
