Membuat Notifikasi CloudWatch Alarm lebih noticeable dengan WhatsApp
Pada platform Amazon Web Services ( AWS ) untuk monitoring dan alarm tools utama yang kita gunakan yaitu service CloudWatch, biasanya kita menggunakan e-mail notification sebagai endpoint untuk mengirim alert yang di trigger dari cloudwatch alarm.
Ketika kita hanya memanage jumlah resource yang kecil kita tidak terlalu terganggu dengan menggunakan e-mail notification sebagai endpoint. Pada kasus banyak resource yang dimonitor, notifikasi / alarm menjadi sulit untuk ter notice, yang mana bisa menyebabkan alarm tersebut terlewat / tidak ter notice.
Pada beberapa organisasi media komunikasi utama yang mereka gunakan yaitu WhatsApp baik dalam melakukan diskusi atau koordinasi untuk project. Maka dari itu biasanya message di WhatsApp menjadi more noticeable untuk case ini.
Untuk hal tersebut kita bisa hooking beberapa service yaitu cloudwatch sebagai event source kemudian di hook dengan lambda dan menggunakan Twilio WhatsApp SDK untuk mengirimkan alert via WhatsApp.

Pada artikel ini saya coba bagi ke beberapa bagian yaitu:
- Create CloudWatch Alarm
- Create Lambda Function and use python Twilio SDK
- Hooking Alarm dan Testing
Untuk bagian pertama yaitu cloudwatch alarm saya akan menggunakan cpu utilization sebagai parameter untuk trigger alarm. Berikut Terraform resource block untuk cloudwatch metric alarm yang saya gunakan:
resource "aws_cloudwatch_metric_alarm" "instance-cpu" {
alarm_name = format("instance-cpu-above-60")
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "2"
threshold = 60
alarm_description = "This metric monitors ec2 cpu utilization for instance instance-id"
alarm_actions = [sns-topic-arn]
insufficient_data_actions = []
metric_query {
id = "m1"
return_data = "true"
metric {
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "300"
stat = "Average"
unit = "Percent"
dimensions = {
InstanceId = instance-id
}
}
}
}
Selanjutnya kita bisa langsung membuat Lambda function. Pilih Python 3.8 sebagai runtime.

Untuk flow nya kita lakukan consume JSON yang diterima dari CloudWatch Alarm kemudian di loads lalu dilakukan templating, setelah itu kita gunakan Twilio python SDK untuk mengirimkan message ke user.
Ada beberapa format messages yang perlu di penuhi saat menggunakan Twilio SDK, yang pertama yaitu untuk authentication dengan Twilio API kita membutuhkan TWILIO_ACCOUNT_SID dan TWILIO_AUTH_TOKEN yang bisa ditambahkan di Lambda Environment Variables. Untuk Account SID dan Auth Token itu bisa di ambil dari Twilio Console.

Kali ini kita akan menggunakan Twilio Python SDK. Untuk dokumentasi Twilio Python SDK kita bisa mengikuti guide pada link dibawah:
Berikut Code yang digunakan untuk case ini:
Untuk step terakhir kita bisa coba langsung untuk on boarding setup Twilio Sandbox WhatsApp, untuk guide ini bisa follow:
https://www.twilio.com/console/sms/whatsapp/learn
Ketika anda masuk ke console learn akan ada beberapa step yang perlu di lakukan, yang pertama yaitu untuk join sandbox account:

Setelah anda join di sandbox akan ada reply dari Twilio Sandbox

Ketika alarm tersebut ter trigger maka akan menjalankan Lambda function yang sudah kita define sebelumnya, kemudian akan ada message dengan konten sesuai template yang sudah kita define sebelumnya:


Summary
Penggunaan WhatsApp sebagai destination untuk kirim alert menjadi salah satu opsi yang bisa digunakan tergantung dari preferred communication media untuk kirim alerting. Pada case ini kita menggunakan beberapa komponen yaitu CloudWatch Alarm , Lambda dan Twilio Programmable Message dan juga WhatsApp itu sendiri sebagai destination.
Tentunya masih ada beberapa improvement yang bisa dilakukan seperti dalam segi cost maupun ada kemungkinan contohnya banyaknya alarm ter trigger dalam satu waktu yang cukup banyak. Untuk hal ini kita bisa improve dengan menambahkan Composite Alarm di CloudWatch.