Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Perché i costi S3 sono aumentati?

By Greg WiedemanMay 9, 202410 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Se i costi S3 sono aumentati e sta cercando di capirne il motivo, è probabile che sia stata attivata la funzionalità Versioning sul bucket S3. Niente paura: può gestirla e riprendere il pieno controllo del bucket S3 e dei relativi costi di versioning. In questo articolo trova indicazioni utili sui costi legati a un bucket S3 con versioning attivo e su come tenerli sotto controllo. Grazie a queste informazioni potrà ottimizzare il bucket S3 e pagare soltanto lo storage che le serve davvero.

S3 Versioning è una funzionalità preziosa che consente di mantenere più versioni dello stesso oggetto in un unico bucket. In questo modo avrà sempre accesso alle versioni precedenti di oggetti eliminati o sovrascritti per errore. Con S3 Versioning può conservare più versioni di un oggetto nello stesso bucket e ripristinare quella che le occorre.

Ad esempio, se attiva S3 Versioning su un bucket, gli oggetti eliminati non verranno rimossi in modo definitivo: Amazon S3 inserirà un delete marker, che diventerà la versione corrente dell'oggetto. All'occorrenza potrà comunque ripristinare la versione precedente.

Allo stesso modo, quando sovrascrive un oggetto, Amazon S3 aggiunge una nuova versione al bucket. La versione precedente resta nel bucket e diventa una versione noncurrent, ripristinabile in qualsiasi momento. Per approfondire, consulti la documentazione sull'eliminazione delle versioni degli oggetti da un bucket con versioning attivo.

Deleting object versions from a versioning-enabled bucket \ \ Delete an object in a versioning-enabled bucket by including the specific version ID of the object.\ \ docs.aws.amazon.com

Le ragioni per cui il Versioning può essere stato attivato sul bucket S3 sono diverse, ma è bene ricordare che, una volta abilitato, non si può più disattivare. Si può però sospendere e adottare una strategia sostenibile per gestire il Versioning del bucket S3. Non lasci che costi S3 imprevisti la blocchino: può riprendere il controllo del bucket S3 e gestire i costi di versioning in modo più efficiente.

Se ha più bucket con milioni di oggetti, può facilmente sentirsi sopraffatto e non sapere da dove cominciare. AWS mette a disposizione Storage Lens, che le permette di individuare quali bucket contengono oggetti versionati, in che numero e quale percentuale dei suoi oggetti è noncurrent. Indica inoltre lo storage tier in cui si trovano gli oggetti noncurrent. Per saperne di più, consulti l'articolo seguente su come usare AWS Storage Lens.

Assessing your storage activity and usage with Amazon S3 Storage Lens \ \ Use Amazon S3 Storage Lens to evaluate your Amazon S3 storage to gain insights, help increase cost efficiency, and…\ \ docs.aws.amazon.com

Questi dati le consentiranno di inquadrare rapidamente i costi di versioning e di capire come gestire meglio lo storage, osservando la quantità di spazio occupata dalle versioni noncurrent e i relativi tier. Il prezzo è lo stesso della copia versionata corrente. L'esempio che segue mostra come le versioni noncurrent possano accumularsi rapidamente nel tempo, facendo lievitare la spesa.

Immagini di avere un oggetto da 4 GiB aggiornato cinque volte al giorno. Si ritroverà con cinque versioni noncurrent al giorno più una versione corrente, per un totale di sei. Moltiplicando le cinque modifiche giornaliere per una media di 30 giorni: 5 modifiche al giorno x 30 giorni medi al mese = 150 copie di versioni noncurrent. Il conto sale in fretta e, qualunque sia lo storage tier in cui si trovano gli oggetti non versionati, è proprio quello il prezzo che le verrà addebitato.

Un altro esempio: con un file da 1 MB e 200 copie (versioni noncurrent), pagherà come per 200 MB di storage.

Una volta individuati i bucket con il Versioning attivo e gli oggetti che hanno già versioni noncurrent, si fermi un momento a valutare quanto le serva davvero conservare quelle copie. La domanda chiave è: "Mi servono o desidero davvero copie dell'oggetto?". Se la risposta è sì, occorre stabilire per quanto tempo conservarle e in quante. Da queste risposte dipendono il costo di mantenimento delle copie e il livello di automazione necessario per gestire le transizioni dell'oggetto. Si prenda quindi il tempo per capire qual è la soluzione più adatta a lei e alle sue esigenze. Non tutti i bucket sono uguali.

Se non le serve il versioning su un determinato bucket, segua la procedura riportata di seguito per sospendere il Versioning, rimuovere le copie non versionate ed eliminare i marker superflui. In questo modo ridurrà i costi e otterrà un bucket versionato di fatto disabilitato.

NOTA: Prima di procedere con i passaggi seguenti, tenga presente che, una volta eliminati i file noncurrent, tutte le relative copie noncurrent andranno perse per sempre, senza possibilità di recupero. Si assicuri quindi di operare sul bucket S3 corretto e valuti se le servono ancora le versioni noncurrent prima di eliminare alcunché. Può fare una prova preliminare su un bucket di test.

  1. Nella AWS S3 Console, individui il bucket sul quale desidera sospendere il Versioning e lo selezioni.
  2. Vada alla scheda Properties.
  3. Nella scheda Properties, individui la sezione relativa al Versioning e selezioni Edit.

Properties del bucket S3

4. Selezioni il pulsante di opzione Suspend.

5. Selezioni la casella I acknowledge the outcomes of suspending Bucket Versioning

6. Faccia clic su Save changes

7. Il Versioning sul bucket è ora sospeso.

  • La sospensione del Versioning impedisce la creazione di nuove versioni degli oggetti.
  • La sospensione del Versioning non ha alcun impatto sugli oggetti già presenti nel bucket.

Bucket Versioning Suspend o Enable

Il passaggio successivo consiste nel rimuovere le versioni noncurrent e i delete marker scaduti. Soprattutto quando si parla di milioni di file, uno dei metodi più diffusi è la Lifecycle Configuration. È quello che useremo nel nostro esempio, come consigliato da AWS, ma esistono anche altre strade. Le trova al link seguente.

Options to delete millions of objects from a versioning-enabled AWS S3 bucket \ \ Do you want to delete or clean up a versioning-enabled -S3-bucket? Though it looks empty, S3 is not allowing you to do…\ \ aws.plainenglish.io

Sempre all'interno del bucket S3, selezioni la scheda Management.

Nella finestra Management è presente una sezione denominata Lifecycle Rules. Faccia clic su Create lifecycle rule.

S3 Management Lifecycle Rules

  1. In Create lifecycle rule, compili le sezioni seguenti

Lifecycle rule name: usi un nome che descriva ciò che fa la regola.

Ad esempio DeleteNV-1days-DeleteMarker-IMU-7days. Nel nome della regola indichiamo di eliminare le copie non versionate dopo un giorno e i DeleteMarker e i caricamenti multipart incompleti dopo sette giorni. 2. In Choose a rule scope, selezioni il pulsante di opzione "Apply to all objects in the bucket.". Comparirà un riquadro con un messaggio di avviso. Lo legga e selezioni "I acknowledge that this rule will apply to all objects in the bucket.". Più avanti nell'articolo verrà illustrata l'opzione Limit the scope of this rule using one or more filters. 3. In Lifecycle rule actions, selezioni le caselle Permanently delete noncurrent versions of objects e Delete expired object delete markers or incomplete multipart uploads. 4. Più in basso compariranno due nuove sezioni: Permanently delete noncurrent versions of objects e Delete expired object delete markers or incomplete multipart upload. 5. In Permanently delete noncurrent versions of objects, nella casella di testo Days after objects become noncurrent, inserisca 1. Il valore deve essere maggiore di zero. È una delle scelte di cui abbiamo parlato in precedenza, ovvero per quanto tempo conservare gli oggetti noncurrent. La casella di testo a destra, Number of newer version to retain—Optional, la lasci vuota. Si ricorda la domanda "Quante versioni devo conservare?". È qui che imposterebbe quel numero: il sistema manterrà sempre quel numero di copie o versioni noncurrent. 6. Segue la sezione Delete expired object delete marker e Delete incomplete multipart uploads. Selezioni le caselle Delete expired object delete markers e Delete incomplete multipart uploads. Comparirà un nuovo campo, Number of days. Nella casella di testo inserisca 7. Indica i giorni che devono trascorrere prima di eliminare eventuali caricamenti multipart incompleti. È un margine sufficiente perché un caricamento multipart incompleto possa concludersi, qualora debba essere recuperato.

Configurazione della Lifecycle rule

Lifecycle Rule Actions

Forse si starà chiedendo perché abbiamo selezionato l'opzione per eliminare i caricamenti multipart incompleti. È un modo semplice ed efficace per ridurre i costi, configurabile in automatico tramite la Lifecycle rule del bucket S3. Tenga presente che le verranno addebitate tutte le parti dei caricamenti multipart incompleti in base alla classe di storage indicata al momento del caricamento. Anche in questo caso può sfruttare S3 Storage Lens per analizzarli. Per maggiori informazioni sui caricamenti multipart incompleti e sulla loro analisi con Storage Lens, consulti l'articolo seguente.

Discovering and Deleting Incomplete Multipart Uploads to Lower Amazon S3 Costs | Amazon Web… \ \ This blog post is contributed by Steven Dolan, Senior Enterprise Support TAM Amazon S3's multipart upload feature…\ \ aws.amazon.com

Di seguito ulteriori informazioni di AWS sull'eliminazione delle versioni noncurrent degli oggetti.

A versioning-enabled bucket has one current version and zero or more noncurrent versions for each object. When you delete an object, note the following:

If you don't specify a version ID in your delete request, Amazon S3 adds a delete marker instead of deleting the object. The current object version becomes noncurrent, and the delete marker becomes the current version.

If you specify a version ID in your delete request, Amazon S3 deletes the object version permanently (a delete marker is not created).

A delete marker with zero noncurrent versions is referred to as an expired object delete marker. (source).

Complimenti! Ha ripreso il controllo del suo bucket S3 versionato. A seconda della Lifecycle Configuration scelta per il suo caso d'uso, dovrebbe notare una riduzione dei costi nel giro di una settimana. Tenga però presente che le Lifecycle Rules vengono eseguite in modo asincrono, quindi la rimozione delle versioni noncurrent può richiedere un po' di tempo. Nessun timore: AWS non le addebiterà i giorni in più necessari per completare il processo.

Ora può anche riattivare il versioning, sapendo che una regola di Lifecycle Management gestirà automaticamente le versioni noncurrent. In alternativa, può lasciare il versioning sospeso se non desidera mantenere versioni degli oggetti. Ricordi che gli eventuali nuovi oggetti caricati nel bucket S3 mentre il versioning è sospeso avranno un version ID null e non saranno idonei al versioning.

A volte serve mantenere il versioning su un bucket S3 ma applicare la Lifecycle Management solo a determinati oggetti. La Lifecycle Management consente proprio di applicare la regola a prefissi specifici, tramite l'opzione "Limit the scope of this rule using one or more filters.". Con i filtri può decidere quali oggetti noncurrent siano soggetti all'eliminazione. La funzione filter si presta inoltre a definire Lifecycle Rules differenti per oggetti diversi.

Può filtrare in base alla posizione di archiviazione degli oggetti. Ad esempio, se ha file in una cartella logs, può impostare il filtro come logs/. La Lifecycle rule si applicherà a logs/log.txt, logs/temp3.txt e logs/test1.txt, ma non a un oggetto nella radice come example.jpg. Può anche filtrare per estensione del file, tag e dimensione degli oggetti. Per ulteriori informazioni sui filtri ed esempi diversi, consulti l'articolo seguente.

Lifecycle configuration elements \ \ Explains the elements of Amazon S3 Lifecycle configuration.\ \ docs.aws.amazon.com

Ora ha gli strumenti per tenere sotto controllo i costi S3 generati dalle versioni noncurrent degli oggetti. È sempre buona pratica testare le modifiche in un ambiente di test o di sviluppo prima di portarle in produzione.

Risorse: