Subir archivos a S3 con AWS CLI: Una guía completa

Cuando trabajes con Amazon S3 (Simple Storage Service), probablemente estés utilizando el consola web de S3 para descargar, copiar o subir archivos a los buckets de S3. Usar la consola es perfectamente válido, para eso fue diseñada, en primer lugar.

Especialmente para los administradores que están acostumbrados a más clics de ratón que comandos de teclado, la consola web probablemente sea la más fácil. Sin embargo, los administradores eventualmente necesitarán realizar operaciones de archivos a granel con Amazon S3, como una carga de archivos no supervisada. La GUI no es la mejor herramienta para eso.

Para tales requisitos de automatización con Amazon Web Services, incluido Amazon S3, la herramienta AWS CLI proporciona a los administradores opciones de línea de comandos para administrar buckets y objetos de Amazon S3.

En este artículo, aprenderás cómo utilizar la herramienta AWS CLI de línea de comandos para cargar, copiar, descargar y sincronizar archivos con Amazon S3. También aprenderás los conceptos básicos de cómo proporcionar acceso a tu bucket de S3 y configurar ese perfil de acceso para que funcione con la herramienta AWS CLI.

Prerrequisitos

Dado que este es un artículo práctico, habrá ejemplos y demostraciones en las secciones siguientes. Para que puedas seguir correctamente, necesitarás cumplir con varios requisitos.

  • Una cuenta de AWS. Si no tienes una suscripción AWS existente, puedes registrarte para una Tier Gratuita de AWS.
  • Un cubo AWS S3. Puedes usar un cubo existente si lo prefieres. Sin embargo, se recomienda crear un cubo vacío en su lugar. Consulta Cómo crear un cubo.
  • A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
  • La herramienta AWS CLI versión 2 debe estar instalada en tu computadora.
  • Carpetas y archivos locales que cargarás o sincronizarás con Amazon S3

Preparación de tu acceso a AWS S3

Supongamos que ya tienes los requisitos en su lugar. Pensarías que ya puedes ir y comenzar a operar AWS CLI con tu cubo S3. Quiero decir, ¿no sería genial si fuera tan simple?

Para aquellos que están empezando a trabajar con Amazon S3 o AWS en general, esta sección tiene como objetivo ayudarte a configurar el acceso a S3 y configurar un perfil AWS CLI.

Puedes encontrar la documentación completa para crear un usuario IAM en AWS en este enlace a continuación. Cómo crear un usuario IAM en tu cuenta de AWS

Creación de un usuario IAM con permisos de acceso a S3

Cuando accedes a AWS mediante la CLI, deberás crear uno o más usuarios IAM con suficiente acceso a los recursos con los que planeas trabajar. En esta sección, crearás un usuario IAM con acceso a Amazon S3.

Para crear un usuario IAM con acceso a Amazon S3, primero debes iniciar sesión en tu consola de AWS IAM. Bajo el grupo de gestión de acceso, haz clic en Usuarios. Luego, haz clic en Añadir usuario.

IAM Users Menu

Escribe el nombre del usuario IAM que estás creando dentro del cuadro de texto Nombre de usuario, como por ejemplo s3Admin. En la selección de Tipo de acceso, marca la opción Acceso programático. Después, haz clic en el botón Siguiente: Permisos.

Set IAM user details

Luego, haz clic en Adjuntar directamente políticas existentes. A continuación, busca el nombre de la política AmazonS3FullAccess y marca la casilla correspondiente. Cuando hayas terminado, haz clic en Siguiente: Etiquetas.

Assign IAM user permissions

Crear etiquetas es opcional en la página Agregar etiquetas, puedes omitir este paso y hacer clic en el botón Siguiente: Revisar.

IAM user tags

En la página de Revisión, se te mostrará un resumen de la nueva cuenta que se está creando. Haz clic en Crear usuario.

IAM user summary

Finalmente, una vez que se haya creado el usuario, debes copiar los valores de la Clave de acceso y la Clave de acceso secreta y guardarlos para su uso posterior. Ten en cuenta que esta es la única vez que podrás ver estos valores.

IAM user key credentials

Configuración de un perfil de AWS en tu ordenador

Ahora que has creado el usuario IAM con el acceso adecuado a Amazon S3, el siguiente paso es configurar el perfil de AWS CLI en tu ordenador.

Esta sección asume que ya has instalado la herramienta AWS CLI versión 2 según lo requerido. Para la creación del perfil, necesitarás la siguiente información:

  • El Identificador de clave de acceso (Access key ID) del usuario IAM.
  • La Clave de acceso secreta (Secret access key) asociada con el usuario IAM.
  • El Nombre de región predeterminada corresponde a la ubicación de tu depósito AWS S3. Puedes consultar la lista de puntos finales utilizando este enlace. En este artículo, el depósito AWS S3 se encuentra en la región Asia Pacífico (Sídney), y el punto final correspondiente es ap-southeast-2.
  • El formato de salida predeterminado. Utiliza JSON para esto.

Para crear el perfil, abre PowerShell y escribe el siguiente comando, luego sigue las indicaciones.

aws configure

Ingresa el Identificador de clave de acceso, Clave de acceso secreta, Nombre de región predeterminada, y nombre de salida predeterminado. Consulta la demostración a continuación.

Configure an AWS CLI profile

Prueba de acceso a AWS CLI

Después de configurar el perfil de AWS CLI, puedes confirmar que el perfil funciona ejecutando el siguiente comando en PowerShell.

aws s3 ls

El comando anterior debería listar los depósitos de Amazon S3 que tienes en tu cuenta. La demostración a continuación muestra el comando en acción. El resultado indica que la configuración del perfil fue exitosa.

List S3 buckets

Para aprender acerca de los comandos AWS CLI específicos para Amazon S3, puedes visitar la página de Referencia de Comandos AWS CLI S3.

Manejo de Archivos en S3

Con AWS CLI, las operaciones típicas de gestión de archivos se pueden realizar, como cargar archivos en S3, descargar archivos de S3, eliminar objetos en S3 y copiar objetos de S3 a otra ubicación de S3. Todo depende de conocer el comando correcto, la sintaxis, los parámetros y las opciones adecuadas.

En las siguientes secciones, el entorno utilizado consiste en lo siguiente.

  • Dos buckets de S3, llamados atasync1 y atasync2. La captura de pantalla a continuación muestra los buckets de S3 existentes en la consola de Amazon S3.
List of available S3 bucket names in the Amazon S3 console
  • Directorio local y archivos ubicados en c:\sync.
Local Directory

Cargando Archivos Individuales en S3

Cuando cargas archivos en S3, puedes subir un archivo a la vez o cargar varios archivos y carpetas de forma recursiva. Según tus requisitos, puedes elegir uno u otro que consideres apropiado.

Para cargar un archivo en S3, deberás proporcionar dos argumentos (origen y destino) al comando aws s3 cp.

Por ejemplo, para cargar el archivo c:\sync\logs\log1.xml en la raíz del bucket atasync1, puedes usar el siguiente comando.

aws s3 cp c:\sync\logs\log1.xml s3://atasync1/

Nota: Los nombres de los buckets de S3 siempre tienen el prefijo S3:// cuando se utilizan con AWS CLI

Ejecuta el comando anterior en PowerShell, pero cambia el origen y el destino que se ajusten a tu entorno primero. La salida debería lucir similar a la demostración a continuación.

Upload file to S3

La demostración anterior muestra que el archivo llamado c:\sync\logs\log1.xml se cargó sin errores en el destino S3 s3://atasync1/.

Utiliza el comando a continuación para listar los objetos en la raíz del cubo S3.

aws s3 ls s3://atasync1/

Ejecutar el comando anterior en PowerShell daría como resultado una salida similar, como se muestra en la demostración a continuación. Como puedes ver en la salida a continuación, el archivo log1.xml está presente en la raíz de la ubicación S3.

List the uploaded file in S3

Cargando Múltiples Archivos y Carpetas en S3 de Forma Recursiva

La sección anterior te mostró cómo copiar un solo archivo a una ubicación S3. ¿Qué pasa si necesitas cargar múltiples archivos desde una carpeta y subcarpetas? Seguramente no querrías ejecutar el mismo comando varias veces para diferentes nombres de archivo, ¿verdad?

El comando aws s3 cp tiene una opción para procesar archivos y carpetas de forma recursiva, y esta es la opción --recursive.

Como ejemplo, el directorio c:\sync contiene 166 objetos (archivos y subcarpetas).

The folder containing multiple files and sub-folders

Usando la opción --recursive, todo el contenido de la carpeta c:\sync se cargará en S3 manteniendo también la estructura de carpetas. Para probar, utiliza el código de ejemplo a continuación, pero asegúrate de cambiar el origen y el destino apropiadamente según tu entorno.

Observarás en el código a continuación que la fuente es c:\sync, y el destino es s3://atasync1/sync. La clave /sync que sigue al nombre del cubo S3 indica al AWS CLI que cargue los archivos en la carpeta /sync en S3. Si la carpeta /sync no existe en S3, se creará automáticamente.

aws s3 cp c:\sync s3://atasync1/sync --recursive

El código anterior dará como resultado la salida, como se muestra en la demostración a continuación.

Upload multiple files and folders to S3

Cargando Múltiples Archivos y Carpetas en S3 Selectivamente

En algunos casos, subir TODOS los tipos de archivos no es la mejor opción. Por ejemplo, cuando solo necesitas cargar archivos con extensiones de archivo específicas (por ejemplo, *.ps1). Otras dos opciones disponibles para el comando cp son --include y --exclude.

Mientras que el uso del comando en la sección anterior incluye todos los archivos en la carga recursiva, el comando a continuación solo incluirá los archivos que coincidan con la extensión de archivo *.ps1 y excluirá cualquier otro archivo de la carga.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.ps1

La demostración a continuación muestra cómo funciona el código anterior al ejecutarse.

Upload files that matched a specific file extension

Otro ejemplo es si deseas incluir varias extensiones de archivo diferentes, deberás especificar la opción --include varias veces.

El comando de ejemplo a continuación solo incluirá los archivos *.csv y *.png en el comando de copia.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.csv --include *.png

Ejecutar el código anterior en PowerShell te presentaría un resultado similar, como se muestra a continuación.

Upload files with multiple include options

Descargando Objetos desde S3

Basado en los ejemplos que has aprendido en esta sección, también puedes realizar las operaciones de copia en reversa. Es decir, puedes descargar objetos desde la ubicación del bucket de S3 a la máquina local.

Copiar de S3 a local requeriría que cambies las posiciones de la fuente y el destino. La fuente siendo la ubicación de S3, y el destino es la ruta local, como la que se muestra a continuación.

aws s3 cp s3://atasync1/sync c:\sync

Nota que las mismas opciones utilizadas al subir archivos a S3 también son aplicables al descargar objetos de S3 a local. Por ejemplo, descargar todos los objetos usando el comando a continuación con la opción --recursive.

aws s3 cp s3://atasync1/sync c:\sync --recursive

Copiando Objetos Entre Ubicaciones de S3

Aparte de subir y descargar archivos y carpetas, usando AWS CLI, también puedes copiar o mover archivos entre dos ubicaciones de buckets de S3.

Notarás el comando a continuación usando una ubicación de S3 como la fuente, y otra ubicación de S3 como el destino.

aws s3 cp s3://atasync1/Log1.xml s3://atasync2/

La demostración a continuación te muestra el archivo fuente siendo copiado a otra ubicación de S3 usando el comando anterior.

Copy objects from one S3 location to another S3 location

Sincronizando Archivos y Carpetas con S3

Has aprendido cómo subir, descargar y copiar archivos en S3 usando los comandos de AWS CLI hasta ahora. En esta sección, aprenderás sobre un comando de operación de archivos más disponible en AWS CLI para S3, que es el comando sync. El comando sync solo procesa los archivos actualizados, nuevos y eliminados.

Hay algunos casos en los que necesitas mantener actualizados y sincronizados los contenidos de un bucket S3 con un directorio local en un servidor. Por ejemplo, puede que tengas el requisito de mantener sincronizados los registros de transacciones en un servidor con S3 a intervalos regulares.

Usando el comando a continuación, los archivos de registro *.XML ubicados en la carpeta c:\sync en el servidor local se sincronizarán con la ubicación S3 en s3://atasync1.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml

La demostración a continuación muestra que después de ejecutar el comando anterior en PowerShell, todos los archivos *.XML fueron cargados en el destino S3 s3://atasync1/.

Synchronizing local files to S3

Sincronización de Nuevos Archivos y Archivos Actualizados con S3

En este próximo ejemplo, se asume que el contenido del archivo de registro Log1.xml ha sido modificado. El comando sync debería detectar esa modificación y cargar los cambios realizados en el archivo local en S3, como se muestra en la demostración a continuación.

El comando a utilizar sigue siendo el mismo que en el ejemplo anterior.

Synchronizing changes to S3

Como puedes ver en la salida anterior, dado que solo se modificó el archivo Log1.xml localmente, también fue el único archivo sincronizado con S3.

Sincronización de Eliminaciones con S3

Por defecto, el comando sync no procesa las eliminaciones. Cualquier archivo eliminado de la ubicación de origen no se elimina en el destino. Bueno, a menos que uses la opción --delete.

En este próximo ejemplo, el archivo llamado Log5.xml ha sido eliminado de la fuente. El comando para sincronizar los archivos se añadirá con la opción --delete, como se muestra en el código a continuación.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml --delete

Cuando ejecutas el comando anterior en PowerShell, el archivo eliminado llamado Log5.xml también debería ser eliminado en la ubicación S3 de destino. El resultado de muestra se muestra a continuación.

Synchronize file deletions to S3

Resumen

Amazon S3 es un excelente recurso para almacenar archivos en la nube. Con el uso de la herramienta AWS CLI, la forma en que utilizas Amazon S3 se amplía aún más y abre la oportunidad de automatizar tus procesos.

En este artículo, has aprendido cómo usar la herramienta AWS CLI para cargar, descargar y sincronizar archivos y carpetas entre ubicaciones locales y buckets de S3. También has aprendido que el contenido de los buckets de S3 también se puede copiar o mover a otras ubicaciones de S3.

Puede haber muchos más escenarios de uso para utilizar la herramienta AWS CLI para automatizar la gestión de archivos con Amazon S3. Incluso puedes intentar combinarlo con scripts de PowerShell y crear tus propias herramientas o módulos que sean reutilizables. Depende de ti encontrar esas oportunidades y mostrar tus habilidades.

Lecturas adicionales

Source:
https://adamtheautomator.com/upload-file-to-s3/