Gestione dei contrassegni di eliminazione - Amazon Simple Storage Service

Gestione dei contrassegni di eliminazione

Configurazione del ciclo di vita per ripulire automaticamente i contrassegni di eliminazione scaduti

Un contrassegno di eliminazione oggetto scaduto è un elemento in cui tutte le versioni dell'oggetto vengono eliminate e rimane solo un singolo contrassegno di eliminazione. Se la policy relativa al ciclo di vita è impostata per eliminare le versioni correnti, oppure l'opzione ExpiredObjectDeleteMarker è impostata in modo esplicito, Amazon S3 rimuove il contrassegno di eliminazione dell'oggetto scaduto. Per un esempio, consulta Esempio 7: rimozione dei contrassegni di eliminazione oggetto scaduto.

Rimozione dei contrassegni di eliminazione per rendere corrente una versione precedente

Quando si elimina un oggetto in un bucket che supporta la funzione Controllo delle versioni, tutte le versioni rimangono nel bucket e Amazon S3 crea un contrassegno di eliminazione per l'oggetto. Per annullare l'eliminazione dell'oggetto, è necessario eliminare il contrassegno di eliminazione. Per ulteriori informazioni sulla funzione Controllo delle versioni e sui contrassegni di eliminazione, consulta Utilizzo della funzione Controllo delle versioni nei bucket S3.

Per eliminare definitivamente un contrassegno di eliminazione occorre includere il suo ID versione nella richiesta DeleteObject versionId. La figura seguente mostra una richiesta DeleteObject versionId che rimuove definitivamente un contrassegno di eliminazione.

L'effetto della rimozione del contrassegno di eliminazione è che una richiesta GET semplice non recupererà l'ID versione corrente (121212) dell'oggetto.

Nota

Se si utilizza una richiesta DeleteObject per eliminare un contrassegno di eliminazione (senza specificare l'ID versione del contrassegno), Amazon S3 non elimina il contrassegno, ma PUTs inserisce un altro contrassegno di eliminazione.

Per rimuovere un contrassegno di eliminazione con un ID di versione NULL, è necessario passare il NULL come ID di versione nella richiesta DeleteObject. La figura seguente mostra come una semplice richiesta DeleteObject effettuata senza un ID di versione, in cui la versione corrente è un marker di eliminazione, non rimuove nulla, ma aggiunge invece un marker di eliminazione ulteriore con un ID di versione univoco (7498372).

Utilizzare la seguente procedura per recuperare gli oggetti eliminati che non sono cartelle dal bucket S3, inclusi gli oggetti che si trovano all'interno di tali cartelle.

  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Bucket scegli il nome del bucket desiderato.

  3. Per visualizzare un elenco delle versioni degli oggetti nel bucket, scegliere l'opzione List versions (Elenca versioni). Verranno visualizzati i contrassegni di eliminazione degli oggetti eliminati.

  4. Per annullare l'eliminazione di un oggetto, è necessario eliminare il contrassegno di eliminazione. Selezionare la casella di controllo accanto al contrassegno di eliminazione dell'oggetto da recuperare, quindi scegliere Delete (Elimina).

  5. Conferma l'eliminazione nella pagina Delete objects (Elimina oggetti) .

    1. Per Eliminare definitivamente gli oggetti?, specifica permanently delete.

    2. Scegliere Delete objects (Elimina oggetti).

Nota

Non puoi utilizzare la console Amazon S3 per annullare l'eliminazione delle cartelle. È necessario utilizzare la AWS CLI o l'SDK. Per gli esempi, consulta Come posso ripristinare un oggetto Amazon S3 eliminato da un bucket con il controllo delle versioni abilitato? nel Knowledge Center di AWS.

Per rimuovere definitivamente un contrassegno di eliminazione
  1. Impostare versionId sull'ID versione del contrassegno di eliminazione che si desidera rimuovere.

  2. Inviare una richiesta DELETE Object versionId.

Esempio - Rimozione di un contrassegno di eliminazione

Il seguente esempio consente di rimuovere il contrassegno di eliminazione della versione budget 4857693 di photo.gif.

DELETE /photo.gif?versionId=4857693 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Quando si elimina un contrassegno di eliminazione, Amazon S3 include nella risposta:

204 NoContent x-amz-version-id: versionID x-amz-delete-marker: true

Per informazioni sull'utilizzo di altri SDK AWS, consulta il Centro sviluppatori di AWS.

Python

Per istruzioni su come creare e testare un esempio di utilizzo, consulta Utilizzo di AWS SDK for Python (Boto).

Nell'esempio di codice Python seguente viene illustrato come rimuovere un marker di eliminazione da un oggetto, rendendo quindi la versione non corrente più recente la versione corrente dell'oggetto.

def revive_object(bucket, object_key): """ Revives a versioned object that was deleted by removing the object's active delete marker. A versioned object presents as deleted when its latest version is a delete marker. By removing the delete marker, we make the previous version the latest version and the object then presents as *not* deleted. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that contains the object. :param object_key: The object to revive. """ # Get the latest version for the object. response = s3.meta.client.list_object_versions( Bucket=bucket.name, Prefix=object_key, MaxKeys=1) if 'DeleteMarkers' in response: latest_version = response['DeleteMarkers'][0] if latest_version['IsLatest']: logger.info("Object %s was indeed deleted on %s. Let's revive it.", object_key, latest_version['LastModified']) obj = bucket.Object(object_key) obj.Version(latest_version['VersionId']).delete() logger.info("Revived %s, active version is now %s with body '%s'", object_key, obj.version_id, obj.get()['Body'].read()) else: logger.warning("Delete marker is not the latest version for %s!", object_key) elif 'Versions' in response: logger.warning("Got an active version for %s, nothing to do.", object_key) else: logger.error("Couldn't get any version info for %s.", object_key)