Memigrasikan Cloud Functions ke runtime Node.js yang lebih baru
Dokumen ini menjelaskan perbedaan antara versi runtime Node.js, untuk membantu Anda memigrasikan kode Cloud Functions.
Melakukan migrasi ke runtime yang lebih baru
Untuk melakukan migrasi ke runtime yang lebih baru:
- Baca tentang runtime target Anda dalam dokumen ini untuk memahami perbedaan yang ditimbulkannya, dan membuat perubahan yang diperlukan pada kode Anda. Secara khusus, perhatikan perubahan variabel lingkungan yang diperkenalkan dalam runtime Node.js 10.
Deploy fungsi Anda dengan menentukan runtime Node.js target:
gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...
Perbedaan runtime Node.js 14
Node.js 14 memperkenalkan beberapa fitur dan konsep baru. Sorotan:
- Perantaian opsional.
Perantaian opsional terlihat seperti ini:
{"hello": null}?.hello?.neat
. Hal ini memungkinkan akses yang aman ke deep key pada objek yang mungkin tidak ada. - Penggabungan null. Hal ini
memperkenalkan
??
yang lebih aman daripada menggunakan||
untuk penetapan (karena hanya bernilaifalse
untuknull
atauundefined
).
Anda dapat mempelajari fitur Node.js 14 lebih lanjut di sini.
Perbedaan runtime Node.js 12
Node.js 12 menggunakan npm ci
, yang selalu menjalankan skrip prepare
di
package.json
.
Perbedaan utama antara penggunaan npm install
dan npm ci
adalah:
- Project harus sudah memiliki
package-lock.json
ataunpm-shrinkwrap.json
. - Jika dependensi dalam kunci paket tidak cocok dengan yang ada di
package.json
,npm ci
akan keluar dengan error, bukan memperbarui kunci paket. - Jika sudah ada,
node_modules
akan otomatis dihapus sebelumnpm ci
memulai penginstalannya.
Untuk melakukan upgrade dari Node.js 10 ke Node.js 12, pindahkan dependensi yang digunakan dalam
prepare
dari devDependencies
ke dependencies
.
Untuk Node.js 12 dan yang lebih baru, fungsi dengan batas memori lebih dari 2 GiB mengharuskan
pengguna mengonfigurasi NODE_OPTIONS
agar memiliki
max_old_space_size
. Contoh:
gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
Perbedaan runtime Node.js 10
Runtime Node.js 10 memperkenalkan perubahan yang mungkin mengharuskan Anda mengubah kode sumber fungsi agar dapat menggunakan runtime yang lebih baru.
Untuk sebagian besar aplikasi, upgrade dari Node 8 ke Node 10 tidak akan melibatkan perubahan kode (perbedaan utamanya adalah perubahan dalam variabel lingkungan pada GCF).
Node 10 memperkenalkan berbagai fitur baru yang menarik, seperti iterator asinkron dan API file berbasis promise, beserta peningkatan performa dan patch keamanan.
Logging
Jika Anda tidak menggunakan JSON.stringify
saat mencatat objek dan/atau koleksi ke dalam log di
Node.js 8, Anda mungkin akan melihat peningkatan volume log setelah melakukan upgrade
ke Node.js 10. Hal ini dapat menimbulkan biaya tambahan. Sebaiknya gunakan
JSON.stringify
untuk mengelompokkan pernyataan log bersama-sama, seperti yang ditunjukkan dalam
Menulis, Melihat, dan Merespons Log.
Perubahan variabel lingkungan
Runtime Node.js 10 memperkenalkan perubahan pada variabel lingkungan yang telah ditentukan oleh runtime. Baca Variabel lingkungan yang disetel secara otomatis untuk mengetahui deskripsi lengkap tentang perbedaan antara variabel lingkungan yang ditetapkan oleh runtime Node.js 10 dengan runtime sebelumnya.
Untuk menjalankan fungsi Node.js lama di runtime Node.js 10 (dan yang lebih tinggi), Anda mungkin perlu membuat perubahan pada variabel lingkungan yang telah ditetapkan yang Anda gunakan. Perbarui kode Anda untuk menggunakan variabel pengganti jika memungkinkan atau tetapkan sendiri saat men-deploy fungsi Anda. Sebagai praktik terbaik, sebaiknya Anda tidak bergantung pada variabel lingkungan yang belum ditetapkan secara eksplisit.
Variabel lingkungan berikut tidak lagi ditetapkan oleh runtime Node.js 10:
Variabel lingkungan | Migrasi |
---|---|
CODE_LOCATION |
Tetapkan saat men-deploy fungsi Anda. Lokasi kode Anda adalah /srv . |
ENTRY_POINT |
Sebagai gantinya, gunakan variabel lingkungan FUNCTION_TARGET . |
GOOGLE_CLOUD_PROJECT |
Tetapkan saat men-deploy fungsi Anda. |
GCP_PROJECT |
Tetapkan saat men-deploy fungsi Anda. |
GCLOUD_PROJECT |
Tetapkan saat men-deploy fungsi Anda. |
GOOGLE_CLOUD_REGION |
Tetapkan saat men-deploy fungsi Anda. |
FUNCTION_REGION |
Tetapkan saat men-deploy fungsi Anda. |
FUNCTION_NAME |
Sebagai gantinya, gunakan variabel lingkungan K_SERVICE . |
FUNCTION_IDENTITY |
Tetapkan saat men-deploy fungsi Anda. |
FUNCTION_MEMORY_MB |
Tetapkan saat men-deploy fungsi Anda. |
FUNCTION_TIMEOUT_SEC |
Tetapkan saat men-deploy fungsi Anda. |
FUNCTION_TRIGGER_TYPE |
Sebagai gantinya, gunakan variabel lingkungan
FUNCTION_SIGNATURE_TYPE . Lihat
Menggunakan variabel lingkungan
untuk mengetahui detail penggunaan.
|
OLDPWD |
Tidak lagi tersedia. |
SHLVL |
Tidak lagi tersedia. |
Perbedaan runtime Node.js 8
Tanda tangan untuk fungsi latar belakang berubah antara runtime Node.js 6 dan Node.js 8, dan berlanjut ke Node.js 10.
Contoh fungsi latar belakang Node.js 6 mungkin terlihat seperti berikut:
exports.nodejs6BackgroundFunction = (event, callback) => {
let data = event.data;
let context = event.context;
// ... the rest of your function
};
Perhatikan bahwa argumen event
berisi properti data
dan context
.
Dalam runtime Node.js 10, properti data
dan context
telah
diekstrak dari objek event
dan sekarang disertakan sebagai bagian dari
tanda tangan fungsi:
exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
// ... the rest of your function is unchanged
};
Perubahan ini menyederhanakan referensi ke objek data
dan context
yang sebelumnya
dimuat dalam argumen event
. Untuk mengetahui informasi selengkapnya, baca
Parameter fungsi latar belakang.
Jika Anda menggunakan tanda tangan fungsi background Node.js 6, lakukan perubahan berikut untuk menjalankan fungsi Anda dalam runtime Node.js yang lebih baru:
Ubah tanda tangan fungsi dari
(event, callback)
menjadi(data, context, callback)
.Ubah referensi ke
event.data
danevent.context
menjadidata
dancontext
.
Tidak digunakan lagi: Node.js 6 dan Node.js 8
Runtime Node.js 6 dan Node.js 8 sudah tidak digunakan lagi. Untuk memastikan fungsi Anda menggunakan versi Node.js yang didukung, migrasikan fungsi ke Node.js 10 atau yang lebih baru.
Setelah 05-08-2020, deployment fungsi yang menggunakan Node.js 6 akan diblokir. Cloud Functions yang terus menggunakan Node.js 6 setelah waktu ini mungkin akan dinonaktifkan.