DEV Community

Cover image for AWS S3 Batch Operations
juanc4milo
juanc4milo

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

AWS S3 Batch Operations

¿Qué es?

Batch operations o en español, operaciones por lotes de S3, es una funcionalidad de AWS para realizar acciones por lotes a gran escala en objetos de Amazon S3. Se utiliza para copiar objetos, establecer etiquetas de objetos o listas de control de acceso (ACL), iniciar restauraciones de objetos desde Amazon S3 Glacier o invocar una función de AWS Lambda para realizar acciones personalizadas con los objetos.

Prerequisitos

Como prerequisito para el uso de esta funcionalidad, es necesario tener lo siguiente:

  • Listado de los objetos en un archivo CSV o archivo manifiesto JSON generado por la funcionalidad Inventario de AWS S3.
  • Política de permisos en IAM.
  • Rol en IAM.

Listado de los objetos

Para realizar un trabajo por lotes con objetos de AWS S3, es necesario tener un archivo con el listado de todos los objetos que se requiere realizar alguna acción por lotes. Este listado se puede generar manualmente en formato CSV con la estructura: NombreBucket, LlaveObjeto. Sin embargo, esta tarea puede ser algo compleja, para ello Amazon dispone de una funcionalidad llamada Inventory (Inventario) que permite generar este archivo, el cual para su configuración y uso se puede revisar en la entrada: Inventario AWS S3

Política de permisos en IAM

Para la correcta ejecución de S3 Batch Operation, se debe de contar con una política de permisos que permite al servicio S3 ejecutar las acciones sobre los recursos de la cuenta. Para ello se debe crear una política que luego será asociada a un Rol de IAM.

Para ello se ingresa en IAM y se crea una política:

create-policy

El JSON de la política debe describir los permisos sobre:

  • Lectura de objetos que servirán de insumo para realizar las acciones por lote (bucket 1)
  • Escritura de objetos hacia donde se va dirigida la acción por lote (bucket 2)
  • Escritura de objetos donde será ubicado el reporte de generación de resultado de la tarea por lote.

Ejemplo:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::bucket-2/*"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectTagging"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::bucket-1/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-1/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-1/*"
            ]
        }
    ]
}

Luego se revisa que la política este bien creada, se le asigna un nombre y una descripción:

policy-name-description

Una vez creada la política de permisos se debe ver en el listado de políticas de la cuenta:

policies-list

Configuración Rol en IAM

Para la correcta ejecución de S3 Batch Operation, se debe de contar con un rol que permite al servicio S3 ejecutar las acciones sobre los recursos de la cuenta según las políticas que tenga asociado el rol.

Para ello se ingresa en IAM y se crea un rol:

image-5.png

Se selecciona que el rol será creado para que S3 Batch Operation pueda ejecutar acciones sobre la cuenta:

image-6.png

Luego se asocia la política de permisos previamente creada:

image-7.png

Luego se adicionan los tags al rol:

image-8.png

Finalmente se verifica que este bien creado el rol, se le asigna un nombre y una descripción:

image-9.png

Una vez creado el rol se verifica que este contenga la relación de confianza con S3 Batch Operations:

image-10.png

image-11.png

Configuración de S3 Batch Operation

Ingresar a Amazon S3 y en el menú seleccionar Batch Operations:

image-12.png

Luego Crear Job:

image-13.png

La creación del job se compone de 4 pasos:

  1. Escoger la región y el archivo manifiesto con el listado de objetos.
  2. Escoger la operación por lote a realizar.
  3. Configuraciones adicionales.
  4. Verificación.

Se escoge la región donde se quiere crear el job. Para todas las operaciones, excepto para la de copia, se debe escoger la misma región donde se encuentran almacenados los objetos del listado. Para la operación de copia el Job se debe crear en la misma región donde se encuentra el bucket destino.

image-14.png

Luego se debe elegir el manifiesto (JSON) donde se referencia el listado de los objetos, este manifiesto es un archivo que se genera con el reporte de la funcionalidad Inventario de AWS S3. También se puede seleccionar un archivo en formato CSV, que debe tener la estructura BucketName, ObjectKey:

image-16.png

Luego se selecciona la operación que se quiere ejecutar en el job. Para este caso del ejemplo, la idea es copiar los archivos entre 2 buckets, para ello, se selecciona “Copia”:

image-17.png

Como se ha elegido copia, saldrán las opciones de configuración para llevar a cabo esta tarea. Se solicita indicar el bucket destino donde serán copiados los objetos. AWS advierte que si no se tiene habilitado el Versioning en el bucket destino, si llega a encontrar un objeto similar durante la copia, este será sobreescrito.

image-18.png

Luego se debe seleccionar el tipo de almacenamiento que serán copiado los archivos en el bucket destino.

image-19.png

Luego se debe indicar si los datos se deben proteger con encripción en reposo usando SSE-S3 o AWS KMS:

image-20.png

Luego se debe indicar qué se debe hacer con los tags de los objetos durante la copia:

  • Copiar los mismos tags existentes de cada objeto.
  • Reemplazar todos los tags por otros.
  • No copiar ningún tag.

image-21.png

Luego se debe indicar qué se debe hacer con la metadata de los objetos durante la copia:

  • Copiar la misma metadata existente de cada objeto.
  • Reemplazar toda la metadata con otros valores.
  • No copiar ningún valor de metadata.

image-22.png

Luego se debe seleccionar los permisos de la lista de control de acceso para cada objeto (permiso de los objetos):

image-23.png

Luego se debe asignar una descripción (nombre) al job y una prioridad (en números):

image-24.png

Luego se debe indicar si se requiere que el Job genere un reporte con el estado de la ejecución de las operaciones por cada uno de los objetos. En caso que si se quiera la generación del reporte, se debe indicar el bucket donde será almacenado el archivo.

image-25.png

Luego se deben asignar los permisos para el Job. Para ello se debe seleccionar el IAM Rol creado previamente que contiene la política de permisos sobre los recursos que va a usar S3 Batch Operations.

image-26.png

Finalmente se verifica todas las configuraciones realizadas anteriormente para revisar que todo esté en orden y al final se da click sobre Crear Job.

Una vez creado el Job, Amazon advierte que va a verificar el manifiesto (o archivo CSV) que contiene el listado de objetos al que se le va a aplicar las operaciones por lotes. Si todo se encuentra en orden, pasa el estado del Job de “Nuevo” a “En espera por ejecución”.

image-27.png

Amazon entrega un ID para el Job creado e indica que los Jobs se borran automáticamente luego de 90 días así se hayan terminado OK o en ERROR.

image-28.png

image-29.png

Una vez que Amazon haya terminado de verificar el Job, lo pasa al estado “Pendiente por ejecución” y es aquí donde se puede seleccinar el Job y dar click en “Ejecutar” (Run):

image-30.png

Cuando se da click en Run Job, muestra nuevamente toda la configuración del job para estar seguros de lo que se va a ejecutar. Al final aparece el botón Run Job para iniciar con la ejecución de la tarea:

image-31.png

Una vez completado, lo pasa a un estado “Completado”, indicando el 100% de la tarea completada y el % de errores (si los hubiese).

image-32.png

Costos

En cuanto a costo por usar esta funcionalidad, están las siguientes cifras:

  • Por cada job que se cree en S3 Batch Operation incurrirá en un costo de $0,25 USD.
  • Por cada millón de operaciones realizada sobre los objetos incurre en un costo de $1,00 USD.

Esto quiere decir, que es muy importante definir bien la creación del job, debido a que durante el proceso de su creación si hemos cometido algún error (falta de permisos en el rol, falta de permisos en las políticas, elección de un inventario de objetos que no corresponde, etc.), nos cobran igualmente por crear un job que esté errado en su ejecución.

Por otra parte, se nota el gran beneficio el usar esta funcionalidad, ya que por realizar por ejemplo un copiado de 1 millón de archivos entre 2 buckets, solo nos cobra $1 USD.

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)