Memigrasikan push queue ke Cloud Tasks (Go)

Sebelum mengupgrade ke SDK layanan App Engine versi terbaru, tinjau ringkasan migrasi.

Mengupgrade ke library klien Cloud Tasks

Jika ingin sepenuhnya beralih dari paket layanan lama, Anda dapat memigrasikan kode untuk menggunakan Cloud Tasks API secara langsung. Hal ini memerlukan pemfaktoran ulang kode aplikasi Anda.

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 REST dan RPC Cloud Tasks, library klien Cloud Tasks, Google Cloud CLI, dan Google Cloud konsol. Halaman ini menyediakan contoh menggunakan gcloud CLI dan library klien Cloud Tasks.

Fitur yang tidak tersedia di Cloud Tasks

Untuk migrasi library klien 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

Atau, jika Anda mengupgrade ke SDK terbaru, fitur seperti tugas yang ditangguhkan, namespace, dan simulasi lokal didukung melalui wrapper SDK.

Harga dan kuota

Memigrasikan push queue ke Cloud Tasks dapat memengaruhi harga dan kuota untuk aplikasi Anda.

Harga

Tinjau harga Cloud Tasks untuk memperkirakan biaya bulanan Anda sebelum melakukan migrasi.

Mirip dengan Task Queue, mengirim permintaan ke aplikasi App Engine Anda dengan target push Cloud Tasks tidak dikenai biaya. Namun, tidak seperti Task Queue, Cloud Tasks mengenakan biaya untuk operasi yang dilakukan, seperti membuat, menghapus, atau mengelola tugas. Hal ini dapat menyebabkan biaya bulanan keseluruhan yang lebih tinggi dibandingkan dengan Task Queue App Engine tanpa biaya.

Kuota

Permintaan Cloud Tasks juga dihitung dalam kuota permintaan App Engine Anda.

Seperti Task Queue, Cloud Tasks memiliki kuota khusus layanan. Memigrasikan ke Cloud Tasks kemungkinan akan mengubah kuota Anda.

Sebelum memulai

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.

  1. 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.

  2. Batasi izin pada file queue.yaml Anda.

    Ikuti praktik terbaik yang dijelaskan dalam panduan kami tentang mengamankan konfigurasi antrean.

  3. 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.

Mengautentikasi aplikasi Anda 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.

Mengimpor Library Klien Cloud

Untuk menggunakan library klien Cloud Tasks dengan aplikasi App Engine Anda:

  1. Download dependensi library klien Cloud Tasks:

    go get cloud.google.com/go/cloudtasks/apiv2
  2. Impor dependensi library klien Cloud Tasks dalam file yang bertanggung jawab untuk membuat dan mengantrekan tugas Anda:

    import (
      "context"
      "fmt"
    
      cloudtasks "cloud.google.com/go/cloudtasks/apiv2"
      taskspb "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb"
    )

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 Google Cloud region. 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 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

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 max_burst_size yang membatasi seberapa cepat tugas dalam antrean diproses berdasarkan nilai max_dispatches_per_second. Kolom ini memungkinkan antrean memiliki kecepatan tinggi sehingga pemrosesan dimulai sesaat setelah tugas diantrekan, tetapi tetap membatasi penggunaan resource saat banyak tugas diantrekan dalam waktu singkat.

Untuk antrean App Engine yang dibuat atau diperbarui menggunakan file , max_burst_size pada awalnya setara dengan bucket_size. Namun, jika antrean selanjutnya diteruskan ke perintah update menggunakan antarmuka Cloud Tasks apa pun, max_burst_size akan direset berdasarkan nilai max_dispatches_per_second, terlepas dari apakah max_dispatches_per_second sudah diperbarui.

total_storage_limit Tidak digunakan lagi di Cloud Tasks Cloud Tasks tidak mendukung penetapan batas penyimpanan khusus

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

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

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

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
T/A 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 pengendali /update_counter pada layanan App Engine default. 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

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.

gcloud

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'}"

Tentukan 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

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

Menggunakan 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

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

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus tugas dari antrean.

Menghapus tugas secara permanen

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

Untuk mempelajari lebih lanjut, baca referensi Cloud Tasks Menghapus permanen semua tugas dari antrean.

Langkah berikutnya