Memicu fungsi dari Pub/Sub menggunakan Eventarc


Tutorial ini menunjukkan cara menulis dan memicu fungsi Cloud Run berbasis peristiwa dengan pemicu Pub/Sub.

Anda dapat mengonfigurasi pemilihan rute peristiwa, termasuk sumber peristiwa dan target peristiwa, dengan menentukan filter untuk pemicu Eventarc. Untuk contoh dalam tutorial ini, memublikasikan pesan ke topik Pub/Sub akan memicu peristiwa, dan permintaan akan dikirim ke fungsi Anda dalam bentuk permintaan HTTP.

Jika Anda baru menggunakan Pub/Sub dan ingin mempelajari lebih lanjut, lihat dokumentasi Pub/Sub untuk memulai cepat dan referensi utama.

Tujuan

Dalam tutorial ini, Anda akan:

  1. Deploy fungsi berbasis peristiwa.
  2. Buat pemicu Eventarc.
  3. Picu fungsi dengan memublikasikan pesan ke topik Pub/Sub.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan yang terbatas Google Cloud .

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  9. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Jika tidak menggunakan Cloud Shell, update komponen Google Cloud CLI dan login menggunakan akun Anda:
    gcloud components update
    gcloud auth login
  13. Aktifkan API:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        logging.googleapis.com \
        pubsub.googleapis.com
  14. Tetapkan variabel konfigurasi yang digunakan dalam tutorial ini:
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
  15. Buat akun layanan:
    SERVICE_ACCOUNT=eventarc-trigger-sa
    
    gcloud iam service-accounts create $SERVICE_ACCOUNT
  16. Jika Anda dikenai kebijakan organisasi pembatasan domain yang membatasi pemanggilan yang tidak diautentikasi untuk project, Anda perlu mengakses layanan yang di-deploy seperti yang dijelaskan di bagian Menguji layanan pribadi.

  17. Peran yang diperlukan

    Anda atau administrator Anda harus memberikan peran IAM berikut kepada akun deployer, identitas pemicu, dan secara opsional, agen layanan Pub/Sub dan agen layanan Cloud Storage.

    Peran yang diperlukan untuk akun deployer

    1. Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (roles/owner). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.

      Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.

      Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

      Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

      Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

      Perhatikan bahwa secara default, izin Cloud Build mencakup izin untuk mengupload dan mendownload artefak Artifact Registry.

    Peran yang diperlukan untuk identitas pemicu

    1. Catat akun layanan default Compute Engine karena Anda akan melampirkannya ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan layanan Google Cloud yang menggunakan Compute Engine, dan dengan format email berikut:

      PROJECT_NUMBER-compute@developer.gserviceaccount.com

      Ganti PROJECT_NUMBER dengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'

      Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.

    2. Secara default, layanan Cloud Run hanya dapat dipanggil oleh Project Owner, Project Editor, Cloud Run Admin dan Invoker. Anda dapat mengontrol akses per layanan; namun, untuk tujuan pengujian, berikan peran Cloud Run Invoker (run.invoker) di project Google Cloud ke akun layanan Compute Engine. Peran ini akan memberikan peran tersebut di semua layanan dan tugas Cloud Run dalam suatu project.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/run.invoker

      Perhatikan bahwa pemicu akan berhasil dibuat dan diaktifkan jika Anda membuat pemicu untuk layanan Cloud Run yang diautentikasi tanpa memberikan peran Cloud Run Namun, pemicu tidak akan berfungsi seperti yang diharapkan dan pesan yang mirip dengan berikut ini akan muncul di log:

      The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
    3. Berikan Peran Eventarc Event Receiver (roles/eventarc.eventReceiver) pada project ke akun layanan default Compute Engine agar pemicu Eventarc dapat menerima peristiwa dari penyedia peristiwa.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/eventarc.eventReceiver

    Peran opsional untuk agen layanan Cloud Storage

    • Sebelum membuat pemicu untuk peristiwa langsung dari Cloud Storage, berikan peran Pub/Sub Publisher (roles/pubsub.publisher) kepada agen layanan Cloud Storage:

      SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)"
      
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:${SERVICE_ACCOUNT}" \
          --role='roles/pubsub.publisher'

    Peran opsional untuk agen layanan Pub/Sub

    • Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum 8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator) kepada agen layanan. Jika tidak, peran ini akan diberikan secara default:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
          --role=roles/iam.serviceAccountTokenCreator

    Membuat topik Pub/Sub

    Di Cloud Run, topik Pub/Sub tidak otomatis dibuat saat Anda men-deploy fungsi. Sebelum men-deploy fungsi, publikasikan pesan ke topik Pub/Sub ini untuk memicu fungsi:

    gcloud pubsub topics create YOUR_TOPIC_NAME

    Menyiapkan aplikasi

    1. Clone repositori aplikasi contoh ke komputer lokal Anda:

      Node.js

      git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
      

      Python

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
      

      Go

      git clone https://github.com/GoogleCloudPlatform/golang-samples.git
      

      Java

      git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
      

      .NET

      git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
      

      Ruby

      git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
      

      PHP

      git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
      
    2. Ubah ke direktori yang berisi kode contoh untuk mengakses Pub/Sub:

      Node.js

      cd nodejs-docs-samples/functions/v2/helloPubSub/
      

      Python

      cd python-docs-samples/functions/v2/pubsub/
      

      Go

      cd golang-samples/functions/functionsv2/hellopubsub/
      

      Java

      cd java-docs-samples/functions/v2/pubsub/
      

      .NET

      cd dotnet-docs-samples/functions/helloworld/HelloPubSub/
      

      Ruby

      cd ruby-docs-samples/functions/helloworld/pubsub/
      

      PHP

      cd php-docs-samples/functions/helloworld_pubsub/
      
    3. Lihat kode contoh:

      Node.js

      const functions = require('@google-cloud/functions-framework');
      
      // Register a CloudEvent callback with the Functions Framework that will
      // be executed when the Pub/Sub trigger topic receives a message.
      functions.cloudEvent('helloPubSub', cloudEvent => {
        // The Pub/Sub message is passed as the CloudEvent's data payload.
        const base64name = cloudEvent.data.message.data;
      
        const name = base64name
          ? Buffer.from(base64name, 'base64').toString()
          : 'World';
      
        console.log(`Hello, ${name}!`);
      });

      Python

      import base64
      
      from cloudevents.http import CloudEvent
      import functions_framework
      
      
      # Triggered from a message on a Cloud Pub/Sub topic.
      @functions_framework.cloud_event
      def subscribe(cloud_event: CloudEvent) -> None:
          # Print out the data from Pub/Sub, to prove that it worked
          print(
              "Hello, " + base64.b64decode(cloud_event.data["message"]["data"]).decode() + "!"
          )
      
      

      Go

      
      // Package helloworld provides a set of Cloud Functions samples.
      package helloworld
      
      import (
      	"context"
      	"fmt"
      	"log"
      
      	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
      	"github.com/cloudevents/sdk-go/v2/event"
      )
      
      func init() {
      	functions.CloudEvent("HelloPubSub", helloPubSub)
      }
      
      // MessagePublishedData contains the full Pub/Sub message
      // See the documentation for more details:
      // https://cloud.google.com/eventarc/docs/cloudevents#pubsub
      type MessagePublishedData struct {
      	Message PubSubMessage
      }
      
      // PubSubMessage is the payload of a Pub/Sub event.
      // See the documentation for more details:
      // https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage
      type PubSubMessage struct {
      	Data []byte `json:"data"`
      }
      
      // helloPubSub consumes a CloudEvent message and extracts the Pub/Sub message.
      func helloPubSub(ctx context.Context, e event.Event) error {
      	var msg MessagePublishedData
      	if err := e.DataAs(&msg); err != nil {
      		return fmt.Errorf("event.DataAs: %w", err)
      	}
      
      	name := string(msg.Message.Data) // Automatically decoded from base64.
      	if name == "" {
      		name = "World"
      	}
      	log.Printf("Hello, %s!", name)
      	return nil
      }
      

      Java

      import com.google.cloud.functions.CloudEventsFunction;
      import com.google.gson.Gson;
      import functions.eventpojos.PubSubBody;
      import io.cloudevents.CloudEvent;
      import java.nio.charset.StandardCharsets;
      import java.util.Base64;
      import java.util.logging.Logger;
      
      public class SubscribeToTopic implements CloudEventsFunction {
        private static final Logger logger = Logger.getLogger(SubscribeToTopic.class.getName());
      
        @Override
        public void accept(CloudEvent event) {
          // The Pub/Sub message is passed as the CloudEvent's data payload.
          if (event.getData() != null) {
            // Extract Cloud Event data and convert to PubSubBody
            String cloudEventData = new String(event.getData().toBytes(), StandardCharsets.UTF_8);
            Gson gson = new Gson();
            PubSubBody body = gson.fromJson(cloudEventData, PubSubBody.class);
            // Retrieve and decode PubSub message data
            String encodedData = body.getMessage().getData();
            String decodedData =
                new String(Base64.getDecoder().decode(encodedData), StandardCharsets.UTF_8);
            logger.info("Hello, " + decodedData + "!");
          }
        }
      }

      .NET

      using CloudNative.CloudEvents;
      using Google.Cloud.Functions.Framework;
      using Google.Events.Protobuf.Cloud.PubSub.V1;
      using Microsoft.Extensions.Logging;
      using System.Threading;
      using System.Threading.Tasks;
      
      namespace HelloPubSub;
      
      public class Function : ICloudEventFunction<MessagePublishedData>
      {
          private readonly ILogger _logger;
      
          public Function(ILogger<Function> logger) =>
              _logger = logger;
      
          public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken)
          {
              string nameFromMessage = data.Message?.TextData;
              string name = string.IsNullOrEmpty(nameFromMessage) ? "world" : nameFromMessage;
              _logger.LogInformation("Hello {name}", name);
              return Task.CompletedTask;
          }
      }

      Ruby

      require "functions_framework"
      require "base64"
      
      FunctionsFramework.cloud_event "hello_pubsub" do |event|
        # The event parameter is a CloudEvents::Event::V1 object.
        # See https://cloudevents.github.io/sdk-ruby/latest/CloudEvents/Event/V1.html
        name = Base64.decode64 event.data["message"]["data"] rescue "World"
      
        # A cloud_event function does not return a response, but you can log messages
        # or cause side effects such as sending additional events.
        logger.info "Hello, #{name}!"
      end

      PHP

      
      use CloudEvents\V1\CloudEventInterface;
      use Google\CloudFunctions\FunctionsFramework;
      
      // Register the function with Functions Framework.
      // This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=cloudevent` environment
      // variable when deploying. The `FUNCTION_TARGET` environment variable should
      // match the first parameter.
      FunctionsFramework::cloudEvent('helloworldPubsub', 'helloworldPubsub');
      
      function helloworldPubsub(CloudEventInterface $event): void
      {
          $log = fopen(getenv('LOGGER_OUTPUT') ?: 'php://stderr', 'wb');
      
          $cloudEventData = $event->getData();
          $pubSubData = base64_decode($cloudEventData['message']['data']);
      
          $name = $pubSubData ? htmlspecialchars($pubSubData) : 'World';
          fwrite($log, "Hello, $name!" . PHP_EOL);
      }

    Men-deploy fungsi berbasis peristiwa

    Untuk men-deploy fungsi, jalankan perintah berikut di direktori yang berisi kode contoh:

    Node.js

      gcloud run deploy FUNCTION \
            --source . \
            --function helloPubSub \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, nodejs22. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    Python

      gcloud run deploy FUNCTION \
            --source . \
            --function subscribe \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, python313. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    Go

      gcloud run deploy FUNCTION \
            --source . \
            --function HelloPubSub \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, go124. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    Java

      gcloud run deploy FUNCTION \
            --source . \
            --function functions.SubscribeToTopic \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, java21. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    .NET

      gcloud run deploy FUNCTION \
            --source . \
            --function HelloPubSub.Function \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, dotnet8. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    Ruby

      gcloud run deploy FUNCTION \
            --source . \
            --function hello_pubsub \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, ruby34. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    PHP

      gcloud run deploy FUNCTION \
            --source . \
            --function helloworldPubsub \
            --base-image BASE_IMAGE \
    

    Ganti:

    • FUNCTION dengan nama fungsi yang sedang Anda deploy. Jika Anda menghilangkan parameter ini, Anda akan diminta untuk memasukkan nama saat menjalankan perintah.
    • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, php84. Untuk mengetahui detail selengkapnya tentang image dasar dan paket yang disertakan dalam setiap image, lihat Runtime bahasa dan image dasar yang didukung.

    Jika Anda diminta untuk membuat repositori di region yang ditentukan, respons dengan menekan y. Setelah deployment selesai, Google Cloud CLI akan menampilkan URL tempat layanan berjalan.

    Membuat pemicu Eventarc

    Untuk men-deploy fungsi dengan pemicu Pub/Sub, jalankan perintah berikut di direktori yang berisi kode contoh:

    1. Buat pemicu Pub/Sub Eventarc:

      gcloud eventarc triggers create TRIGGER_NAME  \
          --location=${REGION} \
          --destination-run-service=FUNCTION \
          --destination-run-region=${REGION} \
          --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
          --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

      Ganti:

      • TRIGGER_NAME dengan nama pemicu Anda.
      • FUNCTION dengan nama fungsi Anda.
      • PROJECT_NUMBER dengan Google Cloud nomor project Anda.

      Perhatikan bahwa saat membuat pemicu Eventarc untuk pertama kalinya dalam project Google Cloud , mungkin akan ada penundaan dalam penyediaan agen layanan Eventarc. Masalah ini biasanya dapat diatasi dengan mencoba membuat ulang pemicu. Untuk mengetahui informasi selengkapnya, lihat Error izin ditolak.

    2. Konfirmasi bahwa pemicu telah berhasil dibuat. Perhatikan bahwa meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu berfungsi sepenuhnya.

      gcloud eventarc triggers list --location=${REGION}

      Outputnya akan mirip dengan berikut ini:

      NAME: helloworld-events
      TYPE: google.cloud.pubsub.topic.v1.messagePublished
      DESTINATION: Cloud Run service: helloworld-events
      ACTIVE: Yes
      LOCATION: us-central1
      

    Picu fungsi

    Untuk menguji fungsi Pub/Sub:

    1. Tetapkan topik ke variabel:

      TOPIC_ID=$(gcloud eventarc triggers describe TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
      
    2. Memublikasikan pesan ke topik:

      gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
      

    Layanan Cloud Run mencatat isi pesan yang masuk. Anda dapat melihatnya di bagian Logs pada instance Cloud Run Anda:

    1. Buka konsolGoogle Cloud .
    2. Klik fungsi.
    3. Pilih tab Logs.

      Log mungkin memerlukan waktu beberapa saat untuk ditampilkan. Jika Anda tidak segera melihatnya, periksa lagi setelah beberapa saat.

    4. Cari pesan "Hello World!".

    Pembersihan

    Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.

    Menghapus project

    Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    Untuk menghapus project:

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Menghapus resource tutorial

    1. Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:

      gcloud run services delete SERVICE_NAME

      Dengan SERVICE_NAME adalah nama layanan pilihan Anda.

      Anda juga dapat menghapus layanan Cloud Run dari Google Cloud console.

    2. Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.

      Contoh:

      gcloud config unset run/region

      atau

      gcloud config unset project

    3. Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:

      • Hapus pemicu Eventarc:
        gcloud eventarc triggers delete TRIGGER_NAME
        
        Ganti TRIGGER_NAME dengan nama pemicu Anda.

    Langkah berikutnya