> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Regras do ciclo de vida

> Expiração de objetos e versões em uma programação que o bucket aplica para você.

<a id="lifecycle-rules" />

## Regras do ciclo de vida

`PUT /v1/buckets/{bucket}/lifecycle` substitui toda a configuração. Cada regra precisa de um `status` e pelo menos uma ação; uma regra com `status: disabled` permanece na configuração, mas é ignorada durante a avaliação.

Leia `GET /v1/buckets/{bucket}/lifecycle` antes de alterá-lo. A resposta contém `lifecycle` e `revision`, com a mesma revisão citada no cabeçalho `ETag`. Um bucket sem configuração retorna regras vazias e revisão `none`. Tanto `PUT` como `DELETE` requerem um cabeçalho `If-Match` contendo a revisão citada. Cabeçalhos ausentes retornam `428`; revisões obsoletas retornam `412` com `LIFECYCLE_CONFLICT`. Recarregar, revisar a configuração mais recente e reaplicar as alterações deliberadamente. Wildcards e ETags fracos não são aceitos.

<Tabs>
  <Tab title="Console">
    A guia **Management** do bucket tem um cartão **Lifecycle rules**. **Add
    rule** fornece um **Prefix filter** e as ações baseadas em dias: **Expire
    current objects after (days)**, **Expire noncurrent versions after
    (days)** com uma opção **Always keep newest (versions)** e **Abort
    incomplete multipart uploads after (days)**. Cada regra tem seu próprio parâmetro de ativação, e **Save** grava o conjunto inteiro.

    Escolha **Transition storage class** (`STANDARD` ou `COLD`) e insira **Transition after (days)** para mover objetos antes de expirarem. Os dias devem ser inteiros positivos e anteriores à expiração baseada em dias. **Remove transition** limpa a transição explicitamente.

    Salvar preserva campos que o cartão não pode editar, incluindo datas absolutas. A inserção de dias de expiração ou transição substitui a data absoluta dessa ação. A remoção de uma regra ou da configuração também remove seus campos preservados. Se outro editor alterou a configuração, o console a atualiza e mantém o rascunho para revisão. Ele não substitui automaticamente as alterações.
  </Tab>

  <Tab title="API">
    Leia a revisão atual e substitua a configuração:

    ```http theme={null}
    GET /v1/buckets/{bucket}/lifecycle

    PUT /v1/buckets/{bucket}/lifecycle
    If-Match: "<revision from GET>"
    Content-Type: application/json
    ```

    ```json theme={null}
    {
      "lifecycle": {
        "rules": [
          {
            "id": "archive-then-expire",
            "status": "enabled",
            "filter": { "prefix": "logs/" },
            "transition": { "days": 30, "storage_class": "COLD" },
            "expiration": { "days": 365 },
            "abort_incomplete_multipart_upload": { "days_after_initiation": 7 }
          }
        ]
      }
    }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage bucket get-lifecycle <bucket> --output json
    basaltic storage bucket set-lifecycle <bucket> \
      --revision '<revision from GET>' --from-file lifecycle.json
    ```

    O arquivo contém o corpo da solicitação `lifecycle` mostrado na guia API. Passe o valor da revisão sem aspas para `--revision`; a CLI cita o cabeçalho. Para remover a configuração, leia sua revisão atual e execute:

    ```bash theme={null}
    basaltic storage bucket delete-lifecycle <bucket> --revision '<revision from GET>'
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    client := storage.New(cfg)
    current, err := client.GetBucketLifecycle(ctx, bucket)
    if err != nil {
        return err
    }
    // Review current.Lifecycle before replacing it with lc.
    err = client.PutBucketLifecycle(ctx, bucket,
        &storage.PutBucketLifecycleRequest{Lifecycle: lc},
        basaltic.WithRequestHeader("If-Match", strconv.Quote(current.Revision)))
    ```

    Importe `strconv` para o valor do cabeçalho citado. Lidar com `412` recarregando e revisando; não tente novamente com uma nova revisão automaticamente.
  </Tab>
</Tabs>

Essas pré-condições se aplicam à API nativa. As operações do ciclo de vida do S3 retêm o comportamento de substituição incondicional padrão. Uma atualização do S3 ainda altera a revisão, então uma edição nativa de API mais antiga é rejeitada.

| Ação e aventura | O que faz |
| - | - |
| `transition` | Move objetos correspondentes para outra classe de armazenamento uma vez que eles são velhos o suficiente. |
| `expiration` | Exclui objetos passados `days` (desde a última modificação) ou após `date`. |
| `noncurrent_version_expiration` | Remove versões não atuais passadas de `noncurrent_days`, mantendo opcionalmente as `newer_noncurrent_versions` mais recentes. |
| `abort_incomplete_multipart_upload` | Descarta uploads ainda não concluídos `days_after_initiation` mais tarde. |

As regras são avaliadas de forma independente, de modo que um objeto que corresponde a várias está sujeito a todas as suas ações. `filter.prefix` restringe uma regra; um filtro ausente ou vazio aplica-o ao bucket inteiro.

<Note>
  Uma transição mantém a identidade do objeto — mesma chave, mesmo id de versão, mesmo último modificado — e move apenas seus bytes. É isso que faz com que o emparelhamento de uma transição com um expiramento funcione: a movimentação não reinicia o relógio de expiração.
</Note>

Duas restrições em transições, ambas rejeitadas no momento da gravação em vez de falhar silenciosamente mais tarde:

* **Uma transição deve ocorrer estritamente antes da expiração da regra.** Caso contrário, o objeto seria excluído antes mesmo de ser movido.
* **Uma transição por regra.** Com duas classes de armazenamento, um segundo não tem para onde ir. O ponto de extremidade S3 aceita uma lista de um único elemento `<Transition>` e rejeita os mais longos em vez de aplicar o primeiro e ignorar o resto.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.