Primeros pasos con Amazon DocumentDB y AWS CLI

March 15, 2021
Fundamentals
Image for post

Hola a todos, bienvenido a #BreakingtheCloud, yo soy Carlos Cortez @ccortezb

Y estas serán unas series donde hablaremos de una de las bases de datos más interesantes en AWS: Amazon DocumentDB

Primero que todo debemos de saber de qué tipo de base de datos estamos hablando. DocumentDB, pertenece al grupo de bases de datos NoSQL orientadas a documentos.

NoSQL, significa Not Only SQL, donde los modelos de datos pueden ser esquemas flexibles que se adaptan a los requisitos de las aplicaciones más modernas.

Les recomiendo leer a Martin Fowler, https://martinfowler.com/tags/noSQL.html

Pero, porqué deberíamos usar una base de datos orientada a documentos? Cuál es la verdadera ventaja? Qué tipos de aplicaciones son las que usualmente se desarrollan usando una base de datos orientada a documentos?

Vayamos paso a paso, no nos desesperemos, hay mucho por describir en el mundo de Nosql y más aún en Amazon Web Services

Lo primero que debemos saber, es que una de las bases de datos más conocidas y comerciales orientadas a documentos es MongoDB

Ahora, DocumentDB, según la documentación de AWS, DocumentDB tiene compatibilidad con MongoDB 3.6 exactamente en el momento que estoy escribiendo este post, pero qué significa que sea “compatible” realmente? La verdad detrás de este espectacular motor de base de datos es que no replica nada de MongoDB 3.6, sino que emula el comportamiento del motor, y de sus componentes.

Muchas de sus funcionalidades que empezaremos a conocer se pueden realizar en DocumentDB, la manera cómo hacemos las consultas, creación de índices también son compatibles y cómo usamos los comandos, se mantiene:

Image for post
Image for post

https://docs.aws.amazon.com/documentdb/latest/developerguide/what-is.html

Ahora que sabemos, revisemos los componentes y funcionalidades que tiene DocumentDB. Este servicio se compone por una capa de cluster, instancia y almacenamiento. Así como en Mongodb al crear múltiples instancias introducimos el término de replica set o ReplSet, en dónde existe un nodo máster y nodos réplicas. En DocumentDB las réplicas se conocen como nodos de lectura y el máster como nodo de escritura.

Image for post
Image for post

Manos a la obra ahora, empezamos a jugar con la línea de comandos de AWS, la famosa CLI, y lo haremos dentro de una instancia de Cloud9 con un InstanceRole

Primero creemos una instancia de Cloud9

Vamos a crear un instance Role, vamos al servicio IAM y le damos a create role y también agregamos documentDB Full Access al rol.

Image for post
Image for post

Elegimos las políticas de IAM necesarias, en este caso accesos Full para DocumentDB, esto nos permitirá acceder por líneas de comandos a todas la API de DocumentDB

Image for post
Image for post

Seleccionamos EC2 para que asuma el rol

Image for post
Image for post

Creamos un Instance Role en IAM y cambiamos en EC2 del Cloud9, al nuevo rol.

Image for post
Image for post

Luego solo reemplazamos el rol por defecto de Cloud9 por el nuevo creado. Otra opción es también solo editar el rol por defecto y agregarle las políticas que creas necesario.

Image for post
Image for post

Ahora toca desactivar las credenciales temporales en cloud9 para poder trabajar con Roles

  • Ir a configuracion
  • AWS Settings
  • Desactivar Temporary Credentials
Image for post
Image for post

SI quieres saber más de el principio de “Least privilege” dale un vistazo a IAM Keeper:

https://medium.com/@iamkeeper/achieving-least-privilege-permissions-in-aws-97ab8378fb2#:~:text=One%20of%20the%20basic%20principles,required%20to%20get%20job%20done.

Ahora que ya podemos ejecutar CLI en cloud9, vayamos a crear recursos de DocumentDB,

Ejemplo:

aws docdb create-db-cluster \
— db-cluster-identifier docdb-cluster \
— engine docdb \
— deletion-protection \
— master-username ccortez \
— master-user-password cortez,,123 \

— region us-west-2

Puedes ir verificando lo que creas con describe-db-clusters así:

Describe clusters:

aws docdb describe-db-clusters — filter Name=engine,Values=docdb — region us-west-2

Otra manera de buscar con filtros con la CLI es la siguiente:

Describe Clusters con filtros:

aws docdb describe-db-clusters \
— filter Name=engine,Values=docdb \
— db-cluster-identifier docdb-cluster \
— region us-west-2

Ahora que el cluster está creado, vamos a crear instancias dentro del cluster:

Crear instancia de documentDB en el Cluster creado

aws docdb create-db-instance \
— db-cluster-identifier docdb-cluster \
— db-instance-class db.t3.medium \
— db-instance-identifier docdb-cluster-instance01 \
— engine docdb

(Opcional) Otra manera de lanzar clusters e instancias de DocumentDB es usar CloudFormation, la herramienta de Infraestructura como código de AWS:

https://s3.amazonaws.com/amazon-documentdb-samples/v1/cloudformation-templates/documentdb_full_stack.yaml

Finalmente, necesitamos instalar el cliente de Mongodb 3.6 en nuestra consola de Cloud9,

Eso lo podemos hacer directamente con esta documentación oficial:

https://docs.mongodb.com/v3.6/tutorial/install-mongodb-on-amazon/

E intentemos conectarnos desde nuestra instancia Cloud9,

mongo — host docdb-cluster.cluster-cgyttffk8nhp.us-west-2.docdb.amazonaws.com:27017 — username ccortez — password ccortez,,123

Por ahora terminamos con este primer tutorial, espero les haya servido y por favor comenten y compartan.

Estas series de DocumentDB cuentan con los siguientes post:

  1. Primeros pasos con Amazon DocumentDB y AWS CLI
  2. Trabajando con Amazon DocumentDB desde mi local
  3. Migrando hacia Amazon DocumentDB con AWS DMS
  4. Migrando hacia Amazon DocumentDB de la manera tradicional
  5. Configurando SSL en Amazon DocumentDB
  6. Backup de Indices con Amazon DocumentDB Index Tool
  7. Creación de perfiles de consultas de ejecución lenta en Amazon DocumentDB (slow queries profiling)
Image for post
Image for post

Carlos Cortez
ccortez@aws.pe
@ccortezb
Podcast:
imperiocloud.com @imperiocloud
twitch.tv/breakingthecloud
cennticloud.thinkific.com

Carlos Cortez

Founder of AWS UG Perú official community. Certified With 7+ years of experience in AWS, Educating people in Cloud computing is my passion so I’m creating different ways to enhance cloud skills and have fun at the same time in Perú. Host of my own Podcast Imperio Cloud and DeepFridays for AI Learning video series. I’m a System Engineer and Data Analytics Certified at MIT Sloan Global Program in Boston. Selected to be part of AWS Community Builder for ML. Founder of CENNTI Cloud to help peruvian companies in their difficult journey to the cloud and developing ML/AI solutions to fight COVID-19 and health related applications. Now Working as Senior Cloud Architect at DB Solutions in Chile.

Related Posts

Entérate cuando publique algo nuevo y regístrate a mi curso FREE "Be an AWS Architect":

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form