1. Ringkasan
Di lab ini, Anda akan membuat tugas Cloud Run dan menyiapkan tugas Cloud Scheduler. Anda akan men-deploy Cymbal Eats Menu Service menggunakan skrip pengaturan. Anda akan membuat tugas Cloud Run yang melakukan panggilan API ke Layanan Cymbal Eats Menu. Anda akan menjalankan tugas menggunakan Google Cloud CLI dan menyiapkan jadwal untuk tugas tersebut. Anda akan memverifikasi eksekusi dengan meninjau log dan melakukan panggilan API ke Layanan Menu untuk mengonfirmasi bahwa item menu telah dihapus.
Apa yang dimaksud dengan tugas Cloud Run?
Tugas Cloud Run menjalankan container yang tidak melayani permintaan web, tetapi menjalankan tugas operasional atau pemrosesan data. Container akan menjalankan tugas dan keluar setelah selesai.
Tugas layanan pembersihan
Tugas layanan pembersihan akan mengambil item menu dalam status Gagal dan menghapusnya. Saat item menu baru dibuat, gambar dianalisis menggunakan Vision API untuk mendeteksi apakah itu item makanan atau bukan. Untuk gambar yang gagal dalam validasi ini, status item menu akan diperbarui menjadi Gagal, lalu dihapus oleh tugas pembersihan.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Membuat tugas Cloud Run
- Menjalankan tugas Cloud Run
- Membuat tugas Cloud Scheduler
- Memverifikasi eksekusi tugas
Prasyarat
- Di lab ini, Anda dianggap telah memahami Konsol Cloud dan lingkungan shell.
- Pengalaman Cloud Run dan Cloud Scheduler sebelumnya membantu, tetapi tidak diperlukan.
2. Penyiapan dan Persyaratan
Penyiapan Project Cloud
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak
peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai
PROJECT_ID
). Jika Anda tidak menyukai ID yang dihasilkan, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Penyiapan Lingkungan
Aktifkan Cloud Shell dengan mengklik ikon di sebelah kanan kotak penelusuran.
Dari Cloud Shell, jalankan perintah berikut untuk meng-clone kode aplikasi dari repo ini, lalu buka direktori yang berisi layanan menu:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Deploy layanan Menu menggunakan skrip penyiapan ke Cloud Run. Layanan Menu adalah microservice berbasis Java yang dibangun dengan framework Quarkus menggunakan database Cloud SQL Postgres sebagai backend-nya. Layanan Menu adalah dependensi runtime untuk tugas Cloud Run yang akan Anda buat pada langkah-langkah berikut.
./setup.sh
Deployment akan memerlukan waktu sekitar 10 menit untuk membuat semua komponen yang diperlukan.
Lanjutkan ke langkah berikutnya setelah menjalankan perintah di atas.
3. Mempelajari kode Tugas Cloud Run
Buka tab baru di Cloud Shell dengan mengklik ikon plus.
Buka direktori yang berisi layanan pembersihan dan tinjau file yang membentuk tugas:
cd ~/cymbal-eats/cleanup-service
Layanan pembersihan dalam direktori ini berisi Dockerfile
yang menentukan image container untuk tugas layanan pembersihan dengan dependensi yang diperlukan(httpie, jq).
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
Skrip pembersihan sebenarnya, yang tercantum di bawah, berisi perintah untuk mendapatkan daftar item menu dalam status gagal dan menghapusnya dengan melakukan panggilan API ke layanan Menu.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
Perhatikan hal-hal berikut tentang skrip:
- Variabel lingkungan
FAILED_ITEM_AGE
danMENU_SERVICE_URL
akan ditetapkan selama deployment dan diteruskan oleh tugas Cloud Run. FAILED_ITEM_AGE
- Jumlah menit sebelum item yang Gagal akan dihapus.MENU_SERVICE_URL
- URL layanan Cymbal Eats Menu.
4. Membuat Tugas Cloud Run
Selanjutnya, Anda akan membangun image container dan memublikasikannya ke Artifact Registry.
Image container ini akan digunakan untuk membuat tugas Cloud Run.
Mengaktifkan API layanan:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
Menetapkan variabel lingkungan:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
Buat repositori Artifact Registry baru guna menyimpan image Docker untuk tugas pembersihan:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Bangun image container menggunakan Cloud Build dan kirim image tersebut ke Artifact Registry dengan satu perintah:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
Contoh output:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
Setelah publikasi selesai, buka Artifact Registry dan tinjau image yang dipublikasikan:
Beralih kembali ke tab Cloud Shell kedua. Jalankan perintah berikut untuk menjelaskan layanan Menu dan menyimpan URL ke variabel lingkungan. Variabel lingkungan ini akan digunakan untuk mengonfigurasi tugas Cloud Run.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
Buat tugas Cloud Run untuk membersihkan item menu yang gagal yang lebih dari 1 menit [ditetapkan oleh FAILED_ITEM_AGE
].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Contoh output:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
Buka bagian TUGAS Cloud Run di konsol dan tinjau tugas yang dibuat.
Klik lowongan dan jelajahi tab yang tersedia: HISTORI, LOG, KONFIGURASI, dan YAML.
Pastikan variabel lingkungan telah ditetapkan dengan meninjau bagian KONFIGURASI tugas di konsol:
(Opsional) Jika ingin mengubah variabel Failed Item Age atau Menu Service URL, setelah tugas Cloud Run dibuat, Anda dapat menggunakan perintah update:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Untuk memvalidasi tugas, jalankan tugas Cloud Run dengan menjalankan perintah berikut:
gcloud beta run jobs execute cleanup-service --region=$REGION
Contoh output:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
Beralihlah ke tab LOGS untuk meninjau output tugas. Anda akan melihat Gagal Item Age dan Menu Service URL di log.
5. Menyiapkan Jadwal untuk Tugas Cloud Run
Cloud Scheduler adalah penjadwal cron job tingkat perusahaan yang terkelola sepenuhnya. Penjadwal ini memungkinkan Anda menjadwalkan hampir segala tugas, termasuk tugas batch, big data, operasi infrastruktur cloud, dan banyak lagi.
Salah satu praktik terbaik keamanan saat menggunakan tugas Cloud Scheduler adalah menjalankan setiap tugas dengan kredensial terpisah. Pada langkah ini, buat Akun layanan untuk digunakan oleh tugas penjadwal pembersihan.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Tugas Cloud Scheduler memerlukan izin untuk melakukan panggilan ke Tugas Cloud Run.
Beri peran Cloud Run Invoker
ke akun layanan yang digunakan dalam tugas Cloud Scheduler:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Selanjutnya, Anda akan menyiapkan jadwal untuk menjalankan tugas layanan pembersihan.
Ada beberapa jenis target yang didukung oleh Cloud Scheduler.
- HTTP
- Pub/Sub
- HTTP App Engine
Anda akan membuat tugas penjadwal menggunakan jenis target HTTP.
Untuk tujuan demonstrasi, Anda akan menjadwalkannya untuk dijalankan setiap 5 menit.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Tinjau parameter uri
yang digunakan untuk memanggil Tugas Cloud Run:
REGION
danPROJECT_ID
- Region Cloud Run dan Project ID tempat tugas layanan pembersihan di-deploycleanup-service
- nama Tugas Cloud Run
Buka Cloud Scheduler di konsol untuk meninjau tugas scheduler yang dibuat:
Tinjau opsi yang tersedia di bagian menu Tindakan.
6. Menguji Tugas Cloud Run
Dengan menggunakan endpoint Layanan Menu, tinjau item menu yang ada dan statusnya:
curl ${MENU_SERVICE_URL}/menu | jq
Output:
Anda akan melihat 3 item menu dengan status Ready
.
Ubah status item menu #1 menjadi Failed
:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
Tunggu 1 menit. Agar dihapus, item menu harus berusia 1 menit, seperti yang ditetapkan oleh parameter FAILED_ITEM_AGE
.
Anda dapat menunggu operasi terjadwal berikutnya atau memaksa eksekusi tugas dari konsol.
Ada beberapa cara untuk memicu tugas, melalui UI atau dari command line.
Untuk contoh ini, jalankan perintah di Cloud Shell(Opsi #3) untuk memicu tugas.
- Dari Cloud Scheduler dengan memilih "Force a job run" dari menu Tindakan.
- Dari Cloud Run Job dengan mengklik "EXECUTE" tombol.
- Dari Cloud Shell dengan menjalankan perintah berikut:
gcloud beta run jobs execute cleanup-service --region=$REGION
Buka bagian Cloud Run JOBS, buka tab LOGS, lalu pastikan item menu telah dihapus.
Filter log untuk "menghapus" kata kunci untuk menemukan log.
Gunakan endpoint Layanan Menu untuk memeriksa item menu yang ada melalui endpoint REST.
curl ${MENU_SERVICE_URL}/menu | jq
Output:
Anda akan melihat 2 item menu dengan status Ready
.
7. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah kita bahas:
- Cara membuat tugas Cloud Run
- Cara menjalankan tugas Cloud Run
- Cara membuat tugas Cloud Scheduler
- Cara memverifikasi eksekusi tugas
Langkah berikutnya:
Pelajari codelab Cymbal Eats lainnya:
- Memicu Cloud Workflows dengan Eventarc
- Memicu Pemrosesan Peristiwa dari Cloud Storage
- Terhubung ke Private CloudSQL dari Cloud Run
- Terhubung ke Database yang Terkelola Sepenuhnya dari Cloud Run
- Aplikasi Serverless yang Aman dengan Identity-Aware Proxy (IAP)
- Men-deploy dengan Aman ke Cloud Run
- Mengamankan Traffic Masuk Cloud Run
- Terhubung ke AlloyDB pribadi dari Autopilot GKE
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.