Tutorial menggunakan paket sistem


Tutorial ini menunjukkan cara mem-build layanan Cloud Run kustom yang mengubah parameter input deskripsi grafik menjadi diagram dalam format gambar PNG. Library ini menggunakan Graphviz dan diinstal sebagai paket sistem di lingkungan container layanan. Graphviz digunakan melalui utilitas command line untuk menayangkan permintaan.

Tujuan

  • Menulis dan mem-build container kustom dengan Dockerfile
  • Menulis, mem-build, dan men-deploy layanan Cloud Run
  • Menggunakan utilitas Graphviz dot untuk menghasilkan diagram
  • Menguji layanan dengan memposting diagram sintaksis DOT dari koleksi atau kreasi Anda sendiri

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan Cloud Run Admin API
  7. Instal dan lakukan inisialisasi gcloud CLI.
  8. Perbarui komponen:
    gcloud components update

Peran yang diperlukan

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

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

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

Menyiapkan default gcloud

Untuk mengonfigurasi gcloud dengan setelan default untuk layanan Cloud Run Anda:

  1. Setel project default Anda:

    gcloud config set project PROJECT_ID

    Ganti PROJECT_ID dengan nama project yang Anda buat untuk tutorial ini.

  2. Konfigurasi gcloud untuk region yang Anda pilih:

    gcloud config set run/region REGION

    Ganti REGION dengan region Cloud Run pilihan Anda yang didukung.

Lokasi Cloud Run

Cloud Run bersifat regional, berarti infrastruktur yang menjalankan layanan Cloud Run Anda terletak di region tertentu dan dikelola oleh Google agar tersedia secara redundan di semua zona dalam region tersebut.

Memenuhi persyaratan latensi, ketersediaan, atau ketahanan adalah faktor utama untuk memilih region tempat layanan Cloud Run dijalankan. Pada umumnya, Anda dapat memilih region yang paling dekat dengan pengguna Anda, tetapi Anda harus mempertimbangkan lokasi dari produk Google Cloud lain yang digunakan oleh layanan Cloud Run Anda. Menggunakan produk Google Cloud secara bersamaan di beberapa lokasi dapat memengaruhi latensi serta biaya layanan Anda.

Cloud Run tersedia di region berikut:

Tergantung harga Tingkat 1

  • asia-east1 (Taiwan)
  • asia-northeast1 (Tokyo)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlandia) ikon daun CO2 Rendah
  • europe-southwest1 (Madrid)
  • europe-west1 (Belgia) ikon daun CO2 Rendah
  • europe-west4 (Belanda)
  • europe-west8 (Milan)
  • europe-west9 (Paris) ikon daun CO2 Rendah
  • me-west1 (Tel Aviv)
  • us-central1 (Iowa) ikon daun CO2 rendah
  • us-east1 (South Carolina)
  • us-east4 (North Virginia)
  • us-east5 (Columbus)
  • us-south1 (Dallas)
  • us-west1 (Oregon) ikon daun CO2 Rendah

Tergantung harga Tingkat 2

  • africa-south1 (Johannesburg)
  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seoul, Korea Selatan)
  • asia-southeast1 (Singapura)
  • asia-southeast2 (Jakarta)
  • asia-south1 (Mumbai, India)
  • asia-south2 (Delhi, India)
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Warsawa, Polandia)
  • europe-west10 (Berlin)
  • europe-west12 (Turin)
  • europe-west2 (London, Inggris Raya) ikon daun CO2 Rendah
  • europe-west3 (Frankfurt, Jerman) ikon daun CO2 Rendah
  • europe-west6 (Zurich, Swiss) ikon daun CO2 Rendah
  • me-central1 (Doha)
  • me-central2 (Damam)
  • northamerica-northeast1 (Montreal) ikon daun CO2 Rendah
  • northamerica-northeast2 (Toronto) ikon daun CO2 Rendah
  • southamerica-east1 (Sao Paulo, Brasil) ikon daun CO2 Rendah
  • southamerica-west1 (Santiago, Cile) ikon daun CO2 Rendah
  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Jika sudah membuat layanan Cloud Run, Anda dapat melihat region di dasbor Cloud Run di Konsol Google Cloud.

Mengambil contoh kode

Untuk mengambil contoh kode agar dapat digunakan:

  1. Clone repositori aplikasi contoh ke komputer lokal Anda:

    Node.js

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

    Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.

    Python

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

    Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.

    Go

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

    Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.

    Java

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

    Atau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.

  2. Ubah ke direktori yang memuat kode contoh Cloud Run:

    Node.js

    cd nodejs-docs-samples/run/system-package/

    Python

    cd python-docs-samples/run/system-package/

    Go

    cd golang-samples/run/system_package/

    Java

    cd java-docs-samples/run/system-package/

Memvisualisasikan arsitektur

Arsitektur dasarnya seperti ini:

Diagram yang menunjukkan alur permintaan dari pengguna ke layanan web ke utilitas
    graphviz dot.
Untuk sumber diagram, lihat Deskripsi DOT

Pengguna membuat permintaan HTTP ke layanan Cloud Run yang menjalankan utilitas Graphviz untuk mengubah permintaan menjadi gambar. Gambar tersebut dikirimkan ke pengguna sebagai respons HTTP.

Memahami kode

Menentukan konfigurasi lingkungan Anda dengan Dockerfile

Dockerfile Anda dibuat khusus untuk bahasa dan lingkungan operasi dasar, seperti Ubuntu, yang akan digunakan oleh layanan Anda.

Panduan Memulai Build dan Deploy menunjukkan berbagai Dockerfiles yang dapat digunakan sebagai titik awal untuk mem-build Dockerfile untuk layanan lain.

Layanan ini memerlukan satu atau beberapa paket sistem tambahan yang tidak tersedia secara default.

  1. Buka Dockerfile di editor.

  2. Cari pernyataan Dockerfile RUN. Pernyataan ini memungkinkan perintah shell arbitrer dijalankan untuk memodifikasi lingkungan. Jika Dockerfile memiliki beberapa tahapan, yang diidentifikasi dengan menemukan beberapa pernyataan FROM, maka tahapan tersebut akan ditemukan di tahap terakhir.

    Paket spesifik yang diperlukan dan mekanisme untuk menginstalnya bervariasi menurut sistem operasi yang dideklarasikan di dalam container.

    Untuk petunjuk sistem operasi atau image dasar Anda, klik tab yang sesuai.

    Debian/Ubuntu
    RUN apt-get update -y && apt-get install -y \
      graphviz \
      && apt-get clean
    Alpin
    Alpine memerlukan paket kedua untuk dukungan font.
    RUN apk --no-cache add graphviz ttf-ubuntu-font-family

    Untuk menentukan sistem operasi image container, periksa nama dalam pernyataan FROM atau README yang terkait dengan image dasar Anda. Misalnya, jika Anda memperluas dari node, Anda dapat menemukan dokumentasi dan induk Dockerfile di Docker Hub.

  3. Uji penyesuaian Anda dengan mem-build image, menggunakan docker build secara lokal atau Cloud Build.

Menangani permintaan masuk

Layanan contoh menggunakan parameter dari permintaan HTTP yang masuk untuk memanggil panggilan sistem yang menjalankan perintah utilitas dot yang sesuai.

Di pengendali HTTP berikut, parameter input deskripsi grafik diekstrak dari variabel string kueri dot.

Deskripsi grafik dapat menyertakan karakter yang harus dienkode URL untuk digunakan dalam string kueri.

Node.js

app.get('/diagram.png', (req, res) => {
  try {
    const image = createDiagram(req.query.dot);
    res.setHeader('Content-Type', 'image/png');
    res.setHeader('Content-Length', image.length);
    res.setHeader('Cache-Control', 'public, max-age=86400');
    res.send(image);
  } catch (err) {
    console.error(`error: ${err.message}`);
    const errDetails = (err.stderr || err.message).toString();
    if (errDetails.includes('syntax')) {
      res.status(400).send(`Bad Request: ${err.message}`);
    } else {
      res.status(500).send('Internal Server Error');
    }
  }
});

Python

@app.route("/diagram.png", methods=["GET"])
def index():
    """Takes an HTTP GET request with query param dot and
    returns a png with the rendered DOT diagram in a HTTP response.
    """
    try:
        image = create_diagram(request.args.get("dot"))
        response = make_response(image)
        response.headers.set("Content-Type", "image/png")
        return response

    except Exception as e:
        print(f"error: {e}")

        # If no graphviz definition or bad graphviz def, return 400
        if "syntax" in str(e):
            return f"Bad Request: {e}", 400

        return "Internal Server Error", 500

Go


// diagramHandler renders a diagram using HTTP request parameters and the dot command.
func diagramHandler(w http.ResponseWriter, r *http.Request) {
	if r.Method != http.MethodGet {
		log.Printf("method not allowed: %s", r.Method)
		http.Error(w, fmt.Sprintf("HTTP Method %s Not Allowed", r.Method), http.StatusMethodNotAllowed)
		return
	}

	q := r.URL.Query()
	dot := q.Get("dot")
	if dot == "" {
		log.Print("no graphviz definition provided")
		http.Error(w, "Bad Request", http.StatusBadRequest)
		return
	}

	// Cache header must be set before writing a response.
	w.Header().Set("Cache-Control", "public, max-age=86400")

	input := strings.NewReader(dot)
	if err := createDiagram(w, input); err != nil {
		log.Printf("createDiagram: %v", err)
		// Do not cache error responses.
		w.Header().Del("Cache-Control")
		if strings.Contains(err.Error(), "syntax") {
			http.Error(w, "Bad Request: DOT syntax error", http.StatusBadRequest)
		} else {
			http.Error(w, "Internal Server Error", http.StatusInternalServerError)
		}
	}
}

Java

get(
    "/diagram.png",
    (req, res) -> {
      InputStream image = null;
      try {
        String dot = req.queryParams("dot");
        image = createDiagram(dot);
        res.header("Content-Type", "image/png");
        res.header("Content-Length", Integer.toString(image.available()));
        res.header("Cache-Control", "public, max-age=86400");
      } catch (Exception e) {
        if (e.getMessage().contains("syntax")) {
          res.status(400);
          return String.format("Bad Request: %s", e.getMessage());
        } else {
          res.status(500);
          return "Internal Server Error";
        }
      }
      return image;
    });

Anda harus membedakan antara error server internal dan input pengguna yang tidak valid. Layanan contoh ini menampilkan Error Server Internal untuk semua error command line dot kecuali jika pesan error tersebut berisi string syntax, yang menunjukkan masalah input pengguna.

Membuat diagram

Logika inti pembuatan diagram menggunakan alat command line dot untuk memproses parameter input deskripsi grafik menjadi diagram dalam format gambar PNG.

Node.js

// Generate a diagram based on a graphviz DOT diagram description.
const createDiagram = dot => {
  if (!dot) {
    throw new Error('syntax: no graphviz definition provided');
  }

  // Adds a watermark to the dot graphic.
  const dotFlags = [
    '-Glabel="Made on Cloud Run"',
    '-Gfontsize=10',
    '-Glabeljust=right',
    '-Glabelloc=bottom',
    '-Gfontcolor=gray',
  ].join(' ');

  const image = execSync(`/usr/bin/dot ${dotFlags} -Tpng`, {
    input: dot,
  });
  return image;
};

Python

def create_diagram(dot):
    """Generates a diagram based on a graphviz DOT diagram description.

    Args:
        dot: diagram description in graphviz DOT syntax

    Returns:
        A diagram in the PNG image format.
    """
    if not dot:
        raise Exception("syntax: no graphviz definition provided")

    dot_args = [  # These args add a watermark to the dot graphic.
        "-Glabel=Made on Cloud Run",
        "-Gfontsize=10",
        "-Glabeljust=right",
        "-Glabelloc=bottom",
        "-Gfontcolor=gray",
        "-Tpng",
    ]

    # Uses local `dot` binary from Graphviz:
    # https://graphviz.gitlab.io
    image = subprocess.run(
        ["dot"] + dot_args, input=dot.encode("utf-8"), stdout=subprocess.PIPE
    ).stdout

    if not image:
        raise Exception("syntax: bad graphviz definition provided")
    return image

Go


// createDiagram generates a diagram image from the provided io.Reader written to the io.Writer.
func createDiagram(w io.Writer, r io.Reader) error {
	stderr := new(bytes.Buffer)
	args := []string{
		"-Glabel=Made on Cloud Run",
		"-Gfontsize=10",
		"-Glabeljust=right",
		"-Glabelloc=bottom",
		"-Gfontcolor=gray",
		"-Tpng",
	}
	cmd := exec.Command("/usr/bin/dot", args...)
	cmd.Stdin = r
	cmd.Stdout = w
	cmd.Stderr = stderr

	if err := cmd.Run(); err != nil {
		return fmt.Errorf("exec(%s) failed (%w): %s", cmd.Path, err, stderr.String())
	}

	return nil
}

Java

// Generate a diagram based on a graphviz DOT diagram description.
public static InputStream createDiagram(String dot) {
  if (dot == null || dot.isEmpty()) {
    throw new NullPointerException("syntax: no graphviz definition provided");
  }
  // Adds a watermark to the dot graphic.
  List<String> args = new ArrayList<>();
  args.add("/usr/bin/dot");
  args.add("-Glabel=\"Made on Cloud Run\"");
  args.add("-Gfontsize=10");
  args.add("-Glabeljust=right");
  args.add("-Glabelloc=bottom");
  args.add("-Gfontcolor=gray");
  args.add("-Tpng");

  StringBuilder output = new StringBuilder();
  InputStream stdout = null;
  try {
    ProcessBuilder pb = new ProcessBuilder(args);
    Process process = pb.start();
    OutputStream stdin = process.getOutputStream();
    stdout = process.getInputStream();
    // The Graphviz dot program reads from stdin.
    Writer writer = new OutputStreamWriter(stdin, "UTF-8");
    writer.write(dot);
    writer.close();
    process.waitFor();
  } catch (Exception e) {
    System.out.println(e);
  }
  return stdout;
}

Merancang layanan yang aman

Kerentanan apa pun dalam alat dot adalah potensi kerentanan untuk layanan web. Anda dapat mengurangi hal ini dengan menggunakan versi terbaru paket graphviz dengan mem-build ulang image container secara rutin.

Jika memperluas sampel saat ini untuk menerima input pengguna sebagai parameter command line, Anda harus melindungi dari serangan injection perintah. Beberapa cara untuk mencegah serangan injection meliputi:

  • Memetakan input ke kamus parameter yang didukung
  • Memvalidasi input cocok dengan rentang nilai yang diketahui aman, mungkin menggunakan ekspresi reguler
  • Meng-escape input untuk memastikan sintaksis shell tidak dievaluasi

Anda dapat mengurangi potensi kerentanan lebih lanjut dengan men-deploy layanan dengan akun layanan yang belum diberi izin untuk menggunakan layanan Google Cloud, daripada menggunakan akun default, yang biasanya menggunakan izin. Oleh sebab itu, langkah-langkah dalam tutorial ini akan membuat dan menggunakan akun layanan baru.

Mengirimkan kode

Untuk mengirim kode, build kode dengan Cloud Build, lalu upload ke Container Registry, dan deploy ke Cloud Run:

  1. Jalankan perintah berikut untuk mem-build container dan memublikasikannya di Container Registry.

    Node.js

    gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz

    Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan graphviz merupakan nama yang ingin Anda berikan ke layanan.

    Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.

    Python

    gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz

    Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan graphviz merupakan nama yang ingin Anda berikan ke layanan.

    Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.

    Go

    gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz

    Dengan PROJECT_ID sebagai project ID Google Cloud Anda, dan graphviz merupakan nama yang ingin Anda berikan ke layanan.

    Setelah berhasil, Anda akan melihat pesan SUCCESS yang berisi ID, waktu pembuatan, dan nama image. Image tersebut disimpan di Container Registry dan dapat digunakan kembali bila diinginkan.

    Java

    Contoh ini menggunakan Jib untuk mem-build image Docker menggunakan alat Java umum. Jib mengoptimalkan build container tanpa memerlukan Dockerfile atau menginstal Docker. Pelajari lebih lanjut cara mem-build container Java dengan Jib.

    1. Dengan Dockerfile, konfigurasikan dan build image dasar menggunakan paket sistem yang diinstal untuk menggantikan image dasar default Jib:

      # Use the Official eclipse-temurin image for a lean production stage of our multi-stage build.
      # https://hub.docker.com/_/eclipse-temurin/
      FROM eclipse-temurin:17.0.10_7-jre
      
      RUN apt-get update -y && apt-get install -y \
        graphviz \
        && apt-get clean
      gcloud builds submit --tag gcr.io/PROJECT_ID/graphviz-base

      Dengan PROJECT_ID sebagai project ID Google Cloud Anda.

    2. Gunakan bantuan kredensial gcloud untuk memberi otorisasi Docker agar dikirim ke Container Registry Anda.

      gcloud auth configure-docker

    3. Build container akhir Anda dengan Jib dan publikasikan di Container Registry:

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>3.4.0</version>
        <configuration>
          <from>
            <image>gcr.io/PROJECT_ID/graphviz-base</image>
          </from>
          <to>
            <image>gcr.io/PROJECT_ID/graphviz</image>
          </to>
        </configuration>
      </plugin>
      mvn compile jib:build \
       -Dimage=gcr.io/PROJECT_ID/graphviz \
       -Djib.from.image=gcr.io/PROJECT_ID/graphviz-base

      Dengan PROJECT_ID sebagai project ID Google Cloud Anda.

  2. Deploy menggunakan:

    Command line

    1. Buat akun layanan baru. Kode Anda, termasuk paket sistem apa pun yang digunakan, hanya dapat menggunakan layanan Google Cloud yang telah diberikan ke akun layanan ini.
      gcloud iam service-accounts create SA_NAME
      Dengan SA_NAME adalah nama yang Anda berikan untuk akun layanan ini. Jika ada error atau kerentanan dalam kode, kode Anda tidak akan dapat mengakses resource project Google Cloud lainnya.
    2. Deploy kode, dengan menentukan akun layanan.
      gcloud run deploy graphviz-web --service-account SA_NAME@PROJECT_ID.iam.gserviceaccount.com  --image gcr.io/PROJECT_ID/graphviz
      Dengan PROJECT_ID sebagai project ID Google Cloud Anda, SA_NAME adalah nama akun layanan yang Anda buat, graphviz adalah nama container dari contoh di atas, dan graphviz-web adalah nama layanan. Berikan respons Y untuk permintaan "izinkan untuk tidak diautentikasi". Lihat Mengelola akses untuk mengetahui detail selengkapnya tentang autentikasi berbasis IAM.
    3. Tunggu hingga deployment selesai. Proses ini dapat memakan waktu sekitar setengah menit. Jika berhasil, command line akan menampilkan URL layanan.

    Terraform

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    Kode Terraform berikut membuat layanan Cloud Run.

    resource "google_service_account" "graphviz" {
      account_id   = "graphviz"
      display_name = "GraphViz Tutorial Service Account"
    }
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "graphviz-example"
      location = "us-central1"
    
      template {
        containers {
          # Replace with the URL of your graphviz image
          #   gcr.io/<YOUR_GCP_PROJECT_ID>/graphviz
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
    
        service_account = google_service_account.graphviz.email
      }
    }

    Ganti gcr.io/cloudrun/hello dengan referensi ke container Anda.

    Kode Terraform berikut membuat layanan Cloud Run Anda menjadi publik.

    # Make Cloud Run service publicly accessible
    resource "google_cloud_run_service_iam_member" "allow_unauthenticated" {
      service  = google_cloud_run_v2_service.default.name
      location = google_cloud_run_v2_service.default.location
      role     = "roles/run.invoker"
      member   = "allUsers"
    }
  3. Jika Anda ingin men-deploy pembaruan kode ke layanan, ulangi langkah-langkah sebelumnya. Setiap deployment ke layanan akan membuat revisi baru dan otomatis melayani lalu lintas jika sudah siap.

Cobalah

Coba layanan Anda dengan mengirimkan permintaan POST HTTP dengan deskripsi sintaksis DOT dalam payload permintaan.

  1. Kirim permintaan HTTP ke layanan Anda.

    Salin URL ke kolom URL browser Anda dan perbarui [SERVICE_DOMAIN]:

    https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }

    Anda dapat menyematkan diagram di halaman web:

    <img src="https://SERVICE_DOMAIN/diagram.png?dot=digraph Run { rankdir=LR Code -> Build -> Deploy -> Run }" />
  2. Buka file diagram.png yang dihasilkan di aplikasi apa pun yang mendukung file PNG, seperti Chrome.

    Kodenya akan terlihat seperti berikut:

    Diagram menunjukkan alur tahap
  Code ke Build ke Deploy ke Run.
    Sumber: Deskripsi DOT

Anda dapat menjelajahi koleksi deskripsi diagram siap pakai.

  1. Salin konten file .dot yang dipilih
  2. Kirim permintaan HTTP ke layanan Anda.

    Salin URL ke kolom URL browser

    https://SERVICE_DOMAIN/diagram.png?dot=SELECTED DOTFILE CONTENTS

Pembersihan

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa ada 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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus 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 Konsol Google Cloud.

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

     gcloud config unset run/region
    
  3. Hapus konfigurasi project:

     gcloud config unset project
    
  4. Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:

    • Hapus image container bernama gcr.io/<var>PROJECT_ID</var>/graphviz dari Container Registry.

    • Hapus akun layanan <var>SA_NAME</var>.

      gcloud iam service-accounts delete SA_NAME@PROJECT_ID.iam.gserviceaccount.com

Langkah selanjutnya