Memanggil Cloud Functions atau Cloud Run

Memanggil atau memanggil layanan Google Cloud seperti Cloud Functions atau Cloud Run dari Workflows dilakukan melalui permintaan HTTP. Metode permintaan HTTP yang paling umum memiliki pintasan panggilan (seperti http.get dan http.post), tetapi Anda dapat membuat jenis permintaan HTTP apa pun dengan menyetel kolom call ke http.request dan menentukan jenis permintaan menggunakan kolom method. Untuk mengetahui informasi selengkapnya, lihat Membuat permintaan HTTP.

Untuk mengirim permintaan yang diautentikasi:

  • Alur kerja Anda harus dikaitkan dengan akun layanan yang telah diberi satu atau beberapa peran Identity and Access Management (IAM) yang berisi izin yang diperlukan.

  • Anda harus secara eksplisit menambahkan informasi autentikasi ke definisi alur kerja. Secara default, permintaan HTTP tidak berisi token identitas atau akses untuk alasan keamanan.

Untuk mengetahui informasi selengkapnya, lihat bagian Memberikan izin alur kerja untuk mengakses resource Google Cloud.

Waktu untuk menelepon layanan

Bagaimana Anda tahu kapan harus membuat langkah dalam YAML atau JSON menggunakan sintaksis Workflows atau kapan harus membuat layanan—misalnya layanan Cloud Run atau Cloud Function—yang harus dilakukan?

Gunakan Workflows untuk memanggil layanan dari alur kerja itu sendiri dan menangani hasilnya, serta untuk menjalankan tugas sederhana seperti membuat panggilan HTTP. Alur kerja dapat memanggil layanan, mengurai respons, dan membuat input untuk layanan lain yang terhubung. Memanggil layanan memungkinkan Anda menghindari detail pemanggilan tambahan, dependensi tambahan, dan layanan yang memanggil layanan.

Buat layanan untuk melakukan tugas apa pun yang terlalu kompleks untuk Workflows; misalnya, menerapkan logika bisnis yang dapat digunakan kembali, komputasi kompleks, atau transformasi yang tidak didukung oleh ekspresi Workflows dan library standarnya. Kasus yang rumit biasanya lebih mudah diimplementasikan dalam kode, daripada menggunakan YAML atau JSON dan sintaksis Workflows.

Memanggil layanan yang dibatasi untuk ingress internal

Alur kerja dapat memanggil layanan Cloud Functions atau Cloud Run di project Google Cloud yang sama dengan traffic masuk yang dibatasi untuk traffic internal. Dengan konfigurasi ini, layanan Anda tidak dapat dijangkau dari internet, tetapi dapat dijangkau dari Workflows.

Untuk menerapkan batasan ini, Anda harus menyesuaikan setelan ingress layanan atau fungsi Anda. Perhatikan bahwa layanan Cloud Run harus dijangkau di URL run.app, bukan di domain kustom. Untuk mengetahui informasi selengkapnya, lihat Membatasi ingress (untuk Cloud Run) dan Mengonfigurasi setelan jaringan (untuk Cloud Functions). Tidak ada perubahan lain yang diperlukan pada alur kerja Anda.

Menggunakan akun layanan dengan izin yang diperlukan

Saat membuat permintaan ke layanan Google Cloud lainnya, alur kerja Anda harus dikaitkan dengan akun layanan yang memiliki izin yang tepat untuk mengakses resource yang diminta. Untuk mempelajari akun layanan yang dikaitkan dengan alur kerja yang ada, lihat Memverifikasi akun layanan terkait alur kerja.

Saat menyiapkan akun layanan, Anda mengaitkan identitas yang meminta dengan resource yang ingin Anda beri akses—Anda menjadikan identitas permintaan sebagai utama resource—lalu menetapkan peran yang sesuai kepadanya. Peran menentukan izin yang dimiliki identitas dalam konteks resource.

Misalnya, untuk mengonfigurasi Cloud Function penerima agar menerima permintaan dari fungsi atau layanan panggilan tertentu, Anda harus menambahkan akun layanan pemanggil sebagai akun utama pada fungsi penerima dan memberikan peran Cloud Functions Invoker (roles/cloudfunctions.invoker) ke akun utama tersebut. Demikian pula, untuk menyiapkan akun layanan untuk Cloud Run, Anda memberikan peran Cloud Run Invoker (roles/run.invoker) ke akun layanan tersebut. Untuk mempelajari lebih lanjut, baca informasi autentikasi untuk Cloud Functions atau Ringkasan autentikasi Cloud Run.

Memanggil Cloud Functions (generasi ke-2)

Di Cloud Functions (generasi ke-2), izin pemanggilan tersedia dengan mengelola layanan Cloud Run yang mendasarinya. Jika alur kerja Anda memanggil layanan Cloud Function (generasi ke-2), Anda tidak perlu memberikan peran Cloud Functions Invoker (roles/cloudfunctions.invoker) ke akun layanan pemanggil. Sebagai gantinya, Anda harus memberikan peran Cloud Run Invoker (roles/run.invoker).

Untuk mengetahui informasi selengkapnya, lihat Perbandingan versi Cloud Functions.

Menambahkan informasi autentikasi ke alur kerja Anda

Saat membuat permintaan ke Cloud Functions atau Cloud Run, gunakan OIDC untuk melakukan autentikasi.

Untuk membuat permintaan HTTP menggunakan OIDC, tambahkan bagian auth ke bagian args pada definisi alur kerja, setelah Anda menentukan URL. Dalam contoh ini, permintaan dikirim untuk memanggil Cloud Function:

YAML

  - step_A:
      call: http.get
      args:
          url: https://us-central1-project.cloudfunctions.net/functionA
          query:
              firstNumber: 4
              secondNumber: 6
              operation: sum
          auth:
              type: OIDC
              audience: OIDC_AUDIENCE
    

JSON

    [
      {
        "step_A": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-project.cloudfunctions.net/functionA",
            "query": {
              "firstNumber": 4,
              "secondNumber": 6,
              "operation": "sum"
            },
            "auth": {
              "type": "OIDC",
              "audience": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
Parameter audience dapat digunakan untuk menentukan audiens OIDC untuk token. Secara default, atribut ini ditetapkan ke nilai yang sama dengan url. Namun, atribut ini harus ditetapkan ke URL root layanan Anda. Misalnya: https://region-project.cloudfunctions.net/hello_world

Menentukan jenis media untuk data respons

Jika header Content-Type untuk respons menentukan jenis media application/json, respons JSON yang disimpan dalam variabel akan otomatis dikonversi menjadi peta yang dapat diakses.

Jika perlu, ubah API yang dipanggil untuk menentukan jenis media application/json untuk header respons Content-Type. Jika tidak, Anda dapat menggunakan fungsi json.decode dan text.encode untuk mengonversi isi respons menjadi peta. Contoh:

json.decode(text.encode(RESPONSE_FROM_API))

Untuk mengetahui informasi selengkapnya, lihat Mengakses data respons HTTP yang disimpan dalam variabel.

Menjalankan tugas Cloud Run

Tidak seperti layanan Cloud Run, tugas Cloud Run tidak memproses atau melayani permintaan HTTP. Untuk menjalankan tugas Cloud Run dari alur kerja, gunakan konektor Cloud Run Admin API.

Untuk contoh end-to-end dari eksekusi job Cloud Run yang memproses data yang diteruskan sebagai variabel lingkungan ke tugas, lihat Eksekusi job Cloud Run menggunakan Workflows.

Untuk mengetahui contoh menyeluruh dari eksekusi tugas Cloud Run yang memproses data yang disimpan di bucket Cloud Storage yang memungkinkan Anda mengenkripsi data menggunakan kunci enkripsi yang dikelola pelanggan (CMEK), baca bagian Menjalankan tugas Cloud Run yang memproses data peristiwa di Cloud Storage.

Langkah selanjutnya