Estrategias de testing aplicadas a negocio
Cuando se trata de desarrollar software, el testing es una pieza fundamental que garantiza la calidad y la confiabilidad de un producto y puede tener..
Os traemos un capítulo más de nuestra serie "Píldoras técnicas sobre Platform Engineering: más allá de lo que encuentras en la documentación", donde el equipo de Platform Engineering de Codurance compartimos píldoras de conocimiento sobre cómo abordamos situaciones cotidianas. En el post anterior hablábamos de una migración de las AMI de Amazon Linux a Bottlerocket.
En esta ocasión, nos llegó una nueva petición por parte de uno de nuestros equipos de desarrollo: necesitaban migrar parte de la aplicación a una nueva cuenta de AWS.
¿La solución? Amazon Data Migration Service. Siguiendo esta documentación oficial configuramos la instancia de DMS, los endpoints de origen (source) y destino (target) y finalmente creamos la Database Migration Task. Como nuestro objetivo era tener todo el contenido replicado en la nueva cuenta, seleccionamos la migración en vivo “Migrate existing data and replicate ongoing changes”.
Una vez la tarea se ejecutó, al conectarnos a la nueva DocumentDB y empezar a revisar vimos que aunque las bases de datos y las colecciones estaban replicadas… ¡faltaban los índices!
Comenzamos a investigar el motivo y AWS menciona:
“AWS DMS crea tablas, claves principales y, en algunos casos, índices únicos, pero no crea ningún otro objeto que no se necesite para migrar eficientemente los datos desde el origen. Por ejemplo, no crea índices secundarios, limitaciones de claves no primarias ni valores predeterminados de datos.
Para migrar objetos secundarios desde la base de datos, utilice las herramientas nativas de la base de datos si está migrando al mismo motor de base de datos que su base de datos de origen.” - Documentación oficial de resolución de problemas
En este caso, ¿cuál es el mejor enfoque? Afortunadamente AWS provee una herramienta para ello! Podemos hacer uso de Amazon DocumentDB Index Tool para:
Con el objetivo de conectar tanto a la base de datos de origen como a la de destino, desplegaremos una instancia de AWS Cloud9. Tomaremos ventaja que ya hemos configurado el VPC peering entre las VPC de las bases de datos, y saltaremos directamente a la instalación de mongo shell para probar dicha conexión:
## Install mongo shell
echo -e "[mongodb-org-4.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-4.0.repo
sudo yum install -y mongodb-org-shell
## Download CA
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
## Test connection to source database
mongo --ssl --host [SOURCE_HOST]:[SOURCE_PORT] --sslCAFile global-bundle.pem --username administrator --password '[SOURCE_PASSWORD]'
## Test connection to target database
mongo --ssl --host [TARGET_HOST]:[TARGET_PORT] --sslCAFile global-bundle.pem --username administrator --password '[TARGET_PASSWORD]'
Una vez hemos verificado que podemos conectar con ambas bases de datos, necesitaremos instalar la herramienta de migración de índice y ejecutar los pasos que hemos mencionado anteriormente:
## Clone and install index migration too
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/index-tool
python3 -m pip install -r requirements.txt
## Create index export folder
mkdir -p docdb_index_export
## Copy the previously downloaded CA
cp -rp /home/ec2-user/environment/global-bundle.pem .
## Dump the index info from source db
python3 migrationtools/documentdb_index_tool.py --dump-indexes --dir docdb_index_export --uri 'mongodb://administrator:[SOURCE_PASSWORD]@[SOURCE_HOST]:[SOURCE_PORT]/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&retryWrites=false'
## Verify index compatibility with target db
python migrationtools/documentdb_index_tool.py --uri 'mongodb://administrator:[TARGET_PASSWORD]@[TARGET_HOST]:[TARGET_PORT]/?ssl=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false' --show-issues --dir docdb_index_export --support-2dsphere
## Restore index in target db
python migrationtools/documentdb_index_tool.py --uri 'mongodb://administrator:[TARGET_PASSWORD]@[TARGET_HOST]:[TARGET_PORT]/?ssl=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false' --restore-indexes --dir docdb_index_export --support-2dsphere
## If there are any special characters in the credentials, they will need to be % escaped
¡Todo listo! Ahora podemos conectarnos a la base de datos de destino y verificar que los índices se encuentran ya creados. Con esto, ¡nuestro nuevo DocumentDB se encuentra preparado para la migración!
¿Alguna vez os habéis encontrado una casuística similar? ¿Cómo la solucionasteis?
Cuando se trata de desarrollar software, el testing es una pieza fundamental que garantiza la calidad y la confiabilidad de un producto y puede tener..
Los equipos de desarrollo de muchas organizaciones han adoptado las revisiones de código como una de sus prácticas básicas. Aunque parece algo muy..
En nuestro último post de nuestra serie "Píldoras técnicas sobre Platform Engineering: más allá de lo que encuentras en la documentación", hablamos..
Suscríbete a nuestra newsletter para que podamos hacerte llegar recomendaciones de expertos y casos prácticos inspiradores