Je souhaite me connecter à une base de données à partir d'une tâche Amazon Elastic Container Service (Amazon ECS) sur AWS Fargate.
Résolution
Prérequis :
Remarque : l'exemple suivant utilise MySQL comme type de moteur. Pour plus d’informations sur les types de moteurs, consultez la section Premiers pas avec Amazon RDS.
Connectez votre tâche à votre base de données
Procédez comme suit :
- Créez un script Python qui se connecte à votre base de données MySQL. L'exemple de script rds.py suivant envoie les résultats de la connexion à la base de données vers 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))
Remarque : remplacez POINT DE TERMINAISON, UTILISATEUR et PASSER par les valeurs de votre base de données.
- Pour assembler une image, créez un Dockerfile qui inclut les commandes requises. Exemple :
FROM pythonRUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
Important : placez votre script rds.py et Dockerfile dans le même dossier.
- Créez un référentiel Amazon ECR, puis transférez l’image Docker vers ce référentiel.
- Créez une définition de tâche, puis ajoutez l'image Docker en tant qu’image du conteneur. Exemple :
{
"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"
}
Remarque : dans la définition de votre tâche, définissez les valeurs des variables d'environnement POINT DE TERMINAISON, UTILISATEUR, et PASSER. Vous pouvez transmettre ces valeurs directement sous forme de variables d'environnement ou récupérer les valeurs de secrets dans AWS Secrets Manager. Pour plus d’informations, consultez Comment puis-je transmettre des secrets ou des informations sensibles en toute sécurité à des conteneurs dans le cadre d’une tâche Amazon ECS ?
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, choisissez Définitions de tâche.
- Sélectionnez votre définition de tâche, choisissez Actions, puis sélectionnez Exécuter la tâche.
- Pour le Type de lancement, choisissez FARGATE.
- Pour Cluster, choisissez le cluster pour la définition de votre tâche.
- Dans Nombre de tâches, entrez le nombre de tâches que vous souhaitez copier.
- Dans la section VPC et groupes de sécurité, pour Cluster VPC, choisissez votre Amazon Virtual Private Cloud (Amazon VPC).
- Pour Sous-réseaux, choisissez vos sous-réseaux.
- Pour Groupes de sécurité, sélectionnez au moins un groupe de sécurité.
- Choisissez Exécuter la tâche.
Le script rds.py arrête la tâche et renvoie le message suivant :
« Le contenant essentiel de la tâche est sorti ».
Vérifiez que votre tâche est connectée à votre base de données
Procédez comme suit :
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, choisissez Clusters, puis sélectionnez votre cluster.
- Choisissez l'onglet Tâches.
- Pour Statut des tâches souhaitées, pour afficher la liste des tâches arrêtées, choisissez Arrêté.
- Choisissez votre tâche arrêtée.
- Dans l'onglet Détails de votre tâche arrêtée, dans la section Conteneurs, développez la section.
- Choisissez Afficher les journaux dans CloudWatch.
Le message suivant s’affiche dans la console CloudWatch :
« Connexion réussie à [Votre point de terminaison] »