Back to posts

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.

CloudWatch alarm event flow to the WhatsApp notification
CloudWatch alarm event flow to the WhatsApp notification

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.

Twilio WhatsApp Lambda function configuration
Twilio WhatsApp Lambda function configuration

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.

Twilio account settings for the WhatsApp integration
Twilio account settings for the WhatsApp integration

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:

Twilio WhatsApp Sandbox guide

Ketika anda masuk ke console learn akan ada beberapa step yang perlu di lakukan, yang pertama yaitu untuk join sandbox account:

Joining the Twilio WhatsApp Sandbox
Joining the Twilio WhatsApp Sandbox

Setelah anda join di sandbox akan ada reply dari Twilio Sandbox

Confirmation message from the Twilio WhatsApp Sandbox
Confirmation message from the Twilio WhatsApp 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:

CloudWatch alarm notification event details
CloudWatch alarm notification event details

Figure: Triggered CloudWatch alarm

CloudWatch alarm alert received in WhatsApp
CloudWatch alarm alert received in WhatsApp

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.