Halaman ini menjelaskan cara memigrasikan kode push queue dari Task Queue ke Cloud Tasks. Cloud Tasks kini merupakan cara yang direkomendasikan untuk menangani push queue App Engine.
Dengan Cloud Tasks, Anda mengakses layanan yang sama dengan yang Anda akses menggunakan Task Queues RPC API. Artinya, Anda tidak perlu membuat ulang push queue dan tugas push yang sudah ada. Namun, Anda harus memigrasikan kode yang membuat atau berinteraksi dengan push queue atau tugas push untuk menggunakan Cloud Tasks API.
Anda dapat membuat dan berinteraksi dengan push queue dan tugas push menggunakan API RPC dan REST Cloud Tasks, library klien Cloud Tasks, Google Cloud CLI, dan Konsol Google Cloud. Halaman ini menyediakan contoh menggunakan gcloud CLI dan library klien Cloud Tasks.
Di Cloud Tasks, semua antrean beroperasi sebagai push queue. Di bagian lain panduan ini dan dalam dokumentasi Cloud Tasks, istilah antrean setara dengan istilah push queue. Demikian pula, istilah tugas setara dengan istilah tugas push.
Fitur yang tidak tersedia di Cloud Tasks
Fitur berikut tidak tersedia di Cloud Tasks:
- Mengantrekan tugas dalam transaksi Datastore
- Menggunakan library tugas yang ditangguhkan, sebagai ganti layanan worker
- Mengerjakan tugas di aplikasi multi-tenant
- Menyimulasikan dengan server pengembangan lokal
- Menambahkan tugas secara asinkron
Harga dan kuota
Memigrasikan push queue ke Cloud Tasks dapat memengaruhi harga dan kuota untuk aplikasi Anda.
Harga
Cloud Tasks memiliki harga sendiri. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine dengan sebuah tugas dapat menyebabkan aplikasi dikenai biaya.
Kuota
Kuota Cloud Tasks berbeda dengan kuota untuk Task Queue. Seperti halnya Task Queue, mengirim permintaan ke aplikasi App Engine Anda dari Cloud Tasks dapat memengaruhi kuota permintaan App Engine Anda.
Sebelum memigrasikan
Jika Anda belum melakukannya, siapkan lingkungan pengembangan Python Anda untuk menggunakan versi Python yang kompatibel dengan Google Cloud, dan instal alat pengujian untuk membuat lingkungan Python yang terisolasi.Bagian berikut membahas langkah-langkah penyiapan sebelum memigrasikan push queue ke Cloud Tasks.
Memigrasikan pull queue
Sebelum memulai, migrasikan pull queue sebelum mengikuti petunjuk dalam panduan ini untuk memigrasikan push queue. Memigrasikan pull queue setelah memigrasikan push queue tidak direkomendasikan karena penggunaan file queue.yaml
yang diperlukan cenderung menyebabkan perilaku yang tidak terduga dengan Cloud Tasks.
Melindungi konfigurasi antrean
Setelah Anda memulai proses migrasi ke Cloud Tasks, mengubah file queue.yaml
dapat menyebabkan perilaku yang tidak terduga dan tidak direkomendasikan. Lindungi konfigurasi antrean Anda dari modifikasi oleh file queue.yaml
dengan langkah-langkah berikut.
Konfigurasi gcloud CLI untuk menghapus file
queue.yaml
pada deployment mendatang.Tambahkan file
queue.yaml
Anda ke file.gcloudignore
. Untuk memeriksa apakah Anda sudah memiliki file.gcloudignore
, Anda dapat menjalankan perintah berikut di terminal Anda dari direktori level teratas aplikasi Anda. Perintah ini akan menghasilkan nama file jika file tersebut ada.ls -a | grep .gcloudignore
Untuk mempelajari lebih lanjut file
.gcloudignore
, baca referensi.gcloudignore
.Batasi izin pada file
queue.yaml
Anda.Ikuti praktik terbaik yang dijelaskan dalam panduan kami tentang mengamankan konfigurasi antrean.
Pelajari Cloud Tasks dan file
queue.yaml
(opsional).Saat menggunakan Cloud Tasks API untuk mengelola konfigurasi antrean Anda, men-deploy file
queue.yaml
akan menggantikan konfigurasi yang ditetapkan oleh Cloud Tasks, yang dapat menyebabkan perilaku tidak terduga. Baca Menggunakan pengelolaan antrean versus queue.yaml untuk mempelajari lebih lanjut.
Mengaktifkan Cloud Tasks API
Untuk mengaktifkan Cloud Tasks API, klik Enable di Cloud Tasks API di Library API. Jika melihat tombol Manage, bukan tombol Enable, berarti Anda sebelumnya telah mengaktifkan Cloud Tasks API untuk project Anda dan tidak perlu melakukannya lagi.
Mengautentikasi aplikasi ke Cloud Tasks API
Anda harus mengautentikasi aplikasi ke Cloud Tasks API. Bagian ini membahas autentikasi untuk dua kasus penggunaan yang berbeda.
Untuk mengembangkan atau menguji aplikasi secara lokal, sebaiknya gunakan akun layanan. Untuk petunjuk tentang cara menyiapkan akun layanan dan menghubungkannya ke aplikasi Anda, baca Mendapatkan dan memberikan kredensial akun layanan secara manual.
Untuk men-deploy aplikasi di App Engine, Anda tidak perlu memberikan autentikasi baru. Kredensial Default Aplikasi (ADC) menyimpulkan detail autentikasi untuk aplikasi App Engine.
Mendownload gcloud CLI
Download dan instal gcloud CLI untuk menggunakan gcloud CLI dengan Cloud Tasks API jika Anda belum pernah menginstalnya. Jalankan perintah berikut dari terminal jika Anda sudah menginstal gcloud CLI.
gcloud components update
Mengimpor Library Klien Cloud
Untuk menggunakan library klien Cloud Tasks dengan aplikasi App Engine Anda:
Perbarui file
app.yaml
. Ikuti petunjuk untuk versi Python Anda:Python 2
Untuk aplikasi Python 2, tambahkan versi terbaru library
grpcio
dansetuptools
.Berikut adalah contoh file
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest - name: setuptools version: latest
Python 3
Untuk aplikasi Python 3, tentukan elemen
runtime
di fileapp.yaml
dengan versi Python 3 yang didukung. Contoh:runtime: python310 # or another support version
Runtime Python 3 menginstal library secara otomatis, sehingga Anda tidak perlu menentukan library bawaan dari runtime Python 2 sebelumnya. Jika aplikasi Python 3 Anda menggunakan layanan paket lama lainnya saat bermigrasi, Anda dapat terus menentukan library bawaan yang diperlukan. Jika tidak, Anda dapat menghapus baris yang tidak diperlukan dalam file
app.yaml
.Perbarui file
requirements.txt
. Ikuti petunjuk untuk versi python Anda:Python 2
Tambahkan Library Klien Cloud untuk Cloud Tasks ke daftar dependensi Anda dalam file
requirements.txt
.google-cloud-tasks
Lalu, jalankan
pip install -t lib -r requirements.txt
untuk memperbarui daftar library yang tersedia untuk aplikasi Anda.Python 3
Tambahkan Library Klien Cloud untuk Cloud Tasks ke daftar dependensi Anda dalam file
requirements.txt
.google-cloud-tasks
App Engine otomatis menginstal dependensi ini selama deployment aplikasi di runtime Python 3, jadi hapus folder
lib
jika ada.Untuk aplikasi Python 2, jika aplikasi menggunakan library bawaan atau yang disalin, Anda harus menentukan jalur tersebut dalam file
appengine_config.py
, yang terletak di folder yang sama dengan fileapp.yaml
Anda:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
File
appengine_config.py
mengasumsikan bahwa direktori kerja saat ini adalah tempat folderlib
berada. Dalam beberapa kasus, seperti pengujian unit, direktori kerja saat ini dapat berbeda. Untuk menghindari error, Anda dapat secara eksplisit meneruskan jalur lengkap ke folderlib
menggunakan:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Impor library klien Cloud Tasks di file apa pun yang menggunakan push queue dari Task Queues API:
from google.cloud import tasks
Setelah berhasil menyelesaikan migrasi penuh atas semua kode yang membuat atau berinteraksi dengan push queue ke Cloud Tasks, hapus pernyataan yang mengimpor Task Queues API; misalnya,
from google.appengine.api import taskqueue
.
Membuat dan mengelola antrean
Bagian ini menjelaskan cara membuat dan mengelola antrean menggunakan Cloud Tasks API.
Dengan Cloud Tasks, Anda tidak menggunakan file queue.yaml
untuk membuat atau mengelola antrean. Sebagai gantinya, Anda menggunakan Cloud Tasks API. Menggunakan file queue.yaml
dan Cloud Tasks API tidak direkomendasikan, tetapi ini mungkin menjadi bagian yang tak terhindarkan dalam proses migrasi dari Task Queue ke Cloud Tasks, yang bergantung pada aplikasi Anda. Baca Menggunakan pengelolaan Antrean versus queue.yaml untuk mempelajari praktik terbaik.
Membuat antrean
Baca bagian ini jika aplikasi Anda membuat antrean secara terprogram, atau jika Anda ingin membuat antrean tambahan dari command line.
Di Cloud Tasks, nama antrean memiliki format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID
. Bagian LOCATION_ID
pada nama antrean sesuai dengan region Google Cloud. Bagian QUEUE_ID
dalam nama antrean setara dengan kolom name
antrean Task Queue. Nama antrean dibuat selama pembuatan antrean berdasarkan project, region, dan QUEUE_ID
yang Anda tentukan.
Secara umum, lokasi antrean (yaitu region) harus sama dengan region aplikasi Anda. Dua pengecualian untuk aturan ini adalah untuk aplikasi yang menggunakan region europe-west
dan aplikasi yang menggunakan region us-central
. Di Cloud Tasks, region ini masing-masing disebut europe-west1
dan us-central1
.
Anda dapat menentukan konfigurasi antrean opsional selama pembuatan antrean, tetapi Anda juga dapat melakukannya dengan memperbarui antrean setelah dibuat.
Anda tidak perlu membuat ulang antrean yang ada. Sebagai gantinya, migrasikan kode yang berinteraksi dengan antrean yang ada dengan membaca bagian yang relevan dalam panduan ini.
Menggunakan kembali nama antrean
Anda harus menunggu 7 hari setelah menghapus antrean untuk membuat antrean dengan ID antrean yang sama di project dan lokasi yang sama (yaitu region).
Contoh berikut membuat dua antrean menggunakan Cloud Tasks. Antrean pertama memiliki ID antrean queue-blue
, dan dikonfigurasi untuk mengirim semua tugas ke versi v2
layanan task-module
dengan kecepatan 5/s
. Antrean
kedua memiliki ID antrean queue-red
dan mengirim tugas dengan kecepatan 1/s
. Keduanya
dibuat pada project dengan project ID my-project-id
di lokasi us-central1
.
Ini adalah Cloud Tasks yang setara dengan membuat
antrean
di Task Queues.
gcloud
gcloud CLI menyimpulkan project dan lokasi dari konfigurasi gcloud CLI.
gcloud tasks queues create queue-blue \ --max-dispatches-per-second=5 \ --routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \ --max-dispatches-per-second=1
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Membuat antrean Cloud Tasks.
Menetapkan kecepatan pemrosesan antrean
Tabel berikut mencantumkan kolom yang berbeda dari Task Queue dengan Cloud Tasks.
Kolom Task Queue | Kolom Cloud Tasks | Deskripsi |
---|---|---|
rate |
max_dispatches_per_second |
Kecepatan maksimum saat tugas dikirim dari antrean |
max_concurrent_requests |
max_concurrent_dispatches |
Jumlah maksimum tugas serentak yang dapat dikirim dari antrean |
bucket_size |
max_burst_size |
Cloud Tasks menghitung properti get-only
Untuk antrean App Engine yang dibuat atau diperbarui menggunakan file
|
total_storage_limit |
Tidak digunakan lagi di Cloud Tasks | Cloud Tasks tidak mendukung penetapan batas penyimpanan kustom |
Anda dapat menetapkan kecepatan pemrosesan antrean saat membuat antrean atau memperbaruinya setelah itu. Contoh berikut menggunakan Cloud Tasks untuk menetapkan kecepatan pemrosesan pada antrean bernama queue-blue
yang telah dibuat. Jika queue-blue
dibuat atau dikonfigurasi menggunakan file queue.yaml
, contoh berikut akan mereset max_burst_size
berdasarkan nilai max_dispatches_per_second
dari 20
. Ini adalah Cloud Tasks yang setara dengan menetapkan kecepatan pemrosesan antrean di Task Queue.
gcloud
gcloud tasks queues update queue-blue \ --max-dispatches-per-second=20 \ --max-concurrent-dispatches=10
library klien
Untuk mempelajari lebih lanjut, lihat Menentukan pembatasan kapasitas.
Menonaktifkan dan melanjutkan antrean
Cloud Tasks menggunakan istilah jeda dengan cara yang sama seperti Task Queue menggunakan istilah nonaktifkan. Menjeda antrean akan menghentikan tugas dalam antrean agar tidak dijalankan hingga antrean dilanjutkan. Namun, Anda dapat terus menambahkan tugas ke antrean yang dijeda. Cloud Tasks menggunakan istilah lanjutkan dengan cara yang sama dengan Task Queue.
Contoh berikut menjeda antrean dengan ID antrean
queue1
. Ini adalah Cloud Tasks yang setara dengan menonaktifkan antrean di Task Queue.
gcloud
gcloud tasks queues pause queue1
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menjeda antrean.
Menghapus antrean
Setelah menghapus antrean, Anda harus menunggu 7 hari sebelum membuat antrean dengan nama yang sama. Sebaiknya hapus permanen semua tugas dari antrean dan konfigurasi ulang antrean jika Anda tidak dapat menunggu selama 7 hari.
Contoh berikut menghapus antrean dengan ID antrean
queue1
. Ini adalah Cloud Tasks yang setara dengan menghapus antrean di Task Queue.
gcloud
gcloud tasks queues delete queue1
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus antrean.
Membuat dan mengelola tugas
Bagian ini menjelaskan cara membuat dan mengelola tugas menggunakan Cloud Tasks API.
Membuat tugas
Tabel berikut mencantumkan kolom yang berbeda dari Task Queue dengan Cloud Tasks.
Kolom Task Queue | Kolom Cloud Tasks | Deskripsi |
---|---|---|
BARU di Cloud Tasks | app_engine_http_request |
Membuat permintaan yang menarget layanan App Engine. Tugas ini disebut sebagai tugas App Engine. |
method |
http_method |
Menentukan metode permintaan; misalnya, POST |
url |
relative_uri |
Menentukan pengendali tugas. Perhatikan perbedaan pada huruf terakhir: i untuk uniform resource identifier, dibandingkan l untuk uniform resource locator |
target |
app_engine_routing |
Opsional. Menentukan App Engine service , version , dan instance untuk tugas App Engine. Jika tidak disetel, layanan, versi
, dan instance default akan digunakan. |
Contoh berikut membuat tugas yang dirutekan ke
layanan App Engine bernama worker
dengan pengendali /update_counter
. Ini adalah Cloud Tasks yang setara dengan
membuat
tugas di Task Queue.
gcloud
gcloud tasks create-app-engine-task --queue=default \ --method=POST --relative-uri=/update_counter --routing=service:worker \ --body-content=10
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Membuat tugas App Engine.
Menentukan layanan dan perutean target
Penentuan layanan, versi, dan instance target App Engine untuk tugas App Engine bersifat opsional. Secara default, tugas App Engine dirutekan ke layanan, versi, dan instance yang merupakan default pada saat tugas dicoba.
Tetapkan properti app_engine_routing
tugas selama pembuatan tugas untuk menentukan layanan, versi, atau instance App Engine yang berbeda untuk tugas Anda.
Untuk merutekan semua tugas pada antrean tertentu ke layanan, versi, dan instance App Engine yang sama, Anda dapat menetapkan properti app_engine_routing_override
pada antrean.
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Mengonfigurasi pemilihan rute.
Meneruskan data ke pengendali
Seperti Task Queue, Anda dapat meneruskan data ke pengendali dalam dua cara menggunakan Cloud Tasks. Anda dapat meneruskan data sebagai parameter kueri di URI relatif, atau meneruskan data dalam isi permintaan menggunakan metode HTTP POST atau PUT.
Cloud Tasks menggunakan istilah body dengan cara yang sama seperti Task Queue menggunakan istilah payload. Di Cloud Tasks, jenis konten isi default adalah aliran octet, bukan teks biasa. Anda dapat menetapkan jenis konten isi dengan menentukannya di header.
Contoh berikut meneruskan kunci ke pengendali
/update_counter
dengan dua cara berbeda. Ini adalah Cloud Tasks yang setara dengan meneruskan data ke pengendali di Task Queue.
console
gcloud tasks create-app-engine-task --queue=default --method=GET \ --relative-uri= /update_counter ?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \ --relative-uri= /update_counter --routing=service:worker \ --body-content="{'key': 'blue'}"
library klien
Memberi nama tugas
Menentukan nama tugas bersifat opsional. Jika Anda tidak menentukan nama tugas, Cloud Tasks akan membuatnya untuk Anda dengan membuat ID tugas serta menyimpulkan project dan lokasi (yaitu region) berdasarkan antrean yang Anda tentukan selama pembuatan tugas.
Nama tugas memiliki format projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID
. Bagian TASK_ID
dari nama tugas setara dengan kolom name
tugas Task Queue.
Menggunakan kembali nama tugas
Anda harus menunggu sebelum menggunakan kembali nama tugas. Jumlah waktu yang harus Anda tunggu sebelum melakukannya berbeda-beda bergantung pada apakah antrean pengiriman tugas dibuat di Cloud Tasks atau Task Queue.
Untuk tugas pada antrean yang dibuat menggunakan Task Queue (termasuk antrean default), Anda harus menunggu sekitar 9 hari setelah tugas asli dihapus atau dieksekusi. Untuk tugas pada antrean yang dibuat menggunakan Cloud Tasks, Anda harus menunggu sekitar 1 jam setelah tugas asli dihapus atau dieksekusi.
Contoh berikut membuat tugas dengan TASK_ID
yang ditetapkan ke first-try
, dan menambahkannya ke antrean default. Ini adalah Cloud Tasks yang setara dengan memberi nama tugas
di Task Queue.
gcloud
gcloud CLI membuat nama tugas dengan menyimpulkan project dan lokasi dari konfigurasi Anda.
gcloud tasks create-app-engine-task first-try --queue=default \ --method=GET --relative-uri= /url/path
library klien
Dengan library klien, Anda harus menentukan nama lengkap tugas jika ingin menentukan TASK_ID
. Project dan lokasi harus cocok dengan project dan lokasi antrean tempat tugas ditambahkan.
Mencoba lagi tugas yang gagal
Anda dapat menetapkan konfigurasi percobaan ulang tugas pada antrean selama pembuatan antrean, atau dengan memperbarui antrean. Tabel berikut mencantumkan kolom Task Queue dan kolom Cloud Tasks yang sesuai.
Kolom Task Queue | Kolom Cloud Tasks |
---|---|
task_retry_limit |
max_attempts |
task_age_limit |
max_retry_duration |
min_backoff_seconds |
min_backoff |
max_backoff_seconds |
max_backoff |
max_doublings |
max_doublings |
Parameter percobaan ulang khusus tugas
Parameter percobaan ulang khusus tugas yang dikonfigurasi di Task Queue berfungsi di Cloud Tasks, tetapi Anda tidak dapat mengeditnya atau menetapkannya pada tugas baru. Guna mengubah parameter percobaan ulang untuk tugas yang memiliki parameter percobaan ulang khusus tugas, buat ulang tugas dengan antrean Cloud Tasks yang memiliki parameter percobaan ulang yang diinginkan.
Contoh berikut menunjukkan berbagai skenario percobaan ulang:
- Dalam
fooqueue
, tugas dicoba ulang hingga tujuh kali dan hingga dua hari sejak upaya eksekusi pertama. Setelah kedua batas terlampaui, kedua batas tersebut akan gagal secara permanen. - Dalam
barqueue
, App Engine akan berupaya mencoba ulang tugas, dengan meningkatkan interval secara linear antara setiap percobaan ulang hingga mencapai backoff maksimum dan mencoba lagi tanpa batas waktu pada interval maksimum (sehingga interval antarpermintaan adalah 10 dtk, 20 dtk, 30 dtk, ..., 190 dtk, 200 dtk, 200 dtk, ...). - Dalam
bazqueue
, interval percobaan ulang dimulai pada 10 detik, lalu dua kali lipat tiga kali, lalu meningkat secara linear, dan akhirnya mencoba lagi tanpa batas waktu pada interval maksimum (sehingga interval antarpermintaan adalah 10 dtk, 20 dtk, 40 dtk, 80 dtk, 160 dtk, 240 dtk, 300 dtk, 300 dtk, ...).
Ini adalah Cloud Tasks yang setara dengan mencoba ulang tugas di Task Queue.
gcloud
Saat menyetel opsi yang menentukan jumlah detik, Anda harus menyertakan s
setelah angka bilangan bulat (misalnya 200s
, bukan 200
).
gcloud tasks queues create fooqueue \ --max-attempts=7 \ --max-retry-duration=172800s #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \ --min-backoff=10s \ --max-backoff=200s \ --max-doublings=0
gcloud tasks queues create bazqueue \ --min-backoff=10s \ --max-backoff=300s \ --max-doublings=3
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menetapkan parameter percobaan ulang.
Menghapus tugas dari antrean
Saat menghapus tugas, Anda harus menunggu 9 hari sebelum membuat tugas dengan nama yang sama jika tugas berada di antrean yang dibuat menggunakan file queue.yaml
, atau 1 jam jika tugas berada di antrean yang dibuat menggunakan Cloud Tasks.
Contoh berikut menghapus tugas dengan ID tugas foo
dari antrean dengan ID antrean queue1
. Ini adalah Cloud Tasks yang setara dengan menghapus tugas di Task Queue.
gcloud
Project tugas dan lokasi disimpulkan dari project default gcloud CLI.
gcloud tasks delete foo --queue=queue1
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus tugas dari antrean.
Menghapus permanen tugas
Contoh berikut menghapus permanen semua tugas dari antrean dengan ID antrean
queue1
. Ini adalah Cloud Tasks yang setara dengan menghapus permanen tugas di Task Queue.
gcloud
Project antrean dan lokasi disimpulkan dari project default gcloud CLI.
gcloud tasks queues purge queue1
library klien
Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus permanen semua tugas dari antrean.
Langkah berikutnya
- Dokumentasi Cloud Tasks
- Library klien Cloud Tasks
- Ringkasan Referensi REST Cloud Tasks
- Ringkasan Referensi RPC Cloud Tasks
- Untuk tutorial, lihat Bermigrasi dari push queue Task Queue App Engine ke codelab Cloud Tasks.