Penjadwalan Dinamis dengan AWS Lambda dan CloudWatch Rule dalam Bahasa Go

Sudah lama saya ingin membuat bot Slack yang bisa mengingatkan waktu solat. Alasannya sederhana, di tempat kerja, saya lebih sering lihat Slack dibanding hp, jadi lebih efektif notifikasi slack. Namun saya tidak bisa menemukan Slack application yang tinggal di-install saja. Atau salah kata kunci pencarian ya?

Karena sedang belajar bahasa Go, sekalian saja dijadikan latihan. Saya buat notifikasi solat dengan AWS Lambda dan CloudWatch Rule. Belum lama ini AWS Lambda mendukung bahasa Go. Kenapa dinamis? Karena waktu salat itu berdasarkan posisi matahari yang setiap hari bisa beda.

Desain Sistem

Sistemnya terdiri dari tiga komponen:

  1. Lambda yang dijadwalkan untuk berjalan setiap jam 1 pagi, saya beri nama SalatTimeJKTDaily, gunanya untuk menjadwalkan Lambda di hari tersebut.
  2. Lima CloudWatch Rule SalatTimeJKT<Fajr|Dhuhr|Asr|Maghrib|Isha> yang di-set jadwalnya setiap jam 1 pagi oleh SalatTimeJKTDaily.
  3. Lambda yang akan ditrigger oleh CloudWatch Rule di atas, saya beri nama SalatTimeJKT. Lambda ini yang akan mengirimkan notifikasi ke Slack.

Untuk notifikasi ke Slack, saya menggunakan Zapier webhook supaya simple (Eh jadi 4 komponen ya? Biarin lah, one-off error is one of the hardest things in computer science…).

Image for post
Image for post

Lambda SalatTimeJKTDaily akan melakukan hal-hal berikut:

  1. memanggil API jadwal solat untuk mendapatkan jadwal hari tersebut,
  2. mengeset CloudWatch Rule dengan info yang didapatkan dari langkah pertama
Image for post
Image for post

Hasilnya

Supaya manfaat, pengingatnya 10 menit sebelum adzan, biar ada waktu siap-siap atau menyelesaikan yang sedang dikerjakan. Kodenya (yang hancur, masih awal belajar Go, ga bersih) open source, bisa diakses di repo sini (maaf reponya juga masih berantakan).

Image for post
Image for post

Written by

Crazy dad. Data technology enthusiast. https://rendyistyping.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store