Comment puis-je automatiser le processus de suppression du journal des erreurs AWS DMS pour éviter la saturation de l'espace de stockage de l'instance de réplication ?

Dernière mise à jour : 04-06-2021

Je souhaite automatiser le processus de suppression du journal d'erreurs AWS Database Migration Service (AWS DMS) pour supprimer plus souvent. Comment faire ?

Brève description

Si vos journaux d'erreurs AWS DMS occupent beaucoup d'espace dans votre instance de réplication DMS, l'instance de réplication peut être saturée. Pour résoudre ce problème, supprimez les journaux d'erreurs de tâches DMS pour vos tâches DMS.

Vous pouvez supprimer le journal des erreurs pour votre tâche AWS DMS à l'aide de l'une des méthodes suivantes :

  • Utilisation de la console AWS DMS
  • Utilisation de l'interface de ligne de commande AWS (AWS CLI)
  • Utilisation de l'API (implémentée avec Python dans cet exemple)

Remarque : il existe un certain nombre d'autres raisons pour lesquelles l'instance de réplication peut être saturée. Pour plus d'informations sur la résolution des problèmes de saturation de l'espace de stockage avec AWS DMS, consultez Pourquoi mon instance de réplication AWS DMS est-elle a l'état « espace de stockage saturé » ?

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Supprimer le journal des erreurs à l'aide de la console AWS DMS

Pour supprimer manuellement le journal des erreurs de votre tâche DMS, voir Comment activer, accéder et supprimer les journaux Amazon CloudWatch logs pour AWS DMS ?

Supprimer les journaux d'erreurs à l'aide d'AWS CLI

Vous pouvez supprimer vos journaux de tâches DMS en modifiant vos paramètres de tâche à l'aide de la commande AWS CLI suivante :

aws dms modify-replication-task --replication-task-arn <DMS task ARN> --replication-task-settings '{"Logging": { "DeleteTaskLogs": true}}'

Cette commande modifie la tâche en modifiant le paramètre "DeleteTaskLogs": true. Après avoir ajouté le paramètre de tâche avec ce paramètre et cette valeur, tous les journaux présents pour cette tâche sont supprimés de l'instance de réplication. Une fois les journaux supprimés, les paramètres de tâche suppriment le paramètre "DeleteTaskLogs": true. Après avoir exécuté cette commande, vérifiez que les journaux sont supprimés de l'instance de réplication.

Pour supprimer périodiquement les journaux, modifiez le paramètre de tâche avec le paramètre "DeleteTaskLogs": true, à chaque fois. Vous pouvez programmer cette commande AWS CLI pour qu'elle s'exécute périodiquement à l'aide de cronjob. Pour plus d'informations sur la modification du paramètre de tâche, consultez modify-réplication-task dans la référence de l'interface AWS CLI.

Automatisez le processus de suppression du journal des tâches à l'aide de l'API (Lambda)

Les journaux de tâches AWS DMS sont supprimés tous les 7 jours pour toutes les instances de réplication. Pour supprimer les journaux plus souvent, vous pouvez créer un script et automatiser le processus à exécuter tous les jours, ou à la fréquence souhaitée. Cet exemple utilise un code Python simple pour automatiser la suppression du journal des erreurs de tâche pour l'ARN de tâche fournie à l'aide d'AWS Lambda.

Configurer la fonction Lambda

Pour configurer la fonction Lambda, effectuez les opérations suivantes :

1.    Ouvrez la console Lambda, puis choisissez la région AWS contenant vos ressources DMS.

2.    Dans le panneau Fonctions, choisissez Créer une fonction.

3.    Saisissez un nom de fonction.

4.    Dans le champ Runtime, sélectionnez Python 3.8.

5.    Pour Modifier le rôle d'exécution par défaut, choisissez Créer un rôle avec les autorisations Lambda de base. Notez le nom de rôle AWS Identity and Access Management (IAM) créé par Lambda.

6.    Choisissez Créer une fonction.

7.    Ouvrez la console AWS IAM, puis ouvrez le rôle IAM créé par la fonction Lambda.

8.    Créez une stratégie IAM à l'aide du JSON suivant. Assurez-vous de remplacer l'ARN de la tâche pour la ressource :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dms:ModifyReplicationTask"
            ],
            "Resource": "arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
        }
    ]
}

9.    Attachez la stratégie nouvellement créée au rôle créé par la fonction Lambda.

10.    Ouvrez la console Lambda, puis choisissez la fonction Lambda que vous avez créée.

11.    Pour Code de fonction, saisissez le code suivant, puis cliquez sur Déployer :

import boto3
import json
client = boto3.client('dms')
def lambda_handler(event, context):
    # specific task ARN
    taskarn = 'arn:aws:dms:us-east-1:1234567890:task:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
    # modify the DMS task
    response = client.modify_replication_task(
        ReplicationTaskArn=taskarn,
        ReplicationTaskSettings='{"Logging": { "DeleteTaskLogs": true}}'
    )

12.    Choisissez Test, puis saisissez Nom de l'événement avec le modèle par défaut.

13.    Choisissez Créer.

14.    Choisissez à nouveau Test, et le code s'exécute sans erreurs.

Après avoir effectué ces étapes, l'état de la tâche DMS devient En cours de Modification. Dans le même temps, vous pouvez voir que les journaux d'erreurs de tâche DMS sous l'instance de réplication sont supprimés.

Automatisation à l'aide de Lambda Scheduler

Pour automatiser la suppression des journaux d'erreurs de tâches DMS à l'aide de Lambda Scheduler, effectuez les opérations suivantes :

1.    Ouvrez la console Lambda, puis choisissez la fonction Lambda que vous avez créée.

2.    Pour Concepteur, choisissez Ajouter un déclencheur.

3.    Dans la liste déroulante, choisissez EventBridge (Cloudwatch Events).

4.    Pour Règle, choisissez Créer une nouvelle règle.

5.    Saisissez le nom de la règle et la description de la règle.

6.    Pour exécuter le code tous les sept jours, pour l'expression de programme, saisissez fréquence (7 jours). Pour des expressions plus flexibles, reportez-vous à la section Programmer des expressions utilisant fréquence ou cron.

7.    Sélectionnez Add (Ajouter).

Après ces étapes, l'automatisation est configurée pour supprimer les journaux DMS spécifiés une fois tous les sept jours.

Remarque : vous pouvez modifier et optimiser ce code en fonction des besoins de votre entreprise. Vous pouvez également planifier l'exécution périodique de ce script à l'aide du planificateur cronjob ou Lambda.