CloudWatch 알람 알림을 Slack으로 설정합니다. SAM의 구현 버전
9719 단어 Python3samCloudWatch슬랙AWS
SAM을 사용하는 것으로 로컬 환경에서도 테스트 실시할 수 있는 점과 알람의 설정을 Git 관리할 수 있는 점이 장점이라고 생각합니다.
0. 환경
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/ApiGateway
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에서 만든 역할을 허용합니다.
이상입니다.
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정합니다. SAM의 구현 버전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hf7777hi/items/85595f4582823a198c34
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
.
├── README.md
├── event.json <-- SNS event. Lamdaのテストイベントに使うものと同等です。
├── src
│ ├── __init__.py
│ ├── app.py <-- Lambdaのコードはここに書きます。
└── template.yaml <-- SAM Template
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絵文字
token = boto3.client('kms').decrypt(CiphertextBlob=b64decode(os.getenv("ENCRYPTED_INCOMING_URL")))['Plaintext'].decode('utf-8')
token = os.getenv("ENCRYPTED_INCOMING_URL")
다음 명령을 실행하여 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/ApiGateway
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에서 만든 역할을 허용합니다.
이상입니다.
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정합니다. SAM의 구현 버전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hf7777hi/items/85595f4582823a198c34
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ApiCountAlarm:
Type: AWS::CloudWatch::Alarmproperties-cw-alarm.html
Properties:
Namespace: AWS/ApiGateway
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
$ 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에서 만든 역할을 허용합니다.
이상입니다.
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정합니다. SAM의 구현 버전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hf7777hi/items/85595f4582823a198c34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)