Halaman ini menunjukkan cara menyelesaikan masalah yang mungkin Anda alami saat menggunakan Workflows.
Untuk mengetahui informasi selengkapnya, lihat pemantauan dan proses debug Workflows.
Error saat deployment
Saat alur kerja di-deploy, Workflows akan memeriksa apakah kode sumber bebas dari error dan cocok dengan sintaksis bahasa. Workflows akan menampilkan error jika ditemukan. Jenis error deployment yang paling umum adalah:
- Mereferensikan variabel, langkah, atau sub-alur kerja yang tidak ditentukan
- Sintaksis salah
- Indentasi salah
{,},",-, atau:tidak ada atau tidak relevan
Misalnya, kode sumber berikut menampilkan error deployment karena pernyataan return merujuk ke variabel yang tidak ditentukan, varC:
- step1: assign: - varA: "Hello" - varB: "World" - step2: return: ${varC + varB}
Kode sumber yang salah ini digunakan dalam contoh konsol Google Cloud dan gcloud CLI berikut.
Konsol
Saat terjadi error deployment, Workflows akan menampilkan pesan error
dalam banner di halaman Edit workflow:
Pesan error menandai masalah dalam kode sumber, yang menentukan asal
error jika memungkinkan:
Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)
gcloud
Saat Anda menjalankan perintah gcloud workflows deploy, Workflows akan menampilkan pesan error ke command line jika deployment gagal. Pesan error menandai masalah dalam kode sumber,
dengan menentukan asal error jika memungkinkan:
ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name
Untuk mengatasi masalah ini, edit kode sumber alur kerja. Dalam hal ini, lihat
varA, bukan varC.
Error izin akun layanan 403 HTTP
Anda mungkin mengalami error HTTP 403 (PERMISSION_DENIED) saat menjalankan alur kerja, atau saat men-deploy atau mengupdate alur kerja.
Izin ditolak saat menjalankan alur kerja
Eksekusi alur kerja Anda gagal saat server HTTP merespons dengan kode error
403 karena akun layanan alur kerja tidak memiliki izin untuk mengakses
resource target. Contoh:
SERVICE_ACCOUNT does not have storage.objects.create access to the Google Cloud Storage object. Permission 'storage.objects.create' denied on resource (or it may not exist).
Setiap alur kerja dikaitkan dengan akun layanan Identity and Access Management (IAM)
saat alur kerja dibuat. Untuk mengatasi masalah ini, berikan satu atau beberapa peran IAM kepada akun layanan alur kerja yang berisi izin minimum yang diperlukan untuk mengakses resource yang digunakan alur kerja Anda. Misalnya, agar alur kerja Anda dapat mengirim log ke Cloud Logging, pastikan akun layanan yang menjalankan alur kerja diberi peran yang mencakup izin logging.logEntries.create. Untuk mengetahui informasi selengkapnya, lihat
Memberikan izin alur kerja untuk mengakses resource Google Cloud .
Izin ditolak saat men-deploy atau mengupdate alur kerja
Saat Anda men-deploy atau mengupdate alur kerja, permintaan mungkin gagal dengan error HTTP 403
(PERMISSION_DENIED) jika Anda tidak memiliki izin untuk bertindak sebagai
akun layanan alur kerja. Contoh:
Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@ (or it may not exist).
atau
permission iam.serviceAccounts.ActAs is required on the workflow's new/current service account to set it or the workflow source contents
Untuk mengatasi masalah ini, beri akun utama yang men-deploy atau mengupdate
alur kerja peran yang mencakup izin iam.serviceAccounts.actAs, seperti
Service Account User
(roles/iam.serviceAccountUser). Bergantung pada operasinya, berikan peran ini
pada akun layanan berikut:
- Hanya mengupdate kode sumber alur kerja (tanpa mengupdate akun layanan): berikan peran pada akun layanan yang ada yang terkait dengan alur kerja.
- Membuat alur kerja, memperbarui akun layanan, atau memperbarui kode sumber dan akun layanan: berikan peran pada akun layanan baru yang Anda kaitkan dengan alur kerja.
Untuk mengetahui informasi selengkapnya, lihat Izin akun layanan.
Error HTTP 404 No such object atau Not found
Saat menggunakan
konektor Cloud Storage,
eksekusi alur kerja Anda akan gagal saat server HTTP merespons dengan kode error
404. Contoh:
HTTP server responded with error code 404 in step "read_input_file", routine "main", line: 13 { "body": "Not Found", "code": 404, ... }
Anda harus mengenkode nama objek ke URL agar jalur aman. Anda dapat menggunakan fungsi
url_encode dan
url_encode_plus
untuk mengenkode karakter yang berlaku saat karakter tersebut muncul di nama objek
atau string kueri URL permintaan. Contoh:
- init: assign: - source_bucket: "my-bucket" - file_name: "my-folder/my-file.json" - list_objects: call: googleapis.storage.v1.objects.get args: bucket: ${source_bucket} object: ${text.url_encode(file_name)} alt: media result: r - returnStep: return: ${r}
Jika Anda tidak mengenkode URL nama objek dan bucket penyimpanan Anda memiliki folder, permintaan akan gagal. Untuk mengetahui informasi selengkapnya, lihat Mengenkode bagian jalur URL dan Pertimbangan penamaan Cloud Storage.
Error HTTP 429 Too many requests
Ada jumlah maksimum eksekusi alur kerja aktif yang dapat berjalan secara serentak. Setelah kuota ini habis, dan jika
backlog eksekusi dinonaktifkan, atau jika kuota untuk eksekusi yang di-backlog
tercapai, eksekusi baru akan gagal dengan kode status HTTP
429 Too many requests.
Backlog eksekusi memungkinkan Anda mengantrekan eksekusi alur kerja setelah kuota eksekusi serentak tercapai. Secara default, backlog eksekusi diaktifkan untuk semua permintaan (termasuk yang dipicu oleh Cloud Tasks) dengan pengecualian berikut:
- Saat membuat eksekusi menggunakan konektor
executions.runatauexecutions.createdalam alur kerja, backlog eksekusi dinonaktifkan secara default. Anda dapat mengonfigurasinya dengan menetapkan kolomdisableConcurrencyQuotaOverflowBufferingeksekusi secara eksplisit kefalse. - Untuk eksekusi yang dipicu oleh Pub/Sub, backlog eksekusi dinonaktifkan dan tidak dapat dikonfigurasi.
Untuk mengetahui informasi selengkapnya, lihat Mengelola backlog eksekusi.
Anda juga dapat mengaktifkan antrean Cloud Tasks untuk menjalankan alur kerja turunan dengan kecepatan yang Anda tentukan dan mencapai kecepatan eksekusi yang lebih baik; dalam hal ini, Anda mungkin ingin secara eksplisit menonaktifkan backlogging eksekusi.
Error izin akun layanan lintas project
Jika Anda menerima error PERMISSION_DENIED saat mencoba menggunakan akun layanan lintas project untuk men-deploy alur kerja, pastikan batasan boolean iam.disableCrossProjectServiceAccountUsage tidak diterapkan untuk project Anda dan Anda telah menyiapkan akun layanan dengan benar. Untuk
mengetahui informasi selengkapnya, lihat Men-deploy alur kerja dengan akun layanan
lintas project.
Nama resource harus sesuai dengan RFC 1123
Eksekusi alur kerja Anda gagal saat server HTTP merespons dengan kode error 400. Contoh:
"description": "must conform to RFC 1123: only lowercase, digits, hyphens, and periods are allowed, must begin and end with letter or digit, and less than 64 characters."
Untuk mengatasi masalah ini, pastikan nama resource Anda mengikuti standar label DNS seperti yang ditentukan dalam RFC 1123, dan saat menetapkan variabel, Anda menggabungkan string dan ekspresi dengan benar.
Misalnya, Anda tidak dapat menetapkan variabel seperti ini: - string: hello-${world}.
Sebagai gantinya, lakukan hal berikut:
YAML
- assign_vars: assign: - string: "hello" - string: ${string+" "+"world"}
JSON
[ { "assign_vars": { "assign": [ { "string": "hello" }, { "string": "${string+" "+"world"}" }, ] } } ]
Ekspresi yang berisi titik dua
Dalam YAML, ekspresi yang berisi titik dua dapat menyebabkan perilaku yang tidak terduga jika titik dua ditafsirkan sebagai penentu peta. Meskipun memungkinkan untuk men-deploy dan menjalankan alur kerja, output-nya tidak akan sesuai harapan.
Jika membuat alur kerja menggunakan konsol Google Cloud , alur kerja tidak dapat dirender secara visual di konsol Google Cloud , dan Anda mungkin menerima peringatan seperti berikut:
Anda dapat mengatasi masalah ini dengan mengapit ekspresi YAML dalam tanda kutip tunggal:
Direkomendasikan: '${"a: " +string(a)}'
Tidak direkomendasikan: ${"a: " +string(a)}
Kunci peta yang menggunakan karakter non-alfanumerik
Saat mengakses kunci peta dengan karakter non-alfanumerik (misalnya, tanda seru di "special!key": value), Anda harus mengapit nama kunci dalam tanda kutip. Jika nama kunci tidak diapit tanda petik, alur kerja tidak dapat di-deploy. Misalnya, jika Anda mencoba men-deploy kode sumber berikut,
token recognition error akan ditampilkan:
- init: assign: - var: key: "special!key": bar - returnOutput: return: '${"foo" + var.key[special!key]}'
Untuk mengatasinya, gunakan kode berikut untuk menampilkan output:
'${"foo" + var.key["special!key"]}'
Beberapa ekspresi dalam daftar
Menggunakan beberapa ekspresi di dalam daftar seperti contoh rentang iterasi berikut bukanlah YAML yang valid:
[${rangeStart}, ${rangeEnd}])
Anda dapat mengatasi masalah ini dengan melakukan salah satu tindakan berikut:
Tempatkan daftar di dalam ekspresi:
${[rangeStart, rangeEnd]}Gabungkan setiap ekspresi dalam tanda kutip tunggal:
['${rangeStart}', '${rangeEnd}']
Hasilnya adalah daftar dua nilai, seperti yang diharapkan.
Kunci enkripsi yang dikelola pelanggan (Customer-Managed Encryption Key/CMEK)
Anda mungkin mengalami error saat menggunakan Cloud KMS dengan Workflows. Tabel berikut menjelaskan berbagai masalah dan cara mengatasinya.
| Masalah | Deskripsi |
|---|---|
Izin cloudkms.cryptoKeyVersions.useToEncrypt
ditolak |
Kunci Cloud KMS yang diberikan tidak ada atau izinnya tidak dikonfigurasi dengan benar.
Solusi:
|
| Versi kunci tidak diaktifkan | Versi kunci Cloud KMS yang diberikan telah dinonaktifkan.
|
| Region key ring tidak cocok dengan resource yang akan dilindungi | Region key ring KMS yang disediakan berbeda dengan region alur kerja.
Solusi: Gunakan key ring Cloud KMS dan alur kerja yang dilindungi dari region yang sama. (Perhatikan bahwa keduanya dapat berada dalam project yang berbeda.) Untuk mengetahui informasi selengkapnya, lihat lokasi Cloud KMS dan lokasi Workflows. |
| Batas kuota Cloud KMS terlampaui | Batas kuota Anda untuk permintaan Cloud KMS telah tercapai.
Solusi: Batasi jumlah panggilan Cloud KMS atau tingkatkan batas kuota. Untuk informasi selengkapnya, lihat kuota Cloud KMS. |
Entitas yang diminta tidak ditemukan saat menggunakan konektor Cloud Run
Eksekusi alur kerja Anda gagal saat server HTTP merespons dengan kode error
404 saat mencoba menggunakan metode konektor,
googleapis.run.v1.namespaces.jobs.create.
Metode ini mengharuskan Anda menentukan lokasi endpoint HTTP. Misalnya, us-central1 atau asia-southeast1. Jika Anda tidak menentukan lokasi, endpoint global https://run.googleapis.com akan digunakan; namun, lokasi ini hanya mendukung metode daftar.
Untuk mengatasi masalah ini, pastikan untuk menentukan argumen location saat
memanggil konektor.
Untuk opsi lokasi Cloud Run Admin API, lihat endpoint layanan.
Batas resource
Jika Anda mengalami batas resource atau error seperti ResourceLimitError, MemoryLimitExceededError, atau ResultSizeLimitExceededError, Anda dapat mengosongkan memori dengan menghapus variabel.
Misalnya, Anda mungkin ingin mengosongkan memori yang diperlukan untuk langkah berikutnya. Atau, Anda mungkin memiliki panggilan dengan hasil yang tidak Anda pedulikan, dan Anda dapat
menghilangkan hasil tersebut sepenuhnya.
Indentasi YAML
Indentasi YAML bermakna dan harus berisi minimal dua spasi per tingkat indentasi. Indentasi yang tidak memadai dapat menyebabkan error, dan level baru harus berupa minimal dua spasi dari awal teks di baris sebelumnya.Misalnya, contoh berikut salah menentukan item daftar yang berisi
peta dengan item stepName dan call:
- stepName: call: sys.log
Sebagai gantinya, Anda harus mengindentasi baris berikutnya sebanyak dua spasi untuk menyusun bertingkat call
dalam stepName:
- stepName: call: sys.log
Pastikan Anda menggunakan spasi, bukan karakter tab, untuk mengindentasi baris.