Passer au contenu

Comment arrêter un cluster Aurora pendant plus de 7 jours ?

Lecture de 4 minute(s)
0

Je souhaite savoir comment arrêter un cluster Amazon Aurora pendant plus de 7 jours.

Résolution

Configurer les autorisations IAM

Créez la stratégie AWS Identity and Access Management (IAM) suivante pour permettre à AWS Lambda de démarrer, d'arrêter et de récupérer les informations du cluster :

{
  "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": "*"
    }
  ]
}

Remarque : Utilisez un caractère générique (*) pour toutes les ressources ou spécifiez Amazon Resource Name (ARN) du cluster.

Créer un rôle IAM et attacher les stratégies IAM requises

Utilisez la console IAM pour créer un rôle IAM et attacher les stratégies requises. Dans Service ou cas d'utilisation, choisissez Lambda. Pour les stratégies d'autorisations, sélectionnez la stratégie AWSLambdaBasicExecutionRole, puis sélectionnez la stratégie que vous avez créée.

Ajouter des étiquettes aux clusters de bases de données

Utilisez la console Amazon Relational Databases (Amazon RDS) pour ajouter deux étiquettes au cluster de bases de données. Pour Clé, entrez autostart, puis entrez yes pour Valeur. Choisissez Ajouter une autre étiquette, puis entrez autostop pour Clé et yes pour Valeur.

Créer des fonctions Lambda pour démarrer et arrêter le cluster de bases de données

Pour créer une fonction Lambda afin de démarrer le cluster, procédez comme suit :

  1. Ouvrez la console Lambda.
  2. Dans le volet de navigation, choisissez Fonctions.
  3. Choisissez Créer une fonction.
  4. Choisissez Créer à partir de zéro.
  5. Dans Nom de la fonction, entrez un nom pour la fonction.
  6. Dans Exécution, choisissez Python 3.13.
  7. Pour Architecture, conservez la sélection par défaut de x86_64.
  8. Développez Modifier le rôle d'exécution par défaut.
  9. Dans Rôle d'exécution, choisissez Utiliser un rôle existant.
  10. Dans Rôle existant, sélectionnez le rôle IAM.
  11. Choisissez Créer une fonction.
  12. Choisissez l'onglet Code.
  13. Dans l'éditeur Code source, supprimez l'exemple de code et entrez le code suivant :
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'):
            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']))
            except Exception as e:
                print("Cannot start cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)

if __name__ == "__main__":
    lambda_handler(None, None)
  1. Choisissez Déployer.
  2. Choisissez l'onglet Configuration, puis choisissez Modifier.
  3. Dans Délai d'expiration, choisissez 0 pour min et 10 pour sec.
  4. Choisissez Enregistrer.

Pour créer une fonction Lambda afin d'arrêter le cluster, répétez les étapes précédentes. Dans l'éditeur Code source, entrez le code suivant :

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'):
            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']))
            except Exception as e:
                print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)


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

Tester les fonctions

Avant de tester les fonctions, arrêtez le cluster de bases de données. Utilisez ensuite la console Lambda pour invoquer les fonctions. Dans Modifier l'événement enregistré, sélectionnez l'événement.

Créer un calendrier pour démarrer et arrêter automatiquement le cluster de bases de données

Vous pouvez utiliser le planificateur Amazon EventBridge pour créer un calendrier qui démarre et arrête le cluster à une heure spécifiée avant et après une fenêtre de maintenance. Dans Type de planification, choisissez Planification basée sur Cron, puis entrez l'expression cron.

Informations connexes

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

AWS OFFICIELA mis à jour il y a un an