Primeros pasos con Amazon DocumentDB y AWS CLI
Tags: aws, ccortezb, breakingthecloud, awsperu
Published: 2020-10-20 06:22:26


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:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/brxtvc75uphr8ny55lu3.png)

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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lxyaqlbvhupl0bteg2zw.png)

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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/nctviipnmz8v2b728533.png)

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

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/wg4bbqpv1clkt4n4i11w.png)






Seleccionamos EC2 para que asuma el rol

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tvpifhftbbz4ot3o0v4m.png)



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

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7kt3kc2wd5cdbs9zxxn6.png)



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.


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/9p5204eegajb3q13y1yu.png)

Ahora toca desactivar las credenciales temporales en cloud9 para poder trabajar con Roles
Ir a configuracion
AWS Settings
Desactivar Temporary Credentials

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ytd2nbzjz5l8i3ocwwdc.png)

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 
8. Amazon DocumentDB (slow queries profiling)

Muchas gracias, 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6vp4cr2kvfzt0tlvc1df.png)

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