AWS CloudWatch LogGroup никогда не отправляет журналы в Lambda, несмотря на SubscriptionFilter - PullRequest
0 голосов
/ 30 января 2019

Цель: настроить стек Cloudformation, который принимает имя группы журналов в качестве параметра, и всякий раз, когда новые журналы появляются в этой группе журналов, они отправляются в функцию Lambda для обработки, а затем в Kinesis Firehose, который затем отправляетфайлы журналов в корзину с именем foobarbaz.

Проблема: никогда не вызывается функция Lambda (журналы Lambda CloudWatch показывают, что она никогда не запускается даже после появления новых данных в группе журналов).Вызов должен произойти автоматически благодаря настроенному мной ресурсу SubscriptionFilter.Я не вижу никаких ошибок.Что бы ни происходило, кажется, молча терпит неудачу.

Примечание. Для FilterPattern в SubscriptionFilter задана пустая строка.Я собираюсь отправить ВСЕ журналы из группы журналов в функцию Lambda.

Вот мой шаблон Cloudformation:

Parameters:
  LogGroupName:
    Type: String
    Description: The name of the log group who's logs we want to send to send to Lambda->Kinesis->S3

  AuditTrailPrefix:
    Type: String
    Description: Log files will be sent to the Logging account S3 bucket with this prefix in the bucket path

Resources:  
  AuditTrailFunctionPermissions:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref AuditTrailFunction
      Principal: logs.amazonaws.com
      SourceAccount: !Ref AWS::AccountId

  AuditTrailFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt AuditTrailFunctionRole.Arn
      Code:
        ZipFile: >
          // do some stuff with the data and PUT it to KinesisFirehose
          // removed for brevity
      Runtime: nodejs8.10
      Timeout: 30

  AuditTrailFunctionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          Action: sts:AssumeRole
          Effect: Allow
          Principal:
            Service: lambda.amazonaws.com
        Version: '2012-10-17'
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyDocument:
            Statement:
              - Action:
                  - firehose:PutRecord
                  - firehose:PutRecordBatch
                Effect: Allow
                Resource: !Sub arn:aws:firehose:${AWS::Region}:${AWS::AccountId}:deliverystream/${AuditTrailDeliveryStream}
            Version: '2012-10-17'
          PolicyName: root

  AuditTrailSubscription:
    Type: AWS::Logs::SubscriptionFilter
    DependsOn: AuditTrailFunctionPermissions
    Properties:
      DestinationArn: !GetAtt AuditTrailFunction.Arn
      FilterPattern: ''
      LogGroupName: !Ref LogGroupName

  AuditTrailDeliveryStream:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamType: DirectPut
      S3DestinationConfiguration:
        BucketARN: arn:aws:s3:::foobarbaz
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 50
        CompressionFormat: GZIP
        Prefix: !Ref AuditTrailPrefix
        RoleARN: !GetAtt DeliveryRole.Arn

  DeliveryRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          Effect: Allow
          Principal:
            Service: firehose.amazonaws.com
          Action: sts:AssumeRole

      Policies:
        - PolicyName: firehose_delivery_policy
          PolicyDocument:
            Statement:
              Effect: Allow
              Action:
                - s3:AbortMultipartUpload
                - s3:GetBucketLocation
                - s3:GetObject
                - s3:ListBucket
                - s3:ListBucketMultipartUploads
                - s3:PutObject
              Resource:
                - arn:aws:s3:::foobarbaz
                - arn:aws:s3:::foobarbaz/${AuditTrailPrefix}*

1 Ответ

0 голосов
/ 30 января 2019

Я не вижу ничего плохого, но вот несколько советов по устранению неполадок:

  1. Функция Lambda будет вызываться только тогда, когда новые журналы загружаются в вашу группу журналов.Он не будет вызываться для данных, которые уже были в группе журналов, до того, как вы настроите фильтр подписки.

  2. Если № 1 не так (т.е. вы загружаете новые данные), перейдите в CloudWatch -> Метрики и найдите имя группы журналов.Вы должны найти 4 метрики, относящиеся к вашему фильтру подписки: ForwardedBytes, ForwardedLogEvents, DeliveryErrors, DeliveryThrottling.См. this для описания.Если метрики DeliveryErrors или DeliveryThrottling> 0, то есть проблема.

  3. Наиболее вероятная проблема с DeliveryErrors - проблема с разрешениями.Я не вижу в этом ничего плохого, но для этого я бы сначала дважды проверил.

  4. Вы можете отладить настройку подписки вручную с помощью AWS CLI.(См. this .) Это может помочь вам выяснить, какая часть установки может вызывать проблему.

...