Panduan ini membahas cara mengirim notifikasi alarm Cloudwatch ke Slack. Amazon CloudWatch adalah layanan monitoring untuk sumber daya AWS Cloud dan aplikasi yang Anda jalankan di AWS.
Anda dapat menggunakan Amazon CloudWatch untuk mengumpulkan dan melacak metrik, mengumpulkan dan memantau file log, dan menetapkan alarm pada kondisi tertentu.
Create SNS Topic #
aws sns create-topic --name cloudwatch-slack
Slack Channel Create #
- Login ke Workspace Slack
- Kunjungi
https://api.slack.com/apps/
untuk membuat app - Pilih
Create New App
- Pilih from scratch
- Beri nama app dan pilih workspace
- Pada bagian Features klik
Incoming Webhooks
lalu aktifkan - Klik
Add New Webhook to Workspace
dan pilih channel lalu klikAllow
- Simpan Webhook URL untuk digunakan pada Lambda function

Create Lambda function #
- Login ke Console AWS lalu pilih
Lambda > Functions > Create function
- Pilih Author from scratch
- Beri nama fungsi
- Pilih Runtime Python 3.9

- Selanjutnya edit
lambda_function.py
pada bagian Code source
import urllib3
import json
http = urllib3.PoolManager()
def lambda_handler(event, context):
url = ""
msg = {
"channel": "",
"username": "WEBHOOK_USERNAME",
"text": event['Records'][0]['Sns']['Message'],
"icon_emoji" : ""
}
encoded_msg = json.dumps(msg).encode('utf-8')
resp = http.request('POST',url, body=encoded_msg)
print({
"message": event['Records'][0]['Sns']['Message'],
"status_code": resp.status,
"response": resp.data
})
url
diisi dengan Webhook URL, sedangkanchannel
diisi dengan nama channel yang ada di slack- Klik
Deploy
- Klik
Test
danConfigure test event

- Klik
Test
kembali dan apabila Status Succeeded maka pesan akan terkirim ke channel. - Selanjutnya pada Function overview klik
+ Add Trigger

- Pilih SNS dan tentukan SNS topic sesuai yang telah dibuat sebelumnya
- Test message melalui SNS
aws sns publish \
--topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic" \
--message file://message.txt
Create CloudWatch Alarm #
- Tentukan instance yang akan ditambahkan ke CloudWatch
- Selanjutnya pilih
Actions > Monitor and Troubleshoot > Manage CloudWatch alarms

- Pada Alarm notification pilih SNS Topic
- Bagian Alarm thresholds dapat Anda sesuaikan mulai Type, Percent, dan Period

- Klik
Create
- Untuk pengaturan lebih lanjut dapat melalui
CloudWatch > Alarms
- Pengetesan alarm bisa dengan command
stress
apabila metric yang dipilih adalahCPUUtilization
apt -y install stress
stress --cpu 2 --timeout 300s

AWS Chatbot #
Langkah ini opsional, apabila Anda masih ingin menggunakan lambda maka langkah ini dapat dilewati, namun jika Anda kurang menyukai output alarm dari lambda maka AWS Chatbot dapat menjadi alternatif dari lambda
- Pilih AWS Chatbot > Configure a chat client
- Pada Chat client pilih Slack
- Klik
Configure client

- Halaman akan otomatis rediect ke URL slack untuk proses request permission. Pilih
Allow
untuk memberikan permission. - Klik
Configure new channel
- Beri nama channel
- Bagian Slack channel, tentukan channel yang sudah dibuat sebelumnya di slack
- Bagian Permissions, buat Channel role

- Pada Notifications, tentukan region SNS dan SNS topic
- Klik
Configure
- In Alarm

- OK
