CloudWatch 알람 알림을 Slack으로 설정합니다. SAM의 구현 버전

이전 기사의 CloudWatch 알람 알림을 Slack으로 설정 의 SAM(Serverless Application Model)로 구현한 판이 됩니다.
SAM을 사용하는 것으로 로컬 환경에서도 테스트 실시할 수 있는 점과 알람의 설정을 Git 관리할 수 있는 점이 장점이라고 생각합니다.

0. 환경


  • Docker
  • Python3.7
  • aws-cli
  • aws-sam-cli

  • aws configure에서 credential이 설정되어 있다고 가정합니다.
    htps : // / cs. 아 ws. 아마존. 코 m/그럼_jp/cぃ/ぁてst/うせrぐいで/cぃーちゃーpこんふぃぐれ. HTML # c ぃ 쿠이 CK

    1. 구현



    샘플은 아래에 만들었습니다.
    htps : // 기주 b. 코 m / hf 7777 히 / 아 ws-c 우도 tch 아 rm와 s ck

    디렉토리 구성은 다음과 같습니다.
    .
    ├── README.md
    ├── event.json                  <-- SNS event. Lamdaのテストイベントに使うものと同等です。
    ├── src
    │   ├── __init__.py
    │   ├── app.py                  <-- Lambdaのコードはここに書きます。
    └── template.yaml               <-- SAM Template
    

    소스는 Lambda의 ``설계도 사용''의 ``cloudwatch-alarm-to-slack-python''의 샘플 코드에서 slsck 이모티콘을 사용하여 메시지를 반환하도록 수정되었습니다.
    app.py의 내용을 좋게 개조해 주시면 OK입니다. 물론 이대로도 작동합니다.

    template.yaml 기본 설정



    테스트를 실행하기 전에 환경에 맞게 다음을 설정하십시오 (yaml에서 Cloudwatch 알람 설정은 나중에 설명합니다).
    SLACK_CHANNEL: cloudwatch-alarm   ←通知したいSlackのチャンネル
    ENCRYPTED_INCOMING_URL: hogehoge  ←暗号化したIncoming Webhook URL
    OK: ":ok:"                        ←OKアラートのSlack絵文字
    ALARM: ":ng:"                     ←NGアラートのSlack絵文字
    INSUFFICIENT_DATA: ":question:"   ←不足アラートのSlack絵文字
    EXCEPTION: ":rotating_light:"     ←コードの例外時に通知するSlack絵文字
    

    우선, 통지처의 Slack의 준비와 「Incoming Webhooks」의 「Webhook URL」의 암호화를 실시합니다.
    이전에 게시한 CloudWatch 알람 알림을 Slack으로 설정슬랙 준비IAM KMS로 암호화 키로 WebhookURL 암호화 를 참고해 주십시오.
    돈을 쓰고 싶지 않으므로 암호화하지 않으려면 암호 키 작성을 건너 뛰고 src/app.py l.51을 다음과 같이 변경하고 ENCRYPTED_INCOMING_URL에 https://이하의 일반 텍스트를 설정하십시오. 제발.
    token = boto3.client('kms').decrypt(CiphertextBlob=b64decode(os.getenv("ENCRYPTED_INCOMING_URL")))['Plaintext'].decode('utf-8')
    


      token = os.getenv("ENCRYPTED_INCOMING_URL")
    

    2. Lambda 코드 테스트



    다음 명령을 실행하여 lambci/lambda:python3.7 이미지의 Docker를 시작하고 코드를 실행합니다.
    $ sam local invoke -e event.json
    

    이벤트


    'Message': '{"AlarmName":"[アラーム名]","AlarmDescription":null,"AWSAccountId":"0000000","NewStateValue":"ALARM","NewStateReason":"Threshold Crossed: 1 datapoint [0.4667407613208132 (16/05/19 13:19:00)] was greater than or equal to the threshold (0.0).",
    

    NewStateValue의 값은 경고 상태에 따라 다음과 같이 변경됩니다.
    * 경보 시 : ALARM
    * OK시 : OK
    * 부족 시 : INSUFFICIENT_DATA

    이것들을 event.json의 Message로 하면 각각의 경고 상태의 테스트가 가능합니다.

    실제로 해 보았습니다. (OK, ALARM, INSUFFICIENT_DATA, EXCEPTION 순서입니다)

    이런 식으로 Slack에게 통보됩니다.

    여기까지 로컬에서 Lambda의 테스트 실행을 할 수 있었으므로, src/app.py의 내용을 그대로, LambdaFunction에 복사해, Lambda를 설정하면 완성으로 하는 것도 가능합니다.

    3. yaml로 알람 설정



    여기에서 메인입니다.

    각 설정 항목에 대한 자세한 내용은 공식을 확인하십시오.
    htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아 WSC ぉ う ふぉ r 마치 온 / ㅁ st / 우세 r 굿이 / 아 wsp 로페 치에 s-cw - rm. HTML

    샘플로서 ApiGateway의 알람을 설정해 보았습니다.
      ApiCountAlarm:
        Type: AWS::CloudWatch::Alarmproperties-cw-alarm.html
        Properties:
          Namespace: AWS/Api­Gateway
          MetricName: Count
          Dimensions:
            - Name: ApiName
              Value: SampleApi
          Period: 300
          Statistic: Average
          AlarmName: Sample
          AlarmDescription: Sample
          ComparisonOperator: GreaterThanOrEqualToThreshold
          Threshold: 0
          EvaluationPeriods: 1
          TreatMissingData: notBreaching
          OKActions:
            - !Ref CloudwatchAlarmTopic
          AlarmActions:
            - !Ref CloudwatchAlarmTopic
          InsufficientDataActions:
            - !Ref CloudwatchAlarmTopic
    

    설정은 다음과 같이 반영됩니다.


    적절한 설정을 원하는 알람이 있으면 temptete.yaml에 추가하십시오.

    덧붙여서, AWS 콘솔에서 알람을 설정한 후, 알람의 이력을 보면 AWS CloudFormation 템플릿의 설정 내용을 JSON에서 확인할 수 있으므로 yaml 기재의 참고가 됩니다.
    참고 : CloudWatch 재시작 작업을 CloudFormation에서 생성해 보았습니다.

    4. 배포


    $ aws s3 mb s3://BUCKET_NAME
    $ sam package \
        --output-template-file packaged.yaml \
        --s3-bucket REPLACE_THIS_WITH_YOUR_S3_BUCKET_NAME
    $ sam deploy \
        --template-file packaged.yaml \
        --stack-name cloudwatch-alarm-to-slack \
        --capabilities CAPABILITY_IAM
    

    이제 CloudFormation이 시작되고 Lambda, Cloudwatch, SNS가 생성되었다고 생각합니다.

    만약을 위해, Lambda의 테스트를 해 두면 좋다고 생각합니다.
    테스트 이벤트는 로컬 테스트에 사용한 것으로 OK입니다.

    Slack URL을 암호화한 경우 KMS의 주요 사용자에게 CloudFormation에서 만든 역할을 허용합니다.

    이상입니다.

    좋은 웹페이지 즐겨찾기