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:
- 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.
- 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.
- Cree un repositorio de Amazon ECR y, a continuación, inserte la imagen de Docker en ese repositorio.
- 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?
- Abra la consola de Amazon ECS.
- En el panel de navegación, seleccione Definiciones de tareas.
- Seleccione la definición de la tarea, elija Acciones y, a continuación, elija Ejecutar tarea.
- En Tipo de lanzamiento, elija FARGATE.
- En Clúster, elija el clúster para la definición de la tarea.
- En Cantidad de tareas, introduzca el número de tareas que desea copiar.
- En el apartado VPC y grupos de seguridad, elija su Amazon Virtual Private Cloud (Amazon VPC) en VPC del clúster.
- En Subredes, elija sus subredes.
- En Grupos de seguridad, seleccione al menos un grupo de seguridad.
- 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:
- Abra la consola de Amazon ECS.
- En el panel de navegación, seleccione Clústeres y, a continuación, elija su clúster.
- Seleccione la pestaña Las tareas.
- En Estado de tarea deseado, elija Detenido para ver una lista de las tareas detenidas.
- Elija la tarea detenida.
- En la pestaña Detalles de la tarea detenida, en el apartado Contenedores, seleccione el icono de expansión.
- Elija Ver registros en CloudWatch.
Aparece el siguiente mensaje en la consola de CloudWatch:
«Connection successful to [Su punto de enlace]»