Mengupgrade fungsi generasi ke-1 ke fungsi Cloud Run
Panduan ini menjelaskan cara mengupgrade fungsi HTTP dan Pub/Sub generasi ke-1 ke fungsi Cloud Run yang berjalan di Cloud Run. Panduan ini hanya berlaku untuk fungsi generasi ke-1 yang dibuat menggunakan Cloud Functions v1 API. Petunjuk dalam panduan ini tidak berlaku untuk fungsi generasi ke-2 yang dibuat dengan Cloud Functions v2 API atau Cloud Functions for Firebase, yang merupakan produk terpisah.
Setelah upgrade selesai, Anda hanya dapat berinteraksi dengan fungsi yang diupgrade menggunakan Cloud Run Admin API dan alat Cloud Run.
Batasan
Alat upgrade hanya mendukung upgrade fungsi yang dipicu HTTP dan Pub/Sub saat ini.
Ringkasan proses upgrade
Berikut ringkasan umum proses upgrade:
Detail proses ini dijelaskan di bagian berikut.
Ringkasan Mulai Upgrade
- Saat Anda memulai upgrade (menggunakan Google Cloud CLI atau
konsol Google Cloud ), alat upgrade akan membuat fungsi 2nd gen sementara yang merupakan salinan fungsi 1st gen asli Anda. Fungsi generasi ke-2 ini:
- Berfungsi sebagai jembatan antara fungsi generasi ke-1 yang asli dan fungsi yang telah diupgrade sepenuhnya.
- Memiliki nama, kode, dan konfigurasi yang sama dengan fungsi generasi ke-1
asli.
- Jika mengupgrade fungsi HTTP, memiliki URL
cloudfunctions.net
yang sama dengan fungsi generasi ke-1 asli, dan juga memiliki URL Cloud Runrun.app
.- Setelah memulai upgrade, salinan fungsi generasi ke-1 dan fungsi generasi ke-2 Anda akan ditetapkan ke URL
cloudfunctions.net
yang sama. Saat mengirim permintaan ke URLcloudfunctions.net
, traffic akan terus dirutekan ke fungsi generasi ke-1. Salinan fungsi generasi ke-2 juga memiliki URL Cloud Runrun.app
. URL fungsi generasi ke-2 tidak akan menerima traffic hingga Anda mengalihkan traffic pada langkah berikutnya.
- Setelah memulai upgrade, salinan fungsi generasi ke-1 dan fungsi generasi ke-2 Anda akan ditetapkan ke URL
- Jika mengupgrade fungsi Pub/Sub, menggunakan topik Pub/Sub yang sama dengan fungsi generasi ke-1, tetapi belum memiliki langganan.
- Jika mengupgrade fungsi HTTP, memiliki URL
- Perhatikan bahwa jika Anda tidak menyematkan dependensi ke versi tertentu, salinan fungsi generasi ke-2 yang baru dibuat dapat menggunakan versi dependensi yang lebih baru.
- Fungsi generasi ke-1 terus dicantumkan di konsol Google Cloud generasi ke-1, dan salinan sementara generasi ke-2 muncul untuk pertama kalinya di konsol Cloud Run.
Contoh: Tabel ini menunjukkan status fungsi HTTP selama langkah upgrade awal.
Functions | Melayani Traffic? | Terlihat di Konsol? |
---|---|---|
Fungsi generasi ke-1 asli | Ya, dari URL cloudfunctions.net |
Ya, konsol generasi ke-1. |
Salinan generasi ke-2 baru | Tidak. Fungsi ini memiliki URL cloudfunctions.net dan run.app , tetapi tidak akan melayani traffic hingga langkah pengalihan. |
Ya, konsol Cloud Run. |
Ringkasan pengalihan traffic
- Saat Anda mengalihkan traffic, hasilnya bergantung pada apakah fungsi yang Anda upgrade adalah fungsi HTTP atau fungsi Pub/Sub:
- Jika Anda mengupgrade fungsi HTTP, traffic yang diarahkan ke URL
cloudfunctions.net
akan masuk ke fungsi generasi ke-2. Fungsi generasi ke-1 Anda tetap ada, tetapi tidak menerima traffic apa pun. - Jika Anda mengupgrade fungsi Pub/Sub, pemicu fungsi generasi ke-2 menggunakan topik Pub/Sub yang sama, tetapi membuat langganan baru yang mengirim pesan ke fungsi Cloud Run. Langganan lama dihapus.
- Jika Anda mengupgrade fungsi HTTP, traffic yang diarahkan ke URL
- Fungsi generasi ke-1 akan hilang dari konsol generasi ke-1.
- Jika menjalankan perintah
gcloud functions describe
, Anda dapat melihat bahwa lingkungan fungsi kini adalah generasi ke-2. - Perhatikan bahwa ada risiko selama fase transisi ini, terutama untuk
fungsi Pub/Sub:
- Pesan duplikat: Langganan baru dibuat sebelum langganan lama dihapus. Pesan Pub/Sub yang sama dapat dikirim ke fungsi lama dan fungsi baru Anda selama waktu transisi ini.
- Kehilangan pesan: Jika Anda mengupgrade fungsi Pub/Sub dan fungsi baru gagal menangani pesan setelah traffic dialihkan, Anda berisiko kehilangan pesan Pub/Sub. Hal ini terutama berlaku jika fungsi telah menonaktifkan percobaan ulang; lihat Mengupgrade Pub/Sub untuk mengetahui detailnya.
Contoh: Tabel ini menunjukkan status fungsi HTTP selama langkah pengalihan traffic.
Functions | Melayani Traffic? | Terlihat di Konsol? |
---|---|---|
Fungsi generasi ke-1 asli | Tidak. | Tidak lagi terlihat di konsol generasi ke-1, tetapi masih ada. |
Salinan generasi ke-2 baru | Ya, dari URL cloudfunctions.net serta dari URL Cloud Run run.app . |
Ya, konsol Cloud Run. |
Ringkasan traffic rollback
- Saat Anda mengembalikan traffic, alat upgrade akan mengembalikan semua traffic dari salinan fungsi generasi ke-2 ke fungsi generasi ke-1 asli, yang kini melayani semua traffic. Fungsi generasi ke-2 masih tersedia untuk pengujian.
- Jika Anda memutar kembali fungsi Pub/Sub, langganan fungsi generasi ke-1 dibuat lagi, dan langganan fungsi generasi ke-2 dihapus.
- Jika ingin melanjutkan upgrade setelah mengembalikan traffic, Anda harus mengarahkan traffic lagi ke fungsi generasi ke-2 yang baru untuk melanjutkan.
Contoh: Tabel ini menunjukkan status fungsi HTTP jika Anda mengembalikan traffic.
Functions | Melayani Traffic? | Terlihat di Konsol? |
---|---|---|
Fungsi generasi ke-1 asli | Ya. | Ya, konsol generasi ke-1. |
Salinan generasi ke-2 baru | Tidak. | Tidak lagi terlihat di konsol Cloud Run, tetapi masih ada. |
Membatalkan ringkasan
Anda dapat membatalkan upgrade kapan saja sebelum Anda melakukan penerapan. Setelah Anda melakukan konfirmasi, upgrade tidak dapat dibatalkan.
Contoh: Tabel ini menunjukkan status fungsi HTTP jika Anda membatalkan upgrade.
Functions | Melayani Traffic? | Terlihat di Konsol? |
---|---|---|
Fungsi generasi ke-1 asli | Ya. | Ya, konsol generasi ke-1. |
Salinan generasi ke-2 | Tidak. | Tidak lagi terlihat di konsol Cloud Run, tidak lagi ada. |
Ringkasan penerapan (tidak dapat diurungkan)
- Melakukan upgrade akan menyelesaikan proses upgrade untuk fungsi generasi ke-1. Tindakan ini tidak dapat dibatalkan.
- Fungsi sementara generasi ke-2 dikonversi menjadi
fungsi Cloud Run yang lengkap berdasarkan
Cloud Run Admin API.
- Tindakan ini setara dengan menjalankan perintah
detach
pada fungsi generasi ke-2. Perintahdetach
melepaskan fungsi Cloud Functions v2 dari lingkungan API yang ada. - Selanjutnya, Anda hanya dapat berinteraksi dengan fungsi yang diupgrade menggunakan Cloud Run Admin API dan alat Cloud Run.
- Tindakan ini setara dengan menjalankan perintah
- Fungsi generasi ke-1 dihapus, dan semua traffic ditayangkan ke fungsi Cloud Run yang diupgrade.
Contoh: Tabel ini menunjukkan status fungsi HTTP setelah Anda melakukan upgrade:
Functions | Melayani Traffic? | Terlihat di Konsol? |
---|---|---|
Fungsi Cloud Run baru berdasarkan Cloud Run Admin API. | Ya, dari URL cloudfunctions.net serta dari URL Cloud Run run.app . |
Ya, konsol Cloud Run. |
Fungsi generasi ke-1 asli | Tidak. | Tidak, tidak ada lagi. |
Salinan generasi ke-2 | Tidak. | Tidak, tidak ada lagi. |
Tips pengujian
Pengujian adalah bagian penting dari proses upgrade.
Sebaiknya Anda memahami alat upgrade dengan mengujinya pada fungsi non-produksi. Setelah menguasai proses dan melihat keberhasilan yang konsisten, Anda dapat mulai mengupgrade fungsi produksi.
Berikut beberapa alat dan teknik yang dapat Anda gunakan untuk menguji fungsi selama upgrade:
Setiap kali fungsi Anda berubah status, gunakan perintah
describe
Google Cloud CLI untuk memverifikasi bahwa fungsi ada, serta lingkungan dan versinya sesuai dengan yang diharapkan. Bergantung pada status fungsi yang sedang diupgrade, gunakan salah satu opsi berikutCloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
Cloud Functions:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Gunakan halaman Logging di konsol generasi ke-1 dan Cloud Run untuk melihat detail traffic fungsi.
Gunakan konsol Cloud Run untuk melihat dan menguji salinan fungsi generasi ke-2 saat proses upgrade berlangsung:
- Gunakan tab Pemicu untuk menguji salinan fungsi generasi ke-2 setelah memulai upgrade.
- Gunakan tab YAML untuk melihat detail tentang fungsi, termasuk URL
run.app
Cloud Run-nya.
Sebelum memulai
Sebelum memulai upgrade, pastikan Anda memenuhi prasyarat berikut:
Anda telah mengaktifkan Cloud Run API:
gcloud services enable run.googleapis.com
Anda memiliki fungsi HTTP atau Pub/Sub generasi ke-1 yang sudah ada.
Anda memiliki peran IAM yang diperlukan:
- Anda harus menyetel
roles/iam.serviceAccountUser
di akun layanan fungsi. - Anda harus memiliki peran
roles/cloudfunctions.admin
atau peran yang setara di project untuk melakukan upgrade. - Untuk fungsi Pub/Sub dengan setelan
no-retry
, Anda memiliki peranroles/serviceusage.consumer
atau peran khusus dengan izinserviceusage.services.user
. - Untuk melakukan upgrade fungsi Pub/Sub, Anda harus memiliki peran
roles/pubsub.admin
. Peranroles/pubsub.admin
adalah peran tingkat project yang memberikan akses administratif ke semua resource Pub/Sub dalam project.
Anda dapat melihat kebijakan IAM fungsi sebagai berikut:
gcloud functions get-iam-policy FUNCTION_NAME
- Anda harus menyetel
Anda harus memiliki
roles/cloudfunctions.admin
yang diberikan pada akun layanan fungsi. Untuk memberikan peranroles/cloudfunctions.admin
, gunakan perintahgcloud functions add-iam-policy-binding
, misalnya:gcloud functions add-iam-policy-binding FUNCTION_NAME \ --region=REGION \ --member=serviceAccount:SERVICE_ACCOUNT \ --role="roles/cloudfunctions.admin"
Jika Anda mendapatkan error saat mencoba menjalankan perintah ini, pastikan fungsi Anda mematuhi kebijakan organisasi Anda. Misalnya, organisasi Anda mungkin tidak mengizinkan fungsi HTTP yang tidak diautentikasi.
Untuk mempelajari anggota dan peran lebih lanjut, lihat Menambahkan pokok dan memberikan peran.
Mengupgrade fungsi HTTP
Bagian ini menjelaskan cara mengupgrade fungsi HTTP generasi ke-1 menjadi fungsi Cloud Run. Untuk mempelajari cara mengupgrade fungsi Pub/Sub generasi ke-1, lihat bagian selanjutnya.
Setelah Anda mengalihkan traffic dan
melakukan upgrade seperti yang dijelaskan di bagian
berikut, URL cloudfunctions.net
yang terkait dengan fungsi HTTP generasi ke-1 yang asli akan terus berfungsi dan akan merutekan traffic ke fungsi Cloud Run yang baru.
Mulai upgrade fungsi HTTP
Langkah ini membuat salinan fungsi generasi ke-2 dari fungsi generasi ke-1 Anda.
Konsol
Di konsol Google Cloud , buka halaman Functions (generasi ke-1):
Temukan fungsi generasi ke-1 yang ingin Anda upgrade, dan konfirmasi bahwa statusnya di kolom Status upgrade adalah Siap diupgrade.
Klik nama fungsi untuk menampilkan halaman detailnya.
Di halaman detail fungsi, klik Upgrade di bagian Memenuhi syarat untuk upgrade.
Ikuti perintah untuk memulai proses upgrade.
Setelah Anda menyelesaikan langkah ini, panel Upgrade sedang berlangsung akan muncul, meminta Anda untuk mengklik link Buka Cloud Run untuk melanjutkan proses upgrade.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --setup-config
:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
Ganti FUNCTION_NAME dengan nama fungsi generasi ke-1 Anda.
Setelah memulai upgrade:
- Fungsi generasi ke-1 terus menayangkan traffic ke URL aslinya. Anda dapat melihat URL ini dengan membuka halaman detail fungsi di konsol Functions (generasi ke-1) dan membuka tab Pemicu.
Fungsi generasi ke-2 sementara yang merupakan salinan fungsi generasi ke-1 akan dibuat. Fungsi ini memiliki URL
cloudfunctions.net
yang sama dengan fungsi generasi ke-1, serta URLrun.app
Cloud Run baru. Anda dapat melihat kedua URL ini dengan membuka halaman detail fungsi di konsol Cloud Run dan membuka tab YAML. Atau, Anda dapat menggunakan perintah ini:gcloud run services describe YOUR_SERVICE_NAME \ --region YOUR_REGION \ --format="value(status.url)"
Anda dapat memverifikasi bahwa salinan generasi ke-2 dari fungsi generasi ke-1 Anda ada:
gcloud run services describe FUNCTION_NAME --format yaml
Anda dapat memverifikasi lingkungan fungsi generasi ke-1, tempat output harus menampilkan lingkungan fungsi sebagai
1st gen
:gcloud functions describe --region REGION_NAME FUNCTION_NAME
Memecahkan masalah langkah memulai upgrade
Upgrade gagal dalam kondisi berikut:
- Fungsi dengan nama yang sama sudah ada di region dan project yang sama.
- Fungsi generasi ke-1 menggunakan runtime yang dihentikan, sehingga tidak dapat diupgrade hingga Anda men-deploy ulang fungsi tersebut dengan runtime yang didukung.
- Pemanggil tidak memiliki izin
cloudfunctions.functions.generationUpgrade
. Perhatikan bahwa pemanggil memerlukan peranroles/cloudfunctions.admin
atau peran yang setara di project.
Mengarahkan traffic untuk fungsi HTTP
Pada tahap ini, Anda harus menguji URL untuk fungsi asli dan salinannya. Pastikan semuanya berfungsi seperti yang diharapkan sebelum melanjutkan. Jika Anda mengalami masalah, batalkan upgrade untuk kembali ke status bersih, tempat Anda dapat mengatasi masalah mendasar apa pun di fungsi generasi ke-1.
Langkah pengalihan mengalihkan traffic dari URL Cloud Functions generasi ke-1 ke salinan fungsi generasi ke-2.
Konsol
- Dari panel Upgrade sedang berlangsung di halaman detail fungsi Cloud Run, klik Buka Cloud Run.
- Klik Test function untuk menguji fungsi Anda (opsional, tetapi sangat direkomendasikan).
- Jika Anda sudah siap, klik Alihkan traffic.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --redirect-traffic
:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
Setelah mengalihkan traffic, salinan fungsi generasi ke-2 melayani traffic ke
URL fungsi (cloudfunctions.net
) dan URL Cloud Run (run.app
).
Menguji fungsi HTTP setelah pengalihan
Verifikasi lingkungan fungsi:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Output menampilkan lingkungan sebagai
2nd gen
.Gunakan alat logging konsol untuk membandingkan salinan fungsi generasi ke-2 dengan fungsi generasi ke-1 asli.
Memecahkan masalah pengalihan
Pengalihan gagal dalam kondisi berikut:
- Anda tidak menjalankan langkah sebelumnya (
--setup-config
).
Mengembalikan traffic untuk fungsi HTTP
Jika belum siap untuk melakukan upgrade, Anda dapat mengembalikan traffic ke fungsi generasi ke-1.
Konsol
Dari panel Upgrade sedang berlangsung di halaman detail fungsi Cloud Run di konsol Cloud Run, klik Kembalikan traffic.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --rollback-traffic
:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
Setelah mengembalikan traffic:
- Fungsi generasi ke-1 melayani traffic ke URL
cloudfunctions.net
. - Salinan fungsi generasi ke-2 tetap tersedia dan Anda dapat memicunya
menggunakan URL
run.app
.
Anda dapat memverifikasi lingkungan fungsi sebagai berikut. Output akan menampilkan
lingkungan fungsi sebagai 1st gen
:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Rollback akan gagal jika Anda belum mengalihkan traffic ke fungsi generasi ke-2.
Lakukan upgrade untuk fungsi HTTP
Langkah ini menyelesaikan upgrade, setelah itu Anda tidak dapat lagi membatalkan proses. Sebelum melakukan langkah ini, pastikan Anda telah menguji fungsi secara menyeluruh.
Konsol
Dari panel Upgrade sedang berlangsung di halaman detail fungsi Cloud Run di konsol Cloud Run, klik Terapkan upgrade.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --commit
:
gcloud beta functions upgrade FUNCTION_NAME --commit
Setelah melakukan upgrade:
- Fungsi generasi ke-1 dihapus, dan salinan fungsi generasi ke-2 dilepaskan untuk menjadi fungsi Cloud Run yang berfungsi penuh.
- Fungsi Cloud Run mempertahankan URL
cloudfunctions.net
bersama dengan URLrun.app
baru. Anda dapat memverifikasi bahwa fungsi generasi ke-1 sudah tidak ada:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Anda dapat memverifikasi detail layanan Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
Output menunjukkan generasi baru yang dibuat dan label Goog-managed-by
memiliki nilai kosong.
Penerapan gagal saat traffic belum dialihkan ke fungsi Cloud Run.
Mengupgrade fungsi Pub/Sub
Bagian ini menjelaskan cara mengupgrade fungsi Pub/Sub generasi ke-1 menjadi fungsi Cloud Run.
Proses mengupgrade fungsi Pub/Sub generasi ke-1 mengikuti pola dasar yang sama dengan mengupgrade fungsi HTTP, tetapi ada beberapa pertimbangan tambahan:
Menonaktifkan percobaan ulang jika gagal bukan fitur yang didukung di Cloud Run, tetapi merupakan setelan default di generasi ke-1. Jadi, Anda mungkin memiliki fungsi dari kedua jenis tersebut. Tindakan yang dilakukan alat upgrade bergantung pada setelan ini:
- Jika fungsi generasi ke-1 Anda menonaktifkan percobaan ulang (setelan default generasi ke-1), alat upgrade akan membuat pemicu Pub/Sub Eventarc bersama dengan antrean pesan yang tidak terkirim (DLQ). Alat upgrade menetapkan kebijakan Identity and Access Management (IAM) untuk langganan dan topiknya. Setelah upgrade selesai, topik antrean pesan yang dihentikan pengirimannya akan menyimpan pesan yang tidak terkirim, yang dapat Anda ambil dengan membuat langganan baru ke antrean pesan yang dihentikan pengirimannya.
- Jika fungsi generasi ke-1 Anda mengaktifkan percobaan ulang, alat upgrade akan membuat pemicu Pub/Sub Eventarc dengan setelan default.
Memulai upgrade untuk fungsi Pub/Sub
Langkah ini akan membuat salinan fungsi generasi ke-2 dari fungsi generasi ke-1 Anda.
Konsol
Di Google Cloud konsol, buka halaman Cloud Functions (generasi ke-1):
Temukan fungsi generasi ke-1 yang ingin Anda upgrade, dan konfirmasi bahwa statusnya di kolom Status upgrade adalah Siap diupgrade.
Klik nama fungsi untuk menampilkan halaman detailnya.
Di halaman detail fungsi, klik Upgrade di bagian Memenuhi syarat untuk upgrade.
Setelah fase ini selesai, panel Upgrade sedang berlangsung akan muncul, yang meminta Anda mengklik link Buka Cloud Run untuk melanjutkan proses upgrade.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --setup-config
:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
Ganti FUNCTION_NAME dengan nama fungsi generasi ke-1 Anda.
Secara opsional, tentukan akun layanan untuk pemicu:
gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL
Ganti CUSTOM_SA_EMAIL dengan email akun layanan kustom Anda.
Jika akun layanan pemicu (akun layanan Compute Engine default atau
akun layanan kustom yang ditentukan) tidak memiliki izin run.route.invoke
,
sistem akan meminta Anda untuk mengikat peran roles/run.invoker
.
Setelah memulai upgrade:
- Fungsi generasi ke-1 terus menayangkan traffic ke URL aslinya.
- Salinan fungsi generasi ke-2 dari fungsi generasi ke-1 Anda akan dibuat. Anda dapat memicunya menggunakan URL Cloud Run-nya.
- Fungsi generasi ke-1 terus menayangkan traffic ke URL
cloudfunctions.net
-nya.
Uji fungsi Pub/Sub Anda setelah langkah upgrade dimulai
Anda dapat memverifikasi bahwa salinan generasi ke-2 dari fungsi generasi ke-1 Anda ada:
gcloud run services describe FUNCTION_NAME --format yaml
Anda dapat memverifikasi lingkungan fungsi generasi ke-1, tempat output harus menampilkan lingkungan fungsi sebagai
1st gen
:gcloud functions describe --region REGION_NAME FUNCTION_NAME
Publikasikan pesan ke topik tujuan untuk memicu fungsi generasi ke-1.
Untuk menguji fungsi baru, tambahkan pemicu Pub/Sub ke fungsi tersebut dan konfirmasi bahwa fungsi merespons pemicu seperti yang diharapkan:
- Pilih fungsi di konsol Cloud Run, lalu buka tab Triggers.
- Klik Add Trigger, lalu di panel Eventarc trigger, pilih topik untuk memicu fungsi. Secara default, fungsi dipicu saat pesan dipublikasikan ke topik.
- Di panel Upgrade Sedang Berlangsung, klik Uji fungsi.
- Di jendela Cloud Code untuk Cloud Shell yang terbuka, publikasikan pesan ke topik yang Anda tambahkan di tab Pemicu.
- Di konsol Cloud Run, buka Observability > Logs untuk mengonfirmasi bahwa fungsi Anda memublikasikan pesan. Atau, Anda dapat menggunakan command line di Cloud Code untuk Cloud Shell guna melihat output logging.
Misalnya, Anda memiliki fungsi Hello World dasar yang memublikasikan salam. Setelah menentukan pemicu baru, Anda dapat mengujinya di Cloud Code untuk Cloud Shell sebagai berikut:
gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME gcloud functions logs read --region YOUR_REGION --limit 50
Memecahkan masalah langkah upgrade mulai Pub/Sub
Upgrade gagal dalam kondisi berikut:
- Fungsi Cloud Run dengan nama yang sama sudah ada di region dan project yang sama.
- Anda mencoba mengupgrade fungsi generasi ke-2.
- Fungsi generasi ke-1 sudah menjalani proses upgrade.
- Fungsi generasi ke-1 tidak ada.
- Fungsi generasi ke-1 dalam status error.
- Fungsi generasi ke-1 bukan fungsi HTTP maupun Pub/Sub.
- Pemanggil tidak memiliki izin
cloudfunctions.functions.generationUpgrade
. Perhatikan bahwa pemanggil memerlukan peranroles/cloudfunctions.admin
atau peran yang setara di project.
Mengarahkan ulang traffic untuk fungsi Pub/Sub
Langkah ini mengalihkan traffic dari URL Cloud Functions generasi ke-1 ke salinan fungsi generasi ke-2.
Konsol
- Dari panel Upgrade sedang berlangsung di halaman detail fungsi Cloud Run, klik Buka Cloud Run.
- Klik Test function untuk menguji fungsi Anda (opsional, tetapi sangat direkomendasikan).
- Jika Anda sudah siap, klik Alihkan traffic.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --redirect-traffic
:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
Setelah mengalihkan traffic, fungsi generasi ke-2 akan melayani traffic ke URL Cloud Functions dan URL Cloud Run.
Menguji Pub/Sub setelah mengalihkan traffic
Anda dapat memverifikasi lingkungan fungsi:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Output menampilkan lingkungan sebagai
2nd gen
.eventTrigger.retryPolicy
cocok dengan kebijakan percobaan ulang yang ditentukan selama pembuatan fungsi.eventTrigger.serviceAccountEmail
adalah akun layanan Compute Engine default atau akun layanan kustom yang ditentukan.- Memublikasikan pesan ke topik tujuan kini memicu penyalinan fungsi generasi ke-2.
Memecahkan masalah Pub/Sub untuk pengalihan
Pengalihan gagal dalam kondisi berikut:
- Anda tidak menjalankan langkah sebelumnya (
--setup-config
). - Fungsi Cloud Run dihapus secara manual.
Mengembalikan traffic untuk fungsi Pub/Sub
Langkah ini akan mengembalikan traffic ke fungsi generasi ke-1.
Konsol
Dari panel Upgrade sedang berlangsung di halaman detail Cloud Run functions, klik Kembalikan traffic.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --rollback-traffic
:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
Setelah mengembalikan traffic:
- Fungsi kembali ke statusnya segera setelah langkah upgrade awal.
- Fungsi generasi ke-1 melayani traffic ke URL
cloudfunctions.net
. Salinan generasi ke-2 tetap tersedia dan Anda dapat memicunya menggunakan URL Cloud Run-nya.
Anda dapat memverifikasi lingkungan fungsi:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Output akan menampilkan lingkungan fungsi sebagai
1st gen
.Memublikasikan pesan ke topik tujuan akan memicu fungsi generasi ke-1.
Rollback akan gagal jika Anda belum mengalihkan traffic ke fungsi Cloud Run.
Lakukan upgrade untuk fungsi Pub/Sub
Langkah ini menyelesaikan upgrade, setelah itu Anda tidak dapat lagi membatalkan proses. Langkah ini tidak dapat dibatalkan. Sebelum melakukan langkah ini, pastikan Anda telah menguji fungsi secara menyeluruh.
Konsol
Dari panel Upgrade sedang berlangsung di halaman detail Cloud Run functions, klik Lakukan upgrade.
gcloud
Jalankan perintah gcloud beta functions upgrade
dengan
flag --commit
:
gcloud beta functions upgrade FUNCTION_NAME --commit
Setelah melakukan upgrade:
- Fungsi generasi ke-1 dihapus.
- Fungsi Cloud Run mempertahankan URL
cloudfunctions.net
URL. - Anda dapat memverifikasi bahwa fungsi tidak lagi muncul dalam daftar:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
- Anda dapat memverifikasi detail layanan Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
- Output menunjukkan bahwa generasi baru telah dibuat. Label
Goog-managed-by
harus memiliki nilai kosong.
- Output menunjukkan bahwa generasi baru telah dibuat. Label
- Jika Anda membuat fungsi generasi ke-1 tanpa mencentang Coba Lagi jika Gagal, langganan Pub/Sub untuk pemicu memiliki antrean pesan yang tidak terkirim (DLQ).
- Memublikasikan pesan ke topik tujuan kini memicu fungsi Cloud Run.
Penerapan gagal dalam kondisi berikut:
- Traffic belum dialihkan ke fungsi Cloud Run.
- Fungsi Cloud Run dihapus secara manual.
Membatalkan upgrade
Tindakan ini akan membatalkan proses upgrade. Salinan fungsi generasi ke-2 yang baru akan dihapus, dan fungsi generasi ke-1 akan terus melayani traffic ke URL cloudfunctions.net
asli. Anda dapat
melakukan tindakan ini kapan saja selama proses upgrade sebelum Anda melakukan
upgrade.
Jika Anda menggunakan konsol Google Cloud untuk melakukan upgrade, UI hanya memungkinkan Anda membatalkan proses segera setelah operasi upgrade awal. Tombol Abort terletak di pojok kiri atas konsol Functions (generasi ke-1). Jika menggunakan Google Cloud CLI, Anda dapat membatalkan upgrade kapan saja sebelum Anda melakukan upgrade, setelah itu proses menjadi tidak dapat dibatalkan.
Anda dapat menggunakan Google Cloud CLI untuk membatalkan upgrade fungsi meskipun Anda menggunakan konsol Google Cloud untuk melakukan proses upgrade:
gcloud beta functions upgrade FUNCTION_NAME --abort
Setelah membatalkan upgrade:
- Salinan fungsi generasi ke-2 dihapus.
- Fungsi generasi ke-1 melayani traffic ke URL
cloudfunctions.net
. - Di Google Cloud console, status upgrade fungsi berubah dari Konfigurasi disalin kembali menjadi Siap Diupgrade.
Anda dapat memverifikasi bahwa layanan Cloud Run tidak lagi muncul dalam daftar:
gcloud run services list
Anda dapat memverifikasi lingkungan fungsi:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
Output menampilkan lingkungan fungsi sebagai 1st gen
.
Operasi pembatalan akan gagal jika Anda telah melakukan upgrade.
Memeriksa kebijakan IAM yang dikonversi
Selama proses upgrade, alat ini melakukan konversi terbaik untuk peran dan izin antara Cloud Functions generasi ke-1 dan fungsi Cloud Run baru.
Proses upgrade mengonversi peran IAM Cloud Functions generasi ke-1 menjadi peran Cloud Run yang setara.
Aturan konversi:
roles/cloudfunctions.invoker
dikonversi menjadiroles/run.invoker
.roles/cloudfunctions.developer
dikonversi menjadiroles/run.sourceDeveloper
.roles/cloudfunctions.viewer
dikonversi menjadiroles/run.sourceViewer
.roles/cloudfunctions.admin
dikonversi menjadiroles/run.admin
danroles/run.sourceDeveloper
.
Upgrade kebijakan IAM akan gagal jika pemanggil tidak memiliki izin
projects.getIamPolicy
atau run.setIamPolicy
. Pemanggil memerlukan peran roles/cloudfunctions.admin
atau peran yang setara di project.
Memverifikasi upgrade kebijakan IAM
Untuk memverifikasi bahwa kebijakan IAM Anda diupgrade dengan benar, periksa kebijakan tersebut di setiap tahap proses upgrade untuk mengonfirmasi bahwa kebijakan tersebut memiliki nilai yang diharapkan:
Mulai proses upgrade untuk fungsi Anda:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
Output menampilkan pesan peringatan jika binding peran kustom terdeteksi.
Memvalidasi bahwa kebijakan IAM yang ditetapkan pada fungsi generasi ke-1 dikonversi dan diupgrade ke fungsi Cloud Run:
gcloud functions get-iam-policy FUNCTION_NAME gcloud run services get-iam-policy FUNCTION_NAME
Memvalidasi bahwa binding peran pemanggil fungsi Cloud Run di tingkat project dikonversi dan diupgrade ke fungsi Cloud Run:
gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker" gcloud run services get-iam-policy FUNCTION_NAME
Langkah berikutnya
- Pelajari lebih lanjut Cloud Run Functions.