Bagaimana caranya untuk bikin scheduling dengan cloud functions for Firebase

in #firebase6 years ago (edited)

Ini adalah artikel lurus tentang bagaimana memulai menjalankan tugas terjadwal dengan #Firebase. Sebenarnya tidak ada yang dibangun untuk mendukung kita mengatur timer atau jadwal yang serupa dengan tugas cron. Tapi itu tidak berarti kita tidak bisa menjadwalkan proyek Firebase.


Click here to read this article in English

Kamu bisa dapat memanfaatkan kalo integrasi dengan Google App Engine, yang punya task scheduler yang sangat mudah dan kita akan pakai Python yang karena mudah untuk menulis aplikasi yang sangat ringkas dan gampang.

Dalam contoh ini, kami akan mengirimkan notifikasi push dari Google App Engine Scheduler ke HTTPS Cloud Function API endpoint. Oh, iya.. apakah saya sudah menyebutkan ini!? Kita akan menyelesaikannya dalam kurang dari 40 lines of code, termasuk file konfigurasi!!!

Firebase o clock
Tik tok, ayooo

Google App Engine

Pastikan kamu mengetahui dasar-dasarnya di tentang Google App Engine (GAE) dan cara dasarnya untuk siapkan proyek. Seharusnya kamu akan bisa copy/paste semua kode dari artikel ini untuk deploy proyek sendiri.

Saranku baca dokumentasi Google sedikit dan baca artikel ini dengan cinta dan perhatian yang lembut ;- )

app.yaml

File ini adalah file konfigurasi utama untuk proyek GAE. Satu-satunya bagian yang kita harus ubah dalam file ini adalah SecretApiKey pada baris terakhir. Ganti dengan beberapa string acak, seperti GUID acak membuat kunci API yang cukup bagus. Tapi ingat kita harus simpan string itu secara aman. Kita akan menggunakan string yang sama nanti untuk mengkonfigurasi cloud functions mu.

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /cron
  script: main.app
  login: admin

env_variables:
  CRON_API_KEY: 'SecretApiKey'

cron.yaml

File ini adalah konfigurasi cron/scheduler. Konfigurasi frekuensi benar-benar dibaca seperti bahasa ngobrol. Itu bukan kesalahan.

cron:
- description: "Run cron job"
  url: /cron
  schedule: every 30 minutes

main.app

Akhirnya, bagian yang bagus. Inilah satu-satunya kode sebenarnya yang kami harus tulis untuk melakukan notifikasi push reguler ke proyek Firebase kami.

Skripnya ambil ID proyek Google Cloud Platform (GCP) kamu secara otomatis, jadi penting untuk kamu pakai cloud functions di ID proyek GCP yang sama. Kalau tidak, kamu harus mengedit file dan mengganti dengan URL cloud functions kita.

from google.appengine.api import urlfetch
import webapp2
import urllib
import os

class Sheduler(webapp2.RequestHandler):
    def get(self):
        appId = os.environ.get('GCLOUD_PROJECT', 'n-a')

        try:
            response = urlfetch.fetch(
                url='https://us-central1-' + appId + '.cloudfunctions.net/cronEndpoint',
                payload=urllib.urlencode({'key': os.environ.get('CRON_API_KEY')}),
                method=urlfetch.POST,
                headers={'Content-Type': 'application/x-www-form-urlencoded'})

            self.response.set_status(response.status_code, response.content)

        except urlfetch.Error:
            self.response.set_status(500, 'Caught exception while calling cloud function')


app = webapp2.WSGIApplication([('/cron', Sheduler)], debug=True)

Cloud Function

Sekarang kita sebenarnya sudah di luar topik utama: bikin cloud scheduler dengan kurang dari 40 lines of code. Jadi, kita baru saja membuat cloud host, zero downtime scheduled webhook yang berjalan benar-benar gratis ... semuanya kurang dari 40 lines of code. Yuk, tepuk tanggan!

Bagian terakhir adalah membuat HTTPS endpoint dengan cloud function yang bisa terima request kita.

Pertama kita perlu juga mengkonfigurasi Firebase dengan kunci API yang kita buat di konfigurasi GAE.

$ firebase functions:config:set cron.apikey=SecretApiKey

index.ts

Tolong perhatikan nama cloud functionnya,cronEndpoint harus sesuai dengan URL yang kita telah konfigurasikan pada skript Python di atas. Kita bisa mengubah nama ini kalau mau, selama kita juga rubah di kedua tempat.

export const cronEndpoint = functions.https.onRequest((request, response) => {
    if (functions.config().cron.apikey !== request.body.key) {
        response.status(401).send("I'm sorry Dave, I'm afraid I can't do that");
        return;
    }

    response.status(200).send("The time is now.");
});

Finally

Selesai! Kalau kamu ingin membaca lebih banyak tentang scheduling, maka silakan baca blog Firebase juga untuk belajar cara mengatur penjadwalan dengan pub/sub atau artikel asli saya di Medium, yang di sini ditulis ulang dan diterjemahkan ke bahasa Indonesia.

Kamu juga bisa lihat semua kode ini di repo github saya yang sebenarnya saya tidak kelola lagi. Tapi saya senang dan bersyukur atas masukan dan komentar yang bisa membantu memperbaiki artikel atau skrip.

Kalau kamu ingin terus belajar tentang Firebase, mohon ikuti saya di Steemit atau subscribe ke tag #Firebase di platform ini.