¿Cómo puedo usar una función de Lambda para detener una instancia de Amazon RDS durante más de siete días?
Quiero usar AWS Lambda para detener un Amazon Relational Database Service (Amazon RDS) durante más de siete días.
Descripción corta
De forma predeterminada, se puede detener una instancia de la base de datos de Amazon RDS durante un máximo de siete días por vez. 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, puedes usar Step Functions y automatizar el flujo de trabajo sin perder un periodo de mantenimiento.
Nota: Para obtener una solución alternativa, consulta ¿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
Crea 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. Abre la consola de IAM.
2. En el panel de navegación, elige Políticas.
3. Selecciona Crear política.
4. Elige la pestaña JSON.
5. Para conceder los permisos de IAM necesarios, introduce 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. Elige Siguiente: Etiquetas.
7. (Opcional) Para agregar una etiqueta, elige Agregar etiqueta y, a continuación, introduce los valores adecuados en los campos Clave y Valor: opcional.
8. Elige Siguiente: Revisar.
9. En la página Revisar política, en Nombre, introduce el nombre de tu política. Revisa la sección Resumen para ver los permisos que otorga tu política.
10. Elige Crear política.
Para obtener más información, consulta Creación de políticas mediante el editor JSON.
Crea un rol de IAM y, a continuación, adjunta las políticas necesarias
1. Abre la consola de IAM.
2. En el panel de navegación, selecciona Roles.
3. Elige Crear rol.
4. En Seleccionar el tipo de entidad de confianza, selecciona Servicio de AWS.
5. En Elegir un servicio para ver los casos de uso, selecciona Lambda.
6. Elige Siguiente: Permisos.
7. En Filtro: políticas, introduce el nombre de la política que has creado en la sección anterior. Cuando aparezca, selecciona la política. En Filtro: políticas, introduce AWSLambdaBasicExecutionRole. Cuando aparezca, selecciona la política administrada AWSLambdaBasicExecutionRole.
8. Elige Siguiente: Etiquetas.
9. (Opcional) Para agregar una etiqueta, introduce los valores adecuados en los campos Clave y Valor: opcional.
10. Elige Siguiente: Revisar.
11. En la página Crear rol, en Nombre de rol, introduce el nombre del rol que estás creando.
12. Elige Crear rol.
Para obtener más información, consulta Creación de un rol para un servicio de AWS (consola).
Agregar etiquetas a las instancias de la base de datos
1. Abre la consola de Amazon Aurora y RDS.
2. En el panel de navegación, selecciona Bases de datos.
3. Elige la instancia de base de datos que quieres iniciar y detener automáticamente.
4. En la sección de detalles, desplázate hacia abajo hasta la sección Etiquetas.
5. En la pestaña Etiquetas, selecciona Agregar. En Clave de etiqueta, escribe autostart. En Valor, introduce yes. Selecciona Agregar para guardar los cambios.
6. Vuelve a seleccionar Agregar. En Clave de etiqueta, escribe autostop. En Valor, introduce yes. Selecciona Agregar para guardar los cambios.
Para obtener más información, consulta Agregar, publicar y eliminar etiquetas.
Crear una función de Lambda para iniciar las instancias de base de datos etiquetadas
1. Abre la consola de Lambda.
2. En el panel de navegación, selecciona Funciones.
3. Elige Crear una función.
4. Elige Crear desde cero.
5. En Nombre de la función, introduce el nombre de la función.
6. En Versión ejecutable, selecciona Python 3.7.
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 que has creado.
11. Elige Crear una 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 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. Elige Archivo, Guardar, a continuación, elige Desplegar.
15. Elige la pestaña Configuración, luego Configuración general y, a continuación, Editar.
16. En Tiempo de espera, rellena los siguientes campos:
En min, selecciona 0.
En seg, selecciona 10.
17. Selecciona 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, consulta la sección anterior Crear una función de Lambda para iniciar las instancias de base de datos etiquetadas. Sigue los mismos pasos, pero utiliza un código diferente en el paso 12.
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): #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, completa los siguientes pasos para realizar las pruebas de funcionamiento:
1. Abre la lista de Funciones de Lambda.
2. Elige la función que has creado para iniciar las instancias de base de datos.
3. Elige Acciones y, a continuación, Probar.
4. En la pestaña Probar, en Nombre, introduce el nombre del evento.
5. Selecciona Guardar cambios y, a continuación, selecciona Probar.
Crear la programación
Puedes crear reglas para configurar una programación. Por ejemplo, si el periodo de mantenimiento semanal para las instancias de base de datos etiquetadas es el domingo de 22:00 a 22:30, puedes crear las siguientes reglas:
- Iniciar automáticamente la instancia de base de datos 30 minutos antes de que comience el periodo de mantenimiento.
- Detener automáticamente la instancia de base de datos 30 minutos después de que finalice el periodo de mantenimiento.
Para crear la regla que inicie automáticamente la instancia de base de datos 30 minutos antes del periodo de mantenimiento, sigue estos pasos:
1. Abre la lista de Funciones de Lambda.
2. Elige la función que has creado para iniciar las instancias de base de datos.
3. En Información general de la función, selecciona Agregar disparador.
4. Selecciona EventBridge (Eventos de CloudWatch) y, a continuación, selecciona Crear una regla nueva.
5. En Nombre de la regla, introduce el nombre de la regla que desees crear.
6. En Expresión de programación, agrega una expresión cron para la programación automatizada (Ejemplo: cron(30 21 ? * SUN *)).
7. Selecciona Agregar.
Sigue las mismas instrucciones para crear otra regla para detener automáticamente la instancia de base de datos 30 minutos después del periodo de mantenimiento. Asegúrate 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
Desplegar 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?
- Temas
- Database
- Etiquetas
- Amazon Relational Database Service
- Idioma
- Español

Contenido relevante
preguntada hace 9 meses
preguntada hace 9 meses
preguntada hace 9 meses
- Respuesta aceptada
preguntada hace un año
preguntada hace 2 años
OFICIAL DE AWSActualizada hace 9 meses