1. Ringkasan
Di lab ini, Anda akan membuat tugas Cloud Run dan menyiapkan tugas Cloud Scheduler. Anda akan men-deploy Layanan Menu Cymbal Eats menggunakan skrip penyiapan. Anda akan membuat tugas Cloud Run yang melakukan panggilan API ke Layanan Menu Cymbal Eats. 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 menyalurkan permintaan web, tetapi menjalankan tugas operasional atau pemrosesan data. Penampung 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 akan dianalisis menggunakan Vision API untuk mendeteksi apakah item tersebut merupakan item makanan atau bukan. Untuk gambar yang gagal dalam validasi ini, status item menu akan diperbarui menjadi Gagal dan kemudian 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 sebelumnya dengan Cloud Run dan Cloud Scheduler akan sangat membantu, tetapi tidak diwajibkan.
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 mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat 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. Guna 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 membuat clone kode aplikasi dari repo ini dan 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 dibuat dengan framework Quarkus menggunakan database Cloud SQL Postgres untuk backend-nya. Layanan Menu adalah dependensi runtime untuk tugas Cloud Run yang akan Anda buat dalam langkah-langkah berikut.
./setup.sh
Deployment akan memerlukan waktu sekitar 10 menit untuk membuat semua komponen yang diperlukan.
Lanjutkan dengan langkah berikutnya setelah menjalankan perintah di atas.
3. Menjelajahi 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 di 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 yang 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 Gagal dihapus.MENU_SERVICE_URL
- URL layanan Menu Cymbal Eats.
4. Membuat Tugas Cloud Run
Selanjutnya, Anda akan mem-build image container dan memublikasikannya ke Artifact Registry.
Image container ini akan digunakan untuk membuat tugas Cloud Run.
Aktifkan 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 untuk menyimpan image docker untuk tugas pembersihan:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Build image container menggunakan Cloud Build dan kirim 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 dan sudah 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 tugas 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 Usia Item Gagal atau URL Layanan Menu, 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 URL Layanan Menu dan Usia Item Gagal 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 akan memerlukan izin untuk melakukan panggilan ke Tugas Cloud Run.
Berikan 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 berjalan 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 penjadwal 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 dalam 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 selama 1 menit. Agar dapat 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 "Paksa tugas dijalankan" dari menu Tindakan.
- Dari Cloud Run Job dengan mengklik tombol "EXECUTE".
- Dari Cloud Shell dengan menjalankan perintah berikut:
gcloud beta run jobs execute cleanup-service --region=$REGION
Buka bagian JOBS Cloud Run, buka tab LOGS, dan pastikan item menu telah dihapus.
Filter log untuk kata kunci "deleting" guna 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 dalam 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:
Jelajahi codelab Cymbal Eats lainnya:
- Memicu Alur Kerja Cloud dengan Eventarc
- Memicu Pemrosesan Peristiwa dari Cloud Storage
- Menghubungkan ke CloudSQL Pribadi dari Cloud Run
- Menghubungkan ke Database yang Dikelola Sepenuhnya dari Cloud Run
- Mengamankan Aplikasi Serverless dengan Identity Aware Proxy (IAP)
- Men-deploy dengan Aman ke Cloud Run
- Mengamankan Traffic Masuk Cloud Run
- Menghubungkan ke AlloyDB pribadi dari GKE Autopilot
Pembersihan
Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.