¿Cómo puedo conectarme a una base de datos desde una tarea de Amazon ECS en Fargate?

4 minutos de lectura
0

Quiero conectarme a una base de datos desde una tarea de Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.

Resolución

Antes de completar los pasos siguientes, confirme que tiene un clúster de Amazon ECS que se ejecuta en Fargate y una base de datos de Amazon Relational Database Service (Amazon RDS). Es posible que Amazon ECS y Amazon RDS tengan problemas de comunicación. Para obtener más información, consulte ¿Cómo soluciono los problemas de conectividad entre mis tareas de Amazon ECS para un tipo de lanzamiento de Amazon EC2 y una base de datos de Amazon RDS?.

Nota: La siguiente solución utiliza MySQL como tipo de motor.

Conectar la tarea a la base de datos

1.    Cree un script de Python que se conecte a su base de datos MySQL.

El script rds.py del ejemplo siguiente genera el resultado de la conexión a Amazon CloudWatch con la base de datos:

import pymysql
import os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
  print("Connecting to " + Database_endpoint)
  db = pymysql.connect(host = Database_endpoint, user = Username, password = Password)
  print("Connection successful to " + Database_endpoint)
db.close()
except Exception as e:
  print("Connection unsuccessful due to " + str(e))

Nota: Sustituya ENDPOINT, USER y PASS por los valores de su base de datos.

2.    Cree un Dockerfile que incluya los comandos necesarios para formar una imagen. Por ejemplo:

FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]

Importante: Asegúrese de colocar el script rds.py y el Dockerfile en la misma carpeta.

3.    Cree un repositorio de Amazon ECR y, a continuación, inserte la imagen de Docker en ese repositorio.

4.    Cree una definición de tarea y, a continuación, agregue la imagen de Docker del paso 2 como imagen del contenedor. Por ejemplo:

{
  "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
  "containerDefinitions": [{
    "name": "sample-app",
    "image": "YOUR-ECR-Repository-URL",
    "essential": true
  }],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512",
  "family": "sample-app"
}

Nota: En la definición de la tarea, establezca los valores de las variables de entorno ENDPOINT, USER y PASS. Puede transmitir estos valores directamente como variables de entorno o recuperarlos de los secretos de AWS Secrets Manager. Para obtener más información, consulte ¿Cómo puedo transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon ECS?

5.    Abra la ](https://console.aws.amazon.com/ecs/)consola de Amazon ECS[ y seleccione Definiciones de tareas en el panel de navegación.

6.    Seleccione la definición de la tarea, elija Acciones y, a continuación, elija Ejecutar tarea.

7.    En Tipo de lanzamiento, elija FARGATE.

8.    En Clúster, elija el clúster para la definición de la tarea.

9.    En Número de tareas, introduzca el número de tareas que desea copiar.

10.    En el apartado VPC y grupos de seguridad, elija su Amazon Virtual Private Cloud (Amazon VPC) en VPC del clúster.

11.    En Subredes, elija sus subredes.

12.    En Grupos de seguridad, seleccione al menos un grupo de seguridad.

13.    Elija Ejecutar tarea.

El script rds.py detiene la tarea y devuelve el mensaje siguiente:

Essential container in task exited.

Confirmar que la tarea está conectada a la base de datos

1.    Abra la consola de Amazon ECS.

2.    En el menú de navegación, seleccione Clústeres y, a continuación, elija su clúster.

3.    Seleccione la pestaña Tareas.

4.    En Estado de tarea deseado, elija Detenidas para ver una lista de las tareas detenidas.

5.    Elija la tarea detenida.

6.    En la pestaña Detalles de la tarea detenida, en el apartado Contenedores, seleccione el icono de expansión.

7.    Elija Ver registros en CloudWatch.

Debería ver el siguiente mensaje en la consola de Amazon CloudWatch:

Connection successful to [Your Endpoint]
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año