1. Pengantar
Cloud Tasks adalah layanan antrean terkelola sepenuhnya untuk mengelola eksekusi, pengiriman, dan penayangan tugas dalam jumlah besar.
Cloud Tasks memungkinkan Anda memisahkan bagian-bagian pekerjaan, yang disebut tugas, yang dapat dilakukan secara independen (misalnya, tugas untuk memperbarui entri database), di luar alur aplikasi utama, dan mengirimkannya untuk diproses, secara asinkron, menggunakan pengendali yang Anda buat.
Tugas yang dialihkan ditambahkan ke antrean, yang mempertahankan tugas hingga berhasil dieksekusi atau mengalami kegagalan. Berdasarkan konfigurasi, antrean juga dapat bertindak sebagai kontrol alur pengiriman. Anda dapat membuat dan mengonfigurasi antrean yang kemudian dikelola oleh layanan Cloud Tasks. Setelah tugas ditambahkan, antrean akan mengirim tugas dan memastikan pekerja memprosesnya dengan andal.
Beberapa fitur utama Cloud Tasks adalah:
- Target HTTP: Tambahkan tugas yang menarget layanan HTTP apa pun yang berjalan di Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions, atau sistem lokal secara aman menggunakan autentikasi OAuth/OIDC standar industri.
- Penghapusan duplikat tugas: Tugas yang ditambahkan beberapa kali hanya akan dikirim sekali.
- Pengiriman terjamin: Tugas dijamin akan dikirim minimal satu kali dan sebagian besar tugas ditayangkan tepat satu kali.
- Kontrol tingkat dan percobaan ulang: Kontrol eksekusi dengan menetapkan tingkat pengiriman tugas, jumlah maksimum percobaan, dan waktu tunggu minimum antar-percobaan.
- Penjadwalan mendatang: Mengontrol waktu saat tugas dijalankan.
Dalam codelab ini, Anda akan terlebih dahulu mempelajari cara membuat dan menggunakan antrean Cloud Tasks reguler untuk tugas target HTTP. Kemudian, Anda akan mempelajari cara menggunakan penggantian URI HTTP tingkat antrean dan BufferTask API baru untuk melakukan buffering permintaan HTTP dengan lebih mudah menggunakan Cloud Tasks.
Yang akan Anda pelajari
- Cara membuat tugas target HTTP.
- Cara membuat tugas target HTTP dengan penggantian URI HTTP tingkat antrean yang baru.
- Cara mengubah tugas yang tertunda dengan penggantian URI HTTP tingkat antrean yang baru.
- Cara lebih mudah melakukan buffering permintaan HTTP dengan BufferTask API baru.
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- 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 lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia 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 tidak akan memakan 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 project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Membuat antrean reguler untuk tugas target HTTP
Pada langkah pertama ini, Anda akan mempelajari cara membuat antrean Cloud Tasks reguler dan menambahkan tugas HTTP ke antrean tersebut untuk menargetkan layanan Cloud Run.
Apa yang dimaksud dengan tugas target HTTP?
Tugas target HTTP dapat menargetkan layanan HTTP apa pun yang berjalan di Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions, atau sistem lokal secara aman menggunakan autentikasi OAuth/OIDC standar industri.
Deploy layanan Cloud Run
Pertama, pastikan API yang diperlukan diaktifkan:
gcloud services enable \ cloudtasks.googleapis.com \ run.googleapis.com
Deploy layanan Cloud Run yang akan berfungsi sebagai target tugas HTTP:
SERVICE1=hello1 REGION=us-central1 gcloud run deploy $SERVICE1 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Membuat antrean Cloud Tasks
Buat antrean Cloud Tasks reguler:
QUEUE1=http-queue LOCATION=us-central1 gcloud tasks queues create $QUEUE1 --location=$LOCATION
Jeda antrean untuk sementara, sehingga Anda dapat mengamati tugas HTTP saat dibuat:
gcloud tasks queues pause $QUEUE1 --location=$LOCATION
4. Membuat dan menguji tugas HTTP
Pada langkah ini, Anda akan membuat tugas HTTP untuk menargetkan antrean yang telah dibuat sebelumnya.
Membuat tugas HTTP
Anda dapat membuat tugas HTTP menggunakan gcloud
:
gcloud tasks create-http-task \ --queue=$QUEUE1 \ --location=$LOCATION \ --url=$SERVICE1_URL \ --method=GET
Opsional: Anda juga dapat membuat tugas HTTP dengan library klien. Misalnya, Anda dapat melihat Program.cs
untuk contoh C# dengan permintaan HTTP yang digabungkan ke Task
dan TaskRequest
sebelum dikirim ke Cloud Tasks dengan CloudTasksClient
:
var taskRequest = new CreateTaskRequest { Parent = new QueueName(projectId, location, queue).ToString(), Task = new Task { HttpRequest = new HttpRequest { HttpMethod = HttpMethod.Get, Url = url } } }; var client = CloudTasksClient.Create(); var response = client.CreateTask(taskRequest);
Anda dapat menjalankannya seperti berikut untuk membuat dan menambahkan tugas ke antrean:
dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL
Menguji tugas HTTP
Pada tahap ini, tugas dibuat, tetapi belum dieksekusi karena antrean dijeda. Anda dapat memverifikasinya dengan membuat daftar antrean:
gcloud tasks queues list --location=$LOCATION
Anda akan melihat antrean dalam status PAUSED
:
QUEUE_NAME STATE http-queue PAUSED
Lanjutkan antrean:
gcloud tasks queues resume $QUEUE --location=$LOCATION
Periksa log layanan Cloud Run:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
Anda akan melihat bahwa layanan Cloud Run menerima permintaan GET HTTP dari Cloud Tasks:
httpRequest: latency: 0.227597158s protocol: HTTP/1.1 remoteIp: 35.243.23.192 requestMethod: GET requestSize: '415' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks
5. Membuat antrean dengan konfigurasi pemilihan rute
Pada langkah ini, Anda akan mempelajari cara membuat antrean Cloud Tasks dengan konfigurasi perutean untuk menambahkan penggantian URI HTTP menggunakan fitur Konfigurasi Pemilihan Rute Tugas Tingkat Antrean. Kemudian, Anda akan menambahkan tugas HTTP ke dalamnya untuk menargetkan layanan Cloud Run pertama dan mengamati bahwa konfigurasi perutean mengganti URI untuk merutekan tugas ke layanan Cloud Run kedua.
Apa yang dimaksud dengan Konfigurasi Pemilihan Rute Tugas Tingkat Antrean?
Konfigurasi Perutean Tugas tingkat antrean mengubah perutean tugas HTTP untuk seluruh antrean untuk semua tugas yang tertunda dan baru. Hal ini memudahkan pembuatan tugas karena target HTTP tidak perlu ditetapkan di level tugas dan mengalihkan lebih banyak kontrol ke penyedia layanan karena mereka dapat menetapkan target semua tugas dalam antrean (misalnya, merutekan traffic ke backend yang berbeda jika backend asli tidak aktif).
Konfigurasi berikut dapat ditetapkan di tingkat antrean:
- Header: Header tingkat antrean saat ditentukan di tingkat antrean akan memperbarui header untuk semua tugas dalam antrean.
- Metode HTTP: Metode HTTP bila ditetapkan di tingkat antrean, akan menggantikan metode HTTP untuk semua tugas dalam antrean.
- URI Target: Host, jalur, kueri, port, skema (HTTP atau HTTPS) dapat diganti satu per satu.
- Otorisasi: Konfigurasi OIDC/OAuth saat ditentukan di tingkat antrean akan mengganti konfigurasi OIDC/OAuth tingkat tugas.
Men-deploy layanan Cloud Run kedua
Deploy layanan Cloud Run kedua yang nantinya akan berfungsi sebagai target penggantian URI HTTP:
SERVICE2=hello2 REGION=us-central1 gcloud run deploy $SERVICE2 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Simpan host URL layanan untuk digunakan nanti:
SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)') SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')
Membuat antrean Cloud Tasks dengan konfigurasi pemilihan rute
Buat antrean dengan konfigurasi pemilihan rute dengan penggantian URI HTTP ke layanan Cloud Run kedua.
QUEUE2=http-queue-uri-override gcloud beta tasks queues create $QUEUE2 \ --http-uri-override=host:$SERVICE2_HOST \ --location=$LOCATION
Perhatikan bahwa penggantian URI mengacu pada layanan Cloud Run kedua. Setiap tugas HTTP yang ditambahkan ke antrean akan mengganti host URI aslinya. Anda dapat melihat konfigurasi antrean:
gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION
Anda akan melihat bahwa httpTarget
memiliki uriOverride
yang mengarah ke host layanan kedua:
httpTarget: uriOverride: host: hello2-idcwffc3yq-uc.a.run.app pathOverride: {} queryOverride: {} ...
Jeda antrean untuk sementara, sehingga Anda dapat mengamati tugas HTTP saat dibuat:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
6. Membuat dan menguji tugas HTTP untuk antrean dengan konfigurasi perutean
Pada langkah ini, Anda akan membuat tugas HTTP untuk menargetkan layanan pertama dan mengamati bahwa URI-nya diganti oleh antrean untuk mengarah ke layanan kedua.
Membuat tugas HTTP
Buat tugas HTTP dengan URL layanan pertama:
gcloud tasks create-http-task \ --queue=$QUEUE2 \ --location=$LOCATION \ --url=$SERVICE1_URL \ --method=GET
Menguji tugas HTTP
Lanjutkan antrean:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Anda akan melihat bahwa layanan Cloud Run kedua (bukan yang pertama) menerima permintaan GET HTTP dari Cloud Tasks karena penggantian:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
--- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
7. Mengubah tugas yang tertunda dengan konfigurasi perutean
Anda juga dapat menggunakan konfigurasi perutean untuk mengubah URI HTTP dari semua tugas yang tertunda dalam antrean. Hal ini berguna jika layanan backend tidak aktif dan Anda ingin merutekan ke layanan lain dengan cepat. Mari kita lihat cara kerjanya dalam langkah ini.
Jeda antrean lagi:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
Buat tugas HTTP dengan google.com
sebagai URL tugas:
gcloud tasks create-http-task \ --queue=$QUEUE2 \ --location=$LOCATION \ --url=https://www.google.com \ --method=GET
Tugas ini berstatus tertunda karena antrean dijeda.
Sekarang, update penggantian URI HTTP agar mengarah ke layanan pertama. Tindakan ini akan mengganti host tugas yang tertunda dari google.com
ke host layanan pertama:
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') gcloud beta tasks queues update $QUEUE2 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Lanjutkan antrean:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
Anda akan melihat bahwa layanan Cloud Run pertama menerima permintaan GET HTTP dari Cloud Tasks karena penggantian (bukan google.com
):
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1 --- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
8. Membuat antrean untuk BufferTask API
Biasanya, Anda membuat tugas dengan menggunakan Tasks API dari gcloud
atau library klien Tasks. Hal ini membebani aplikasi untuk menggabungkan permintaan HTTP ke dalam Tasks menggunakan library klien dan juga menciptakan dependensi antara aplikasi dan library klien Tasks.
Pada langkah ini, Anda akan melihat cara memanfaatkan penggantian URI HTTP tingkat antrean dan BufferTask API baru untuk membuat tugas target HTTP secara lebih mudah hanya dengan mengirimkan permintaan HTTP. Aplikasi apa pun yang dapat mengirim permintaan HTTP sekarang dapat membuat tugas target HTTP.
Apa itu BufferTask API?
CreateTask API adalah cara lama untuk membuat Tasks dan mengharuskan klien mengirim objek Task ke API dengan semua kolom wajib diisi yang telah ditetapkan.
BufferTask API adalah fitur baru yang memungkinkan pengguna membuat Tugas HTTP tanpa perlu menyediakan Konfigurasi Tugas (URL HTTP, header, otorisasi), sehingga Anda cukup mengirimkan pesan atau isi permintaan ke Buffer API.
Hal ini memungkinkan integrasi yang lebih mudah dengan layanan karena Cloud Tasks kini dapat di-deploy di depan layanan Anda tanpa memerlukan perubahan kode di sisi klien. Setiap permintaan HTTP arbitrer yang dikirim ke BufferTask API akan digabungkan sebagai objek Task dan dikirimkan ke tujuan yang ditetapkan pada tingkat antrean.
Untuk menggunakan BufferTask API, antrean harus memiliki konfigurasi URI Target, atau dengan kata lain, fitur Konfigurasi Pemilihan Rute Tingkat Antrean adalah prasyarat untuk menggunakan BufferTask API.
Membuat antrean Cloud Tasks dengan konfigurasi perutean
Buat antrean dengan konfigurasi pemilihan rute yang mengarah ke layanan pertama yang kita deploy di langkah sebelumnya:
SERVICE1=hello1 SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') QUEUE3=http-queue-uri-override-buffer gcloud beta tasks queues create $QUEUE3 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Jeda antrean untuk sementara, sehingga Anda dapat mengamati tugas HTTP saat dibuat:
gcloud tasks queues pause $QUEUE3 --location=$LOCATION
9. Buffering permintaan HTTP dengan BufferTask API
Pada langkah ini, Anda akan melakukan buffering permintaan GET atau POST HTTP sederhana dengan BufferTask API. Di balik layar, Cloud Tasks akan menggabungkan permintaan HTTP ini ke dalam tugas HTTP dengan setelan konfigurasi pemilihan rute default dalam antrean.
Pertama-tama, login untuk mendapatkan token akses dan menetapkan beberapa variabel:
gcloud auth application-default login ACCESS_TOKEN=$(gcloud auth application-default print-access-token) PROJECT_ID=$(gcloud config get-value project) TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"
Membuat tugas HTTP
Buat tugas HTTP dengan BufferTask API. Perhatikan bahwa permintaan GET HTTP dapat dibuat tanpa perlu membuat Task:
curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN"
Buat tugas HTTP lain dengan HTTP POST dan isi:
curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d "{'message': 'Hello World'}"
Opsional: Anda juga dapat membuat tugas HTTP dengan library klien. Misalnya, Anda dapat melihat Program.cs
untuk contoh C# tempat permintaan GET HTTP dikirim langsung ke BufferTask API tanpa harus menggabungkannya ke dalam Task
atau memerlukan library klien untuk Cloud Tasks:
var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}"); var response = await client.GetAsync(BufferTaskApiUrl); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Response: {content}"); }
Anda dapat menjalankannya sebagai berikut:
dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN
BufferTask API menangani pembuatan Tugas dari permintaan HTTP dan menambahkan URL dari setelan konfigurasi perutean antrean untuk URI.
Menguji tugas HTTP
Lanjutkan antrean:
gcloud tasks queues resume $QUEUE3 --location=$LOCATION
Anda akan melihat bahwa layanan Cloud Run menerima permintaan GET dan POST HTTP dari Cloud Tasks:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
--- httpRequest: latency: 0.002279292s protocol: HTTP/1.1 remoteIp: 35.243.23.42 requestMethod: POST requestSize: '777' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5450' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks ... httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
10. Selamat
Selamat, Anda telah menyelesaikan codelab!
Sebagai tindak lanjut, Anda dapat mencoba Cloud Tasks sebagai buffer antara Pub/Sub dan Cloud Run untuk melihat contoh nyata tentang bagaimana fitur baru Cloud Tasks ini dapat membantu membuat antrean buffer antarlayanan dengan mudah.
Pembersihan (Opsional)
Untuk menghindari timbulnya biaya, sebaiknya bersihkan sumber daya.
Jika tidak memerlukan project, Anda cukup menghapus project:
gcloud projects delete $PROJECT_ID
Jika memerlukan project, Anda dapat menghapus resource satu per satu.
Hapus layanan Cloud Run:
gcloud run services delete $SERVICE1 --region $REGION gcloud run services delete $SERVICE2 --region $REGION
Hapus antrean Cloud Tasks:
gcloud tasks queues delete $QUEUE1 --location=$LOCATION gcloud tasks queues delete $QUEUE2 --location=$LOCATION gcloud tasks queues delete $QUEUE3 --location=$LOCATION
Yang telah kita bahas
- Cara membuat tugas target HTTP.
- Cara membuat tugas target HTTP dengan penggantian URI HTTP tingkat antrean yang baru.
- Cara mengubah tugas yang tertunda dengan penggantian URI HTTP tingkat antrean yang baru.
- Cara lebih mudah melakukan buffering permintaan HTTP dengan BufferTask API baru.