# Configuration de cycle de vie

La configuration d'un cycle de vie vous permet de définir une politique d'expiration de vos objets et de les supprimer automatiquement.

Dans cet exemple, nous allons créer une politique de gestion du cycle de vie pour supprimer les objets dont la clé commence par `rapports/` et qui ont plus de 90 jours.

La gestion des configuration des Cycle de Vie est possible avec des clients avec interface graphique (S3 Browser) ou les **SDK AWS.**

Dans cet exemple, nous utiliserons le client en ligne de commande **AWS CLI**.

## Limitations

* Le cycle de vie est définit au niveau du **Bucket**.
* Un maximum de 1000 règles de cycle de vie par **Bucket** est applicable.
* Il peut y avoir un délai entre la date d'expiration et la date à laquelle le service de Stockage Objet supprime l'objet.
* Toujours arrondir l'heure au jour suivant à minuit UTC.

{% hint style="danger" %}
Un objet supprimé ne peut être restauré.
{% endhint %}

## Gérer les configurations de cycle de vie <a href="#lifecycleconfiguration-gererlesconfigurationsdecycledevie" id="lifecycleconfiguration-gererlesconfigurationsdecycledevie"></a>

La configuration d'un cycle de vie peut être gérée en utilisant **aws s3api** (d'autres outils ou SDK fonctionnent aussi) **:**

* put-bucket-lifecycle
* get-bucket-lifecycle
* delete-bucket-lifecycle

{% hint style="info" %}
Nous utilisons les utilitaires **aws s3** et **aws s3api** issues du client S3 **AWSCLIv2** sur Linux.`${S3_ENDPOINT}` &`${S3_PROFILE}` sont des variables d'environnement
{% endhint %}

### Créer une configuration de cycle de vie <a href="#lifecycleconfiguration-creeruneconfigurationdecycledevie" id="lifecycleconfiguration-creeruneconfigurationdecycledevie"></a>

Créez un fichier et insérez votre configuration au format JSON :

{% code title="Expiration auto" lineNumbers="true" %}

```json
{
  "Rules": [
    {
      "Prefix": {},
      "Expiration": {
        "Days": 3
      },
    "Status": "Enabled",
    "ID": "Delete After 3 days."
    }
  ]
}
```

{% endcode %}

Appliquez-le au Bucket : **bucket-test**

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} put-bucket-lifecycle --bucket bucket-test --lifecycle-configuration file://delete_after_3days.json --profile ${S3_PROFILE}
```

{% endcode %}

### Afficher une configuration du cycle de vie <a href="#lifecycleconfiguration-afficheruneconfigurationducycledevie" id="lifecycleconfiguration-afficheruneconfigurationducycledevie"></a>

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} get-bucket-lifecycle --bucket bucket-test --profile ${S3_PROFILE}
```

{% endcode %}

### Supprimer une configuration de cycle de vie <a href="#lifecycleconfiguration-supprimeruneconfigurationdecycledevie" id="lifecycleconfiguration-supprimeruneconfigurationdecycledevie"></a>

{% code overflow="wrap" %}

```bash
aws s3api --endpoint-url=${S3_ENDPOINT} delete-bucket-lifecycle --bucket bucket-test --profile ${S3_PROFILE}
```

{% endcode %}

## Éléments de configuration du cycle de vie supportés <a href="#lifecycleconfiguration-elementsdeconfigurationducycledeviesupportes" id="lifecycleconfiguration-elementsdeconfigurationducycledeviesupportes"></a>

<table data-full-width="true"><thead><tr><th width="216.33333333333337">Nom</th><th width="481">Description</th><th>Requis</th></tr></thead><tbody><tr><td><strong><code>And</code></strong></td><td><ul><li>Conteneur pour spécifier les filtres de règles. Ces filtres déterminent le sous-ensemble d'objets auquel la règle s'applique.</li><li>Type : Chaîne de caractères</li><li>Parent: <strong><code>Rule</code></strong></li></ul></td><td>Oui, si vous spécifiez plus d'une condition de filtre (par exemple, un préfixe et une ou plusieurs tags).</td></tr><tr><td><strong><code>Date</code></strong></td><td><ul><li>Date à laquelle vous voulez que l'action s'applique.</li><li>La valeur de la date doit être conforme au format ISO 8601. L'heure est toujours minuit UTC.</li><li>Type : Chaîne de caractères</li><li>Parent: <strong><code>Expiration</code></strong></li></ul></td><td>Oui, si <strong><code>Days</code></strong> et <strong><code>ExpiredObjectDeleteMarker</code></strong> sont absents.</td></tr><tr><td><strong><code>Days</code></strong></td><td><ul><li>Spécifie le nombre de jours après la création de l'objet où l'action de la règle spécifique prend effet.</li><li>Type : Nombre entier positif lorsqu'il est utilisé avec Expiration.</li><li>Parent: <strong><code>Expiration</code></strong></li></ul></td><td>Oui, si <strong><code>Date</code></strong> et <strong><code>ExpiredObjectDeleteMarker</code></strong> sont absents.</td></tr><tr><td><strong><code>Expiration</code></strong></td><td><ul><li>Cette action spécifie la durée de vie d'un objet. L'action dépend du status du versionnage dans le <strong>Bucket</strong>.</li><li>Si le versionnage n'a jamais été activé sur le <strong>Bucket</strong>, l'objet est supprimé. Sinon, si le <strong>versionnage</strong> est activé(ou suspendu), l'action s'applique uniquement à la version actuelle de l'objet. Dans un <strong>Bucket</strong> avec le versionnage activé, un objet peut avoir plusieurs version, une version courante et zéro ou '<em>n</em>' versions non courantes.</li><li>Au lieu de supprimer la version actuelle, un <strong><code>marqueur de suppression (DeleteMarker)</code></strong> est appliqué et ce marqueur devient la version courante le l'objet.</li></ul><p><strong>Note:</strong></p><ul><li>Si le versionnage dans votre <strong>Bucket</strong> est suspendu, <strong><code>marqueur de suppression (DeleteMarker)</code></strong> sera créé avec un ID nul.</li><li>Pour supprimer les versions non courantes d'un objet, vous devez utiliser l'action <strong><code>NoncurrentVersionExpiration</code></strong></li><li>Type : Container</li><li>Enfants : <strong><code>Days</code></strong> ou <strong><code>Date</code></strong></li><li>Parent: <strong><code>Rule</code></strong></li></ul></td><td>Oui, si aucune autre action n'est présente dans la règle.</td></tr><tr><td><strong><code>Filter</code></strong></td><td><ul><li>Conteneur pour les éléments qui décrivent le filtre identifiant un sous-ensemble d'objets auquel la règle de cycle de vie s'applique. Si vous spécifiez un filtre vide (<strong><code>"Prefixe": {}</code></strong>), la règle s'applique à tous les objets du seau.</li><li>Type : Chaîne de caractères</li><li>Enfants : <strong><code>Prefixe</code></strong>, <strong><code>Tag</code></strong></li><li>Parent: <strong><code>Rule</code></strong></li></ul></td><td>Oui</td></tr><tr><td><strong><code>ID</code></strong></td><td><ul><li>Identifiant unique pour la règle. La valeur ne peut être supérieure à 255 caractères.</li><li>Type : Chaîne de caractères</li><li>Parent: <strong><code>Rule</code></strong></li></ul></td><td>Non</td></tr><tr><td><strong><code>Key</code></strong></td><td><ul><li>Spécifie la clé d'un tag. Une clé d'un tag peut comporter jusqu'à 128 caractères Unicode.</li><li>Les clés des tags que vous spécifiez dans un filtre de règle de cycle de vie doivent être uniques.</li><li>Type : Chaîne de caractères</li><li>Parent: <strong><code>Tag</code></strong></li></ul></td><td>Oui, si le parent <code>&#x3C;</code><strong><code>Tag</code></strong><code>></code> est spécifié.</td></tr><tr><td><strong><code>LifecycleConfiguration</code></strong></td><td><ul><li>Conteneur pour les règles du cycle de vie. Vous pouvez ajouter jusqu'à 1000 règles.</li><li>Type : Container</li><li>Enfant: <strong><code>Rule</code></strong></li><li>Parent: Aucun</li></ul></td><td>Oui</td></tr><tr><td><strong><code>ExpiredObjectDeleteMarker</code></strong></td><td><ul><li>Dans un <strong>Bucket</strong> où le <strong>versionnage</strong> est activé (ou suspendu), vous pouvez ajouter cette action pour supprimer les <strong><code>marqueur de suppression (DeleteMarker)</code>.</strong> Sur Bucket sans versionnage, cette action n'a aucun effet.</li><li>Cette action ne peut utiliser un filtre basé sur les tags</li><li>Valeur valide: true | false</li><li>Parent: <strong><code>Expiration</code></strong></li></ul></td><td>Oui. si <strong><code>Date</code></strong> and <strong><code>Days</code></strong> sont absent.</td></tr><tr><td><strong><code>NoncurrentDays</code></strong></td><td><ul><li>Spécifie le nombre de jours un objet est non courant avant que l'action s'applique.</li><li>Valeur: entier</li><li>Parent: <strong><code>NoncurrentVersionExpiration</code></strong></li></ul></td><td>Oui</td></tr><tr><td><strong><code>NoncurrentVersionExpiration</code></strong></td><td><ul><li>Indique quand un objet non courant expire. A l'expiration les versions non courantes de l'objet sont supprimées.</li><li>Positionnez cette configuration sur un <strong>Bucket</strong>, avec le versionnage activé (ou suspendu) afin de supprimer les versions non courante d'un objet au-delà d'un certaine période.</li><li>Type: Container</li><li>Enfant: <strong><code>NoncurrentDays</code></strong></li><li>Parent: <strong><code>Rule</code></strong></li></ul></td><td>Oui, si aucune autre action est présente dans le conteneur Rule.</td></tr><tr><td><strong><code>Prefixe</code></strong></td><td><ul><li>Préfixe de la clé d'objet identifiant un ou plusieurs objets auxquels la règle s'applique. Le préfixe vide (&#x3C;Prefix>&#x3C;/Prefix>) indique qu'il n'y a pas de filtre basé sur le préfixe de la clé.</li></ul><p><strong>Note:</strong></p><p>Prise en charge &#x3C;Prefixe> avec et sans &#x3C;Filtre>.</p><p>PUT Bucket lifecycle avec un filtre:</p><p><code>"Prefix": {}, # No Prefix"Prefix": "documents/",</code></p><ul><li>Il ne peut y avoir qu'un seul préfixe dans un filtre de règles de cycle de vie.</li><li>Type : Chaîne de caractères</li><li>Parent: <strong><code>Filter</code></strong> ou <strong><code>And</code></strong> (si vous spécifiez plusieurs filtres tels qu'un préfixe et un ou plusieurs tags)</li></ul></td><td>Non</td></tr><tr><td><strong><code>Rule</code></strong></td><td><ul><li>Conteneur pour une règle de cycle de vie. Une configuration de cycle de vie peut contenir jusqu'à 1 000 règles.</li><li>Type : Container</li><li>Ancêtre : <strong><code>LifecycleConfiguration</code></strong></li></ul></td><td>Oui</td></tr><tr><td><strong><code>Status</code></strong></td><td><ul><li>si elle est activée, S3 exécute la règle comme prévu. Si elle est désactivée, S3 ignore la règle.</li><li>Type : Chaîne de caractères</li><li>Ancêtre : <strong><code>Rule</code></strong></li><li>Valeurs valides : Enabled, Disabled.</li></ul></td><td>Oui</td></tr><tr><td><strong><code>Value</code></strong></td><td><ul><li>Spécifie la valeur d'une clé de balise. Chaque balise d'objet est une paire clé-valeur.</li><li>La valeur de la balise peut comporter jusqu'à 256 caractères Unicode.</li><li>Type : Chaîne de caractères</li><li>Ancêtre : <strong>Tag</strong></li></ul></td><td>Oui, si le parent <code>&#x3C;</code><strong><code>Tag</code></strong><code>></code> est spécifié.</td></tr></tbody></table>
