Membuat Notifikasi Slack untuk AWS CloudWatch

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 klik Allow
  • 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, sedangkan channel diisi dengan nama channel yang ada di slack
  • Klik Deploy
  • Klik Test dan Configure 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 adalah CPUUtilization
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