Halaman ini menunjukkan cara menyelesaikan masalah yang mungkin Anda alami saat menggunakan Alur kerja.
Untuk informasi selengkapnya, lihat Alur Kerja monitoring dan proses debug.
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 yang ditampilkan merujuk pada variabel yang tidak ditentukan, yaitu varC
:
- step1:
assign:
- varA: "Hello"
- varB: "World"
- step2:
return: ${varC + varB}
Kode sumber yang salah ini digunakan dalam contoh Google Cloud Console 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
Eksekusi alur kerja Anda akan gagal saat server HTTP merespons dengan kode error
403
. Contoh:
Permission 'iam.serviceaccounts.actAs' denied on service
account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
atau
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 IAM pada saat alur kerja dibuat. Untuk mengatasi masalah ini, Anda harus memberi akun layanan
satu atau beberapa peran IAM berisi izin minimum
yang diperlukan untuk mengelola alur kerja Anda. Misalnya, jika Anda ingin mengizinkan alur kerja Anda mengirim log ke Cloud Logging, pastikan akun layanan yang menjalankan alur kerja telah diberi peran yang menyertakan izin logging.logEntries.create
. Untuk mengetahui informasi selengkapnya, lihat bagian Memberikan izin alur kerja untuk mengakses resource Google Cloud.
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 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 akan 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 ditetapkan dalam RFC 1123, dan saat menetapkan variabel, Anda menyambungkan 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 penentuan peta. Meskipun alur kerja dapat di-deploy dan dijalankan, outputnya tidak akan seperti yang diharapkan.
Jika membuat alur kerja menggunakan Konsol Google Cloud, alur kerja tidak dapat dirender secara visual di Konsol Google Cloud, dan Anda mungkin menerima peringatan yang serupa dengan berikut ini:
Anda dapat mengatasi masalah ini dengan menggabungkan 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 dengan
tanda kutip. Jika nama kunci tidak digabungkan dalam tanda kutip, alur kerja tidak dapat
di-deploy. Misalnya, jika Anda mencoba men-deploy kode sumber berikut, token recognition error
akan muncul:
- init:
assign:
- var:
key:
"special!key": bar
- returnOutput:
return: '${"foo" + var.key[special!key]}'
Untuk mengatasi hal ini, 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 bukan 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 Alur kerja. Tabel berikut menjelaskan berbagai masalah dan cara mengatasinya.
Masalah | Deskripsi |
---|---|
Izin cloudkms.cryptoKeyVersions.useToEncrypt ditolak |
Kunci Cloud KMS yang diberikan tidak ada atau izin tidak dikonfigurasi dengan benar.
Solusi:
|
Versi kunci tidak diaktifkan | Versi kunci Cloud KMS yang disediakan 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 di project yang berbeda.) Untuk mengetahui informasi selengkapnya, lihat Lokasi Cloud KMS dan Lokasi alur kerja. |
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 mengetahui informasi selengkapnya, lihat kuota Cloud KMS. |
Entity yang diminta tidak ditemukan saat menggunakan konektor Cloud Run
Eksekusi alur kerja Anda akan 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; tetapi, 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 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
selanjutnya. Atau, Anda mungkin melakukan panggilan dengan hasil yang tidak penting, dan hasil tersebut dapat
dihapus sepenuhnya.
Indentasi YAML
Indentasi YAML berguna dan minimal harus dua spasi per tingkat indentasi. Indentasi yang tidak memadai dapat menyebabkan error, dan level baru minimal harus berupa dua spasi dari awal teks di baris sebelumnya.Misalnya, item berikut salah menentukan item daftar yang berisi peta dengan item stepName
dan call
:
- stepName:
call: sys.log
Sebagai gantinya, Anda harus mengindentasi baris berikutnya dengan dua spasi untuk menyusun call
dalam stepName
:
- stepName:
call: sys.log
Pastikan Anda menggunakan spasi, bukan karakter tab, untuk membuat baris indentasi.