Saltar al contenido

¿Cómo detengo un clúster de Aurora durante más de siete días?

4 minutos de lectura
0

Quiero saber cómo detener un clúster de Amazon Aurora durante más de siete días.

Resolución

Configurar los permisos de IAM

Crea la siguiente política de AWS Identity and Access Management (IAM) para permitir que AWS Lambda inicie, detenga y recupere información del clúster:

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

Nota: Usa un comodín (*) para todos los recursos o especifica el nombre de recurso de Amazon (ARN) del clúster.

Crear un rol de IAM y adjuntar políticas de IAM necesarias

Utiliza la consola de IAM para crear un rol de IAM y adjuntar las políticas necesarias. En Servicio o caso de uso, selecciona Lambda. Para las políticas de permisos, selecciona la política AWSLambdaBasicExecutionRole y, a continuación, selecciona la política que has creado.

Añadir etiquetas a los clústeres de bases de datos

Utiliza la consola de bases de datos relacionales de Amazon (Amazon RDS) para añadir dos etiquetas a tu clúster de base de datos. En Clave, introduce autostart y, a continuación, introduce yes en Valor. Selecciona Agregar otra etiqueta y, a continuación, introduce autostop en Clave y yes en Valor.

Creación de funciones de Lambda para iniciar y detener el clúster de base de datos

Para crear una función de Lambda con el fin de iniciar el clúster, sigue estos pasos:

  1. Abre la consola de Lambda.
  2. En el panel de navegación, selecciona Funciones.
  3. Selecciona Crear función.
  4. Selecciona Crear desde cero.
  5. En Nombre de función, introduce un nombre para la función.
  6. En Versión ejecutable, selecciona Python 3.13.
  7. En Arquitectura, mantén la selección predeterminada de x86_64.
  8. Expande Cambiar el rol de ejecución predeterminado.
  9. En Rol de ejecución, selecciona Uso de un rol existente.
  10. En Rol existente, selecciona el rol de IAM.
  11. Selecciona Crear función.
  12. Selecciona la pestaña Código.
  13. En el editor de Código fuente, borra el código de ejemplo e introduce el siguiente:
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. Selecciona Implementar.
  2. Selecciona la pestaña Configuración y, a continuación, Editar.
  3. En Tiempo de espera, selecciona 0 para min. y 10 para seg..
  4. Selecciona Guardar.

Para crear una función de Lambda que detenga el clúster, repite los pasos anteriores. En el editor de Código fuente, introduce el siguiente código:

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)

Probar las funciones

Antes de probar las funciones, detén el clúster de base de datos. A continuación, utiliza la consola de Lambda para invocar las funciones. En Editar evento guardado, selecciona el evento.

Crear una programación para iniciar y detener automáticamente el clúster de base de datos

Puedes usar el Programador de Amazon EventBridge para crear una programación que inicie y detenga el clúster a una hora específica antes y después de un período de mantenimiento. En Tipo de programación, selecciona Programación basada en Cron y, a continuación, introduce la expresión cron.

Información relacionada

¿Cómo puedo usar una función de Lambda para detener una instancia de Amazon RDS durante más de siete días?

OFICIAL DE AWSActualizada hace 8 meses