Dengan rilis Target HTTP ini, pengendali Cloud Tasks kini dapat dijalankan di endpoint HTTP apa pun dengan alamat IP publik, seperti Cloud Functions, Cloud Run, GKE, Compute Engine, atau bahkan server web lokal. Tugas Anda dapat dijalankan pada salah satu layanan ini dengan cara yang andal dan dapat dikonfigurasi.
Halaman ini menunjukkan cara membuat tugas Target HTTP secara terprogram dan menempatkannya di antrean Cloud Tasks.
Jika Anda memilih untuk menentukan nama tugas, Cloud Tasks dapat menggunakan nama tersebut untuk memastikan penghapusan duplikat tugas, meskipun pemrosesan yang diperlukan untuk hal ini dapat menambah latensi.
Secara umum, Anda membuat tugas dalam bentuk permintaan HTTP. Penggunaan library klien dan akun layanan, seperti dalam contoh berikut, dapat membantu Anda mengelola detail komunikasi dengan server Cloud Tasks, dan mempermudah pembuatan tugas.
Membuat tugas HTTP Target
Untuk tugas yang memiliki target HTTP, ada dua cara untuk membuat tugas.
Metode
BufferTask
: Gunakan metode ini jika antrean disiapkan untuk mem-buffer tugas di depan layanan. Antrean harus memiliki perutean tingkat antrean.Metode
CreateTask
: Metode ini lebih kompleks. Anda harus membuat objek tugas secara eksplisit. Gunakan metode ini jika tugas dalam antrean memiliki konfigurasi perutean yang berbeda. Dalam hal ini, Anda menentukan {i>routing<i} di level tugas.
BufferTask
metode
Batasan
Library klien: Metode
BufferTask
tidak didukung di library klien.RPC API: Metode
BufferTask
tidak didukung di RPC API.Pemilihan rute tingkat antrean: Untuk menggunakan metode
BufferTask
, antrean Anda harus menggunakan perutean tingkat antrean (jika tidak, tugas tidak memiliki informasi perutean). Jika antrean Anda belum menggunakan perutean tingkat antrean, lihat Mengonfigurasi perutean tingkat antrean untuk tugas HTTP.
Contoh REST
Cuplikan kode berikut menunjukkan contoh pembuatan tugas yang menggunakan
metode BufferTask
dengan curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Ganti kode berikut:
HTTP_METHOD
: Metode HTTP untuk permintaan Anda, misalnyaGET
atauPOST
.PROJECT_ID
: ID project Google Cloud Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal Anda:gcloud config get-value project
LOCATION
: Lokasi antrean Anda.QUEUE_ID
: ID antrean Anda.
CreateTask
metode
Untuk membuat tugas menggunakan metode CreateTask
, Anda harus membuat dan
menentukan objek tugas secara eksplisit. Anda harus menentukan layanan dan pengendali yang memproses tugas.
Secara opsional, Anda bisa meneruskan data tugas tertentu ke pengendali. Anda juga dapat menyesuaikan konfigurasi untuk tugas tersebut secara mendetail, seperti menjadwalkan waktu di masa mendatang kapan tugas tersebut harus dijalankan atau membatasi berapa kali tugas tersebut harus dicoba lagi jika gagal.
Contoh berikut mengikuti metode CreateTask
untuk membuat tugas menggunakan library klien Cloud Tasks.
C#
Python
Perhatikan file requirements.txt
:
Java
Perhatikan file pom.xml
:
PHP
Perhatikan file composer.json
:
Go
Node.js
Perhatikan file package.json
:
Ruby
Menyiapkan akun layanan untuk autentikasi pengendali Target HTTP
Cloud Tasks dapat memanggil pengendali Target HTTP yang memerlukan autentikasi jika Anda memiliki akun layanan dengan kredensial yang sesuai untuk mengakses pengendali.
Anda dapat melakukannya jika Anda memiliki akun layanan saat ini. Cukup berikan peran yang sesuai. Petunjuk ini membahas pembuatan akun layanan baru khusus untuk fungsi ini. Akun layanan yang sudah ada atau baru yang digunakan untuk autentikasi Cloud Tasks harus berada dalam project yang sama dengan antrean Cloud Tasks Anda.
Di Konsol Google Cloud, buka halaman Service accounts.
Jika perlu, pilih project yang sesuai.
Klik Create service account.
Di bagian Detail akun layanan, beri nama akun tersebut. Console akan membuat nama akun email terkait untuk akun tersebut. Ini adalah cara Anda mereferensikan akun. Anda juga dapat menambahkan deskripsi tentang fungsi akun tersebut. Klik Buat dan lanjutkan.
Di bagian Grant this service account access to project, klik Select a role. Telusuri dan pilih Enqueuer Cloud Tasks. Peran ini memberi akun layanan izin untuk menambahkan tugas ke antrean.
Klik + Tambahkan peran lain.
Klik Select a role. Telusuri dan pilih Service Account User. Peran ini memungkinkan akun layanan mengizinkan antrean untuk membuat token atas namanya menggunakan kredensial akun layanan.
Jika pengendali Anda adalah bagian dari Google Cloud, beri akun layanan peran yang terkait dengan mengakses layanan tempat pengendali Anda berjalan. Setiap layanan dalam Google Cloud memerlukan peran yang berbeda. Misalnya, untuk mengakses pengendali di Cloud Run diperlukan peran Cloud Run Invoker, dan seterusnya. Anda dapat menggunakan akun layanan yang baru saja dibuat atau akun layanan lain di project Anda.
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
Cloud Tasks sendiri harus memiliki akun layanan sendiri yang diberi peran Cloud Tasks Service Agent
. Hal ini bertujuan agar dapat menghasilkan token header berdasarkan kredensial yang terkait dengan akun layanan Cloud Tasks untuk diautentikasi dengan target pengendali Anda. Akun layanan Cloud Tasks dengan peran yang diberikan ini akan otomatis dibuat saat Anda mengaktifkan Cloud Tasks API, kecuali jika Anda mengaktifkannya sebelum 19 Maret 2019. Dalam hal ini, Anda harus menambahkan peran secara manual.
Menggunakan tugas HTTP Target dengan token otentikasi
Untuk melakukan autentikasi antara Cloud Tasks dan pengendali Target HTTP yang memerlukan autentikasi semacam itu, Cloud Tasks akan membuat token header. Token ini didasarkan pada kredensial di akun layanan Cloud Tasks Enqueuer
, yang diidentifikasi berdasarkan alamat emailnya. Akun layanan yang digunakan untuk autentikasi harus menjadi bagian dari project yang sama tempat Cloud Task queue Anda berada. Permintaan, dengan token header, dikirim melalui HTTPS, dari antrean ke pengendali. Anda dapat menggunakan token ID atau token akses.
Token ID secara umum harus digunakan untuk setiap pengendali yang berjalan di Google Cloud, misalnya, di Cloud Functions atau Cloud Run. Pengecualian utama adalah untuk
Google API yang dihosting di *.googleapis.com
: API ini mengharapkan token akses.
Anda harus menentukan token ID (OIDC)
atau token akses (OAuth)
di tugas
itu sendiri.
BufferTask
metode
Batasan
Library klien: Metode
BufferTask
tidak didukung di library klien.RPC API: Metode
BufferTask
tidak didukung di RPC API.Pemilihan rute tingkat antrean: Untuk menggunakan metode
BufferTask
, antrean Anda harus menggunakan perutean tingkat antrean (jika tidak, tugas tidak memiliki informasi perutean). Jika antrean Anda belum menggunakan perutean tingkat antrean, lihat Mengonfigurasi perutean tingkat antrean untuk tugas HTTP.
Contoh REST dengan autentikasi
Saat Anda menggunakan metode BufferTask
untuk membuat tugas, konfigurasi OIDC atau OAuth
apa pun yang ditetapkan pada tingkat antrean akan menggantikan konfigurasi di tingkat tugas.
Untuk mengonfigurasi autentikasi di tingkat antrean, lihat Membuat antrean Cloud Tasks. Namun, Anda dapat melakukan autentikasi saat membuat tugas. Contoh berikut menggunakan
kredensial default aplikasi untuk mengautentikasi saat membuat tugas:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Ganti kode berikut:
HTTP_METHOD
: Metode HTTP untuk permintaan Anda, misalnyaGET
atauPOST
.PROJECT_ID
: ID project Google Cloud Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal Anda:gcloud config get-value project
LOCATION
: Lokasi antrean Anda.QUEUE_ID
: ID antrean Anda.ACCESS_TOKEN
: Token akses Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:gcloud auth application-default login
gcloud auth application-default print-access-token
CreateTask
metode
Contoh berikut menggunakan metode CreateTask
dengan library klien Cloud Tasks untuk membuat tugas yang juga mencakup pembuatan token header. Token ID digunakan dalam contoh.
Untuk menggunakan token akses, ganti parameter OIDC dengan parameter OAuth
yang sesuai bahasa dalam menyusun permintaan.
Python
Perhatikan file requirements.txt
:
Java
Perhatikan file pom.xml
:
Go
Node.js
Perhatikan file package.json
:
Menyediakan pengendali tugas Target HTTP Anda sendiri
Pengendali tugas Target HTTP sangat mirip dengan pengendali tugas App Engine, dengan pengecualian berikut:
- Waktu tunggu: untuk semua pengendali tugas HTTP Target, waktu tunggu default adalah 10 menit, dengan maksimum 30 menit.
- Logika autentikasi: jika Anda menulis kode sendiri di layanan yang ditargetkan untuk memvalidasi token, Anda harus menggunakan token ID. Untuk mengetahui informasi selengkapnya tentang hal ini, lihat OpenID Connect, khususnya Memvalidasi token ID.
Header: permintaan Target HTTP memiliki header yang ditetapkan oleh antrean, yang berisi informasi khusus tugas yang dapat digunakan pengendali Anda. Header ini mirip dengan, tetapi tidak identik, dengan header yang ditetapkan pada permintaan tugas App Engine. Header ini hanya memberikan informasi. Atribut ini tidak boleh digunakan sebagai sumber identitas.
Jika header ini ada dalam permintaan pengguna eksternal ke aplikasi Anda, header tersebut akan diganti dengan header internal. Satu-satunya pengecualian adalah permintaan dari administrator aplikasi yang login, yang diizinkan menetapkan header untuk tujuan pengujian.
Permintaan Target HTTP selalu berisi header berikut:
Header Deskripsi X-CloudTasks-QueueName
Nama antrean. X-CloudTasks-TaskName
Nama "singkat" tugas, atau, jika tidak ada nama yang ditentukan saat pembuatan, ID unik yang dihasilkan sistem. Ini adalah nilai my-task-id
dalam nama tugas lengkap, yaitu task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
Frekuensi percobaan ulang tugas ini. Untuk upaya pertama, nilainya adalah 0
. Jumlah ini mencakup upaya saat tugas gagal karena kode error 5XX dan tidak pernah mencapai fase eksekusi.X-CloudTasks-TaskExecutionCount
Total berapa kali tugas menerima respons dari pengendali. Karena Cloud Tasks menghapus tugas setelah respons yang berhasil diterima, semua respons pengendali sebelumnya adalah gagal. Jumlah ini tidak termasuk kegagalan karena kode error 5XX. X-CloudTasks-TaskETA
Waktu jadwal tugas, yang ditentukan dalam detik sejak 1 Januari 1970. Selain itu, permintaan dari Cloud Tasks mungkin berisi header berikut:
Header Deskripsi X-CloudTasks-TaskPreviousResponse
Kode respons HTTP dari percobaan ulang sebelumnya. X-CloudTasks-TaskRetryReason
Alasan percobaan ulang tugas.
Menambahkan peran Agen Layanan Cloud Tasks ke akun layanan Cloud Tasks secara manual
Langkah ini hanya diperlukan jika Anda mengaktifkan Cloud Tasks API sebelum 19 Maret 2019.
Menggunakan Console
- Temukan nomor project untuk project Anda di Halaman Setelan Project Google Cloud.
- Salin nomornya ke bawah.
- Buka Halaman Konsol Admin IAM.
- Klik Grant access. Layar Berikan akses akan terbuka.
Di bagian Tambahkan akun utama, tambahkan alamat email dengan format:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Ganti PROJECT_NUMBER dengan nomor project Anda di atas.
Di bagian Assign roles, telusuri dan pilih Cloud Tasks Service Agent.
Klik Save.
Menggunakan gcloud
Temukan nomor project Anda:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Ganti PROJECT_ID dengan project ID Anda.
Salin nomornya ke bawah.
Berikan peran
Cloud Tasks Service Agent
kepada akun layanan Cloud Tasks menggunakan nomor project yang Anda salin:gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com --role roles/cloudtasks.serviceAgent
Ganti PROJECT_ID dengan project ID Anda dan PROJECT_NUMBER dengan nomor project Anda di atas.
Langkah selanjutnya
- Pelajari lebih lanjut tugas Target HTTP di referensi RPC API.
- Pelajari lebih lanjut tugas Target HTTP di referensi REST API.