Comment puis-je arrêter un cluster Amazon Aurora pendant plus de sept jours ?

Lecture de 8 minute(s)
0

Je souhaite arrêter un service de base de données Amazon Relational Database Service (Amazon Aurora clusters) pendant plus de sept jours.

Brève description

Vous pouvez facilement démarrer et arrêter vos instances Amazon Aurora clusters en quelques minutes. Cette fonctionnalité permet de réaliser des économies pour les bases de données qui ne doivent pas nécessairement être exécutées en permanence. Vous pouvez arrêter un cluster de base de données pendant sept jours au maximum. Si vous ne démarrez pas manuellement votre cluster de base de données au bout de sept jours, votre cluster de base de données démarre automatiquement. Cela se produit afin que le cluster ne soit pas en retard par rapport aux mises à jour de maintenance requises.

Pour arrêter votre cluster Aurora pendant plus de sept jours sans manquer les mises à jour de maintenance requises, procédez comme suit :

1.    Configurez les autorisations AWS Identity Access Management (IAM) pour permettre à AWS Lambda d'effectuer les opérations suivantes : Démarrer l'instance. Arrêter l'instance. Récupérer les informations relatives à l'instance.

2.    Ajouter des balises pour les clusters Aurora que vous souhaitez démarrer et arrêter automatiquement.

3.    Créer une fonction Lambda pour démarrer le cluster.

4.    Créer une fonction Lambda pour arrêter le cluster.

5.    Créer un programme pour effectuer les opérations suivantes : Démarrer un cluster Aurora au début de la fenêtre de maintenance hebdomadaire. Arrêtez le cluster Aurora à la fin de la fenêtre de maintenance.

Solution

Configurer les autorisations IAM

Créez une politique IAM pour permettre à Lambda de démarrer et d'arrêter le cluster et de récupérer des informations sur le cluster.

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Stratégies.

3.    Choisissez Create policy (Créer une stratégie).

4.    Choisissez l'onglet JSON.

5.    Copiez la stratégie suivante et collez-la sous l'onglet JSON pour accorder les autorisations IAM requises :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "rds:StartDBCluster",
        "rds:StopDBCluster",
        "rds:ListTagsForResource",
        "rds:DescribeDBInstances",
        "rds:StopDBInstance",
        "rds:DescribeDBClusters",
        "rds:StartDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

6.    Sélectionnez Next: Tags (Suivant : balises).

7.    (Facultatif) Pour ajouter une étiquette, choisissez Ajouter une étiquette, puis entrez les valeurs appropriées pour les champs Clé etValeur - facultatifs.

8.    Choisissez Next: Review (Étape suivante : vérification).

9.    Sur la page Review policy (Vérifier la stratégie), pour Name (Nom), saisissez le nom de votre stratégie. Consultez la section Résumé pour connaître les autorisations accordées par votre stratégie.

10.    Choisissez Create policy (Créer une stratégie).

Pour plus d'informations, consultez la section Création de stratégies sous l'onglet JSON.

Créez un rôle IAM, puis attachez les stratégies requises

1.    Ouvrez la console IAM.

2.    Dans le volet de navigation, choisissez Rôles.

3.    Sélectionnez Créer un rôle.

4.    Pour Select type of trusted entity (Sélectionner le type d'entité de confiance), choisissez AWS service (Service AWS).

5.    Sous Ou sélectionnez un service pour afficher ses cas d'utilisation, choisissez Lambda.

6.    Choisissez Next: Permissions (Étape suivante : autorisations).

7.    Pour Filter-policies, entrez le nom de la stratégie créée dans la section précédente. Lorsque la stratégie que vous avez créée apparaît, sélectionnez-la. Pour Filter-policies, saisissez AWSLambdaBasicExecutionRole. Lorsque la stratégie gérée AWSLambdaBasicExecutionRole que vous avez créée apparaît, sélectionnez la stratégie.

8.    Choisissez Next: Tags (Suivant : Balises).

9.    (Facultatif) Pour ajouter une étiquette, entrez les valeurs appropriées pour les champs Clé et Valeur (facultatif).

10.    Choisissez « Next: Review » (Étape suivante : vérification).

11.    Sur la page Create role (Créer un rôle), pour Role name (Nom du rôle), saisissez le nom du rôle que vous créez.

12.    Choisissez Create role (Créer un rôle).

Pour plus d'informations, consultez la section Création d'un rôle pour un service AWS (console).

Ajouter des balises pour les clusters de base de données

1.    Ouvrez la console Amazon RDS.

2.    Dans le panneau de navigation, sélectionnez Bases de données.

3.    Choisissez le cluster de base de données que vous souhaitez démarrer et arrêter automatiquement.

4.    Dans la section des détails, faites défiler l'écran jusqu'à la section Étiquettes.

5.    Sous l'onglet Étiquettes, choisissez Ajouter. Pour Touche d’étiquette, saisissez le démarrage automatique. Pour Valeur, saisissez oui. Cliquez sur Ajouter pour enregistrer vos modifications.

6.    Cliquez à nouveau sur Ajouter. Pour Touche d’étiquette, saisissez arrêt automatique. Pour Valeur, saisissez oui. Cliquez sur Ajouter pour enregistrer vos modifications.

Pour plus d'informations, consultez la section Ajout, mise en liste et suppression d’étiquettes.

Créer une fonction Lambda pour démarrer les instances de base de données balisées

1.    Ouvrez la console Lambda.

2.    Dans le volet de navigation, sélectionnez Fonctions.

3.    Choisissez Create function (Créer une fonction).

4.    Choisissez Créer à partir de zéro.

5.    Pour function-name, entrez le nom de votre fonction.

6.    Pour Runtime (Environnement d'exécution), sélectionnez Python 3.7.

7.    Pour Architecture, conservez la sélection par défaut x86_64.

7.    Développez Modifier le rôle d'exécution par défaut.

8.    Pour Rôle d'exécution, sélectionnez Utiliser un rôle existant.

9.    Pour Existing role (Rôle existant), choisissez le rôle IAM que vous avez créé précédemment.

10.    Sélectionnez Créer une fonction.

11.    Cliquez sur l'onglet Code.

12.    Dans l'éditeur de code source, supprimez l'exemple de code et collez ce qui suit :

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster stopped. Start it if eligible.
        if (db['Status'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for cluster, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Starting cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    Choisissez Fichier, Enregistrer, puis Déployer.

15.    Choisissez l'onglet Configuration, Configuration générale, puis Modifier.

16.    Sous Timeout, procédez comme suit : pendant min, sélectionnez 0. Pendant seconde, sélectionnez 10. 17.    Sélectionnez Enregistrer.

Créer une fonction Lambda pour arrêter les instances de base de données étiquetées

Suivez les instructions de la section précédente Créer une fonction Lambda pour démarrer les clusters de base de données balisés afin d'arrêter les clusters de bases de données balisés. Vous devez effectuer les modifications suivantes :

Dans l'éditeur de code source, supprimez l'exemple de code et collez ce qui suit :

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster started. Stop it if eligible.
        if (db['Status'] == 'available'):
            doNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for cluster, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Stopping cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStop == 1):
                    doNotStop=1
            except Exception as e:
                print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

Effectuez des tests de fonction

Supposons que vos clusters de base de données étiquetées soient dans l'état Arrêté. Pour effectuer un test de fonction, procédez comme suit :

1.    Ouvrez la liste des fonctions Lambda.

2.    Choisissez la fonction que vous avez créée pour démarrer les clusters de base de données.

3.    Choisissez Actions, puis Test.

4.    Sous l'onglet Test, pour Nom, saisissez le nom de votre événement.

5.    Choisissez Enregistrer les modifications, puis Tester.

Créer le calendrier

Supposons que la fenêtre de maintenance hebdomadaire pour les clusters de bases de données balisées soit le dimanche de 22h00 à 22h30. Vous pouvez définir une planification en créant deux règles pour les éléments suivants :

  • Démarrage automatique de le cluster de base de données 30 minutes avant le début de la fenêtre de maintenance
  • Arrêtez automatiquement le cluster de base de données 30 minutes après la fin de la fenêtre de maintenance

Pour créer la règle de démarrage automatique de l'instance de base de données 30 minutes avant la fenêtre de maintenance, procédez comme suit :

1.    Ouvrez la liste des fonctions Lambda.

2.    Choisissez la fonction que vous avez créée pour démarrer les instances de base de données.

3.    Sous Function overview (Vue d'ensemble des fonctions), choisissez Add trigger (Ajouter un déclencheur).

4.    Sélectionnez EventBridge (CloudWatch Events), puis Créer une nouvelle règle.

5.    Pour Nom de la règle, saisissez le nom de la règle que vous souhaitez créer.

6.    Pour Schedule Expression, ajoutez une expression cron pour la planification automatisée (Exemple : cron (30 21 ? * SUN *)).

7.    Choisissez Add (Ajouter).

Utilisez les mêmes instructions pour créer une autre règle afin d'arrêter automatiquement le cluster de base de données 30 minutes après la fenêtre de maintenance. N'oubliez pas de modifier le nom de la règle et l'expression cron pour la planification automatisée en conséquence (Exemple : cron (00 23 ? * SUN *)).


Informations connexes

Comment puis-je arrêter une instance Amazon RDS pendant plus de sept jours ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an