Blog de Amazon Web Services (AWS)

Migración de Google Cloud Storage a Amazon S3 mediante AWS DataSync

Por Brian Choi, Arquitecto de Soluciones Sénior

 

En ocasiones, las organizaciones necesitan migrar grandes volúmenes de datos de objetos de un proveedor de nube a otro. Las razones para este tipo de migración pueden incluir la consolidación de datos, la migración de cargas de trabajo, la recuperación ante desastres o el final de un programa de descuentos. Por lo general, las migraciones requieren cifrado de extremo a extremo, la capacidad de detectar cambios, la validación de objetos, la posibilidad de limitar el uso de la red, la supervisión y la optimización de costos. Construir estas soluciones consume tiempo, es costoso y es difícil de escalar. Además, la migración entre proveedores de nube pública limita ciertas opciones, como el acceso físico a los dispositivos de almacenamiento en el centro de datos.

En esta publicación, explico cómo migrar datos de objetos de Google Cloud Storage a Amazon Simple Storage Service (S3) mediante AWS DataSync. Empiezo con una descripción general de AWS DataSync y destaco las características específicas de este caso de uso. Después, explico cómo configurar DataSync con Amazon S3.

 

Descripción general de AWS DataSync

AWS DataSync es un servicio de movimiento de datos que simplifica, automatiza y acelera el traslado de datos hacia y desde los servicios de almacenamiento de AWS, entre los servicios de almacenamiento de AWS y Google Cloud Storage, y entre los servicios de almacenamiento de AWS y Microsoft Azure Files. Las funcionalidades de AWS DataSync incluyen cifrado de datos, validación, monitoreo, programación de tareas, auditoría y escalado.

Específicamente para Google Cloud Storage, AWS DataSync se integra mediante la API XML de Google Storage. Esta es una interfaz RESTful que permite a las aplicaciones administrar objetos de Google Cloud Storage de forma programática. DataSync se conecta a la API XML de Google Storage con una clave de código de autenticación de mensajes basado en hash (Hash-based Message Authentication Code, HMAC). La clave HMAC de Google Cloud Platform (GCP) contiene un ID de acceso y un secreto que se pueden configurar con los roles adecuados para acceder a los objetos del bucket de Google Cloud Storage. Con AWS DataSync, usted no necesita programar ningún código personalizado para migrar datos de Google Cloud Storage y se beneficia de todas las funcionalidades de DataSync.

Terminología y componentes de AWS DataSync

DataSync tiene cuatro componentes para el movimiento de datos: tareas, ubicaciones, agentes y ejecución de tareas. La figura 1 muestra la relación entre los componentes y los atributos que usaré para el tutorial.

DataSync has four components for data movement: task, locations, agent, and task execution.

Figura 1: Cuatro componentes principales de AWS DataSync

 

  • Agente: Una máquina virtual (VM) que lee datos de una ubicación autoadministrada o escribe datos en ella. En este tutorial, el agente de DataSync se asigna a una instancia de Amazon EC2 que se ejecuta dentro de una Amazon VPC.
  • Ubicación: La ubicación de origen y destino de la migración de datos. En este tutorial, la ubicación de origen es el almacenamiento de objetos que apunta a la API XML de Google Storage (https://storage.googleapis.com), con un nombre de bucket de Google Storage especificado. La ubicación de destino es un bucket de Amazon S3.
  • Tarea: Una tarea consiste en una ubicación de origen y una de destino con una configuración que define cómo se mueven los datos. Una tarea siempre mueve los datos del origen al destino. La configuración puede incluir opciones como patrones de inclusión/exclusión, calendarización de tareas, límites de ancho de banda y más.
  • Ejecución de tareas: Se trata de una ejecución individual de una tarea, que incluye información como la hora de inicio, la hora de finalización, los bytes escritos y el estado.

Cómo migrar datos de Google Cloud Storage a Amazon S3 con AWS DataSync

Para este tutorial, explico los pasos para configurar AWS DataSync para migrar objetos de Google Cloud Storage a Amazon S3. En la Figura 2, he presentado la arquitectura básica de DataSync usando un único agente de DataSync. Los objetos de origen que se van a migrar residen en el bucket de Google Cloud Storage. El destino es el bucket de Amazon S3.
Architectural diagram illustrates a single AWS DataSync agent’s cross-cloud connectivity between Google Cloud Storage and Amazon S3 using the AWS DataSync service endpoint.

Figura 2: Arquitectura de agente único de AWS DataSync

 

DataSync está compuesto de varios componentes, empezando por un agente DataSync. En esta arquitectura, el agente se implementa como una instancia de Amazon Elastic Compute Cloud (Amazon EC2) en una subred de Amazon Virtual Private Cloud (Amazon VPC). La subred contiene un punto de enlace de la VPC de DataSync (DataSync VPC endpoint) que permite que el tráfico fluya de forma privada desde el agente de DataSync a Amazon S3. El agente de DataSync se conecta a GCP Cloud Storage a través del Internet público usando una clave HMAC.

Prerrequisitos del tutorial

Para este tutorial, debe cumplir con los siguientes prerrequisitos:

  • Una cuenta de AWS.
  • Interfaz de línea de comandos (CLI) de AWS.
  • Un bucket de Cloud Storage de Google Cloud Platform con objetos de origen para transferir.

Descripción general del origen: bucket de Google Cloud Storage

Para nuestro tutorial, tengo un bucket de Google Cloud Storage de origen llamado demo-customer-bucket. Usted puede crear un bucket de almacenamiento y subir objetos a su bucket para continuar. Este bucket tiene dos carpetas: business-data y system-data. En este caso de uso, solo quiero transferir los objetos de la carpeta business-data e ignorar la carpeta system-data. Esto es para demostrar la capacidad de DataSync para incluir o excluir carpetas del bucket de origen.
Google Cloud Storage bucket as source with two folders.

Figura 3: bucket de Google Cloud Storage como fuente

 

Dentro de la carpeta business-data hay seis archivos. Mi objetivo es transferir los cinco archivos de texto e ignorar el archivo temporal llamado log.tmp. Esto es para demostrar la capacidad de DataSync para excluir ciertos objetos según el patrón de nombre.

Google Cloud Storage bucket contains five objects to transfer and one temp file to ignore.

Figura 4: Objetos del bucket de Google Cloud Storage como origen

 

Tutorial

Ahora estoy listo para construir la solución para mover datos de Google Cloud Storage a Amazon S3 mediante AWS DataSync. Estos son los siguientes pasos a alto nivel:

  1. Crear una clave HMAC de Google Cloud Platform.
  2. Crar un bucket de Amazon S3 como destino.
  3. Crear un rol de IAM para acceder al bucket de Amazon S3.
  4. Configurar una red para la Amazon VPC.
  5. Implementar un agente de DataSync basado en Amazon EC2.
  6. Crear ubicaciones de DataSync.
    • Ubicación de Google Cloud Storage.
    • Ubicación de Amazon S3.
  7. Crear y ejecutar la tarea de DataSync.
    • Crear una tarea de DataSync: ubicación.
    • Crear una tarea de DataSync: configurar parámetros.
    • Ejecutar la tarea DataSync.
  8. Verificar los datos migrados.

Paso 1: Crea una clave HMAC de GCP

El agente de DataSync usa una credencial HMAC para autenticarse en Google Cloud Platform y administrar objetos en el bucket de Cloud Storage. Esto requiere crear una clave para una cuenta de servicio. Puede seguir las instrucciones que se encuentran en: Administrar claves HMAC para cuentas de servicio. Una vez compleatado, usted deberá tener un ID de acceso y un secreto. Guarde esta información en un lugar seguro.

La entidad principal de la cuenta de servicio necesita permisos suficientes para que el agente de DataSync se conecte y migre los objetos. Usted puede asignar una función predefinida denominada Visor de objetos de almacenamiento a la entidad principal de la cuenta de servicio como una forma de conceder este permiso.

Google Cloud Storage principal role needed to read from source bucket.

Figura 5: Permiso de la función de Google Cloud Storage

 

Usted puede limitar aún más el acceso de este rol añadiendo una condición para permitir solo cuando el nombre del recurso comience por projects/_/buckets/demo-customer-bucket, donde demo-customer-bucket es el nombre del bucket de origen. Tenga en cuenta que la condición usa la condición starts with (comienza con). Esto permite que se otorgue el permiso para el bucket y los objetos dentro del bucket mediante una sola instrucción.

Expresión de Common Expression Language (lenguaje de expresión común, CEL):

resource.name.startsWith(“projects/_/buckets/demo-customer-bucket”)

Google Cloud Storage principal role with the condition to only allow read from source bucket.

Figura 6: Condición de permiso de la función de Google Cloud Storage

 

Paso 2: Crear un bucket de Amazon S3 como destino

Cree un nuevo bucket de Amazon S3 que se utilizará como destino para la transferencia de DataSync. Una vez que cree el bucket de destino, obtenga el nombre de recurso de Amazon (ARN) del bucket en la pestaña Propiedades del bucket.
Amazon S3 bucket Properties tab contains the Amazon Resource Name (ARN).

Figura 7: Nombre de recurso de Amazon del bucket de Amazon S3

 

Paso 3: Crear una rol de IAM para acceder al bucket de Amazon S3

AWS DataSync necesita acceder al bucket de Amazon S3 para transferir los datos al bucket de destino. Esto requiere que DataSync asuma un rol de IAM con los permisos y la relación de confianza adecuados. Cree una nueva función y adjunte una política que permita a DataSync leer y escribir en su bucket de Amazon S3.

Paso 4: Configurar una red para el punto de enlace de Amazon VPC (VPC endpoint)

Cree la VPC, la subred, la tabla de enrutamiento y el grupo de seguridad en función de los requisitos de la red al usar puntos de enlace de la VPC (VPC endpoints). A continuación, cree un VPC endpoint para la interfaz DataSync. Con este endpoint, la conexión entre un agente y el servicio DataSync no atraviesa el Internet público y no requiere direcciones IP públicas.

Paso 5: Implementar un agente de DataSync basado en Amazon EC2

El siguiente paso es implementar un agente como una instancia de Amazon EC2. La instancia de Amazon EC2 se lanza utilizando la última imagen de máquina de Amazon (AMI) de DataSync en la subred del paso anterior con el grupo de seguridad para agentes. Una vez que se esté ejecutando la instancia de Amazon EC2, cree un componente de agente DataSync mediante el punto de enlace de la VPC. Finalmente, active su agente para asociarlo a su cuenta de AWS.

Paso 6: Crear ubicaciones de DataSync

Cree ubicaciones de DataSync de origen y destino siguiendo los siguientes pasos.

Ubicación de Google Cloud Storage

  1. Abra la consola de AWS DataSync y elija Ubicaciones. A continuación, seleccione Crear ubicación.
  2. Para Tipo de ubicación, seleccione Almacenamiento de objetos.
  3. Para Agentes, seleccione el agente que activó en el paso anterior.
  4. Para Servidor, escriba “storage.googleapis.com”.
  5. PAra Nombre del bucket, escriba el nombre del bucket de origen de Google Cloud Storage.  En este tutorial, esto es “demo-customer-bucket”. Tenga en cuenta que el nombre del bucket distingue mayúsculas de minúsculas
  6. Para la autenticación, introduzca el ID de acceso y el secreto de la clave HMAC de Google que se obtuvieron en el Paso 1: Crear una clave HMAC de GCP.
  7. Seleccione Crear ubicación.

Configuration of DataSync source location for Google Cloud Storage.

Figura 8: Ubicación de origen de DataSync para Google Cloud Storage

 

Ubicación de Amazon S3

  1. Abra la consola de AWS DataSync y elija Ubicaciones. A continuación, seleccione Crear ubicación.
  2. Para Tipo de ubicación, seleccione Amazon S3.
  3. Para el bucket de Amazon S3, seleccione el bucket de Amazon S3 de destino del Paso 2: Crear un bucket de Amazon S3 como destino.
  4. Para el rol de IAM, seleccione el rol de IAM del Paso 3: Crear fun rol de IAM para acceder a Amazon S3.
  5. Seleccione Crear ubicación.

Configuration of DataSync destination location for Amazon S3.

Figura 9: Ubicación de destino de DataSync para Amazon S3

 

Paso 7: Crear y ejecutar una tarea de AWS DataSync

El siguiente paso es crear una tarea de AWS DataSync. Siga estos pasos para crear una tarea, comenzando con la configuración de las ubicaciones de origen y destino.

Crear una tarea de AWS DataSync: Ubicación

  1. Abra la consola de AWS DataSync y elija Tareas. A continuación, seleccione Crear tarea.
  2. Para las opciones de ubicación de origen, seleccione Elegir una ubicación existente. Para Ubicaciones existentes, seleccione object-storage: //storage.googleapis.com//<nombre_del_bucket>/ del Paso 6: Crear ubicaciones de DataSync. A continuación, seleccione Siguiente.
  3. Para Opciones de ubicación de destino, selecciona Elegir una ubicación existente. Seleccione s3:///<bucket name>en el Paso 6: Crear ubicaciones de DataSync. A continuación, selecciona Siguiente. Se abrirá la página Configurar ajustes.
  4. Selecciona Siguiente.

Crear una tarea de AWS DataSync: configurar los ajustes

El siguiente paso es configurar los ajustes de la tarea DataSync.

  1. Para Nombre de tarea, introduzca el nombre de la tarea.
  2. Para Configuración de transferencia de datos, seleccione la opción Archivos y carpetas específicos para especificar la subcarpeta mediante los patrones de inclusión.
  3. Para Modo de transferencia, seleccione Transferir solo los datos que hayan cambiado.
    • Desmarque Conservar archivos eliminados. Tenga en cuenta que, con esta opción sin marcar, si el objeto de origen se elimina del bucket de Google Cloud Storage, la tarea eliminará el objeto correspondiente del bucket de Amazon S3. Este es el comportamiento que queremos en la demostración para mantener Amazon S3 sincronizado con el origen porque se supone que el bucket de origen es un conjunto de datos en vivo.
    • Marque Sobrescribir archivos. Esto significa que, si la tarea detecta que el objeto de origen y el de destino son diferentes, la tarea sobrescribirá el objeto de destino en Amazon S3. Este es el comportamiento que queremos para mantener Amazon S3 sincronizado con el bucket de origen.
    • Para los patrones de inclusión, introduzca “/business-data/*”. Con los patrones de inclusión, puede filtrar los objetos transferidos al ámbito de la ruta de ubicación. Tenga en cuenta que el valor del patrón distingue entre mayúsculas y minúsculas.
    • Para Excluir patrones, seleccione Añadir patrón. Para Patrón, escriba “*.tmp”. Al usar este filtro de exclusión, la tarea ignorará cualquier objeto que termine con un nombre .tmp. Tenga en cuenta que el valor del patrón distingue mayúsculas de minúsculas
    • Expanda la Configuración adicional y desactive la opción de Copiar etiquetas de objetos. Esto evita intentar leer etiquetas en GCS que no son soportadas.
  4. Para el registro de tareas (logs), queremos que DataSync escriba los registros detallados en CloudWatch Logs. Para Nivel de registro, seleccione Registrar todos los objetos y archivos transferidos. Para nuestra demostración, tenemos un pequeño número de archivos. Si tiene un volumen grande, tenga en cuenta el costo de CloudWatch y seleccione el nivel de registro que cumpla con sus requisitos. Para obtener más información, consulte Supervisar la tarea.
    • Para el grupo de registros de CloudWatch, seleccione Generar automáticamente. Esto creará la política adecuada y el grupo de registros de CloudWatch. A continuación, seleccione Siguiente. Revise la configuración de la tarea.

5. Seleccione Crear tarea y espere a que el estado de la tarea sea Disponible.
DataSync task configuration settings with include and exclude patterns.

Figura 10: Valores de configuración de tareas de DataSync

 

Ejecute la tarea de AWS DataSync

El último paso es iniciar la tarea de DataSync para transferir los archivos. El estado de la tarea se actualizará a medida que la tarea pase por cada fase. Consulte Descripción del estado de ejecución de las tareas para conocer los posibles estados (fases) y su significado. También puede supervisar DataSync con Amazon CloudWatch.

Paso 8: Verificar los datos migrados

Ahora puede verificar los objetos migrados de Google Cloud Storage al bucket de Amazon S3. Navegue hasta el bucket de destino de Amazon S3 y abra la carpeta business-data. Los cinco archivos ahora deben haberse transferido al bucket de Amazon S3. Tenga en cuenta que el archivo log.tmp no se transfirió porque nuestra tarea tenía un filtro de exclusión *.tmp, que excluía la transferencia de este archivo de registro.

Usted puede ejecutar la tarea varias veces. Cada vez que se ejecuta una tarea, AWS DataSync detectará los cambios entre el origen y el destino y solo transferirá los objetos nuevos o modificados. Esto le permite transferir datos que pueden estar cambiando en la ubicación de origen.

DataSync transferred objects from Google Cloud Storage bucket to S3 bucket.

Figura 11: Objetos transferidos del origen al destino

 

DataSync también transfiere los metadatos personalizados del objeto. En este tutorial, el archivo file-1.txt tenía metadatos personalizados de Department con el valor de Math. Esta información se transfirió a los metadatos de Amazon S3.

DataSync transferred object metadata from Google Cloud Storage bucket to Amazon S3 bucket.

Figura 12: Metadatos de objetos transferidos del origen al destino

 

Limpiar

Para evitar incurrir en cargos futuros, elimine los recursos utilizados en este tutorial.

  1. Desactive la clave HMAC de GCP. A continuación, elimine la clave HMAC de GCP y el bucket de Google Cloud Storage.
  2. Elimine la tarea DataSync, las ubicaciones y el agente.
  3. Apague la instancia EC2.
  4. Elimine el endpoint de la VPC.
  5. Elimine el bucket de Amazon S3.

Conclusión

En esta publicación, hablé sobre el uso de AWS DataSync para migrar datos de objetos de Google Cloud Storage a Amazon S3 y expliqué la configuración de AWS DataSync para migrar objetos de un bucket de Google Cloud Storage a un bucket de Amazon S3. También demostré el uso de las funciones de AWS para incluir y excluir objetos y carpetas de buckets de origen.

Con AWS DataSync, usted puede simplificar la migración de un gran volumen de datos de Google Cloud Platform a Amazon S3. AWS DataSync tiene funciones integradas que le permiten conectarse a Google Cloud Storage a través de la API XML de Google Storage con clave HMAC. Con la solución cubierta en esta publicación, usted puede aprovechar las funciones de DataSync, incluida la capacidad de ejecutar las tareas varias veces para capturar los cambios en el conjunto de datos de origen.

Estos son recursos adicionales que le ayudarán a empezar a utilizar AWS DataSync:

Gracias por leer esta publicación sobre la migración de Google Cloud Storage a Amazon S3 mediante AWS DataSync. Lo animo a que pruebe esta solución hoy mismo. Si tiene algún comentario o pregunta, déjelo en la sección de comentarios.


Acerca de los autores

Brian Choi es Arquitecto de Soluciones Sénior en Amazon Web Service (AWS). Brian forma parte del grupo Worldwide Public Sector y ayuda a los clientes del sector educativo de EE. UU. Se especializa en la migración y modernización de cargas de trabajo en AWS.

 

 

 

 

Revisor

José Peñúñuri es Arquitecto de Soluciones de Amazon Web Services enfocado en el tema de migración y que trabaja con clientes de diferentes sectores. José se ha enfocado en apoyar a sus clientes  en la adopción de herramientas que los ayudan a acelerar su migración a AWS.