Blog de Amazon Web Services (AWS)

Cómo copiar datos de Azure Blob Storage a Amazon S3 usando código

Por Mo Mohoboob e Chris Schoerning
Nuestros clientes nos dicen que quieren una forma confiable de copiar datos de Azure Blob Storage a Amazon Simple Storage Service (Amazon S3). A veces, los datos necesitan ser movidos una sola vez, como durante una migración. Mientras que otras veces, necesita copiarse continuamente, como en una canalización de datos. Lo que es común entre estas solicitudes es que los clientes desean una solución eficiente, de alto rendimiento y rentable.En esta entrada de blog, le mostraremos cómo construir una aplicación segura, liviana y sin servidor para copiar datos de Azure Blob Storage a Amazon S3. Esta solución proporciona una manera fluida y eficiente de transferir datos y permite la integración programática con otras aplicaciones. Te guiaremos a través del diseño y compartiremos el código para que puedas implementarlo en tu propia cuenta de AWS. El código se proporciona como plantillas de AWS CloudFormation y Terraform.

Descripción general de la solución

El diseño utiliza AWS Lambda para crear una solución sin servidor. La comunicación entre las funciones de AWS Lambda y Azure utiliza el SDK de Azure para Python. Para apoyar esta comunicación, se requieren dos bibliotecas: una para manejar la identidad y otra para administrar el almacenamiento. Estas bibliotecas se despliegan como capas Lambda separadas, lo que les permite ser reutilizadas fácilmente en diferentes soluciones.

Cada función Lambda tiene un trabajo específico, lo que mejora la escalabilidad, el rendimiento y la resiliencia. Las funciones de Lambda interactúan entre sí mediante Amazon Simple Notification Service (Amazon SNS) para un patrón de mensajería de publicación-suscripción.

Para activar las funciones de Lambda a diario, Amazon EventBridge emplea una regla EventBridge. El horario puede ser modificado para adaptarse a sus requisitos específicos.

La secuencia de eventos se ilustra en la Figura 1, con flechas que indican la dirección de invocación. En el Cuadro 1 se describe el orden de los eventos.

Azure blob to Amazon S3 copy solution process flow diagram. Main Services are Amazon S3, AWS Lambda, Amazon SNS, AWS Secrets Manager, Amazon EventBridge, Azure Blob Storage, Azure AD, Entra

Figura 1: Servicios de AWS y orden de eventos

 

Paso Descripción
1 Una tarea programada de EventBridge activa una función Lambda para iniciar el proceso de copia de datos.
2 Las funciones de Lambda consultan las credenciales de autenticación y los parámetros de configuración de AWS Secrets Manager para Azure.
3 Las funciones Lambda se comunican entre sí mediante AWS SNS.
4 Las funciones Lambda solicitan un token OAUTH de Azure Active Directory a través de HTTPS.
5 Las funciones Lambda interactúan con Azure Blob Storage a través de HTTPS.
6 Las funciones Lambda suben datos a un bucket de Amazon S3.

Cuadro 1: Orden de los eventos

Los endpoints públicos de Azure Blob Storage se cifran con Transport Layer Security (TLS) 1.2 de forma predeterminada. Esto asegura que los datos estén encriptados en tránsito. A partir del 5 de enero de 2023, todos los objetos nuevos cargados en Amazon S3 se cifran automáticamente con claves administradas de Amazon S3 (SSE-S3). En esta solución, empleamos cifrado del lado del servidor para el bucket utilizando AWS Key Management Service (AWS KMS).

El acceso a los blobs de Azure desde una entidad principal de servicio de aplicaciones está autorizado mediante Azure Active Directory. El ID de aplicación de Azure, el ID de inquilino y el secreto de cliente se almacenan de forma segura en AWS Secrets Manager y se recuperan mediante las funciones de Lambda según sea necesario.

AWS Identity and Access Management (IAM) es un componente clave de cualquier solución de AWS. A cada servicio de AWS solo se le debe permitir hacer lo que necesita hacer en el diseño. Hemos perfeccionado los permisos para aplicar el principio de menor privilegio.

La solución se puede controlar usando dos parámetros. El primer parámetro, isactive, habilita o desactiva el proceso de copia. El segundo parámetro, begindate, permite modificar el requisito de edad mínima para que los objetos sean copiados. Para simplificar el diseño, estos parámetros se almacenan en AWS Secrets Manager. Las funciones de Lambda pueden recuperar de manera eficiente todos los datos requeridos al interactuar únicamente con AWS Secrets Manager, con un impacto mínimo en el costo ($.80 al momento de escribir este artículo).

Para aumentar la observabilidad, un panel de Amazon CloudWatch combina métricas y registros en una sola vista, lo que permite identificar rápidamente los problemas.

El proceso de copia se optimiza en función del tamaño del blob que se está copiando. Para blobs menores de 100MB, se utilizan las funciones Lambda 1-3, mientras que para objetos que superan los 100MB de tamaño, se emplean las funciones Lambda 1-6, como se ilustra en la Figura 2.

Diagram showing the flow of data through AWS Lambda functions based on Azure blob size

Figura 2: Enrutamiento de objetos de Amazon S3

 

La Figura 3 ilustra la lógica implementada en las funciones Lambda y la Tabla 2 describe el propósito de cada función.

Diagram showing AWS Lambda logic used within the Azure blob to Amazon S3 copy solution

Figura 3: Lógica de función Lambda

 

Lambda Propósito
Lambda01 (lanzo-calificación) Verifique si el proceso de copia debe ejecutarse.
Lambda02 (find-blobs) Encuentra blobs de Azure que necesitan ser copiados.
Lambda03 (descargar) Descarga blobs de Azure que tienen un tamaño inferior a 100MB.
Lamda04 (inicializador de línea larga) Se inició para blobs de Azure que tienen un tamaño superior a 100 MB. Crea un manifiesto de carga multiparte manual en JSON.
Lambda05 (largefile-parter) Descarga blobs por rango de bytes como transferencia a flujo de datos.
Lambda06 (recombinador de gran tamaño) Combina multipartes en objetos de Amazon S3

Tabla 2: Propósito de la función Lambda

Hemos omitido algunos aspectos del diseño del diagrama y la tabla anteriores para mantener la visión general concisa. Por ejemplo, agregamos una  dead-letter queue Amazon SNS para ayudar con la solución de problemas de fallas, que no se representa en la Figura 2.

En la siguiente sección, te mostraremos cómo implementar la solución.

Prerrequisitos

Nota: Copiar archivos del almacenamiento de blob de Azure a Amazon S3 incurre en cargos de salida de datos de Azure.

Tutorial

El código de esta entrada de blog está disponible en un repositorio de AWS Samples Git. En el siguiente recorrido, nos centraremos en una implementación de AWS CloudFormation. Este ejercicio tardará unos 20 minutos en completarse.

Para implementar la pila de AWS CloudFormation:

  1. Descarga el código fuente y extrae localmente. El archivo contiene un conjunto de carpetas y archivos. No es necesario extraer archivos zip individuales dentro de las carpetas.
  2. Cargue archivos de la carpeta AzureBlobtoAmazons3Copy/CFN a un bucket de Amazon S3 de su elección. Este será tu repositorio de artefactos. La carpeta contiene los siguientes archivos:

azure-arm-identity.zip Capa Lambda para Azure Identity

azure-arm-storage.zip Capa Lambda para almacenamiento de Azure

azs3copy-lambda01.zip — azs3copy-lambda06.zip Funciones de Azure blob copy Lambda

azs3copy-stack.yaml Plantilla de AWS CloudFormation

3. Una vez que se hayan subido los archivos, copie la URL del objeto para azs3copy-stack.yaml, como se muestra en la Figura 4:

Screenshot showing where to retrieve the Amazon S3 Object URL location within the S3 console

Figura 4: Recuperación de la ubicación de URL de objeto de Amazon S3

4. Siga esta documentación para crear una nueva pila de AWS CloudFormation. Al elegir una plantilla de pila, utilice la URL de objeto de Amazon S3 que copió en el paso 2.

5. Configure los parámetros de implementación de AWS CloudFormation. Las descripciones y ejemplos de parámetros se incluyen en la plantilla CloudFormation. No cambie los Ajustes Avanzados, estos son actualmente experimentales.

6. El despliegue tomará de 5 a 10 minutos. Cuando termine, se muestra un mensaje CREATE_COMPLETE como se muestra en la Figura 5.

Screenshot showing AWS CloudFormation deployment complete log message

Figura 5: Mensaje completo de la pila de AWS CloudFormation

 

La solución ya está preparada y lista. Se ejecutará automáticamente en función del horario que se coloraron en los parámetros. Si desea iniciar una copia de inmediato, proceda a la siguiente sección.

Inicializar una copia manual de los datos

  1. Vaya a la consola de AWS Secrets Manager y elija el secreto creado por la implementación. En la Figura 6 se puede ver que usamos “etl” como código de prefijo.

Screenshot showing AWS Secrets Manager secret location

Figura 6: Localización de secretos en AWS Secrets Manager

 

  1. Elija Recuperar valor secreto como se muestra en la Figura 7.

Screenshot showing AWS Secrets Manager retrieve secret button location

Figura 7: Botón de recuperación de valor secreto de ubicación

 

  1. Observe la clave para isactive. Cambiar el valor a False deshabilitará el proceso de copia. Revise la clave para la fecha de inicio como se ilustra en la Figura 8. Esta es la edad mínima de los objetos a copiar. Asegúrate de que se adapte a sus necesidades.

Screenshot showing AWS Secrets Manager secret values

Figura 8: Configuración secreta de AWS Secret Manager

 

  1. Navegue hasta AWS Lambda
  2. Buscar las funciones Lambda creadas por el despliegue. En la Figura 9, puede ver que usamos “etl” como código de prefijo.

Screenshot showing how to browse AWS Lambda and identify functions used by the solution

Figura 9: Selección de soluciones Funciones Lambda

 

  1. Elija la función con lambda01 en el nombre como se muestra en la Figura 10. El código Python será visible en la consola.

Screenshot showing Lambda function 1 landing page

Figura 10: Selección de lambda01

 

  1. Seleccione la pestaña Prueba y elija Prueba como se ilustra en la Figura 11.

Screenshot showing location of Test button in Lambda console view

Figura 11: Visualización del código Python de la función Lambda

 

  1. Debería recibir un mensaje Resultado de ejecución: éxito como se muestra en la Figura 12.

Screenshot showing how s successful test trigger of Lambda Function 1

Figura 12: Ejecución exitosa de la función Lambda

 

  1. Navegue hasta el bucket de Amazon S3 creado por la implementación. El nombre del bucket comenzará con el nombre de pila de AWS CloudFormation como se ilustra en la Figura 13. Los archivos comenzarán a aparecer en el directorio. Refresca la página para verificar el progreso.

Screenshot showing how to browse to Amazon S3 and locate copied Azure objects

Figura 13: Localización de objetos copiados en Amazon S3

 

Solución de problemas

Si no hay archivos en el bucket de destino, puede verificar si hay errores en el panel de Amazon CloudWatch.

  1. Navegue hasta Amazon CloudWatch.
  2. Seleccione Dashboards a la izquierda y elija el tablero creado por la implementación como se muestra en la Figura 14. En este ejemplo, usamos “etl” como código de prefijo.

Screenshot showing the location of the Amazon CloudWatch dashboard used to monitor the solution

Figura 14: Ubicación del panel de Amazon CloudWatch

 

  1. Se muestra un tablero como se muestra en la Figura 15. Revise los datos de los widgets para identificar posibles errores, como llaves de aplicaciones de Azure incorrectos o permisos insuficientes para la cuenta de Azure Blob Storage.

Screenshot showing Amazon CloudWatch dashboard layout

Figura 15: Una vista del panel de control de Amazon CloudWatch

 

En el ejemplo anterior, copiamos 76 archivos, para un total de 122.11GB en 7.32 segundos.

Limpieza

Antes de eliminar la pila de AWS CloudFormation, deberá vaciar el bucket de Amazon S3.

  1. Navegue a Amazon S3 en la consola de administración de AWS.
  2. Elija el bucket de Amazon S3 creado durante la implementación y verifique su contenido. Es posible que desee conservar los datos para su uso futuro. Si desea conservar los archivos, mueva la carpeta a otro bucket de Amazon S3.
  3. Cuando esté listo, seleccione el bucket de Amazon S3 y elija Empty como se ilustra en la Figura 16

Screenshot showing Empty button in Amazon S3 console

Figura 16: Vaciado del cubo de Amazon S3

 

  1. Siga las instrucciones que aparecen en pantalla para confirmar la acción.
  2. Por último, siga esta documentación para eliminar la plantilla de AWS CloudFormation.

Conclusión

En esta entrada de blog, le mostramos cómo puede usar los servicios de AWS para construir una aplicación sin servidor que copie datos de Azure Blob Storage a Amazon S3 de una manera eficiente y rentable.

 

Este artículo se tradujo del Blog Post de AWS en Inglés.

 


Acerca de los autores

Mo Mohoboob es un arquitecto sénior de soluciones en AWS especializado en cargas de trabajo de Microsoft. Mo tiene una pasión por hacer las cosas simples de usar para los clientes. Es un defensor de DevOps y le encanta crear soluciones que ayuden a los clientes a moverse más rápido. En su tiempo libre a Mo le gusta estar al aire libre, hacer senderismo, jardinería y viajar a destinos lejanos fuera de los caminos trillados. 

 

 

 

Chris Schoerning es arquitecto especialista en soluciones en AWS. Es el defensor extraño del desarrollo de soluciones Database First debido a su experiencia en el desarrollo de bases de datos y desarrollo de aplicaciones. Le gusta simplificar los procesos al complicarlos inicialmente en exceso; luego reducirlos a sus partes necesarias. Plátano.
 

 

 

 

Revisores

Luiz Rampanelli es arquitecto de soluciones en el equipo de AWS Latam. Cuenta con más de 10 años de experiencia con cargas de trabajo de Microsoft en entornos híbridos y de nube. Trabaja diseñando soluciones siguiendo las mejores prácticas para que los clientes puedan aprovechar al máximo los beneficios de la nube de AWS.

 

 

 

 

JuanMa Silva quien es arquitecto de soluciones con especialidad en Microsoft para México y MCO. Cuenta con 15 años de experiencia en la industria de IT, en posiciones de Sysadmin, consultor para ayudar a migrar clientes a la nube y modernización de aplicaciones, soporte aplicaciones de misión critica basados en tecnologia Microsoft.