es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo añadir la fecha y hora en boto3

Estoy tratando de agregar la fecha y la hora al nombre de la instantánea de AWS RDS, pero no puedo hacer que funcione. Así es como intenté especificarlo:

import json
import boto3
import botocore
import logging
import os

from datetime import datetime
from operator import itemgetter

rds = boto3.client('rds', region_name='eu-west-2')

# Establecer variables iniciales

source_db_instance = "source-database"
target_db_instance = "target-db"
location = "eu-west-2"

logger = logging.getLogger(name=name)
env_level = os.environ.get("LOG_LEVEL")
log_level = logging.INFO if not env_level else env_level
logger.setLevel(log_level)
waiter = rds.get_waiter('db_snapshot_available')

rds = boto3.client('rds', region_name='eu-west-2')

def lambda_handler(event, context):

# Obtener la fecha y hora actual

now = datetime.now()

# Crear variables de fecha/hora reformateadas

current_date = now.strftime("%d%m%y")

# Crear un nombre de instantánea combinando la fecha, la hora y el nombre de la base de datos

from_snapshot_name = ("my-" + source_db_instance + "-" + "refresh" + "-" + current_date)

try:
    print("Tratando de eliminar la instantánea de origen si existe")
    del_response = rds.delete_db_snapshot(
    DBSnapshotIdentifier=(from_snapshot_name)
    )
except:
    print("")

try:
    print("Tomando una instantánea")
    response = rds.create_db_snapshot(
    DBSnapshotIdentifier=(from_snapshot_name),
    DBInstanceIdentifier=(source_db_instance)
    )
except:
    print("")

Después de ejecutar lo anterior en la función lambda, la instantánea se crea pero no incluye la fecha y la hora al final.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece haber algunos problemas al agregar la fecha y la hora en el nombre del punto de restauración de la RDS. El código actual utiliza la variable current_date, que ha sido reformateada utilizando la función strftime(). Esta fecha/hora reformateada se utiliza luego para crear el nombre del punto de restauración combinándolo con otras variables.

    Sin embargo, parece que este nombre de punto de restauración no se está utilizando en las llamadas a la API para crear o eliminar el punto de restauración. En su lugar, se está utilizando la variable from_snapshot_name, que se crea utilizando algunos valores codificados y el nombre de source_db_instance.

    Para solucionar este problema, puedes reemplazar la variable from_snapshot_name con la variable snapshot_name que utiliza la fecha/hora reformateada. Puedes modificar las llamadas a la API create_db_snapshot() y delete_db_snapshot() para utilizar la variable snapshot_name en lugar de from_snapshot_name.

    Aquí está el código modificado:

    import json
    import boto3
    import botocore
    import logging
    import os
    
    from datetime import datetime
    from operator import itemgetter
    
    rds = boto3.client('rds', region_name='eu-west-2')
    
    # establecer variables iniciales
    source_db_instance="source-database"
    target_db_instance="target-db"
    location="eu-west-2"
    
    logger = logging.getLogger(name=__name__)
    env_level = os.environ.get("LOG_LEVEL")
    log_level = logging.INFO if not env_level else env_level
    logger.setLevel(log_level)
    waiter = rds.get_waiter('db_snapshot_available')
    
    rds = boto3.client('rds', region_name='eu-west-2')
    
    def lambda_handler(event, context):
    
        # Obtener la fecha y hora actual
        now = datetime.now()
    
        # crear una variable de fecha/hora reformateada
        current_date = now.strftime("%d%m%y")
    
        # crear un nombre de punto de restauración combinando la fecha/hora y el nombre de la base de datos
        snapshot_name=("mi-" + source_db_instance + "-refresh-" + current_date)
    
        try:
            print("Intentando eliminar el punto de restauración fuente si existe")
            del_response = rds.delete_db_snapshot(
                DBSnapshotIdentifier=snapshot_name
            )
        except:
            print("")
    
        try:
            print("Haciendo un punto de restauración")
            response = rds.create_db_snapshot(
                DBSnapshotIdentifier=snapshot_name,
                DBInstanceIdentifier=source_db_instance
            )
        except:
            print("")
    

    Con estas modificaciones, el nombre del punto de restauración ahora debería incluir la fecha y la hora al final.

Comments are closed.