Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

¿Por qué subieron mis costos de S3?

By Greg WiedemanMay 9, 202410 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Si tus costos de S3 subieron y estás tratando de entender por qué, es posible que se haya activado la función de Versioning en tu bucket de S3. Pero tranquilo: puedes administrarla y tomar el control total de tu bucket de S3 y de los costos asociados al versionado. Este artículo te aporta información valiosa sobre los costos de un bucket de S3 versionado y cómo gestionarlos de forma eficiente. Con esta información, podrás optimizar tu bucket de S3 y asegurarte de pagar solo por el almacenamiento que realmente necesitas.

S3 Versioning es una función muy útil que te permite mantener varias versiones del mismo objeto en un solo bucket. Así, siempre tendrás acceso a versiones anteriores de objetos eliminados o sobrescritos por accidente. Con S3 Versioning puedes guardar múltiples versiones de un objeto en un mismo bucket y restaurar la que necesites.

Por ejemplo, si activas S3 Versioning en un bucket, ningún objeto que elimines se borrará de forma permanente. En su lugar, Amazon S3 inserta un marcador de eliminación (delete marker) que pasa a ser la versión actual del objeto. Después puedes restaurar la versión anterior si lo necesitas.

Lo mismo ocurre al sobrescribir un objeto: Amazon S3 agrega una nueva versión al bucket. La versión anterior se conserva y pasa a ser una versión no actual (noncurrent). Puedes restaurarla cuando quieras. Para profundizar, revisa cómo eliminar versiones de objetos en un bucket con versioning habilitado.

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

Activar el Versioning en tu bucket de S3 puede deberse a varias razones, pero ten en cuenta que, una vez habilitado, ya no se puede desactivar. Lo que sí puedes hacer es suspenderlo y encontrar una forma sostenible de gestionar el Versioning de tu bucket. No dejes que los costos imprevistos de S3 te frenen: puedes tomar el control de tu bucket y administrar los costos de versionado de forma mucho más eficiente.

Si tienes varios buckets con millones de objetos, es normal que te sientas abrumado y necesites saber qué hay almacenado. AWS ofrece Storage Lens, que te permite identificar qué buckets tienen objetos versionados, cuántos son y qué porcentaje de tus objetos es noncurrent. Además, te muestra en qué nivel de almacenamiento se encuentran los objetos noncurrent. Para más detalles, consulta el siguiente artículo sobre cómo usar 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

Estos datos te ayudarán a entender rápidamente tus costos de versionado y a definir cómo administrar mejor el almacenamiento, observando el volumen y los niveles de las versiones noncurrent. El precio es el mismo que el de la copia versionada actual. El siguiente ejemplo muestra cómo las versiones noncurrent pueden acumularse rápido y disparar el costo.

Imagina que tienes un objeto de 4 GiB que se actualiza cinco veces al día. Eso significa cinco versiones noncurrent al día y una versión actual, seis en total. Si multiplicamos esos cinco cambios diarios por un promedio de 30 días, obtenemos: 5 cambios diarios x 30 días promedio al mes = 150 copias de versiones noncurrent. Esto se acumula muy rápido y, sin importar el nivel de almacenamiento en el que estén los objetos no versionados, ese es el precio que vas a pagar.

Otro ejemplo: si tienes un archivo de 1 MB y 200 copias (versiones noncurrent), pagarás por 200 MB de almacenamiento.

Una vez que hayas identificado los buckets con Versioning habilitado y los objetos que ya tienen versiones noncurrent, dedica un momento a pensar en el valor real de conservar copias del objeto. Pregúntate: "¿Necesito o quiero copias de este objeto?". Si la respuesta es sí, lo siguiente es definir por cuánto tiempo necesitas mantener una copia y cuántas. Esas respuestas te ayudarán a calcular el costo de mantenerlas y la automatización necesaria para gestionar las transiciones del objeto. Tómate tu tiempo para decidir lo que más te conviene. No todos los buckets son iguales.

Si no necesitas versioning en un bucket, sigue el procedimiento que verás a continuación para suspender el Versioning, eliminar las copias no versionadas y los marcadores de eliminación que ya no necesites. Así reducirás costos y obtendrás un bucket versionado en estado pseudo-deshabilitado.

NOTA: Antes de seguir el procedimiento, ten en cuenta que una vez que elimines los archivos noncurrent, todas las copias noncurrent del objeto desaparecerán para siempre y no habrá forma de recuperarlas. Por eso, asegúrate de estar en el bucket de S3 correcto y evalúa si realmente necesitas las versiones noncurrent antes de eliminar nada. Puedes hacer una prueba primero en un bucket de prueba.

  1. En la consola de AWS S3, ubica el bucket en el que quieres suspender el Versioning y selecciónalo.
  2. Ve a la pestaña Properties.
  3. En la pestaña Properties, ubica la sección de Versioning y haz clic en Edit.

Properties del bucket de S3

4. Selecciona el botón de opción Suspend.

5. Marca la casilla I acknowledge the outcomes of suspending Bucket Versioning.

6. Haz clic en Save changes.

7. El Versioning del bucket queda suspendido.

  • Suspender el Versioning impide que se creen nuevas versiones de los objetos.
  • Suspender el Versioning no afecta a los objetos que ya están en el bucket.

Bucket Versioning Suspend o Enable

El siguiente paso es eliminar las versiones noncurrent y los delete markers expirados. Una de las formas más comunes, sobre todo cuando hay millones de archivos, es usar Lifecycle Configuration. La usaremos en nuestro ejemplo, ya que es la opción recomendada por AWS, aunque hay otras alternativas. Revisa el siguiente recurso para conocerlas.

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

Sin salir del bucket de S3, selecciona la pestaña Management.

En la ventana Management hay una sección llamada Lifecycle Rules. Haz clic en Create lifecycle rule.

Lifecycle Rules en S3 Management

  1. En Create lifecycle rule, completa las siguientes secciones

Lifecycle rule name: usa un nombre que describa lo que hace la regla.

Por ejemplo, DeleteNV-1days-DeleteMarker-IMU-7days. En el nombre indicamos que se eliminen las copias no versionadas después de un día, y los DeleteMarkers e incomplete multipart uploads después de siete días. 2. En Choose a rule scope, selecciona el botón de opción "Apply to all objects in the bucket". Aparecerá una casilla con un mensaje de advertencia. Léela y marca "I acknowledge that this rule will apply to all objects in the bucket". Más adelante en el artículo se explica la opción Limit the scope of this rule using one or more filters. 3. En Lifecycle rule actions, marca las casillas Permanently delete noncurrent versions of objects y Delete expired object delete markers or incomplete multipart uploads. 4. Aparecerán dos nuevas secciones: Permanently delete noncurrent versions of objects y Delete expired object delete markers or incomplete multipart upload. 5. En Permanently delete noncurrent versions of objects, en el campo Days after objects become noncurrent, ingresa 1. El número debe ser mayor que cero. Esta es una de las decisiones que comentamos antes: cuánto tiempo conservar los objetos noncurrent. En el campo de la derecha, Number of newer version to retain—Optional, déjalo en blanco. Recuerda la pregunta: "¿Cuántas versiones necesito conservar?". Aquí es donde defines ese número. Siempre se mantendrá esa cantidad de copias o versiones noncurrent. 6. Después viene la sección Delete expired object delete marker y Delete incomplete multipart uploads. Marca las casillas Delete expired object delete markers y Delete incomplete multipart uploads. Aparecerá una nueva opción llamada Number of days. En el campo, ingresa 7. Ese es el número de días que se esperará antes de eliminar cualquier incomplete multipart upload. Así se da margen suficiente para que un incomplete multipart upload se complete si necesita recuperarse.

Configuración de la Lifecycle rule

Lifecycle Rule Actions

Quizá te preguntes por qué seleccionamos la opción de eliminar incomplete multipart uploads. Es una forma sencilla y efectiva de reducir costos, y se puede dejar configurada de forma automática en la Lifecycle rule de tu bucket de S3. Recuerda que se te cobrará por cualquier parte de un incomplete multipart upload según la clase de almacenamiento especificada al cargar las partes. También puedes apoyarte en S3 Storage Lens para analizar los incomplete multipart uploads. Para más información sobre los incomplete multipart uploads y cómo analizarlos con Storage Lens, consulta el siguiente artículo.

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

A continuación encontrarás más información de AWS sobre la eliminación de versiones noncurrent de objetos.

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

¡Listo! Tomaste el control de un bucket de S3 versionado. Según la configuración de lifecycle que hayas elegido para tu caso de uso, deberías ver una reducción del costo después de una semana. Eso sí, ten en cuenta que las Lifecycle Rules se ejecutan de forma asíncrona, así que eliminar los objetos de versión noncurrent puede tardar un poco. Pero tranquilo: AWS no te cobrará por los días adicionales que tarde en completarse el proceso.

Ahora puedes volver a habilitar el versioning, ya que una regla de Lifecycle Management se encargará automáticamente de las versiones noncurrent. También puedes mantener el versioning suspendido si no quieres conservar versiones de los objetos. Ten presente que cualquier objeto nuevo que se cargue al bucket de S3 mientras el versioning esté suspendido tendrá un marcador de ID nulo y no será elegible para versionado.

A veces necesitas tener el versioning habilitado en un bucket de S3, pero solo quieres aplicar Lifecycle Management a ciertos objetos. Lifecycle Management te permite aplicar la regla a prefijos específicos. Esa opción se llama "Limit the scope of this rule using one or more filters". Con los filtros decides qué objetos noncurrent se eliminan. También puedes usar la función de filtros para aplicar diferentes Lifecycle rules a distintos objetos.

Puedes filtrar por la ubicación donde se almacenan los objetos. Por ejemplo, si tienes archivos en una carpeta logs, puedes definir el filtro como logs/. La Lifecycle rule se aplicará a logs/log.txt, logs/temp3.txt y logs/test1.txt, pero no a un objeto en la raíz llamado example.jpg. También puedes filtrar por extensiones de archivo, tags y tamaño de los objetos. Consulta el siguiente artículo para más información sobre filtrado y ejemplos.

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

Ya tienes el conocimiento necesario para controlar los costos de S3 vinculados a las versiones noncurrent de los objetos. Siempre es recomendable probar los cambios en un entorno de prueba o desarrollo antes de llevarlos a producción.

Recursos: