Posts
Membuat Notifikasi CloudWatch Alarm lebih noticable dengan WhatsApp
Send CloudWatch alarm notifications to WhatsApp using Lambda and the Twilio SDK.
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.
Figure: Event flow
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 = "instance-cpu-above-60"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = 2
threshold = 60
alarm_description = "This metric monitors EC2 CPU utilization"
alarm_actions = [var.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 = var.instance_id
}
}
}
}
Selanjutnya kita bisa langsung membuat Lambda function. Pilih Python 3.8 sebagai runtime.
Figure: Twilio WhatsApp Lambda function
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: View the original Lambda code on Medium
Untuk step terakhir kita bisa coba langsung untuk on boarding setup Twilio Sandbox WhatsApp, untuk guide ini bisa follow:
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
Figure: Twilio Sandbox confirmation
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:
Figure: Triggered CloudWatch alarm
Figure: WhatsApp message
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.
Originally published on Medium.
Category: technology