Mengirim notifikasi untuk peristiwa Google Cloud


Tutorial ini ditujukan bagi tim DevOps yang ingin mendapatkan notifikasi untuk peristiwa penting Google Cloud yang dikirim ke platform kolaborasi mereka, seperti Google Chat, Slack, atau Microsoft Teams. Dengan notifikasi, tim tidak perlu login ke konsol Google Cloud secara rutin untuk memeriksa pembaruan acara.

Sebagai contoh tutorial ini, notifikasi akan dibuat setelah Anda mengambil snapshot disk. Mengambil snapshot disk akan mencadangkan data dari persistent disk zona atau persistent disk regional. Anda dapat mengubah tutorial ini untuk mengirim notifikasi push secara otomatis ke sistem kolaborasi saat peristiwa penting Google Cloud lainnya terjadi, misalnya saat instance mesin virtual (VM) dibuat atau dihapus.

Kode untuk tutorial ini tersedia di repositori GitHub.

Tutorial ini ditujukan bagi engineer yang berspesialisasi dalam DevOps dan teknologi cloud. Anda dianggap sudah memahami Cloud Logging, Pub/Sub, dan Cloud Functions.

Laporan State of DevOps mengidentifikasi kemampuan yang mendorong performa pengiriman software. Tutorial ini akan membantu Anda dengan kemampuan berikut:

Arsitektur

Diagram berikut menunjukkan berbagai komponen yang Anda gunakan dalam tutorial ini.

Arsitektur sistem yang mengirim notifikasi setelah snapshot disk diambil.

Pertama, Anda perlu membuat persistent disk dan mengambil snapshot disk. Selanjutnya, Anda memfilter peristiwa log yang terkait dengan snapshot disk yang berhasil, dan mengekspor peristiwa tersebut dengan memublikasikannya ke topik Pub/Sub. A Cloud Function membaca pesan dari topik dan mengirim notifikasi push ke webhook. Untuk tutorial ini, webhook ini direpresentasikan oleh Cloud Function.

Tujuan

  • Siapkan Cloud Logging untuk mengekspor peristiwa yang dipilih ke Pub/Sub sehingga Cloud Functions dapat memakainya.
  • Men-deploy Cloud Function yang menggunakan peristiwa yang diekspor oleh Cloud Logging, yang kemudian memicu webhook.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Anda menggunakan Cloud Shell untuk menjalankan semua perintah dalam tutorial ini.

  4. Aktifkan Compute Engine, Cloud Logging, Cloud Functions, dan API Pub/Sub:

    gcloud services enable \
        compute.googleapis.com \
        logging.googleapis.com \
        cloudfunctions.googleapis.com \
        pubsub.googleapis.com
    

Mempersiapkan lingkungan Anda

  1. Di Cloud Shell, tetapkan gcloud default untuk region dan zona Compute Engine yang ingin Anda gunakan untuk tutorial:

    gcloud config set compute/region us-central1
    gcloud config set compute/zone us-central1-a
    

    Tutorial ini menggunakan region us-central1 dan zona us-central1-a. Anda dapat mengubah region dan zona sesuai kebutuhan. Untuk informasi selengkapnya, lihat Geografi dan wilayah.

  2. Tentukan variabel lingkungan yang Anda gunakan untuk tutorial ini:

    PROJECT=$(gcloud config get-value project)
    PUBSUB_TOPIC="gce-snapshots-events"
    DISK="my-disk-1"
    WEBHOOK_NAME="webhookEmulator"
    WEBHOOK_URL="https://$(gcloud config get-value compute/region)-$PROJECT.cloudfunctions.net/$WEBHOOK_NAME"
    

Membuat resource

Di bagian ini, Anda akan membuat resource Google Cloud berikut untuk tutorial ini:

  • Topik Pub/Sub
  • Sink Cloud Logging
  • Cloud Function

Membuat topik Pub/Sub

  • Di Cloud Shell, buat topik Pub/Sub untuk memublikasikan pesan peristiwa ke:

    gcloud pubsub topics create $PUBSUB_TOPIC
    

Membuat sink Cloud Logging ke Pub/Sub

Dengan Cloud Logging, Anda dapat menyimpan, menelusuri, dan menganalisis peristiwa dari Google Cloud. Anda dapat memfilter dan mengekspor log ini ke Cloud Storage, BigQuery, dan Pub/Subsingkat ini.

  1. Di Cloud Shell, ekspor log yang dihasilkan oleh snapshot disk ke Pub/Sub:

    gcloud logging sinks create gce-events-sink \
        pubsub.googleapis.com/projects/$PROJECT/topics/$PUBSUB_TOPIC \
        --log-filter='resource.type="gce_disk"
    jsonPayload.event_type="GCE_OPERATION_DONE"
    jsonPayload.event_subtype="compute.disks.createSnapshot"'
    

    Output-nya berisi alamat email akun layanan yang digunakan Cloud Logging saat memublikasikan log ke topik Pub/Sub yang Anda buat sebelumnya. Alamat email ini berbentuk SERVICE_ACCOUNT_NAME@gcp-sa-logging.iam.gserviceaccount.com.

  2. Salin alamat email akun layanan. Anda akan memerlukannya di bagian berikutnya.

Siapkan izin

  • Di Cloud Shell, berikan peran IAM Pub/Sub Publisher (roles/pubsub.publisher) kepada akun layanan agar dapat memublikasikan pesan ke topik Pub/Sub:

    gcloud beta pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \
        --member='serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS' \
        --role='roles/pubsub.publisher'
    

    Ganti SERVICE_ACCOUNT_EMAIL_ADDRESS dengan alamat email yang Anda salin di bagian sebelumnya.

Membuat webhook

Biasanya dalam produksi, Anda akan diberi tahu tentang peristiwa penting Google Cloud melalui notifikasi push yang dikirimkan ke platform kolaborasi. Sebagian besar platform ini menawarkan webhook. Dalam tutorial ini, Anda akan membuat Cloud Function untuk menyimulasikan webhook dari salah satu platform tersebut. Cloud Function ini, yang dipicu melalui HTTP, mencetak konten pesan yang diterima.

Secara default, semua pengguna atau layanan dapat memanggil Cloud Function HTTP. Anda dapat mengonfigurasikan Identity and Access Management (IAM) pada fungsi HTTP untuk membatasi perilaku ini, sehingga fungsi HTTP Anda hanya dapat dipanggil dengan memberikan kredensial autentikasi di permintaan.

  1. Di Cloud Shell, clone repositori Git yang berisi kode tutorial:

    git clone https://github.com/GoogleCloudPlatform/gcf-notification-forwarding
    
  2. Beralih ke direktori kerja:

    cd gcf-notification-forwarding/
    
  3. Deploy webhook webhookEmulator Cloud Function menggunakan pemicu HTTP:

    gcloud functions deploy $WEBHOOK_NAME \
        --runtime=nodejs8 \
        --trigger-http \
        --allow-unauthenticated \
        --source=webhook/
    

    Pemrosesan perintah ini dapat memakan waktu hingga dua menit.

Membuat Cloud Function untuk notifikasi push

Anda membuat Cloud Function yang berlangganan topik Pub/Sub yang telah dibuat sebelumnya di mode push. Kemudian, setiap kali Cloud Logging mengekspor (atau mengirim) peristiwa ke topik Pub/Sub, Cloud Function ini akan dipicu. Fungsi ini menerima peristiwa, memprosesnya, dan mendorongnya ke endpoint HTTP pada webhook yang Anda buat sebelumnya.

  • Di Cloud Shell, deploy Cloud Function:

    gcloud functions deploy pushEventsToWebhook \
        --runtime=nodejs8 \
        --trigger-topic=$PUBSUB_TOPIC \
        --set-env-vars=WEBHOOK_URL=$WEBHOOK_URL \
        --allow-unauthenticated \
        --source=push_notification/
    

Menguji penyiapan

Untuk menguji penyiapan ini, ambil snapshot disk dan periksa apakah webhook menerima log peristiwa yang dihasilkan snapshot disk.

  1. Di Cloud Shell, buat persistent disk zonal. Defaultnya adalah hard disk drive standar sebesar 500 GB.

    gcloud compute disks create $DISK \
        --zone=$(gcloud config get-value compute/zone)
    
  2. Picu pembuatan snapshot disk yang Anda buat sebelumnya:

    gcloud compute disks snapshot $DISK \
        --zone=$(gcloud config get-value compute/zone) \
        --storage-location=$(gcloud config get-value compute/region)
    

    Pemrosesan perintah ini dapat memakan waktu hingga dua menit. Setelah snapshot diambil, entri log aktivitas admin akan dibuat. Log peristiwa difilter dan dikirim ke topik Pub/Sub. Cloud Function yang berlangganan mengambil, memformat, dan mendorongnya ke endpoint HTTP webhook.

  3. Setelah beberapa menit, periksa apakah webhook menerima log peristiwa:

    gcloud beta functions logs read $WEBHOOK_NAME \
        --region=$(gcloud config get-value compute/region) \
        --limit=10
    

    Outputnya mirip dengan berikut ini:

    {
      data:[
         {
            "type":'disk',
            "url":'https://console.cloud.google.com/compute/disksDetail/zones/us-central1-a/disks/my-disk-1?project=$PROJECT&supportedpurview=project',
            "name":'my-disk-1'
         },
         {
            "type":'project',
            "project_id":'$PROJECT',
            "project_url":'https://console.cloud.google.com/?project=$PROJECT'
         },
         {
            "zone":'us-central1-a'
         },
         {
            "date_time":'2020-04-15T09:07:21.205-06:00'
         }
      ]
    }
    

    Output menunjukkan bahwa webhook menerima notifikasi bahwa snapshot disk diambil.

Pembersihan

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya