DEV Community

Cover image for Inventario AWS S3
juanc4milo
juanc4milo

Posted on • Updated on • Originally published at juanc4milo.dev

Inventario AWS S3

AWS S3 Inventory

En ocasiones cuando tenemos un repositorio de documentos con miles o millones de objetos, como por ejemplo AWS S3, Google Cloud Storage o Azure Blob Storage, es probable que perdamos la noción de todo lo que se tiene almacenado en ese repositorio.

Para ello, en el caso de AWS, se dispone de una funcionalidad llamada Inventory, la cual nos permite generar un listado de todos los archivos alojados en determinada ubicación y sobre ese listado incluir ciertos parámetros que nos permite obtener más información sobre lo que tenemos almacenado.

Este listado de inventario de objetos (archivos) en el bucket S3 de Amazon, se puede generar por medio de esta funcionalidad Inventory (Inventario) la cual por defecto nos genera un archivo en formato CSV con la siguiente estructura:

BucketName, KeyObject

Para generar este listado, se ingresa al servicio de S3 en la consola de AWS, se selecciona el bucket donde se encuentras los objetos que queremos listar, luego se selecciona Management y luego Inventory:

image-1.png

Una vez ubicados en este punto, se puede elegir adicionar una nueva tarea de generación de listado de inventario de nuestros objetos:

image-13.png

Al seleccionar la opción de crear una nueva tarea de creación de inventario, la página nos solicita los siguientes campos:

  • Inventory name: Nombre de la tarea de inventario.
  • Filters: Prefijo S3 desde donde se va a generar el listado de objetos (carpeta desde donde se requiere el listado de archivos).
  • Destination Bucket: Nombre del bucket donde se quiere crear el listado.
  • Destination Prefix: Prefijo donde se quiere crear el listado.
  • Frequency: Frecuencia con la que se quiere generar el reporte (diaria o semanal).

image-3.png

En opciones avanzadas se puede seleccionar lo siguiente:

  • Output format: Formato de salida del listado. El formato puede ser: CSV, Apache ORC, Apache Parquet.
  • Object versions: Seleccionar si quiere el listado solo con las versiones actuales del objeto o con todas las versiones (si se tiene habilitado el versioning).
  • Optional fields: Campos adicionales que va a contener el reporte. Por defecto está: NombreBucket y KeyObject.
  • Encryption: Método de encripción para el listado de objetos. Puede ser Ninguno, AES-256, AWS-KMS.

image-4.png

Una vez diligenciado todos los campos, se debe ver algo como lo siguiente:

image-5.png

Amazon advierte que el primer reporte de listado de objetos, podría tardar en generarse 48 horas, aunque, dependiendo de la cantidad de objetos que debe listar en el reporte, podría tomar mucho menos tiempo. Para este caso que solo se ha seleccionado generar la carpeta de un cliente (200 objetos), el reporte se generó en 24 horas.

image-6.png

Adicional, al crear la tarea de generación de reporte de inventario, Amazon automáticamente crea una política de Bucket para tener permisos de escritura sobre el bucket seleccionado para la entrega del listado.

image-7.png

{
    "Sid": "S3PolicyStmt-DO-NOT-MODIFY-160xxxxxxxxxx",
    "Effect": "Allow",
    "Principal": {
        "Service": "s3.amazonaws.com"
    },
    "Action": [
        "s3:PutObject"
    ],
    "Resource": [
        "arn:aws:s3:::prueba-de-copiado-de-inventory-job/*"
    ],
    "Condition": {
        "ArnLike": {
            "aws:SourceArn": [
                "arn:aws:s3:::prueba-de-copiado-de-inventory-job"
            ]
        },
        "StringEquals": {
            "aws:SourceAccount": [
                "97xxxxxxxxx"
            ],
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}

Una vez transcurridas las primeras 24 horas a partir de que se crea la tarea de generación del listado de objetos, en el bucket se puede observar que se crea una carpeta donde se ubica el reporte:

image-8.png

Una vez ingresado en el prefijo donde se indicó que debía ubicar los reportes diarios, aparecerán 3 carpetas inicialmente. Para el caso de la imagen anterior, las carpetas adicionales nombradas por una fecha, corresponde a los días de generación del reporte, en este casi diario.

La primer carpeta con la fecha de generación del reporte, contiene el manifiesto de generación del reporte en formato .json. Este manifiesto alberga la metadata del archivo de inventario generado por AWS, que nos indica fecha de generación, ubicación del reporte, tamaño, extensión, etc.

image-10.png

{
  "sourceBucket" : "prueba-de-copiado-de-inventory-job",
  "destinationBucket" : "arn:aws:s3:::prueba-de-copiado-de-inventory-job",
  "version" : "2016-11-30",
  "creationTimestamp" : "1581379200000",
  "fileFormat" : "CSV",
  "fileSchema" : "Bucket, Key",
  "files" : [ {
    "key" : "prueba-de-copiado-de-inventory-job/data/6fbf1c72-aded-47ff-91e4-2448addfd5a5.csv.gz",
    "size" : 127,
    "MD5checksum" : "60aee2df4caf7f4b00a7375bc978d1c8"
  } ]
}

La segunda carpeta, data contiene el archivo de reporte en formato CSV con todo el listado de los documentos ubicados en la ruta que se haya especificado para listar los objetos.

image-11.png

La tercer carpeta, hive con un archivo de texto que contiene la URL completa de donde está ubicado el reporte en nuestro bucket.

image-12.png

Como se puede apreciar, la funcionalidad de AWS S3 Inventory nos permite generar un listado de todos los objetos y es de gran ayuda cuando tenemos millones de archivos en él. Adicional, estos listados son indispensables para automatizar procesos sobre estos objetos, como por ejemplo tareas de copiado de archivos entre buckets, cambiar el tipo de almacenamiento, cambiar la metadata o los tags de los objetos, entre otros.

Un dato adicional a tener en cuenta es que esta funcionalidad tiene un costo que oscila entre los $0,0025 USD y $0,0035 USD por millón de objetos enumerados, dependiendo de la región donde se realice la ejecución del inventario. También, los archivos resultantes como los manifiestos y la data (archivos CSV) almacenados en el bucket, deben incurrir en los costos asociados de solicitudes sobre el bucket de estos objetos y en el tamaño/tiempo de almacenamiento.

Toda esta configuración que hemos visto por medio de la consola web de AWS, se puede realizar a través de la herramienta de línea de comando AWS cli, usando el comando put-bucket-inventory-configuration. Para más detalle se puede revisar la documentación en su sitio web oficial https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-inventory-configuration.html

De igual forma, se puede realizar por medio del AWS SDK disponible para todos los lenguajes de programación soportados por Amazon, el cual se puede ver mayor detalle en su documentación: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketInventoryConfiguration.html

Otros artículos que te podrían interesar...

Do you like it? You can buy me a beer if you want.

Originally published at juanc4milo.dev

Top comments (0)