¿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: El siguiente ejemplo utiliza MySQL como tipo de motor. Para obtener más información sobre los tipos de motor, consulte Introducción a Amazon RDS.

Conectar la tarea a la base de datos

Siga estos pasos:

  1. Cree un script de Python que se conecte a su 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 pymysqlimport 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. Para formar una imagen, cree un Dockerfile que incluya los comandos necesarios. Por ejemplo:
    FROM pythonRUN pip install pymysql cryptography
    COPY rds.py /
    CMD [ "python", "/rds.py" ]
    Importante: Coloque 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 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 directamente estos valores como variables de entorno o recuperar los valores 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 consola de Amazon ECS.
  6. En el panel de navegación, seleccione Definiciones de tareas.
  7. Seleccione la definición de la tarea, elija Acciones y, a continuación, elija Ejecutar tarea.
  8. En Tipo de lanzamiento, elija FARGATE.
  9. En Clúster, elija el clúster para la definición de la tarea.
  10. En Cantidad de tareas, introduzca el número de tareas que desea copiar.
  11. En el apartado VPC y grupos de seguridad, elija su Amazon Virtual Private Cloud (Amazon VPC) en VPC del clúster.
  12. En Subredes, elija sus subredes.
  13. En Grupos de seguridad, seleccione al menos un grupo de seguridad.
  14. 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

Siga estos pasos:

  1. Abra la consola de Amazon ECS.
  2. En el panel de navegación, seleccione Clústeres y, a continuación, elija su clúster.
  3. Seleccione la pestaña Las tareas.
  4. En Estado de tarea deseado, elija Detenido 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.

Aparece el siguiente mensaje en la consola de CloudWatch:

«Connection successful to [Su punto de enlace]»

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 10 meses