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

7 minutos de lectura
0

Quiero usar AWS Lambda para detener un Amazon Relational Database Service (Amazon RDS) durante más de siete días.

Descripción breve

De forma predeterminada, puede detener una instancia de base de datos de Amazon RDS durante siete días seguidos como máximo. Transcurridos esos siete días, la instancia se reinicia para que no se pierda ninguna actualización de mantenimiento.

Para detener la instancia durante más de siete días, puede usar Step Functions y automatizar el flujo de trabajo sin perder un período de mantenimiento.

Nota: Para obtener una solución alternativa, consulte ¿Cómo puedo usar Step Functions para detener una instancia de Amazon RDS durante más de siete días?

Resolución

Configurar los permisos de IAM

Cree una política de AWS Identity and Access Management (IAM) para permitir que Lambda inicie y detenga la instancia y recupere la información de la instancia.

1.    Abra la consola de IAM.

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

3.    Elija Crear política.

4.    Elija la pestaña JSON.

5.    Para conceder los permisos de IAM necesarios, introduzca la siguiente política en la pestaña JSON:

{
    "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 Siguiente: Etiquetas.

7.    (Opcional) Para añadir una etiqueta, elija Añadir etiqueta y, a continuación, introduzca los valores adecuados en los campos Clave y Valor: opcional.

8.    Elija Siguiente: Revisar.

9.    En la página Revisar política, en Nombre, introduzca el nombre de su política. Revise la sección Resumen para ver los permisos que otorga su política.

10.    Elija Crear política.

Para obtener más información, consulte Creación de políticas mediante el editor 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, seleccione Roles.

3.    Elija Crear rol.

4.    En Seleccionar el tipo de entidad de confianza, seleccione Servicio de AWS.

5.    En Elegir un servicio para ver los casos de uso, seleccione Lambda.

6.    Elija Siguiente: Permisos.

7.    En Filtro: políticas, introduzca el nombre de la política que ha creado en la sección anterior. Cuando aparezca, seleccione la política. En Filtro: políticas, introduzca AWSLambdaBasicExecutionRole. Cuando aparezca, seleccione la política administrada AWSLambdaBasicExecutionRole.

8.    Elija Siguiente: Etiquetas.

9.     (Opcional) Para añadir una etiqueta, introduzca los valores adecuados en los campos Clave y Valor: opcional.

10.    Elija Siguiente: Revisar.

11.    En la página Crear rol, en Nombre de rol, introduzca el nombre del rol que está creando.

12.    Elija Crear rol.

Para obtener más información, consulte Creación de un rol para un servicio de AWS (consola).

Añadir etiquetas para instancias de base de datos

1.    Abra la consola de Amazon RDS.

2.    En el panel de navegación, seleccione Bases de datos.

3.    Elija la instancia de base de datos que quiere iniciar y detener automáticamente.

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

5.    En la pestaña Etiquetas, seleccione Añadir. En Clave de etiqueta, escriba autostart. En Valor, introduzca yes. Seleccione Añadir para guardar los cambios.

6.    Vuelva a seleccionar Añadir. En Clave de etiqueta, escriba autostop. En Valor, introduzca yes. Seleccione Añadir para guardar los cambios.

Para obtener más información, consulte Agregar, publicar y eliminar etiquetas.

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

1.    Abra la consola de Lambda.

2.    En el panel de navegación, seleccione Funciones.

3.    Elija Crear una función.

4.    Elija Crear desde cero.

5.    En Nombre de la función, introduzca el nombre de la función.

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

7.    En Arquitectura, mantenga la selección predeterminada de x86_64.

8.    Expanda Cambiar el rol de ejecución predeterminado.

9.    En Rol de ejecución, seleccione Uso de un rol existente.

10.    En Rol existente, seleccione el rol de IAM que ha creado.

11.    Elija Crear una función.

12.    Seleccione la pestaña Código.

13.    En el editor de Código fuente, borre el código de ejemplo e introduzca el siguiente:

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

def lambda_handler(event, context):

    #Start DB Instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance stopped. Start it if eligible.
        if (db['DBInstanceStatus'] == 'stopped'):
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for instance, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Starting instance: {0}.".format(db['DBInstanceIdentifier']))
            except Exception as e:
                print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)


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

14.    Elija Archivo, Guardar, a continuación, elija Implementar.

15.    Elija la pestaña Configuración, luego Configuración general y, a continuación, Editar.

16.    En Tiempo de espera, rellene los siguientes campos:
En min, seleccione 0.
En seg, seleccione 10.

17.    Seleccione Guardar.

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

Para crear una función de Lambda para detener las instancias de base de datos etiquetadas, consulte la sección anterior Crear una función de Lambda para iniciar las instancias de base de datos etiquetadas. Siga los mismos pasos, pero utilice un código diferente en el paso 12.

En el editor de Código fuente, borre el código de ejemplo e introduzca el siguiente:

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

def lambda_handler(event, context):

    #Stop DB instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance is not already stopped
        if (db['DBInstanceStatus'] == 'available'):
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for instance, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Stopping instance: {0}.".format(db['DBInstanceIdentifier']))
            except Exception as e:
                print ("Cannot stop instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)

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

Realizar pruebas de funcionamiento

Para las instancias de base de datos etiquetadas que estén en estado Detenida, complete los siguientes pasos para realizar las pruebas de funcionamiento:

1.    Abra la lista de Funciones de Lambda.

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

3.    Elija Acciones y, a continuación, Probar.

4.    En la pestaña Probar, en Nombre, introduzca el nombre del evento.

5.    Seleccione Guardar cambios y, a continuación, seleccione Probar.

Crear el horario

Puede crear reglas para configurar un horario. Por ejemplo, si el período de mantenimiento semanal para las instancias de base de datos etiquetadas es el domingo de 22:00 a 22:30, puede crear las siguientes reglas:

  • Iniciar automáticamente la instancia de base de datos 30 minutos antes de que comience el período de mantenimiento.
  • Detener automáticamente la instancia de base de datos 30 minutos después de que finalice el período de mantenimiento.

Para crear la regla que inicie automáticamente la instancia de base de datos 30 minutos antes del período de mantenimiento, siga estos pasos:

1.    Abra la lista de Funciones de Lambda.

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

3.    En Información general de la función, seleccione Agregar disparador.

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

5.    En Nombre de la regla, introduzca el nombre de la regla que desee crear.

6.    En Expresión de programación, añada una expresión cron para la programación automatizada (Ejemplo: cron(30 21 ? * SUN *)).

7.    Seleccione Añadir.

Siga las mismas instrucciones para crear otra regla para detener automáticamente la instancia de base de datos 30 minutos después del período de mantenimiento. Asegúrese de cambiar el nombre de la regla y la expresión cron de la programación automática en consecuencia (ejemplo: cron(00 23 ? * SUN *)).

Información relacionada

Implementar la detención y el inicio de instancias de base de datos en Amazon RDS

Detener una instancia de base de datos iniciada automáticamente con Amazon RDS

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

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año