> ## 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.

# Reglas del ciclo de vida

> Los objetos y versiones que caducan en una programación se aplican al bucket.

<a id="lifecycle-rules" />

## Reglas del ciclo de vida

`PUT /v1/buckets/{bucket}/lifecycle` reemplaza toda la configuración. Cada regla necesita un `status` y al menos una acción; una regla con `status: disabled` permanece en la configuración pero se omite durante la evaluación.

Lea `GET /v1/buckets/{bucket}/lifecycle` antes de cambiarlo. La respuesta contiene `lifecycle` y `revision`, con la misma revisión citada en el encabezado `ETag`. Un bucket sin configuración devuelve reglas vacías y la revisión `none`. Tanto `PUT` como `DELETE` requieren un encabezado `If-Match` que contenga esa revisión citada. Los encabezados faltantes devuelven `428`; las revisiones obsoletas devuelven `412` con `LIFECYCLE_CONFLICT`. Vuelva a cargar, revise la configuración más reciente y vuelva a aplicar los cambios deliberadamente. No se aceptan comodines ni ETags débiles.

<Tabs>
  <Tab title="Console">
    La pestaña **Management** del depósito tiene una tarjeta **Lifecycle rules**. **Add
    rule** le da un **Prefix filter** y las acciones basadas en días: **Expire
    current objects after (days)**, **Expire noncurrent versions after
    (days)** con una opción **Always keep newest (versions)**, y **Abort
    incomplete multipart uploads after (days)**. Cada regla tiene su propio interruptor de habilitación, y **Save** escribe todo el conjunto.

    Elija **Transition storage class** (`STANDARD` o `COLD`) e introduzca **Transition after (days)** para mover objetos antes de que expiren. Los días deben ser enteros positivos y anteriores a la fecha de vencimiento basada en días. **Remove transition** borra la transición explícitamente.

    Al guardar se conservan los campos que la tarjeta no puede editar, incluidas las fechas absolutas. Al ingresar días de caducidad o transición, se reemplaza la fecha absoluta de esa acción. Al eliminar una regla o la configuración, también se eliminan sus campos conservados. Si otro editor cambió la configuración, la consola la actualiza y mantiene el borrador para su revisión. No sobrescribe automáticamente sus cambios.
  </Tab>

  <Tab title="API">
    Lea la revisión actual y luego reemplace la configuración:

    ```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
    ```

    El archivo contiene el cuerpo de la solicitud `lifecycle` mostrado en la pestaña API. Pase el valor de revisión sin comillas a `--revision`; la CLI cita el encabezado. Para eliminar la configuración, lea su revisión actual y ejecute:

    ```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)))
    ```

    Importar `strconv` para el valor de cabecera citado. Manejar `412` recargando y revisando; no intente de nuevo con una nueva revisión automáticamente.
  </Tab>
</Tabs>

Estas condiciones previas se aplican a la API nativa. Las operaciones del ciclo de vida de S3 conservan el comportamiento de reemplazo incondicional estándar. Una actualización de S3 aún cambia la revisión, por lo que una edición de API nativa más antigua se rechaza.

| Acción y aventura | Qué hace |
| - | - |
| `transition` | Mueve los objetos coincidentes a otra clase de almacenamiento una vez que son lo suficientemente viejos. |
| `expiration` | Elimina objetos pasados `days` (desde la última modificación) o después de `date`. |
| `noncurrent_version_expiration` | Elimina las versiones no actuales pasadas `noncurrent_days`, manteniendo opcionalmente las `newer_noncurrent_versions` más recientes. |
| `abort_incomplete_multipart_upload` | Descarta las cargas que aún no se han terminado `days_after_initiation` más tarde. |

Las reglas se evalúan de forma independiente, por lo que un objeto que coincida con varias está sujeto a todas sus acciones. `filter.prefix` restringe una regla; un filtro ausente o vacío la aplica a todo el bucket.

<Note>
  Una transición mantiene la identidad del objeto — misma clave, mismo id de versión, misma última modificación — y mueve solo sus bytes. Eso es lo que hace que emparejar una transición con una expiración funcione: el movimiento no reinicia el reloj de expiración.
</Note>

Dos restricciones en las transiciones, ambas rechazadas en el momento de la escritura en lugar de fallar silenciosamente más tarde:

* **Una transición debe ocurrir estrictamente antes de la expiración de la regla.** De lo contrario, el objeto se borraría antes de que se mueva.
* **Una transición por regla.** Con dos clases de almacenamiento, una segunda no tiene adónde ir. El punto final S3 acepta una lista de un solo elemento `<Transition>` y rechaza las más largas en lugar de aplicar la primera e ignorar el resto.


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