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

8 minutos de lectura
0

Quiero detener una instancia de Amazon Relational Database Service (clústeres de Amazon Aurora) durante más de siete días.

Descripción breve

Puede iniciar y detener sus clústeres de Amazon Aurora fácilmente en unos minutos. Esta característica permite ahorrar costos para las bases de datos que no tienen que estar ejecutándose todo el tiempo. Puede detener un clúster de base de datos (DB) durante un máximo de siete días. Si no inicia manualmente su clúster de base de datos después de siete días, el clúster de base de datos se inicia automáticamente. Esto se hace para que el clúster no se quede atrás en relación con las actualizaciones de mantenimiento necesarias.

Para detener su clúster de Aurora durante más de siete días sin pasar por alto las actualizaciones de mantenimiento necesarias, haga lo siguiente:

1.    Configure los permisos de AWS Identity Access Management (IAM) para permitir que AWS Lambda haga lo siguiente: Iniciar la instancia. Detener la instancia. Recuperar información de la instancia.

2.    Agregue etiquetas para los clústeres de Aurora que desee iniciar y detener automáticamente.

3.    Cree una función de Lambda para iniciar el clúster.

4.    Cree una función de Lambda para detener el clúster.

5.    Cree una programación para hacer lo siguiente: Iniciar un clúster de Aurora al principio del periodo de mantenimiento semanal. Detener el clúster de Aurora al final del periodo de mantenimiento.

Resolución

Configurar permisos de IAM

Cree una política de IAM para permitir que Lambda inicie y detenga el clúster y recupere la información del clúster.

1.    Abra la consola de IAM.

2.    En el panel de navegación, elija Políticas.

3.    Elija Create policy (Crear política).

4.    Elija la pestaña JSON.

5.    Copie la siguiente política y péguela en la pestaña JSON para conceder los permisos de IAM necesarios:

{
  "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.    Elija Next: Tags (Siguiente: etiquetas).

7.    (Opcional) Para agregar una etiqueta, elija Add tag (Agregar etiqueta) y, a continuación, ingrese los valores adecuados en los campos Key (Clave) y Value - optional (Valor: opcional).

8.    Elija Next: Review (Siguiente: revisión).

9.    En la página Review policy (Revisar política), en Name (Nombre), ingrese el nombre de su política. Revise la sección Summary (Resumen) para ver los permisos que concede su política.

10.    Elija Create policy (Crear política).

Para obtener más información, consulte Creación de políticas en la pestaña JSON.

Cree un rol de IAM y, a continuación, adjunte las políticas necesarias

1.    Abra la consola de IAM.

2.    En el panel de navegación, elija Roles (Roles).

3.    Elija Create role (Crear rol).

4.    En Select type of trusted entity (Seleccionar el tipo de entidad de confianza), elija AWS service (Servicio de AWS).

5.    En Or select a service to view its use cases (O seleccione un servicio para ver sus casos de uso), elija Lambda.

6.    Elija Next: Permissions (Siguiente: permisos).

7.    En Filter-policies (Políticas de filtro), ingrese el nombre de la política creada en la sección anterior. Cuando aparezca la política que ha creado, selecciónela. En Filter-policies (Políticas de filtro), ingrese AWSLambdaBasicExecutionRole. Cuando aparezca la política administrada AWSLambdaBasicExecutionRole que ha creado, selecciónela.

8.    Elija Next: Tags (Siguiente: etiquetas).

9.    (Opcional) Para agregar una etiqueta, ingrese los valores adecuados en los campos Key (Clave) y Value (optional) (Valor [opcional]).

10.    Elija Next: Review (Siguiente: revisión).

11.    En la página Create role (Crear rol), en Role name (Nombre del rol), ingrese el nombre del rol que va a crear.

12.    Elija Create role (Crear rol).

Para obtener más información, consulte Creating a role for an AWS service (console) (Creación de un rol para un servicio de AWS [consola]).

Agregar etiquetas para clústeres de bases de datos

1.    Abra la consola de Amazon RDS.

2.    En el panel de navegación, elija Databases (Bases de datos).

3.    Elija el clúster de base de datos que desee iniciar y detener automáticamente.

4.    En la sección de detalles, desplácese hacia abajo hasta la sección Tags (Etiquetas).

5.    En la pestaña Tags (Etiquetas), elija Add (Agregar). En Tag key (Clave de etiqueta), ingrese autostart. En Value (Valor), ingrese yes. Elija Add (Agregar) para guardar los cambios.

6.    Vuelva a elegir Add (Agregar). En Tag key (Clave de etiqueta), ingrese autostop. En Value (Valor), ingrese yes. Elija Add (Agregar) para guardar los cambios.

Para obtener más información, consulta Agregar, publicar y quitar etiquetas.

Crear una función Lambda para comenzar las instancias de base de datos etiquetadas

1.    Abra la consola de Lambda.

2.    En el panel de navegación, elija Functions (Funciones).

3.    Elija Create function (Crear función).

4.    Elija Author from scratch (Crear desde cero).

5.    En Function name (Nombre de la función), ingrese el nombre de la función.

6.    En Runtime (Tiempo de ejecución), seleccione Python 3.7.

7.    En Architecture (Arquitectura), deje la selección predeterminada de x86_64.

7.    Amplíe Change default execution role (Cambiar rol de ejecución predeterminado).

8.    En Execution role (Rol de ejecución), elija Use an existing role (Usar un rol existente).

9.    En Existing role (Rol existente), seleccione el rol de IAM que creó anteriormente.

10.    Elija Create function (Crear función).

11.    Elija la pestaña Code (Código).

12.    En el editor Code source (Código fuente), elimine el código de muestra y pegue lo 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'):
            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.    Elija File (Archivo), Save (Guardar) y, a continuación, elija Deploy (Implementar).

15.    Elija la pestaña Configuration (Configuración), General configuration (Configuración general) y, a continuación, elija Edit (Editar).

16.    En Timeout (Tiempo de espera), haga lo siguiente: En min, seleccione 0. En sec, seleccione 10. 17.    Elija Save (Guardar).

Crear una función de Lambda para detener las instancias de base de datos etiquetadas

Siga las instrucciones de la sección anterior Crear una función Lambda para comenzar las instancias de base de datos etiquetadas para detener los clústeres de bases de datos etiquetados. Debe realizar los siguientes cambios:

En el editor Code source (Código fuente), elimine el código de muestra y pegue lo siguiente:

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)

Llevar a cabo pruebas de función

Supongamos que sus clústeres de base de datos etiquetados están en el estado Stopped (Detenido). Para llevar a cabo pruebas de función, haga lo siguiente:

1.    Abra la lista Lambda Functions (Funciones de Lambda).

2.    Elija la función que ha creado para iniciar los clústeres de base de datos.

3.    Elija Actions (Acciones) y, a continuación, elija Test (Prueba).

4.    En la pestaña Test (Prueba), en Name (Nombre), ingrese el nombre de su evento.

5.    Elija Save changes (Guardar cambios) y, a continuación, elija Test (Prueba).

Crear la programación

Supongamos que el periodo de mantenimiento semanal para los clústeres de base de datos etiquetados es el domingo de 22:00 a 22:30. A fin de configurar una programación, puede crear dos reglas para lo siguiente:

  • Iniciar automáticamente el clúster de base de datos 30 minutos antes de que comience el periodo de mantenimiento
  • Detener automáticamente el clúster de base de datos 30 minutos después de que finalice el periodo de mantenimiento

Para crear la regla para iniciar automáticamente la instancia de base de datos 30 minutos antes del periodo de mantenimiento, haga lo siguiente:

1.    Abra la lista Lambda Functions (Funciones de Lambda).

2.    Elija la función que ha creado para iniciar las instancias de base de datos.

3.    En Function overview (Información general de la función), elija Add trigger (Agregar desencadenador).

4.    Seleccione EventBridge (CloudWatch Events) y, a continuación, seleccione Create a new rule (Crear una nueva regla).

5.    En Rule name (Nombre de la regla), ingrese el nombre de la regla que quiere crear.

6.    En Schedule Expression (Expresión de programación), agregue una expresión cron para la programación automatizada (ejemplo: cron(30 21 ? * SUN *)).

7.    Elija Add (Agregar).

Siga las mismas instrucciones para crear otra regla que detenga automáticamente el clúster de base de datos 30 minutos después del periodo de mantenimiento. Asegúrese de cambiar el nombre de la regla y la expresión cron de la programación automatizada según corresponda (ejemplo: cron(00 23 ? * SUN *)).


Información relacionada

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

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año