Memecahkan masalah fungsi Cloud Run
Dokumen ini menunjukkan cara memecahkan masalah pesan error dan menyelesaikan masalah saat menggunakan fungsi Cloud Run.
Deployment
Bagian ini mencantumkan masalah apa saja yang mungkin Anda alami saat deployment dan memberikan saran tentang cara memperbaiki masalah tersebut. Banyak masalah yang mungkin Anda temui selama deployment berkaitan dengan peran dan izin atau konfigurasi yang salah.
Anda menggunakan Identity and Access Management untuk memberikan otorisasi kepada identitas agar dapat melakukan tindakan administratif pada fungsi yang dibuat menggunakan Cloud Functions v2 API—misalnya, menggunakan gcloud functions
, REST API, atau Terraform. Tindakan administrasi mencakup
pembuatan, pembaruan, dan penghapusan fungsi. Untuk mengetahui informasi selengkapnya, lihat
Memberikan otorisasi akses dengan IAM.
Pengguna tidak memiliki izin di akun layanan runtime saat men-deploy fungsi
Setiap fungsi dikaitkan dengan akun layanan yang berfungsi sebagai identitasnya saat fungsi tersebut mengakses resource lain. Akun layanan
runtime ini dapat berupa akun layanan default atau akun layanan yang dikelola pengguna. Di lingkungan
dengan beberapa fungsi yang mengakses resource yang berbeda, praktik yang umum
adalah menggunakan identitas per fungsi
dengan akun layanan runtime bernama, bukan akun layanan runtime default (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Untuk menggunakan akun layanan runtime, deployer harus memiliki
izin iam.serviceAccounts.actAs
di akun layanan tersebut. Pengguna yang
membuat akun layanan runtime non-default secara otomatis diberi izin
ini, tetapi deployer lain harus memiliki izin ini yang diberikan oleh pengguna.
Tetapkan izin iam.serviceAccounts.actAs
di akun layanan runtime untuk pengguna dengan peran Project Viewer, Cloud Functions Developer, atau Cloud Functions Admin.
Pesan error
Konsol
You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.
gcloud
Akun layanan default:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Akun layanan non-default:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Solusi
Beri pengguna,
peran Service Account User (roles/iam.serviceAccountUser
) di akun layanan runtime default atau non-default. Peran ini mencakup izin iam.serviceAccounts.actAs
.
Akun layanan deployment tidak memiliki izin Pub/Sub saat men-deploy fungsi berbasis peristiwa
Layanan Cloud Functions menggunakan akun layanan Agen Layanan Cloud
Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
)
saat melakukan tindakan administratif. Secara default, akun ini diberi
peran cloudfunctions.serviceAgent
Cloud Functions. Untuk men-deploy
fungsi berbasis peristiwa,
layanan Cloud Functions harus mengakses Pub/Sub
untuk mengonfigurasi topik dan langganan. Jika Anda mengubah peran yang ditetapkan ke akun
layanan tanpa memberikan izin yang sesuai,
layanan Cloud Functions tidak dapat mengakses Pub/Sub dan deployment
akan gagal.
Pesan error
Konsol
Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
Solusi
Anda dapat mereset akun layanan ke peran cloudfunctions.serviceAgent default.
Akun layanan runtime default tidak ada
Jika Anda tidak menentukan akun layanan runtime yang dikelola pengguna, Cloud Functions akan menggunakan akun layanan komputasi default sebagai akun layanan runtime. Deployment akan gagal jika Anda menghapus akun default tanpa menentukan akun yang dikelola pengguna.
Pesan error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]
Solusi
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Tentukan akun layanan runtime yang dikelola pengguna sebelum men-deploy fungsi Anda.
Membatalkan penghapusan akun layanan berdasarkan ID numerik akun layanan default.
Akun layanan Agen Layanan Cloud Functions tidak memiliki izin bucket project saat men-deploy fungsi
Fungsi Cloud Run hanya dapat dipicu oleh peristiwa dari bucket Cloud Storage dalam project Google Cloud Platform yang sama. Selain itu, akun layanan Agen Layanan Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) memerlukan peran cloudfunctions.serviceAgent
di project Anda.
Pesan error
Konsol
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
Solusi
Untuk mengatasi masalah ini, reset akun layanan ini ke peran default.
Pengguna dengan peran Project Editor tidak dapat membuat fungsi menjadi publik
Peran Project Editor memiliki izin luas untuk mengelola resource dalam project, tetapi tidak secara inheren memberikan kemampuan untuk membuat Cloud Functions menjadi publik. Pengguna atau layanan yang men-deploy fungsi akan memerlukan izin run.services.setIamPolicy
.
Pesan error
gcloud
ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME' (or resource may not exist).
Solusi
Anda dapat :
Tetapkan peran Project Owner atau Cloud Functions Admin kepada deployer.
Berikan izin secara manual dengan membuat peran khusus.
Periksa apakah berbagi yang dibatasi domain diterapkan pada project.
Deployment fungsi gagal saat menggunakan kebijakan organisasi Pembatasan Lokasi Resource
Jika organisasi Anda menggunakan kebijakan batasan lokasi resource, kebijakan tersebut akan membatasi deployment fungsi di region yang dibatasi oleh kebijakan. Di konsol Google Cloud, region yang dibatasi tidak akan tersedia dari dropdown region saat men-deploy fungsi.
Pesan error
gcloud
ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]
Solusi
Anda dapat menambahkan atau menghapus lokasi dari daftar allowed_values
atau denied_values
batasan lokasi resource agar sesuai dengan deployment yang berhasil.
Deployment fungsi gagal saat mengeksekusi cakupan global fungsi
Error ini menunjukkan bahwa ada masalah dengan kode Anda. Pipeline deployment selesai men-deploy fungsi, tetapi gagal di langkah terakhir - mengirimkan health check ke fungsi tersebut. Health check ini dimaksudkan untuk mengeksekusi cakupan global fungsi, yang dapat menampilkan pengecualian, error, atau waktu habis. Cakupan global adalah tempat Anda biasanya memuat dalam library dan menginisialisasi klien.
Pesan error
Di log Cloud Logging:
Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
Solusi
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Untuk pesan error yang lebih mendetail, tinjau log build fungsi Anda, dan log runtime fungsi Anda.
Jika tidak jelas mengapa fungsi Anda gagal mengeksekusi cakupan globalnya, pertimbangkan untuk memindahkan kode untuk sementara ke pemanggilan permintaan, menggunakan inisialisasi lambat variabel global. Hal ini memungkinkan Anda menambahkan laporan log tambahan di sekitar library klien, yang dapat menyebabkan waktu habis saat pembuatan instance (terutama jika library klien memanggil layanan lain), error, atau menampilkan pengecualian.
Selain itu, coba tingkatkan waktu tunggu fungsi. Batas waktu tunggu yang lebih lama di fungsi Cloud Run memberikan lebih banyak ruang untuk inisialisasi dan menawarkan pengalokasian resource yang lebih skalabilitas di lingkungan Cloud Run, yang berpotensi memitigasi masalah ini jika disebabkan oleh kehabisan resource.
Kode sumber harus berisi fungsi titik entri yang telah ditentukan dengan benar dalam deployment, baik melalui konsol maupun gcloud.
Pengguna dengan peran Viewer tidak dapat men-deploy fungsi
Pengguna dengan peran Project Viewer atau Cloud Functions Viewer memiliki akses hanya baca ke fungsi dan detail fungsi, dan tidak dapat men-deploy fungsi baru. Fitur Buat fungsi berwarna abu-abu di konsol Google Cloud dengan error berikut:
Pesan error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']
Solusi
Tetapkan peran Cloud Functions Developer kepada pengguna.
Akun layanan build tidak memiliki izin
Pesan error
Dalam error deployment fungsi atau dalam log build, Anda mungkin melihat salah satu error berikut:
The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.
Solusi
Akun layanan build memerlukan izin untuk membaca dari bucket sumber dan izin baca dan tulis untuk repositori Deployment Artefak. Anda mungkin mengalami error ini karena perubahan perilaku default untuk cara Cloud Build menggunakan akun layanan, yang dijelaskan dalam Perubahan Akun Layanan Cloud Build.
Untuk mengatasi masalah ini, gunakan salah satu solusi berikut:
- Buat akun layanan build kustom untuk deployment fungsi.
- Tambahkan
peran Akun Layanan Cloud Build
(
roles/cloudbuild.builds.builder
) ke Akun Layanan Compute default. - Tinjau panduan Cloud Build tentang perubahan pada akun layanan default dan pilih untuk tidak ikut dalam perubahan ini.
Akun layanan build dinonaktifkan
Pesan error
Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.
Solusi
Akun layanan build harus diaktifkan agar dapat men-deploy fungsi. Anda mungkin mengalami error ini karena perubahan perilaku default untuk cara Cloud Build menggunakan akun layanan, yang dijelaskan dalam Perubahan Akun Layanan Cloud Build.
Untuk mengatasi masalah ini, gunakan salah satu solusi berikut:
- Buat akun layanan build kustom untuk deployment fungsi.
- Aktifkan Akun Layanan Compute default.
- Tinjau panduan Cloud Build tentang perubahan pada akun layanan default dan pilih untuk tidak ikut dalam perubahan ini.
Aktif
Bagian ini mencantumkan masalah penayangan yang mungkin Anda alami, dan memberikan saran cara memperbaiki masalah tersebut.
Error izin penyajian karena fungsi memerlukan autentikasi
Fungsi HTTP tanpa mengaktifkan Izinkan pemanggilan yang tidak diautentikasi akan membatasi akses ke pengguna akhir dan akun layanan yang tidak memiliki izin yang sesuai. Pesan error ini menunjukkan bahwa pemanggil tidak memiliki izin untuk memanggil fungsi.
Pesan error
Kode Respons Error HTTP: 403 Forbidden
Isi Respons Error HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
Solusi
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Tetapkan peran Cloud Run Invoker Cloud IAM kepada pengguna untuk fungsi tertentu.
Deploy ulang fungsi Anda untuk mengizinkan pemanggilan yang tidak diautentikasi jika didukung oleh organisasi Anda. Hal ini berguna untuk pengujian.
Error penayangan karena konfigurasi allow internal traffic only
Setelan traffic masuk
membatasi apakah fungsi HTTP dapat dipanggil oleh resource
di luar project Google Cloud atau perimeter layanan Kontrol Layanan VPC.
Saat Anda mengonfigurasi setelan izinkan traffic internal saja untuk jaringan traffic masuk,
pesan error ini menunjukkan bahwa hanya permintaan dari jaringan VPC
dalam project atau perimeter Kontrol Layanan VPC yang sama yang diizinkan. Hal ini juga dapat berupa error 404 untuk URL functions.net
default.
Pesan error
Kode Respons Error HTTP: 404 TIDAK DITEMUKAN
Solusi
Untuk mengatasi error ini, ikuti salah satu solusi berikut:
Pastikan permintaan berasal dari project Google Cloud Anda atau perimeter layanan Kontrol Layanan VPC.
Ubah setelan traffic masuk untuk mengizinkan semua traffic untuk fungsi tersebut.
Kode sumber fungsi Cloud Run juga dapat menyebabkan error 404 karena URL fungsi, metode http, error logika, dll. yang salah.
Pemanggilan fungsi tidak memiliki kredensial autentikasi yang valid
Pemanggilan fungsi Cloud Run yang telah disiapkan dengan akses terbatas memerlukan token ID. Token akses atau token refresh tidak berfungsi.
Pesan error
Kode Respons Error HTTP: 401 Tidak Diberi Otorisasi
Isi Respons Error HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
Solusi
Untuk mengatasi error ini, ikuti salah satu solusi berikut:
Pastikan permintaan Anda menyertakan header
Authorization: Bearer ID_TOKEN
, dan token tersebut adalah token ID, bukan token akses atau token refresh. Jika membuat token ini secara manual dengan kunci pribadi akun layanan, Anda harus menukar token JWT yang ditandatangani sendiri dengan token Identitas yang ditandatangani Google. Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi untuk pemanggilan.Panggil fungsi HTTP menggunakan kredensial autentikasi di header permintaan Anda. Misalnya, Anda bisa mendapatkan token identitas menggunakan
gcloud
sebagai berikut: Untuk mempelajari lebih lanjut, lihat Mengautentikasi untuk pemanggilan .curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEDeploy ulang fungsi Anda untuk mengizinkan pemanggilan yang tidak diautentikasi jika didukung oleh organisasi Anda. Hal ini berguna untuk pengujian.
Fungsi berhenti di tengah eksekusi, atau terus berjalan setelah kode Anda selesai
Beberapa runtime fungsi Cloud Run memungkinkan pengguna menjalankan tugas asinkron. Jika fungsi Anda membuat tugas tersebut, fungsi tersebut juga harus secara eksplisit menunggu hingga tugas selesai. Jika hal ini tidak dilakukan, fungsi Anda dapat berhenti dieksekusi pada waktu yang salah.
Perilaku error
Fungsi Anda menunjukkan salah satu perilaku berikut:
- Fungsi Anda berhenti saat tugas asinkron masih berjalan, tetapi sebelum periode waktu tunggu yang ditentukan berlalu.
- Fungsi Anda tidak berhenti berjalan saat tugas ini selesai, dan terus berjalan hingga periode waktu tunggu berlalu.
Solusi
Jika fungsi berhenti lebih awal, Anda harus memastikan semua tugas asingkron fungsi selesai sebelum fungsi melakukan salah satu tindakan berikut:
- Menampilkan nilai
- Me-resolve atau menolak objek
Promise
yang ditampilkan (khusus fungsi Node.js) - Menampilkan pengecualian atau error yang tidak diketahui
- Mengirim respons HTTP
- Memanggil fungsi callback
Jika fungsi Anda gagal berhenti setelah menyelesaikan tugas asinkron, Anda harus memastikan bahwa fungsi tersebut memberikan sinyal ke fungsi Cloud Run dengan benar setelah selesai. Secara khusus, pastikan Anda melakukan salah satu operasi yang tercantum sebelumnya segera setelah fungsi menyelesaikan tugas asingkronnya.
Error runtime saat mengakses resource yang dilindungi oleh Kontrol Layanan VPC
Secara default, fungsi Cloud Run menggunakan alamat IP publik untuk membuat permintaan keluar ke layanan lain. Jika fungsi Anda tidak berada di dalam perimeter Kontrol Layanan VPC, fungsi tersebut dapat menerima respons HTTP 403 saat mencoba mengakses layanan Google Cloud yang dilindungi oleh Kontrol Layanan VPC, karena penolakan perimeter layanan.
Pesan error
Di log Resource yang Diaudit, entri seperti berikut:
"protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "VPC_SERVICE_CONTROLS", ... "authenticationInfo": { "principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT", ... "metadata": { "violationReason": "NO_MATCHING_ACCESS_LEVEL", "securityPolicyInfo": { "organizationId": "ORGANIZATION_ID", "servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME" ...
Solusi
Untuk mengatasi error ini, ikuti salah satu solusi berikut:
Fungsi harus merutekan semua traffic keluar melalui jaringan VPC. Lihat bagian Men-deploy fungsi yang sesuai dengan Kontrol Layanan VPC untuk mengetahui informasi selengkapnya.
Atau, berikan akses akun layanan runtime fungsi ke perimeter. Anda dapat melakukannya dengan membuat tingkat akses dan menambahkan tingkat akses ke perimeter layanan, atau dengan membuat kebijakan ingress di perimeter. Lihat Menggunakan Kontrol Layanan VPC dengan fungsi di luar perimeter untuk mengetahui informasi selengkapnya.
Skalabilitas
Bagian ini mencantumkan masalah skalabilitas dan memberikan saran tentang cara memperbaikinya.
Error Cloud Logging terkait pembatalan permintaan antrean yang tertunda
Kegagalan penskalaan dapat terjadi dari skenario berikut:
- Peningkatan traffic mendadak.
- Waktu cold start yang lama.
- Waktu pemrosesan permintaan yang lama.
- Tingkat error fungsi tinggi.
- Batas instance maksimum tercapai dan mencegah sistem melakukan penskalaan.
- Faktor sementara yang dikaitkan dengan layanan fungsi Cloud Run.
Dalam setiap kasus, fungsi Cloud Run mungkin tidak melakukan peningkatan skala cukup cepat untuk mengelola traffic.
Pesan error
The request was aborted because there was no available instance
severity=WARNING
( Kode respons: 429 ) Fungsi Cloud Run tidak dapat diskalakan karena batasmax-instances
yang Anda tetapkan selama konfigurasi.severity=ERROR
( Kode respons: 500 ) Cloud Run Functions secara intrinsik tidak dapat mengelola laju traffic.
Solusi
Untuk mengatasi masalah ini, atasi penyebab yang tercantum sebelumnya.
Untuk fungsi berbasis pemicu HTTP, minta klien untuk mengimplementasikan backoff eksponensial dan mencoba lagi untuk permintaan yang tidak boleh dihapus. Jika memicu fungsi Cloud Run dari Workflows, Anda dapat menggunakan sintaksis
try/retry
untuk mencapainya.Untuk fungsi latar belakang atau berbasis peristiwa, fungsi Cloud Run mendukung penayangan minimal satu kali. Bahkan tanpa mengaktifkan percobaan ulang secara eksplisit, peristiwa tersebut akan otomatis ditayangkan ulang dan eksekusi fungsi akan dicoba lagi. Lihat Mencoba Ulang Fungsi Berbasis Peristiwa untuk mengetahui informasi selengkapnya.
Jika akar masalah ini adalah periode error sementara yang tinggi yang hanya dikaitkan dengan fungsi Cloud Run atau jika Anda memerlukan bantuan terkait masalah Anda, hubungi dukungan.
Untuk masalah terkait cold start, konfigurasikan instance minimum untuk mengurangi jumlah cold start dengan implikasi penagihan yang lebih tinggi.
Logging
Bagian berikut membahas masalah terkait logging dan cara memperbaikinya.
Entri log tidak memiliki tingkat keparahan log atau tingkat keparahan lognya salah
Fungsi Cloud Run menyertakan logging runtime secara default. Log yang ditulis ke
stdout
atau stderr
akan muncul secara otomatis di Cloud Logging.
Namun, entri log ini secara default hanya berisi pesan string.
Pesan error
Tingkat keparahan tidak ada atau salah dalam log.
Solusi
Untuk menyertakan tingkat keparahan log, Anda harus mengirim entri log terstruktur.
Menangani atau membuat log pengecualian secara berbeda jika terjadi error
Anda mungkin ingin menyesuaikan cara mengelola dan mencatat log informasi error.
Solusi
Gabungkan fungsi Anda dalam blok try
untuk menyesuaikan penanganan pengecualian dan
logging stack trace.
Contoh
import logging
import traceback
def try_catch_log(wrapped_func):
def wrapper(*args, **kwargs):
try:
response = wrapped_func(*args, **kwargs)
except Exception:
# Replace new lines with spaces so as to prevent several entries which
# would trigger several errors.
error_message = traceback.format_exc().replace('\n', ' ')
logging.error(error_message)
return 'Error';
return response;
return wrapper;
#Example hello world function
@try_catch_log
def python_hello_world(request):
request_args = request.args
if request_args and 'name' in request_args:
1 + 's'
return 'Hello World!'
Log terlalu besar di Node.js 10+, Python 3.8, Go 1.13, dan Java 11
Ukuran maksimum untuk entri log reguler dalam runtime ini adalah 105 KiB.
Solusi
Kirim entri log yang lebih kecil dari batas ini.
Log tidak ada meskipun fungsi Cloud Run menampilkan error
Fungsi Cloud Run men-streaming log fungsi Cloud Run ke bucket default. Saat Anda membuat project, Cloud Run Function akan membuat dan mengaktifkan bucket default. Jika bucket default dinonaktifkan atau jika log fungsi Cloud Run berada di filter pengecualian, log tidak akan muncul di Logs Explorer.
Solusi
Aktifkan log default.
Log fungsi Cloud Run tidak muncul di Logs Explorer
Beberapa library klien Cloud Logging menggunakan proses asinkron untuk menulis entri log. Jika fungsi mengalami error, atau terhenti, ada kemungkinan beberapa entri log belum ditulis, dan dapat muncul kemudian. Beberapa log mungkin hilang dan tidak dapat dilihat di Log Explorer.
Solusi
Gunakan antarmuka library klien untuk menghapus entri log yang di-buffer sebelum menghentikan fungsi, atau gunakan library untuk menulis entri log secara sinkron. Anda juga dapat
menulis log secara langsung ke stdout
atau stderr
secara sinkron.
Log fungsi Cloud Run tidak ada saat menggunakan sink Router Log
Sink Router Log me-rutekan entri log ke berbagai tujuan.
Filter pengecualian menentukan entri yang dapat Anda hapus.
Solusi
Hapus filter pengecualian yang ditetapkan untuk resource.type = "cloud_run_revision"
.
Koneksi database
Ada sejumlah masalah yang dapat muncul saat terhubung ke database, dan banyak
yang terkait dengan melampaui batas koneksi atau waktu habis. Jika melihat peringatan Cloud SQL
di log, misalnya, Context deadline exceeded
, Anda mungkin perlu
menyesuaikan konfigurasi koneksi. Untuk informasi selengkapnya, lihat
Praktik terbaik Cloud SQL.
Jaringan
Bagian ini mencantumkan masalah jaringan dan memberikan saran tentang cara memperbaiki setiap masalah tersebut.
Konektivitas jaringan
Jika semua permintaan keluar dari fungsi Cloud Run gagal bahkan setelah Anda mengonfigurasi setelan traffic keluar, Anda dapat menjalankan Uji Konektivitas untuk mengidentifikasi masalah konektivitas jaringan yang mendasarinya. Untuk mengetahui informasi selengkapnya, lihat Membuat dan menjalankan Uji Konektivitas.
Konektor Akses VPC Serverless belum siap atau tidak ada
Jika konektor Akses VPC Serverless gagal, konektor tersebut mungkin tidak
menggunakan subnet mask /28
yang dikhususkan untuk konektor tersebut sesuai persyaratan.
Pesan error
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Jika fungsi Cloud Run di-deploy dengan konektor dalam status buruk karena izin tidak ada di akun layanan Agen Layanan Google API PROJECT_NUMBER@cloudservices.gserviceaccount.com
, hal ini akan menyebabkan error berikut:
Pesan error
Failed to prepare VPC connector. Please try again later.
Solusi
Cantumkan subnet Anda
untuk memeriksa apakah konektor Anda menggunakan subnet mask /28
. Jika konektor Anda tidak menggunakan subnet mask /28
, buat ulang atau buat konektor baru.
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Jika membuat ulang konektor, Anda tidak perlu men-deploy ulang fungsi lainnya. Anda mungkin mengalami gangguan jaringan saat konektor dibuat ulang.
Jika Anda membuat konektor alternatif baru, deploy ulang fungsi Anda untuk menggunakan konektor baru tersebut, lalu hapus konektor asli. Metode ini menghindari gangguan jaringan.
Pastikan fungsi Cloud Run dan konektor terkait di-deploy di region yang sama.
Untuk konfigurasi VPC Bersama:
Pastikan akun layanan
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
danservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
yang digunakan oleh VPC Connector untuk menyediakan resource dalam project tidak kehilangan izin. Akun layanan ini harus memiliki peranroles/compute.networkUser
di project host konfigurasi VPC Bersama saat konektor berada di project layanan.Jika konektor dibuat di project host, pastikan peran
Serverless VPC Access User
diberikan di Agen Layanan Cloud Run di project host Anda.
Jika status konektor menampilkan error
Connector is in a bad state, manual deletion recommended
dan Agen Layanan Google API tidak memiliki izin yang diperlukan untuk menyediakan resource komputasi di project konektor, berikanroles/compute.admin
ke akun layananPROJECT_NUMBER@cloudservices.gserviceaccount.com
. Dalam beberapa kasus, konektor mungkin perlu dibuat ulang setelah menambahkan izin ini.
Traffic SMTP ke alamat IP tujuan eksternal yang menggunakan TCP port 25 diblokir
Untuk keamanan tambahan, Google Cloud memblokir koneksi ke port tujuan TCP 25
saat mengirim email dari fungsi.
Solusi
Untuk berhenti memblokir koneksi ini, ikuti salah satu solusi berikut:
Hubungkan ke server SMTP pada port yang berbeda, seperti port TCP
587
atau465
.
Error 404 untuk URL functions.net
default
Menonaktifkan URL run.app
di Cloud Run juga mencegah akses ke
URL cloudfunctions.net
default untuk fungsi Cloud Run (generasi ke-2). Error ini juga dapat disebabkan oleh Error penayangan karena konfigurasi izinkan traffic internal saja.
Pesan error
Kode Respons Error HTTP: 404 TIDAK DITEMUKAN
Solusi
Untuk mengaktifkan kembali URL cloudfunctions.net
default untuk fungsi Cloud Run (generasi ke-2),
Anda harus mengaktifkan kembali URL run.app
di Cloud Run
dengan mengganti file service.yaml
dengan konfigurasi baru yang berisi
annotations:run.googleapis.com/default-url-disabled: false