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.

Pasando una métrica personalizada que ya está en CloudWatch a Lambda como un objeto.

Ya tengo los datos de CloudWatch publicados en mi panel de control:
Carpeta de CloudWatch

Estoy tratando de obtener estos datos de métricas personalizadas de CloudWatch en una función lambda.
Puntos específicos de la métrica personalizada de CloudWatch que quiero pasar a lambda

¿Hay alguna forma sencilla de obtener estos datos en Lambda? Ya he intentado establecer eventos en los servicios de CloudWatch y no veo ninguna forma de avanzar con ellos (tal vez me esté perdiendo algo). Parece que esto se podría lograr con Boto3, pero eso parece más bien una solución alternativa, ya que los datos ya están en CloudWatch y solo necesito obtenerlos de alguna manera en lambda.

¡Gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma sencilla de obtener datos de métricas personalizadas de CloudWatch en una función de Lambda. Puede utilizar Filtros de Métricas de CloudWatch para filtrar los datos del registro y enviarlos a Lambda. Aquí están los pasos:

    1. Crea un Grupo de Registros de CloudWatch y un Flujo de Registros para tus datos de métricas personalizadas.
    2. Crea un Filtro de Métricas que coincida con tus datos de métricas personalizadas en el Grupo de Registros.
    3. Configura el Filtro de Métricas para enviar los datos a Lambda.
    4. Crea una función de Lambda que procese los datos de métricas.

    Aquí tienes un ejemplo de la plantilla de CloudFormation para crear un Filtro de Métricas y enviar los datos a una función de Lambda:

    Resources:
      MetricFilter:
        Type: AWS::Logs::MetricFilter
        Properties:
          LogGroupName: !Ref LogGroup
          FilterPattern: '[custom metric pattern]'
          MetricTransformations:
            - MetricValue: '1'
              MetricNamespace: 'custom/metric/namespace'
              MetricName: 'custom-metric-name'
            - MetricValue: '1'
              MetricNamespace: 'custom/metric/namespace2'
              MetricName: 'custom-metric-name2'
          RoleArn: !GetAtt LambdaExecutionRole.Arn
    
      LambdaExecutionRole:
        Type: AWS::IAM::Role
        Properties:
          AssumeRolePolicyDocument:
            Version: '2012-10-17'
            Statement:
            - Effect: Allow
              Principal:
                Service: lambda.amazonaws.com
              Action: sts:AssumeRole
          Path: /
          Policies:
            - PolicyName: 'cloudwatch-metrics'
              PolicyDocument:
                Version: '2012-10-17'
                Statement:
                  - Effect: Allow
                    Action:
                      - 'logs:CreateLogGroup'
                      - 'logs:CreateLogStream'
                      - 'logs:PutLogEvents'
                      - 'logs:DescribeLogGroups'
                      - 'logs:DescribeLogStreams'
                      - 'logs:GetLogEvents'
                      - 'cloudwatch:GetMetricData'
                      - 'cloudwatch:GetMetricStatistics'
                    Resource: '*'
                  - Effect: Allow
                    Action: 'lambda:InvokeFunction'
                    Resource: !GetAtt LambdaFunction.Arn
    
      LambdaFunction:
        Type: AWS::Lambda::Function
        Properties:
          Code:
            S3Bucket: !Ref S3Bucket
            S3Key: !Ref S3Key
          Description: 'Función de Lambda para datos de métricas personalizadas'
          FunctionName: 'funcion-metrica-personalizada'
          Handler: 'lambda_function.lambda_handler'
          MemorySize: 512
          Role: !GetAtt LambdaExecutionRole.Arn
          Runtime: python3.8
          Timeout: 60
    

    En este ejemplo, el Filtro de Métricas está configurado para que coincida con el patrón de datos de métricas personalizadas y lo transforma en métricas de CloudWatch. Las métricas se envían a la función de Lambda que maneja los datos de métricas. El Rol de Ejecución de Lambda tiene los permisos necesarios para leer datos de registro de CloudWatch e invocar la función de Lambda.

    Para usar esta plantilla de CloudFormation, deberás definir tu patrón de datos de métricas personalizadas, espacio de nombres de métricas y nombres de métricas. También tendrás que empaquetar el código de tu función de Lambda en un archivo ZIP y cargarlo en un bucket de S3.

Comments are closed.