Saltar al contenido

¿Cómo me conecto 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 

Requisitos previos:

Nota: La siguiente resolución utiliza un motor de base de datos MySQL. Para obtener más información sobre cómo conectarte a bases de datos que utilizan otros tipos de motores, consulta Introducción a Amazon RDS.

Conexión a la tarea a la base de datos

Sigue estos pasos:

  1. Crea un script de Python que se conecte a tu base de datos MySQL. El script rds.py del ejemplo siguiente envía los resultados de la conexión con la base de datos a Amazon CloudWatch:

    import pymysql
    import os
    
    DATABASE_ENDPOINT = os.environ['example_endpoint']
    USERNAME = os.environ['example_username']
    PASSWORD = os.environ['example_password']
    
    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: Sustituye example_endpoint por el punto final de la base de datos. Sustituye example_username por tu nombre de usuario. Sustituye example_password por u contraseña.

  2. Para formar una imagen, cree un Dockerfile que incluya los comandos necesarios. El siguiente archivo de ejemplo incluye los comandos necesarios:

    FROM python
    RUN pip install pymysql cryptography
    COPY rds.py /
    CMD [ "python", "/rds.py" ]
  3. Crea un repositorio de Amazon Elastic Container Registry (Amazon ECR) y, a continuación, envía la imagen de Docker a ese repositorio.

  4. Crea una definición de tarea y, a continuación, agrega la imagen de Docker como imagen del contenedor:

    {  "executionRoleArn": "arn:aws:iam::example_account_ID:role/ecsTaskExecutionRole",  
      "containerDefinitions": [
        {
          "name": "example_app",
          "image": "example_repository_URL",
          "essential": true
        }
      ],
      "requiresCompatibilities": [
        "FARGATE"
      ],
      "networkMode": "awsvpc",
      "cpu": "256",
      "memory": "512",
      "family": "example_app"
    }

    Nota: Sustituye example_account_ID por el ID de tu cuenta de AWS. Sustituye example_app por el nombre de tu aplicación. Sustituye example_repository_URL por la URL de tu repositorio de Amazon ECR. Se recomienda establecer los valores de las variables de entorno ENDPOINT, USER y PASS en la definición de la tarea. Puedes transmitir directamente estos valores como variables de entorno o recuperar los valores de los secretos de AWS Secrets Manager. Para obtener más información, consulta ¿Cómo puedo transmitir secretos o información confidencial de forma segura a los contenedores de una tarea de Amazon ECS?

  5. Abre la consola de Amazon ECS.

  6. En el panel de navegación, selecciona Definiciones de tareas.

  7. Selecciona la definición de la tarea, elige Acciones y, a continuación, elige Ejecutar tarea.

  8. En Tipo de lanzamiento, elige FARGATE.

  9. En Clúster, elige el clúster para la definición de la tarea.

  10. En Cantidad de tareas, introduce el número de tareas que deseas copiar.

  11. En el apartado VPC y grupos de seguridad, elige tu Amazon Virtual Private Cloud (Amazon VPC) en VPC del clúster.

  12. En Subredes, elige tus subredes.

  13. En Grupos de seguridad, selecciona al menos un grupo de seguridad.

  14. Elige Ejecutar tarea.

Cuando la tarea se conecta a la base de datos, el script rds.py detiene la tarea y muestra el siguiente mensaje:

"Essential container in task exited."

Confirmar que se ha conectado la tarea a la base de datos

Sigue estos pasos:

  1. Abre la consola de Amazon ECS.
  2. En el panel de navegación, selecciona Clústeres y, a continuación, elige tu clúster.
  3. Selecciona la pestaña Tareas.
  4. En Estado de tarea deseado, elige Detenido para ver una lista de las tareas detenidas.
  5. Elige la tarea detenida.
  6. En la pestaña Detalles de la tarea detenida, amplía la sección Contenedores.
  7. Elige Ver registros en CloudWatch.

Si has conectado correctamente la tarea a la base de datos, aparecerá el siguiente mensaje en la consola de CloudWatch:

"Connection successful to [tu punto de enlace]"

OFICIAL DE AWSActualizada hace 6 meses