Trabajando con Amazon DocumentDB desde mi local
Tags: aws, documentdb, mongodb, database
Published: 2021-03-30 17:46:02




Hoy vamos a continuar con la 2da parte de las series de Aprendiendo DocumentDB en AWS, Si aún no has visto la 1ra parte, ve aquí: https://www.cortez.cloud/blog/primeros-pasos-con-amazon-documentdb-y-aws-cli


Siempre es importante trabajar localmente, y casi siempre se cometen errores y descuidos que hacen que nuestros ambientes de desarrollo estén expuestos a conexiones locales inseguras. Para ello vamos a asegurar nuestra conexión poco a poco, y en este post aprenderemos a usar las herramientas que nos permitirán una mejor administración de nuestra instancia.

En el anterior post, explicamos cómo crear un cluster e instancias de DocumentDB con AWS CLI, así que partamos desde allí y veamos cómo trabajar localmente con ello.

## Usando Robo3T (Ex Robomongo)

Primero que todo veamos la arquitectura esencial y más eficiente para trabajar con DocumentDB:

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


Me conecto desde mi escritorio y voy instalando Robo3T y mongodb client 3.6 (funciona para mac, windows, linux)

https://robomongo.org/download

## Bonita arquitectura, pero ¿Qué es un Bastion Host?

Es un servidor puente, en el cual usaremos recursos para poder saltar a otras partes de la red. En este caso, lo usaremos para saltar de una red pública a una privada que es dónde estará docdb.

Ejemplo:
un EC2, una máquina virtual, una droplet, etc


## Veamos paso a paso, cómo configurar desde cero mi conexión hacia mi cluster

1. Crear un ec2 como bastion Host:

	Ya hemos visto cómo usar la CLI, así que hagamos lo siguiente y creemos un EC2, Security groups y agreguemos permisos para poder acceder desde la IP que tengas en casa:

```
$ aws ec2 create-security-group --group-name docdb --description "docdb" --vpc-id  vpc-81a06de4
{
    "GroupId": "sg-031f86d07f253eacf"
}
```

Ahora, verifica tu IP Pública, también por cli, somos unos fanáticos de la cli ahora!

```
curl https://checkip.amazonaws.com
190.236.xxx.xxx 
```
*(usa tu propio resultado para las siguientes líneas..)

Agreguemos estas reglas en nuestro nuevo SG para luego poder usarlo en el bastion host EC2:

Abrir puerto 22
```
aws ec2 authorize-security-group-ingress --group-id sg-031f86d07f253eacf --protocol tcp --port 22 --cidr 190.236.xxx.xxx
```

Abrir puerto 27017 y  27018 (mongodb y adicional para el bastion host)
```
aws ec2 authorize-security-group-ingress --group-id sg-031f86d07f253eacf --protocol tcp --port 27017 --cidr 190.236.xxx.xxx
```

```
aws ec2 authorize-security-group-ingress --group-id sg-031f86d07f253eacf --protocol tcp --port 27018 --cidr 190.236.xxx.xxx
```


habilitar acceso de mongodb hacia sí mismo:
```
aws ec2 authorize-security-group-ingress --group-id sg-031f86d07f253eacf --protocol tcp --port 27017 --source-group
 sg-031f86d07f253eacf
```

Creamos ahora la instancia:
```
$ aws ec2 run-instances --image-id ami-067f5c3d5a99edc80 --count 1 --instance-type t2.micro --key-name ~/llaves/docdb-ccortez.pem --security-group-ids sg-031f86d07f253eacf --subnet-id subnet-6d558c08
```

2. Configuramos SSH tunnel para poder habilitar o deshabilitar cuando queramos:

```
sudo vim .ssh/config

Host tunnel
HostName 52.89.199.68
User ec2-user
IdentitiesOnly yes
IdentityFile ~/llaves/docdb-ccortez.pem
LocalForward 27018 docdb-001.cluster-cgyttffk8nhp.us-west-2.docdb.amazonaws.com:27017:27017
```

También es posible crear un bashero ejecutable aparte para no sobreescribir el archivo ~/.ssh/config

OJO: puedes refrescar, borrar caché o abrir una terminal nueva para renovar la conexión del túnel en caso tengas problemas para abrirlo, o te aparezca algún error.

3. Iniciamos nuestra conexión con Robo3T, así, en la 1ra pestaña, 

Config inicial:

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

4. Autenticación

Opcional:
	Database: admin (no vamos a poder ver la base de datos admin pero si todas las demás)

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

5. SSH tunnel:

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

6. SSL Certificate (en caso sea):

(Advanced Options)
Invalid Hostnames: Allowed

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

7. Test final de conexión:

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

8. En caso sea un cluster creado sin SSL: (opcional, en este ejemplo usé otro cluster que creé sin SSH llamado docdb2)

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


## Conclusiones:

Conectarse a Docdb es fácil, y seguro.
Nos incentiva a crear arquitecturas más seguras, a usar más la capa privada para las bases de datos.
Con estos tutoriales, irás aprendiendo a usar una base de datos NoSQL desde cero.



## Próximos pasos

En el próximo post, empezaremos con las migraciones hacia Amazon DocumentDB con AWS DMS.

Aún necesitamos ahondar más en la seguridad y los accesos, así como seguir aprendiendo más de AWS CLI.

Suscríbete a mi canal, Breaking the Cloud y Al día con AWS en https://cortez.cloud
Si te gustó este post, dale un like, comparte y comenta.
⭐Suscríbete a mi canal : http://bit.ly/aldiaconaws



## 🔥🔥 Sígueme en mis redes 🔥🔥


🦜 Mi Twitter: https://twitter.com/ccortezb

📺 Youtube Channel: Al día con AWS / Breaking The Cloud: http://bit.ly/aldiaconaws

📺 AWS Perú Community AWS UG Perú Oficial: https://www.youtube.com/awsusergroupperuoficial

📟 Mi Facebook: https://www.facebook.com/ccortezb/

🤳 Mi Instagram: ccortezbazan

📜 Mis cursos de AWS: https://cennticloud.thinkific.com

🕮 Mi blog — https://cortez.cloud

## 🔥🔥 Acerca de mí 🔥🔥

https://www.cortez.cloud/whoami

Les presento mi pequeña web personal https://www.Cortez.Cloud llamado “Breaking the Cloud”.

Seguiré creando contenido cada semana de AWS sobre Al/ML, Serverless, Security y como romper las reglas!

También mis próximas iniciativas, talleres, cursos, videos gratuitos, awsugperu y más.

#aws #breakingthecloud