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.

Enviar notificación por correo electrónico en caso de fallo en la actualización del conjunto de datos mediante Boto3.

Tengo una función Lambda con lo siguiente:

sts_client = boto3.client('sts')
account = sts_client.get_caller_identity()['Account']
qs_client = boto3.client('quicksight')

qs_client.create_ingestion(
    DataSetId=full_data_set_id,
    IngestionId=ingestion_id,
    AwsAccountId=account,
    IngestionType=data_set['ingestionType'])

Esto funciona bien. Sin embargo, la interfaz de usuario de Quicksight tiene esto:

quicksight UI refresh options

¿Hay alguna manera de usar boto3 para enviar un correo electrónico automático si falla la actualización del conjunto de datos? ¿La única manera de hacer esto es crear otra función Lambda para supervisar cada ingestión que se crea?

Para agregar al contexto de la pregunta, el caso de uso es que estoy creando todos los recursos de Quicksight de mi equipo a través de CDK y el SDK, por lo que establecer los horarios manualmente y usar la interfaz de usuario está fuera de la imagen, hay literalmente cientos de conjuntos de datos.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible configurar una notificación cuando falla la actualización de un conjunto de datos de Quicksight usando boto3. Para hacer esto, sería necesario crear una regla de evento de Amazon CloudWatch que active una función Lambda cuando la actualización falla. La función Lambda debe enviar una notificación por correo electrónico usando Amazon SES.

    Estos son los pasos para configurar esto:

    1. Crear una regla de evento de CloudWatch que se active en el evento DataSetRefreshFailed de Quicksight. Esto se puede hacer usando el cliente cloudwatch_events de boto3:
      cloudwatch_events = boto3.client('events')
      
      cloudwatch_events.put_rule(
         Name='quicksight_refresh_failed',
         EventPattern=json.dumps({
             'source': ['aws.quicksight'],
             'detail-type': ['QuickSight DataSet Refresh Failed']
         })
      )
      
    2. Crear una función Lambda que envíe un correo electrónico usando Amazon SES. Se puede usar el cliente ses de boto3 para enviar el correo electrónico:
      ses = boto3.client('ses')
      
      def send_email(subject, body):
         response = ses.send_email(
             Source='sender@example.com',
             Destination={
                 'ToAddresses': [
                     'recipient@example.com',
                 ]
             },
             Message={
                 'Subject': {
                     'Data': subject
                 },
                 'Body': {
                     'Text': {
                         'Data': body
                     }
                 }
             }
         )
      
         return response
      
    3. Configurar la función Lambda para que sea activada por la regla de evento de CloudWatch. Esto se puede hacer usando el método add_permission del cliente lambda:
      lambda_client = boto3.client('lambda')
      
      lambda_client.add_permission(
         FunctionName='quicksight_refresh_notification',
         StatementId='quicksight_refresh_failed_permission',
         Action='lambda:InvokeFunction',
         Principal='events.amazonaws.com',
         SourceArn=<arn de="" la="" regla="" de="" evento="" de="" cloudwatch="">
      )
      
    4. Modificar la función Lambda existente que crea la ingestión de Quicksight para incluir el parámetro IngestionErrorCallback. Este parámetro debe establecerse en el ARN de la función Lambda que envía la notificación por correo electrónico:
      ingestion_error_callback_arn = 'arn:aws:lambda:us-east-1:111111111111:function:quicksight_refresh_notification'
      
      qs_client.create_ingestion(
         DataSetId=full_data_set_id,
         IngestionId=ingestion_id,
         AwsAccountId=account,
         IngestionType=data_set['ingestionType'],
         IngestionErrorCallback=ingestion_error_callback_arn
      )
      

    Con estos pasos, cada vez que falle la actualización de un conjunto de datos de Quicksight, la regla de evento de CloudWatch activará la función Lambda que enviará una notificación por correo electrónico usando Amazon SES.

Comments are closed.