Memecahkan masalah Cloud Run Functions (generasi ke-1)
Dokumen ini menunjukkan cara memecahkan masalah pesan error dan menyelesaikan masalah saat menggunakan Cloud Run Functions (generasi ke-1).
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.
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)
untuk 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 peran yang ditetapkan ke akun
layanan berubah dan izin yang sesuai tidak diperbarui,
layanan Cloud Functions tidak dapat mengakses Pub/Sub dan deployment
akan gagal.
Pesan error
Konsol
Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME
Solusi
Anda dapat mereset akun layanan
ke peran cloudfunctions.serviceAgent default.
Akun layanan runtime default tidak ada
Jika akun layanan yang dikelola pengguna tidak ditentukan, Cloud Run Functions (generasi ke-1) akan menggunakan akun layanan App Engine secara default. Deployment akan gagal jika Anda menghapus akun default tanpa menentukan akun layanan yang dikelola pengguna.
Pesan error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[Default service account 'test-project-356312@appspot.gserviceaccount.com' doesn't exist. Please recreate this account or specify a different account. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.]
Solusi
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Tentukan akun layanan runtime yang dikelola pengguna saat men-deploy fungsi Anda.
Buat ulang akun layanan default PROJECT_ID@appspot.gserviceaccount.com untuk project Anda.
Batalkan penghapusan akun layanan default.
Pengguna tidak memiliki izin untuk 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. Agar Cloud Functions
dapat menggunakan akun layanan runtime, deployer harus memiliki
izin iam.serviceAccounts.actAs pada 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 dengan
izin yang benar.
Pengguna yang telah diberi peran Project Viewer, Cloud Functions Developer, atau
Cloud Functions Admin juga harus diberi
izin iam.serviceAccounts.actAs di akun layanan runtime.
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
Error berikut terjadi untuk akun layanan default:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account PROJECT_ID@appspot.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account PROJECT_ID@appspot.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding
PROJECT_ID@appspot.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser' where MEMBER has a prefix like 'user:' or 'serviceAccount:'.
Error berikut terjadi untuk akun layanan non-default:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding 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 roles/iam.serviceAccountUser di akun layanan
yang dikelola pengguna atau default. Peran ini mencakup izin iam.serviceAccounts.actAs.
Akun layanan Agen Layanan Cloud Run Functions tidak memiliki izin bucket project saat men-deploy fungsi
Cloud Run Functions hanya dapat
dipicu oleh peristiwa
dari bucket Cloud Storage dalam Project Google Cloud 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
Deployment failure: Insufficient permissions to (re)configure a trigger
(permission denied for bucket BUCKET_ID). Please, give owner permissions
to the editor role of the bucket and try again.
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=7, message=Insufficient
permissions to (re)configure a trigger (permission denied for bucket BUCKET_ID).
Please, give owner permissions to the editor role of the bucket and try again.
Solusi
Untuk mengatasi error ini, reset akun layanan Agen Layanan 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 Run Functions menjadi publik. Anda harus memberikan izin cloudfunctions.functions.setIamPolicy
kepada pengguna atau layanan yang men-deploy fungsi.
Pesan error
gcloud
ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME (or resource may not exist).]
Solusi
Untuk mengatasi error ini, ikuti salah satu solusi berikut:
Tetapkan peran Project Owner atau Cloud Functions Admin kepada deployer, yang keduanya berisi izin
cloudfunctions.functions.setIamPolicy.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 Pembatasan Lokasi Resource, kebijakan tersebut akan membatasi deployment fungsi di region yang dibatasi oleh kebijakan tersebut. Di konsol Google Cloud , region yang dibatasi tidak akan tersedia dari drop-down region saat men-deploy fungsi.
Pesan error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[The request has violated one or more Org Policies. Please refer to the respective violations for more information. violations {
type: "constraints/gcp.resourceLocations"
subject: "orgpolicy:projects/PROJECT_ID"
description: "Constraint constraints/gcp.resourceLocations violated for projects/PROJECT_ID attempting GenerateUploadUrlActionV1 with location set to RESTRICTED_LOCATION. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
Solusi
Tambahkan atau hapus lokasi dari daftar allowed_values atau denied_values
batasan lokasi resource agar deployment 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 melakukan inisialisasi klien.
Pesan error
Konsol
Deployment failure: Function failed on loading user code. This is likely due to a bug in the user code.
gcloud
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function
failed on loading user code. This is likely due to a bug in the user code.
Di log Cloud Logging:
"Function failed on loading user code. This is likely due to a bug in the user code."
Solusi
Untuk mengatasi masalah ini, ikuti salah satu solusi berikut:
Untuk pesan error yang lebih mendetail, tinjau log build 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), atau menyebabkan error atau menampilkan pengecualian.
Tingkatkan waktu tunggu fungsi.
Kode sumber harus berisi fungsi titik entri yang telah ditentukan dengan benar dalam deployment, baik melalui konsol atau 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, serta tidak dapat men-deploy fungsi baru. Fitur Create function berwarna abu-abu di konsolGoogle Cloud dengan error berikut:
Pesan error
gcloud
ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Permission
'cloudfunctions.functions.sourceCodeSet' denied on resource
'projects/PROJECT_ID/locations/LOCATION` (or resource may not exist)
Solusi
Tetapkan peran Cloud Functions Developer kepada pengguna.
Akun layanan build tidak memiliki izin
Pesan error
Dalam error deployment fungsi atau di 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-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-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 serta izin baca dan tulis untuk repositori Deployment Artefak. Anda mungkin menemui error ini karena perubahan perilaku default terkait cara Cloud Build menggunakan akun layanan, yang dijelaskan secara mendetail di 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 menerapkan 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 untuk men-deploy suatu fungsi. Anda mungkin mengalami error ini karena perubahan perilaku default terkait cara Cloud Build menggunakan akun layanan, yang dijelaskan secara mendetail di 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 menerapkan perubahan ini.
Penyajian
Bagian ini mencantumkan masalah penyajian yang mungkin Anda alami, dan memberikan saran tentang cara memperbaiki setiap 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.
Membuka URL Cloud Run Functions di browser tidak akan menambahkan header autentikasi secara otomatis.
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 error ini, ikuti salah satu solusi berikut:
Tetapkan peran Cloud Run Functions Invoker kepada pengguna.
Deploy ulang fungsi Anda untuk mengizinkan pemanggilan yang tidak diautentikasi jika didukung oleh organisasi Anda. Hal ini dapat berguna untuk tujuan pengujian.
Error izin penyajian karena konfigurasi allow internal traffic only
Setelan ingress membatasi apakah fungsi HTTP dapat dipanggil oleh resource di luar project Google Cloud Anda atau perimeter layanan Kontrol Layanan VPC. Saat Anda mengonfigurasi setelan izinkan traffic internal saja untuk jaringan ingress, pesan error ini menunjukkan bahwa hanya permintaan dari jaringan VPC dalam project atau perimeter Kontrol Layanan VPC yang sama yang diizinkan.
Pesan error
Kode Respons Error HTTP: 404 NOT FOUND
Isi Respons Error HTTP:
404 Page not found
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 ingress untuk mengizinkan semua traffic untuk fungsi tersebut.
Kode sumber Cloud Run Functions dapat menyebabkan error 404 karena URL fungsi, metode HTTP, atau error logika yang salah.
Pemanggilan fungsi tidak memiliki kredensial autentikasi yang valid
Fungsi yang dikonfigurasi dengan akses terbatas memerlukan token ID. Pemanggilan fungsi gagal jika Anda menggunakan token akses atau token refresh.
Pesan error
Kode Respons Error HTTP: 401 Unauthorized
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 Anda 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 pemanggilan.Panggil fungsi HTTP menggunakan kredensial autentikasi di header permintaan Anda. Misalnya, Anda bisa mendapatkan token identitas menggunakan gcloud sebagai berikut:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME
Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi pemanggilan .
Fungsi berhenti di tengah eksekusi, atau terus berjalan setelah kode Anda selesai
Beberapa runtime Cloud Run Functions 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 jangka waktu tunggu yang ditentukan berlalu.
- Fungsi Anda tidak berhenti berjalan saat tugas ini selesai, dan terus berjalan hingga jangka waktu tunggu berlalu.
Solusi
Jika fungsi Anda berhenti lebih awal, Anda harus memastikan semua tugas asinkron fungsi Anda selesai sebelum fungsi Anda melakukan salah satu tindakan berikut:
- Menampilkan nilai
- Me-resolve atau menolak objek
Promiseyang ditampilkan (khusus fungsi Node.js) - Menampilkan pengecualian dan error yang tidak terdeteksi
- Mengirim respons HTTP
- Memanggil fungsi callback
Jika fungsi Anda gagal berhenti setelah menyelesaikan tugas asinkron, Anda harus memastikan bahwa fungsi tersebut memberikan sinyal ke Cloud Run Functions dengan benar setelah selesai. Secara khusus, pastikan Anda melakukan salah satu operasi yang tercantum dalam daftar sebelumnya segera setelah fungsi Anda menyelesaikan tugas asinkronnya.
Error runtime saat mengakses resource yang dilindungi oleh Kontrol Layanan VPC
Secara default, Cloud Run Functions menggunakan alamat IP publik untuk membuat permintaan keluar
ke layanan lain. Fungsi yang tidak berada dalam perimeter Kontrol Layanan VPC
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, beri akses ke perimeter untuk akun layanan runtime fungsi. 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
Kondisi berikut dapat dikaitkan dengan kegagalan penskalaan.
- Peningkatan traffic mendadak.
- Waktu cold start yang lama.
- Waktu pemrosesan permintaan yang lama.
- Tingkat error fungsi tinggi.
- Batas instance maksimum tercapai.
- Faktor sementara yang dikaitkan dengan layanan Cloud Run Functions.
Dalam setiap kasus, Cloud Run Functions mungkin tidak melakukan peningkatan skala cukup cepat untuk mengelola traffic.
Pesan error
The request was aborted because there was no available instance.
Cloud Run Functions memiliki tingkat keparahan berikut:
* `severity=WARNING` ( Response code: 429 ) Cloud Run functions cannot scale due
to the [`max-instances`](/functions/docs/configuring/max-instances) limit you set
during configuration.
* `severity=ERROR` ( Response code: 500 ) Cloud Run functions intrinsically
cannot manage the rate of traffic.
Solusi
- Untuk fungsi berbasis pemicu HTTP, terapkan backoff
eksponensial dan coba lagi untuk permintaan yang tidak boleh dihapus. Jika Anda
memicu Cloud Run Functions dari Workflows,
Anda dapat menggunakan sintaksis
try/retryuntuk mencapainya. - Untuk fungsi latar belakang atau berbasis peristiwa, Cloud Run Functions mendukung pengiriman minimal satu kali. Bahkan tanpa mengaktifkan percobaan ulang secara eksplisit, peristiwa tersebut akan otomatis dikirimkan ulang dan eksekusi fungsi akan dicoba lagi. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan percobaan ulang fungsi berbasis peristiwa.
- Jika penyebab utama masalah ini adalah periode tingginya error sementara yang hanya dikaitkan dengan Cloud Run Functions atau jika Anda memerlukan bantuan terkait masalah Anda, hubungi Cloud Customer Care.
Logging
Bagian berikut membahas masalah terkait logging dan cara memperbaikinya.
Entri log tidak memiliki tingkat keparahan log atau tingkat keparahan lognya salah
Cloud Run Functions menyertakan logging runtime secara default. Log yang ditulis ke
stdout atau stderr akan muncul secara otomatis di
konsolGoogle Cloud .
Namun, entri log ini, secara default, hanya berisi pesan string.
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.
Penambahan blok try dapat menyebabkan efek samping yang tidak diinginkan pada fungsi berbasis
peristiwa dengan konfigurasi retry on failure. Mencoba lagi peristiwa yang gagal
juga dapat gagal.
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 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 Functions menampilkan error
Cloud Run Functions mengalirkan log fungsi Cloud Run ke bucket default. Saat Anda membuat project, Cloud Run Functions 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 Log Explorer.
Solusi
Aktifkan log default dan pastikan tidak ada filter pengecualian yang ditetapkan.
Log Cloud Run Functions 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. Kemungkinan juga beberapa log akan hilang dan tidak dapat dilihat di Logs Explorer.
Solusi
Gunakan antarmuka library klien untuk menghapus entri log yang di-buffer sebelum keluar
dari fungsi, atau gunakan library untuk menulis entri log secara sinkron. Anda juga dapat
menulis log secara langsung ke stdout atau stderr secara sinkron.
Log Cloud Run Functions tidak muncul menggunakan sink Log Router
Sink Log Router merutekan entri log ke berbagai tujuan.

Setelan ini mencakup Filter pengecualian, yang menentukan entri yang dapat dihapus.

Solusi
Hapus filter pengecualian yang disetel untuk resource.type="cloud_functions".
Koneksi database
Banyak error database
berkaitan dengan terlampauinya batas koneksi atau waktu habis. Jika melihat peringatan Cloud SQL
di log, misalnya, Context deadline exceeded, Anda mungkin perlu
menyesuaikan konfigurasi koneksi. Untuk mengetahui 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 egress, Anda dapat menjalankan Uji Konektivitas untuk mengidentifikasi masalah konektivitas jaringan yang mendasarinya. Untuk informasi selengkapnya, lihat Membuat dan menjalankan Uji Konektivitas.
Konektor Akses VPC Serverless belum siap atau tidak ada
Jika konektor Akses VPC Serverless gagal, konektor itu mungkin tidak
menggunakan subnet mask /28 yang dikhususkan untuk konektor tersebut sesuai persyaratan.
Pesan error
VPC connector projects/xxxxx/locations/REGION/connectors/xxxx
is not ready yet or does not exist.
Jika Cloud Run Functions di-deploy dengan konektor dalam kondisi buruk karena izin yang tidak ada di akun layanan Agen Layanan Google API PROJECT_NUMBER@cloudservices.gserviceaccount.com, akan muncul 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 Cloud Run Functions dan konektor yang terkait di-deploy di region yang sama.
Untuk konfigurasi VPC Bersama:
Pastikan akun layanan
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.comdanservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.comyang digunakan oleh VPC Connector untuk menyediakan resource dalam project tidak kehilangan izin. Akun layanan ini harus memiliki peranroles/compute.networkUserdi project host konfigurasi VPC Bersama saat konektor berada di project layanan. Jika tidak,roles/compute.networkAdmindiperlukan.Jika konektor dibuat di project host, pastikan peran
Serverless VPC Access Userdiberikan padaCloud Run functions Service Agentdi 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.adminke akun layananPROJECT_NUMBER@cloudservices.gserviceaccount.com. Dalam beberapa kasus, Anda mungkin perlu membuat ulang konektor setelah memperbarui izin.
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 Cloud Run Functions.
Solusi
Untuk berhenti memblokir koneksi ini, pilih salah satu opsi berikut:
Hubungkan ke server SMTP pada port yang berbeda, seperti port TCP
587atau465.
Lainnya
Bagian ini menguraikan masalah tambahan yang tidak termasuk dalam kategori lain dan menawarkan solusi untuk setiap masalah.
Error Kontrol Layanan VPC pada metode google.storage.buckets.testIamPermissions di Cloud Audit Logs
Saat Anda membuka halaman Function details di
konsolGoogle Cloud , Cloud Run Functions akan memeriksa apakah Anda dapat mengubah
repositori penyimpanan image container dan
mengaksesnya secara publik. Untuk memverifikasi, Cloud Run Functions mengirimkan permintaan ke
bucket Container Registry menggunakan
metode google.storage.buckets.testIamPermissions dengan format berikut:
[REGION].artifacts.[PROJECT_ID].appspot.com. Satu-satunya perbedaan antara
pemeriksaan tersebut adalah bahwa salah satunya berjalan dengan autentikasi untuk memverifikasi izin pengguna untuk mengubah
bucket, sementara pemeriksaan lainnya berjalan tanpa autentikasi untuk memverifikasi apakah
bucket dapat diakses secara publik.
Jika perimeter Kontrol Layanan VPC membatasi storage.googleapis.com
API, konsol Google Cloud akan menampilkan error pada metode
google.storage.buckets.testIamPermissions di Cloud Audit Logs.
Pesan error
Untuk pemeriksaan akses publik tanpa info autentikasi, log audit Kebijakan Penolakan VPC SC menampilkan entri yang mirip dengan berikut ini:
"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": {},
"requestMetadata": {
"callerIp": "END_USER_IP"
},
"serviceName": "storage.googleapis.com",
"methodName": "google.storage.buckets.testIamPermissions",
"resourceName": "projects/PROJECT_NUMBER",
"metadata": {
"ingressViolations": [
{
"servicePerimeter": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
"targetResource": "projects/PROJECT_NUMBER"
}
],
"resourceNames": [
"projects/_/buckets/REGION.artifacts.PROJECT_ID.appspot.com"
],
"securityPolicyInfo": {
"servicePerimeterName": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
"organizationId": "ORG_ID"
},
"violationReason": "NO_MATCHING_ACCESS_LEVEL",
...
Untuk pemeriksaan akses publik dengan info autentikasi, log audit Kebijakan Penolakan VPC SC menampilkan entri yang memungkinkan pengguna mengubah setelan bucket yang serupa dengan contoh 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": "END_USER_EMAIL"
},
"requestMetadata": {
"callerIp": "END_USER_IP",
"requestAttributes": {},
"destinationAttributes": {}
},
"serviceName": "storage.googleapis.com",
"methodName": "google.storage.buckets.testIamPermissions",
"resourceName": "projects/PROJECT_NUMBER",
"metadata": {
"ingressViolations": [
{
"servicePerimeter": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
"targetResource": "projects/PROJECT_NUMBER"
}
],
"resourceNames": [
"projects/_/buckets/REGION.artifacts.PROJECT_ID.appspot.com"
],
"securityPolicyInfo": {
"servicePerimeterName": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
"organizationId": "ORG_ID"
},
"violationReason": "NO_MATCHING_ACCESS_LEVEL",
...
Solusi
Jika bucket Container Registry tidak dapat diakses secara publik, Anda dapat mengabaikan error Kontrol Layanan VPC.
Atau, Anda dapat menambahkan aturan ingress
Kontrol Layanan VPC untuk mengizinkan metode google.storage.buckets.testIamPermissions, seperti yang ditunjukkan dalam
contoh berikut:
ingress_from {
sources {
access_level: "*"
}
identity_type: ANY_IDENTITY
}
ingress_to {
operations {
service_name: "storage.googleapis.com"
method_selectors {
method: "google.storage.buckets.testIamPermissions"
}
}
resources: "projects/PROJECT_NUMBER"
}
Jika memungkinkan, Anda dapat lebih menyempurnakan aturan ingress dengan menentukan tingkat akses menggunakan alamat IP pengguna.