Pengendali Cloud Tasks dapat dijalankan di endpoint HTTP mana pun dengan alamat IP eksternal seperti GKE, Compute Engine, atau bahkan server web lokal. Tugas Anda dapat dijalankan di salah satu layanan ini dengan cara yang andal dan dapat dikonfigurasi.
Halaman ini menunjukkan cara membuat tugas target HTTP dasar secara terprogram dan menempatkannya di Cloud Tasks queue.
Untuk tugas yang memiliki target HTTP (berbeda dengan target App Engine eksplisit, yang kurang umum), ada dua cara untuk membuat tugas:
Metode
CreateTask
: Anda harus membuat objek tugas secara eksplisit. Gunakan metode ini jika tugas dalam antrean Anda memiliki konfigurasi perutean yang berbeda. Dalam hal ini, Anda menentukan perutean di tingkat tugas dan tidak dapat menggunakan perutean tingkat antrean. Pendekatan ini menggunakan metodeCreateTask
.Metode
BufferTask
: Gunakan metode ini jika antrean Anda disiapkan untuk melakukan buffering tugas di depan layanan. Antrean harus memiliki perutean tingkat antrean. Pendekatan ini menggunakan metodeBufferTask
.
Membuat tugas menggunakan metode CreateTask
Bagian ini membahas cara membuat tugas dengan menyusun objek tugas. Anda menggunakan
metode CreateTask
.
Saat membuat tugas menggunakan metode CreateTask
, Anda secara eksplisit membuat dan
menentukan objek tugas. Anda harus menentukan layanan dan pengendali yang memproses
tugas.
Secara opsional, Anda dapat meneruskan data khusus tugas ke pengendali. Anda juga dapat menyesuaikan konfigurasi untuk tugas, seperti menjadwalkan waktu pada masa mendatang saat tugas harus dijalankan atau membatasi frekuensi percobaan ulang tugas yang diinginkan jika gagal (lihat Konfigurasi lanjutan).
Contoh berikut memanggil metode CreateTask
untuk membuat tugas menggunakan
library klien Cloud Tasks.
C#
Go
Java
Perhatikan file pom.xml
:
Node.js
Perhatikan file package.json
:
PHP
Perhatikan file composer.json
:
Python
Perhatikan file requirements.txt
:
Ruby
Membuat tugas menggunakan metode BufferTask
Bagian ini membahas cara membuat tugas dengan mengirim permintaan HTTP. Metode yang Anda gunakan disebut BufferTask
.
Batasan
Metode BufferTask
tunduk pada batasan berikut:
Library klien: Metode
BufferTask
tidak didukung di library klien.RPC API: Metode
BufferTask
tidak didukung di RPC API.Perutean tingkat tugas: Metode ini tidak mendukung perutean tingkat tugas. Karena tidak ada tempat untuk menambahkan informasi perutean saat membuat tugas dengan cara ini, 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.
Panggil metode BufferTask
Contoh berikut menunjukkan cara membuat tugas dengan mengirim permintaan HTTP POST
ke endpoint Cloud Tasks API
buffer
.
curl
Cuplikan kode berikut menunjukkan contoh pembuatan tugas 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; misalnya,GET
atauPOST
.PROJECT_ID
: ID Google Cloud project Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:gcloud config get-value project
LOCATION
: lokasi antrean Anda.QUEUE_ID
: ID antrean Anda.
Python
Menyiapkan akun layanan untuk autentikasi handler target HTTP
Cloud Tasks dapat memanggil handler target HTTP yang memerlukan autentikasi jika Anda memiliki akun layanan dengan kredensial yang sesuai untuk mengakses handler.
Anda dapat menggunakan akun layanan saat ini jika Anda memberikan peran yang sesuai. Petunjuk ini membahas cara membuat akun layanan baru khusus untuk fungsi ini. Akun layanan yang 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 Service account details, beri nama akun. Konsol membuat nama akun email terkait untuk akun tersebut. Berikut cara Anda mereferensikan akun. Anda juga dapat menambahkan deskripsi tentang tujuan pembuatan akun tersebut. Klik Buat dan lanjutkan.
Di bagian Berikan akses akun layanan ini ke project, klik Pilih peran. Telusuri dan pilih Cloud Tasks Enqueuer. Peran ini memberikan izin kepada akun layanan untuk menambahkan tugas ke antrean.
Klik + Add another role.
Klik Pilih peran. Telusuri dan pilih Service Account User. Peran ini memungkinkan akun layanan memberi otorisasi pada antrean untuk membuat token atas namanya menggunakan kredensial akun layanan.
Jika handler Anda adalah bagian dari Google Cloud, berikan akun layanan peran yang terkait dengan akses ke layanan tempat handler Anda berjalan. Setiap layanan dalam Google Cloud memerlukan peran yang berbeda. Misalnya, untuk mengakses handler di Cloud Run, berikan peran Cloud Run Invoker. Anda dapat menggunakan akun layanan yang baru saja Anda buat atau akun layanan lain di project Anda.
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
Cloud Tasks sendiri harus memiliki akun layanan sendiri yang telah diberi peran
Cloud Tasks Service Agent
. Hal ini dilakukan agar dapat membuat header
token berdasarkan kredensial yang terkait dengan akun layanan Cloud Tasks
untuk mengautentikasi dengan target handler Anda. Akun layanan Cloud Tasks dengan peran ini yang diberikan akan otomatis dibuat saat Anda mengaktifkan Cloud Tasks API, kecuali jika Anda mengaktifkannya sebelum 19 Maret 2019, yang dalam hal ini Anda harus menambahkan peran secara manual.
Menggunakan tugas target HTTP dengan token autentikasi
Untuk mengautentikasi antara Cloud Tasks dan handler target HTTP yang memerlukan autentikasi tersebut, Cloud Tasks membuat token header. Token ini didasarkan pada kredensial di akun layanan Cloud Tasks Enqueuer
, yang diidentifikasi oleh alamat emailnya. Akun layanan yang digunakan untuk autentikasi harus menjadi bagian dari project yang sama dengan tempat antrean Cloud Tasks Anda berada. Permintaan, dengan token header, dikirim dari antrean ke pengendali melalui HTTPS. Anda dapat menggunakan
token ID
atau token akses.
Token ID umumnya harus digunakan untuk handler apa pun yang berjalan di Google Cloud,
misalnya, di Cloud Run functions atau Cloud Run. Pengecualian utamanya adalah
untuk Google API yang dihosting di *.googleapis.com
: API ini memerlukan token akses.
Anda dapat mengonfigurasi autentikasi di tingkat antrean atau di tingkat tugas. Untuk mengonfigurasi autentikasi di tingkat antrean, lihat Membuat antrean Cloud Tasks. Jika autentikasi dikonfigurasi di tingkat antrean, konfigurasi ini akan menggantikan konfigurasi di tingkat tugas. Untuk mengonfigurasi autentikasi di tingkat tugas, tentukan token ID (OIDC) atau token akses (OAuth) di tugas itu sendiri.
Metode CreateTask
Contoh berikut menggunakan metode CreateTask
dengan library klien Cloud Tasks untuk membuat tugas yang juga menyertakan pembuatan token header. Token ID digunakan dalam contoh.
Untuk menggunakan token akses, ganti parameter OIDC dengan parameter OAuth yang sesuai bahasa dalam membuat permintaan.
Go
Java
Perhatikan file pom.xml
:
Node.js
Perhatikan file package.json
:
Python
Perhatikan file requirements.txt
:
Metode BufferTask
Contoh berikut menggunakan kredensial default aplikasi untuk melakukan autentikasi saat menggunakan metode BufferTask
untuk membuat tugas.
curl
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; misalnya,GET
atauPOST
.PROJECT_ID
: ID Google Cloud project Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal: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
Python
Dalam contoh kode berikut, berikan nilai token autentikasi Anda.
Menyediakan pengendali tugas target HTTP Anda sendiri
Penangan tugas Target HTTP sangat mirip dengan penangan tugas App Engine, dengan pengecualian berikut:
- Waktu tunggu: untuk semua handler tugas target HTTP, 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, terutama 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 serupa dengan, tetapi tidak identik dengan, header yang ditetapkan pada permintaan tugas App Engine. Header ini hanya memberikan informasi. ID tersebut tidak boleh digunakan sebagai sumber identitas.
Jika ada header ini dalam permintaan pengguna eksternal ke aplikasi Anda, header tersebut akan diganti dengan header internal. Satu-satunya pengecualian adalah untuk permintaan dari administrator aplikasi yang login, yang diizinkan menyetel 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
Jumlah total respons yang diterima tugas dari handler. Karena Cloud Tasks menghapus tugas setelah respons berhasil diterima, semua respons handler sebelumnya gagal. Jumlah ini tidak mencakup kegagalan karena kode error 5XX. X-CloudTasks-TaskETA
Waktu jadwal tugas, ditentukan dalam detik sejak 1 Januari 1970. Selain itu, permintaan dari Cloud Tasks dapat 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 secara manual
Anda dapat menambahkan peran
Cloud Tasks Service Agent
(roles/cloudtasks.serviceAgent
) secara manual ke akun layanan Cloud Tasks Anda yang merupakan
agen layanan utama untuk
Cloud Tasks.
Tindakan ini hanya diperlukan jika Anda mengaktifkan Cloud Tasks API sebelum 19 Maret 2019.
Konsol
- Temukan dan salin nomor project untuk project Google Cloud Anda di halaman Welcome di konsol Google Cloud .
Di konsol Google Cloud , buka halaman IAM.
Klik Grant access. Panel Berikan akses akan terbuka.
Di bagian Add principals, tambahkan alamat email dalam format ini:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Ganti
PROJECT_NUMBER
dengan Google Cloud nomor project Anda.Di bagian Assign roles, telusuri dan pilih Cloud Tasks Service Agent.
Klik Simpan.
gcloud
Temukan nomor project Anda:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Ganti PROJECT_ID dengan project ID Anda.
Salin nomor ke bawah.
Beri akun layanan Cloud Tasks peran
Cloud Tasks Service Agent
, 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 kode berikut:
PROJECT_ID
: ID project Anda. Google CloudPROJECT_NUMBER
: nomor project Google Cloud Anda.
Konfigurasi lainnya
Ada sejumlah atribut tugas yang dapat Anda konfigurasi. Untuk daftar lengkapnya, lihat definisi resource tugas. Misalnya, Anda dapat menyesuaikan atribut berikut:
- Penamaan: 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.
- Penjadwalan: Anda dapat menjadwalkan tugas untuk waktu mendatang. Fitur ini didukung
hanya untuk
CreateTask
dan tidak didukung untukBufferTask
.
Anda juga dapat mengonfigurasi atribut antrean seperti penggantian perutean, batas kecepatan, dan parameter percobaan ulang. Konfigurasi ini diterapkan ke semua tugas dalam antrean. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi antrean Cloud Tasks.
Langkah berikutnya
- Pelajari lebih lanjut tugas target HTTP di referensi RPC API.
- Pelajari lebih lanjut tugas target HTTP di referensi REST API.