TIP: consulta Explicación: funcionamiento de conectividad SSH a la tarea en ejecución para entender las potencialidades y limitaciones de este acercamiento.
ADVERTENCIA: estos pasos te permitirán hacer un túnel directo desde un puerto local de tu máquina al servidor remoto de base de datos de producción. Es decir: conectarte a localhost puerto XXXX será lo mismo que conectarte al servidor remoto. Es fácil equivocarse y creer que se está conectado a la base de datos local de tu máquina de desarrollo mientras estás conectado a la remota de producción, con la posibilidad de hacer cambios fatales en la base de datos. Usa estos túneles con mucho cuidado y cuida no mezclar los túneles al mismo tiempo que desarrollar localmente |
-
Obtén el nombre del host del servidor de base de datos, junto con su usuario y password al que te quieres conectar. Este lo encontrarás en los parámetros y secretos usados por el proyecto. El artículo Guía: Cómo consultar en la consola web de AWS el estado de mi aplicación explica cómo hacer esto.
-
Lista los nodos del proyecto. Lista los contenedores a los que tienes acceso via la red privada tailscale (usa el código de proyecto cambiando el guión bajo por guión medio por ejemplo, si el proyecto es "daleks_victory" buscarías "daleks-victory" :
tailscale status | grep daleks-victory
-
Selecciona el nodo de salto. Se te mostrarán los nodos a los que tienes conectividad (conectividad != permiso de acceso pero en el caso de tus proyectos de sperantus hosting puedes conectarte via SSH root al contenedor de tailscale de los mismos).
Los proyectos se listarán con el formatosperantus-hosting-<CODIGO DE PROYECTO>-<POSIBLE NUMERO SECUENCIAL>
. El código del proyecto se mostrará con los guiones bajos (_
) reemplazados por guiones medios (-
).
Por ejemplo, si tu proyecto esdaleks_victory
al ejecutar el comando regresará algo como lo que sigue dependiendo qué ambientes tengas activo y cuántas tareas de cada ambiente estén corriendo:
100.93.116.17 sperantus-hosting-daleks-victory-production tagged-devices linux
100.93.115.40 sperantus-hosting-daleks-victory-production-1 tagged-devices linux
100.93.115.41 sperantus-hosting-daleks-victory-staging-1 tagged-devices linux -
Haz el túnel. Selecciona el nodo donde se esté ejecutando tu aplicación y crea un túnel SSH que redireccione un puerto local al puerto remoto del servidor de base de datos:
tailscale ssh root@<nodo> -v -N -L <PUERTO LOCAL>:<SERVIDOR BASE DE DATOS>:<PUERTO>
NOTA: cualquiera de los nodos, ya sea de staging o producción, podrán conectarse al servidor de base de datos (que tiene tanto la base de datos de producción como la de staging). Lo que hará la diferencia es el usuario y password que utilices para autentificarte en la misma.
Por ejemplo, si quieres conectarte a un servidor MySQL (hostecs-apps-aurora1.cluster-ro-c7kamyoy8now.us-west-2.rds.amazonaws.com
, puerto3306
), desde el nodosperantus-hosting-daleks-victory-production-1
y queremos hacer el puente del puerto local5555
al puerto remoto3306
:
tailscale ssh root@sperantus-hosting-daleks-victory-production-1 -v -N -L 5555:ecs-apps-aurora1.cluster-ro-c7kamyoy8now.us-west-2.rds.amazonaws.com:3306
Enseguida de esto se mostrará en la terminal los detalles del proceso de conexión, que está lista para utilizarse.
Manten esta ventana abierta. Si cierras esta terminal perderás el túnel.
-
Conéctate con tu cliente de base de datos. Usa tu cliente de base de datos local para que se conecte a
localhost (127.0.0.1)
y al puerto local indicado en el paso anterior (en el ejemplo anterior5555
) e indica el usuario y password de la base de datos.
Siguiendo con el ejemplo anterior de MySQL que usó el puerto local5555
la ejecución del cliente mysql de línea de comandos sería:
mysql -u usuario -h 127.0.0.1 -P 5555 -p mi_base_de_datos
- Una vez que termines, cierra la terminal donde está abierto el túnel.