Migrar gran cantidad de datos a la nube de AWS rápido y económico

Usa los servicios adecuados para tener mayor agilidad en el movimiento hacia la nube.

Hector Alexander
Bancolombia Tech
5 min readMay 16, 2023

--

Cuando migramos aplicaciones hacia la nube, movemos software, infraestructura y datos para que las aplicaciones funcionen correctamente en su nuevo espacio. Todo el movimiento requiere servicios de transferencia potentes capaces de coordinar gran cantidad de datos.

Este es el caso de la migración de Terabytes (TB) de datos almacenados en un sistema de archivos compartido On-premise (centro de datos en tierra) hacia los servicios de almacenamiento de nube. Se trata de una transferencia de datos en línea, económica y rápida usando los servicios AWS.

Los servicios

  • Amazon FSX for Windows File Server es un servicio administrado de almacenamiento para sistemas de archivo compartidos Windows. Incluye soporte nativo para protocolos de red Windows, rendimiento y baja latencia. Elimina la tarea de configurar servidores de archivos y volúmenes de disco.
  • AWS DataSync es un servicio que permite trasladar datos desde un origen (On-premises o nube), hacia un servicio de almacenamiento de AWS. Sirve como un puente para mover archivos de un lugar a otro de forma coordinada mediante tareas programadas y de implementación automatizada por medio de la infraestructura como código con AWS CloudFormation. A diferencia de otros servicios de transferencia datos, es de uso temporal durante la migración de datos.
  • AWS CloudFormation permite aprovisionar recursos en AWS de forma rápida y consistente, mediante la infraestructura como código (IaC). Los recursos se definen en plantillas escritas en lenguaje YAML o JSON que son agrupadas en pilas (stacks) para una administración y despliegue automatizado.
  • Amazon CloudWatch es un servicio de monitoreo que recopila y visualiza registros, métricas y datos de eventos de infraestructura implementada en AWS, mediante paneles o grupo de registros para supervisar el rendimiento de aplicaciones.

Estos servicios están sincronizados entre sí por medio de canales de comunicación segura, como muestra el siguiente diagrama de arquitectura:

AWS DataSync architecture

Los agentes

Lo primero, se requiere configurar agentes AWS DataSync cerca al origen de los datos en el sistema de archivos compartido. Este puede ser una máquina virtual sobre VMware ESXi, Microsoft Hyper-V, Linux KVM o una instancia EC2 con imagen DataSync VM. Lo importante es cumplir con los requisitos de red y configuracion del agente AWS DataSync

En el destino, en la cuenta AWS, configurar un punto de enlace (VPC endpoint) con interfaces de red (ENI) por zona de disponibilidad y el servicio AWS DataSync con la llave de activación (activation key) que se obtiene de los agentes AWS DataSync previamente configurados en el origen.

Esto nos permite visualizar desde la consola AWS qué origen y destino están sincronizados:

AWS DataSync agent is online

La automatización

La implementación del servicio AWS DataSync, VPC Endpoints, ubicaciones y tareas de transferencia se realiza mediante infraestructura como código con AWS CloudFormation, donde se definen los parámetros necesarios en plantillas YAML ó JSON.

VPC Endpoints y grupos de seguridad

# Security Group para el VPC Endpoint
rDataSyncEndPointSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Permitir conexión VPC endpoint
GroupName: Nombre para security group
VpcId: Id de red privada virtual (VPC)
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: # numero de puerto
ToPort: # numero de puerto
CidrIp: # Direccion IP de agente AWS DataSync
Description: Acceso desde el agente los agentes en tierra

# VPC Endpoint con ENI por cada subnet
rDataSyncVpcEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
SecurityGroupIds: # Id de security group
ServiceName: !Sub com.amazonaws.${AWS::Region}.datasync
SubnetIds: # Id de subredes de VPC
VpcEndpointType: Interface
VpcId: # Id de red privada virtual (VPC)

# Registro de agentes en consola AWS DataSync
rDataSyncAgent:
Type: AWS::DataSync::Agent
Properties:
ActivationKey: # Llave de activacion de agente AWSDatasync
AgentName: # Nombre descriptivo
SecurityGroupArns: # Amazon Resource Name(ARN) de security group
SubnetArns: # Amazon Resource Name(ARN) de subred
# Grupo de log para registrar los eventos de la tarea de transferencia de archivos
rLogGroups:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: # Nombre descriptivo
RetentionInDays: # Dias de retención de logs

Ubicaciones y tareas de transferencia

# Origen Transferencia de archivos SMB
rDataSyncSource:
Type: AWS::DataSync::LocationSMB
Properties:
AgentArns:
- # Amazon Resource Name (ARN) del agente AWSDataSync
Domain: # Nombre de domninio de directorio activo
Password: # Credencial con acceso de lectura al origen
User: # Credencial con acceso de lectura al origen
ServerHostname: # Nombre o dirección IP del origen
Subdirectory: # Carpeta compartida origen en formato /ruta/carpeta

# Detino Transferencia de Archivos FSX
rDataSyncTarget:
Type: AWS::DataSync::LocationFSxWindows
Properties:
Domain: # Nombre de domninio de directorio activo
FsxFilesystemArn: # Amazon Resource Name (ARN) del sistema Amazon FSX
Password: # Credencial con acceso de escritura al destino
User: # Credencial con acceso de lectura al destino
SecurityGroupArns: # Amazon Resource Name (ARN) de security group
Subdirectory: # Carpeta compartida destino en formato /ruta/carpeta

# Tarea de Transferencia de Archivos hacia FSX
rDataSyncTaskFSX:
Type: AWS::DataSync::Task
Properties:
Name: # Nombre descriptivo
SourceLocationArn: !Ref rDataSyncSource # Referencia a origen
DestinationLocationArn: !Ref rDataSyncTarget # Referencia a destino
Includes: # Filtros adicionales para destino
Options: # Opciones de tarea
Schedule: # Programacion de tarea
ScheduleExpression: # Formaton CRON
CloudWatchLogGroupArn: !Ref pLogGroupsArn # Referencia a grupo de logs

La transferencia

Como se observa en el código, la transferencia es programada mediante tareas que son especificadas mediante el parámetro Schedule, escrito en formato de expresiones CRON, un periodo o una hora específica para iniciar la transferencia de datos. Algunos ejemplos de tareas programadas:

  • Para una tarea que ejecute el domingo a las 12:00PM, escribimos cron(0 12 ? * SUN *).
  • Para una tarea que ejecute cada hota, escribimos rate(1 hour).

En la consola AWS DataSync la tarea quedará programada de la siguiente manera:

AWS DataSync task schedule

En la pestaña History, visualizamos el estado de la ejecución de la tarea y ver un registro más detallado acerca de los datos transferidos o fallidos en el servicio Amazon CloudWatch LogGroups.

Amazon CloudWatch LogGropus

Usando los servicios adecuados combinados con la infraestructura como código, podemos dar solución a casos de migración y modernización de aplicaciones de forma económica y sin necesidad de arrendar equipos robustos para almacenamiento y transferencia de datos permitiendo agilidad en el movimiento hacia la nube.. No obstante, en algunos casos sí se requieren y AWS ofrece dichos equipos.

Referencias

--

--

Hector Alexander
Bancolombia Tech

#InfrastructureEngineer #AWScommunityBuilder #TheBookOfNotes