0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Lambdaのエラー率がしきい値を超えた時にslack通知する仕組みをCloudFormationで構築する

Posted at

はじめに

Lambdaが安定稼働しているかどうかをできるだけ労力をかけずにモニタリングしたい。
ということで、Lambdaのエラー発生率がしきい値を超えた時にslack通知する仕組みを構築してみた。

通知までの流れ

以下のような流れでSlackへの通知を行う

  1. CloudWatchアラーム
  2. SNS
  3. AWS Chatbot
  4. Slack

CloudFormation

Alarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: Alarm if Error occured more than expected.
      AlarmActions:
        - !Ref SlackNotificationTopic
      Metrics:
        - Expression: errors / invocations
          Id: errorrate
          ReturnData: true
        - Id: errors
          MetricStat:
            Metric: 
              Namespace: AWS/Lambda
              MetricName: Errors
              Dimensions:
              - Name: FunctionName
                Value: !ImportValue FunctionName
            Period: !Ref AlarmPeriod
            Stat: Sum
            Unit: Count
          ReturnData: false
        - Id: invocations
          MetricStat:
            Metric:
              Namespace: AWS/Lambda
              MetricName: Invocations
              Dimensions:
              - Name: FunctionName
                Value: !ImportValue FunctionName
            Period: !Ref AlarmPeriod
            Stat: Sum
            Unit: Count
          ReturnData: false
      ComparisonOperator: GreaterThanThreshold
      Threshold: !Ref AlarmThreShold
      EvaluationPeriods: !Ref AlarmEvaluationPeriods
      TreatMissingData: ignore

SlackNotificationTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: SlackNotificationTopic

ChannelSetting:
    Type: AWS::Chatbot::SlackChannelConfiguration
    Properties:
      ConfigurationName: ErrorNotification
      IamRoleArn: !GetAtt ChatbotIamRole.Arn
      LoggingLevel: ERROR
      SlackChannelId: !Ref SlackChannelId
      SlackWorkspaceId: !Ref SlackWorkspaceId
      SnsTopicArns: 
        - !Ref SlackNotificationTopic
  ChatbotIamRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: ErrorNotification-chatbot-role
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: chatbot.amazonaws.com
            Action: sts:AssumeRole
      Policies:
        - PolicyName: ErrorNotification-chatbot-policy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - cloudwatch:Describe*
                  - cloudwatch:Get*
                  - cloudwatch:List*
                Resource:
                  - "*"

軽く説明

CloudWatch

エラーレートという指標はデフォルトで用意されていないので、こちら側で Error / Invocation のメトリクスを設定する必要がある。
Metrics:の項目の中で①一定期間内のinvocationの合計②一定期間内のerrorの合計 というメトリクスを生成し、② / ①の数式を実行した値をアラームの指標とする。Period:がデータポイントの詳細度であり、例えば「60」に設定すると60秒ごとにデータが評価されるようになる。
その他の項目については公式ガイドを見るのがわかりやすい。

AWS Chatbot

※ AWS ChatbotでSlackのクライアント登録はコンソールで行う必要があるため注意。
チャネル設定の作成のみCloudFormationで行う。

おわりに

もっと簡単な構成があれば教えてください〜〜〜〜

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?