Бессерверная функция cloudwatch ведет журналы в elasticsearch - PullRequest
0 голосов
/ 28 мая 2020

Кто-нибудь когда-либо создавал бессерверную функцию, вывод которой CloudWatch регистрирует в ElasticSearch изначально? Интересно, есть ли способ настроить метод function в yml для вывода в уже существующий кластер ES.

Или есть способ подключить поток CloudWatch (через бессерверный) к лямбда-функции , который затем может отправить проанализированные журналы в ES.

1 Ответ

0 голосов
/ 04 июля 2020

Я добился этого, создав кластер ES с Serverless и экспортировав ARN. Эта же бессерверная служба также создала лямбда-выражение «синтаксического анализа», которое будет обрабатывать все выходные журналы Cloudwatch и передавать их в ES. Затем я обратился к службе, которая записывает в Cloudwatch, в данном случае в кластер ECS, и создал SubscriptionFilter, который записывает в эту лямбду, которая впоследствии записывает в ES. Вот часть бессерверного файла YML, который создает кластер ES. Затем SubscriptionFilter в ECS YML

ElasticSearchInstance:
  Type: AWS::Elasticsearch::Domain
  Properties:
    AdvancedOptions:
      rest.action.multi.allow_explicit_index: "true"
    CognitoOptions:
      Enabled: True
      IdentityPoolId:
        Ref: CognitoIdentityPool
      RoleArn:
        Fn::ImportValue: CognitoAccessRoleForAmazonESArn
      UserPoolId:
        Ref: CognitoUserPool
    DomainName: "name-of-my-es-cluster-${env:ENV}"
    EBSOptions:
      EBSEnabled: true
      VolumeType: gp2
      VolumeSize: 10
    ElasticsearchClusterConfig:
      InstanceType: t2.small.elasticsearch
      InstanceCount: 1
      DedicatedMasterEnabled: false
      ZoneAwarenessEnabled: false
    ElasticsearchVersion: 7.4
  ECSESParsingLamba:
  Type: AWS::Logs::SubscriptionFilter
  Properties:
    DestinationArn:
      Fn::ImportValue: !Sub "parsing-lambda-name-${Environment}"
    FilterPattern: "[message]"
    LogGroupName: !Ref LogGroupName
...