Memecahkan masalah

Halaman ini menunjukkan cara menyelesaikan masalah yang mungkin Anda alami saat menggunakan Workflows.

Untuk mengetahui informasi selengkapnya, lihat pemantauan dan pen-debug-an Alur Kerja.

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 memunculkan error deployment karena pernyataan return mereferensikan variabel yang tidak ditentukan, varC:

- step1:
    assign:
    - varA: "Hello"
    - varB: "World"
- step2:
    return: ${varC + varB}

Kode sumber yang salah ini digunakan dalam contoh Google Cloud konsol dan gcloud CLI berikut.

Konsol

Jika terjadi error deployment, Workflows akan menampilkan pesan error di banner pada halaman Edit alur kerja: Error deployment Pesan error menandai masalah dalam kode sumber, dengan 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, yang 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 HTTP 403

Eksekusi alur kerja Anda 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 memberikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan untuk mengelola alur kerja Anda kepada akun layanan. Misalnya, jika Anda ingin mengizinkan alur kerja Anda mengirim log ke Cloud Logging, pastikan akun layanan yang menjalankan alur kerja telah diberi peran yang mencakup izin logging.logEntries.create. Untuk mengetahui informasi selengkapnya, lihat Memberikan izin alur kerja untuk mengakses resource Google Cloud .

Error HTTP 404 No such object atau Not found

Saat menggunakan konektor Cloud Storage, eksekusi alur kerja Anda 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 aman untuk jalur. Anda dapat menggunakan fungsi url_encode dan url_encode_plus untuk mengenkode karakter yang berlaku saat 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 dijalankan secara bersamaan. Setelah kuota ini habis, dan jika penumpukan eksekusi dinonaktifkan, atau jika kuota untuk eksekusi yang tertunda tercapai, setiap eksekusi baru akan gagal dengan kode status HTTP 429 Too many requests.

Penumpukan eksekusi memungkinkan Anda mengantrekan eksekusi alur kerja setelah kuota eksekusi serentak tercapai. Secara default, penumpukan eksekusi diaktifkan untuk semua permintaan (termasuk yang dipicu oleh Cloud Tasks) dengan pengecualian berikut:

  • Saat membuat eksekusi menggunakan konektor executions.run atau executions.create dalam alur kerja, penumpukan eksekusi dinonaktifkan secara default. Anda dapat mengonfigurasinya dengan menetapkan kolom disableConcurrencyQuotaOverflowBuffering eksekusi ke false secara eksplisit.
  • Untuk eksekusi yang dipicu oleh Pub/Sub, penumpukan eksekusi dinonaktifkan dan tidak dapat dikonfigurasi.

Untuk mengetahui informasi selengkapnya, lihat Mengelola penumpukan eksekusi.

Anda juga dapat mengaktifkan antrean Cloud Tasks untuk menjalankan alur kerja turunan pada kecepatan yang Anda tentukan dan mencapai kecepatan eksekusi yang lebih baik; dalam hal ini, Anda mungkin ingin menonaktifkan penumpukan eksekusi secara eksplisit.

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 saat titik dua ditafsirkan sebagai penentu peta. Meskipun alur kerja dapat di-deploy dan dieksekusi, 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 mirip dengan berikut ini:

Peringatan pembuatan alur kerja

Anda dapat mengatasi masalah ini dengan menyertakan ekspresi YAML dalam tanda petik tunggal:

Direkomendasikan: '${"a: " +string(a)}'

Tidak direkomendasikan: ${"a: " +string(a)}

Memetakan kunci menggunakan karakter non-alfanumerik

Saat mengakses kunci peta dengan karakter non-alfanumerik (misalnya, tanda seru dalam "special!key": value), Anda harus menyertakan nama kunci dalam tanda petik. Jika nama kunci tidak diapit tanda petik, alur kerja tidak dapat di-deploy. Misalnya, jika Anda mencoba men-deploy kode sumber berikut, pengecualian token recognition error akan ditampilkan:

- init:
    assign:
    - var:
        key:
            "special!key": bar
- returnOutput:
    return: '${"foo" + var.key[special!key]}'

Untuk mengatasinya, gunakan kode berikut sebagai gantinya 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]}

  • Sertakan setiap ekspresi dalam tanda petik tunggal:

    ['${rangeStart}', '${rangeEnd}']

Hasilnya kemudian berupa 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 izin tidak dikonfigurasi dengan benar.

Solusi:

Versi kunci tidak diaktifkan Versi kunci Cloud KMS yang diberikan telah dinonaktifkan.

Solusi: Aktifkan kembali versi kunci Cloud KMS.

Wilayah key ring tidak cocok dengan resource yang akan dilindungi Region key ring KMS yang diberikan 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 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 mengetahui 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 membebaskan memori dengan menghapus variabel. Misalnya, Anda mungkin ingin mengosongkan memori yang diperlukan untuk langkah-langkah berikutnya. Atau, Anda mungkin memiliki panggilan dengan hasil yang tidak Anda inginkan, 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, berikut ini 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 mengindentasi baris.

Langkah berikutnya