Panduan Cloud Run terbaik dari nol hingga demo produksi

1. Pengantar

Codelab ini akan memandu Anda memahami dasar-dasar cara memulai Cloud Run. Anda akan mempelajari cara menggunakan fitur tambahan, termasuk akses VPC, Secret Manager, dan ADK untuk agen AI yang dihosting di Cloud Run.

Yang akan Anda pelajari

  • Men-deploy image nginx
  • Men-deploy dari kode sumber Anda
  • Me-roll back deployment
  • Melihat pratinjau deployment
  • Menggunakan alat server MCP Pengetahuan Developer
  • Menggunakan Secret Manager dengan Cloud Run
  • Menghubungkan ke layanan Cloud Run internal dalam VPC
  • Men-deploy agen ADK ke Cloud Run

Yang Anda butuhkan

  • Browser web seperti Chrome
  • Project Google Cloud yang mengaktifkan penagihan

Buat Project Google Cloud

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.

Mulai Cloud Shell

Cloud Shell adalah lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan alat yang diperlukan.

  1. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.
  2. Setelah terhubung ke Cloud Shell, verifikasi autentikasi Anda:
    gcloud auth list
    
  3. Pastikan project Anda dikonfigurasi:
    gcloud config get project
    
  4. Jika project Anda tidak ditetapkan seperti yang diharapkan, tetapkan project:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

Menetapkan Variabel Lingkungan

Codelab ini menggunakan variabel lingkungan berikut.

Pertama, tetapkan wilayah Anda.

export REGION=<YOUR_REGION>

Selanjutnya, konfirmasi PROJECT_ID dan REGION Anda

echo "PROJECT_ID: $PROJECT_ID | REGION: $REGION"

2. Men-deploy dari Image

Di bagian ini, Anda akan men-deploy image nginx standar langsung dari Docker Hub. Anda akan mengonfigurasinya agar dapat diakses secara publik dan menyetel port container ke 80.

  1. Deploy layanan nginx:
   gcloud run deploy nginx-service \
     --image=nginx \
     --allow-unauthenticated \
     --port=80 \
     --region=$REGION
  1. Setelah deployment selesai, output perintah akan memberikan URL Layanan. Buka URL tersebut di browser Anda untuk melihat halaman "Welcome to nginx!".

3. Men-deploy dari sumber

mkdir color-app && cd $_

Buat file bernama requirements.txt dengan konten berikut:

Flask>=2.0.0
gunicorn>=20.0.0

Buat file bernama main.py dengan konten berikut:

import os
from flask import Flask, render_template_string

app = Flask(__name__)

TEMPLATE = """
<!doctype html>
<html lang="en">
<head>
    <title>Cloud Run Traffic Revisions</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 50vh;
            background-color: darkseagreen;
            font-family: sans-serif;
        }
        .content {
            background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */
            padding: 2em;
            border-radius: 8px;
            text-align: center;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <div class="content">
	  <!-- ROLLBACK DEMO: change this text to "gray" -->
        <p>background color: <strong>darkseagreen</strong></p>
    </div>
</body>
</html>
"""

@app.route('/')
def main():
    
    return render_template_string(TEMPLATE)

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 8080))
    app.run(debug=True, host='0.0.0.0', port=port)

Sekarang jalankan perintah berikut.

gcloud run deploy \
 --allow-unauthenticated
 --region $REGION

4. Rollback dan link Pratinjau

Di bagian ini, Anda akan memperkenalkan bug dan mempelajari cara melakukan roll back ke revisi sebelumnya saat Anda menyelidiki perbaikan.

  1. Pertama, Anda akan merekam nama revisi yang saat ini menyalurkan traffic, karena tidak berisi bug.
GOOD_REVISION=$(gcloud run revisions list --service color-app \
  --region $REGION --format 'value(REVISION)')
  1. Dalam file main.py color-app, telusuri "ROLLBACK DEMO" dan perbarui baris menjadi berikut:
<p>background color: <strong>gray</strong></p>
  1. Sekarang jalankan ulang gcloud run deploy. Perhatikan cara konfigurasi Anda sebelumnya digunakan.

Setelah men-deploy bug, Anda dapat kembali ke sumber, melakukan perubahan atau melakukan git revert, lalu membangun, memicu build baru, dll. Namun, Anda mungkin melakukan kesalahan selama proses tersebut.

Cara yang lebih aman adalah melakukan roll back.

  1. Untuk melakukan roll back ke revisi sebelumnya, jalankan perintah berikut:
gcloud run services update-traffic color-app \
  --to-revisions=$GOOD_REVISION=100 \
  --region=$REGION

Sekarang Anda dapat men-deploy revisi baru yang tidak akan menerima traffic apa pun.

  1. Sekarang perbaiki bug dengan mengubah teks kembali menjadi darkseagreen
<p>background color: <strong>darkseagreen</strong></p>
  1. Lalu, deploy untuk memverifikasi perbaikan. Perhatikan bahwa revisi ini tidak akan menerima traffic apa pun, karena 100% traffic disematkan ke GOOD_REVISION
gcloud run deploy color-app --no-traffic --tag bugfix --region $REGION
  1. Memverifikasi deployment

Anda akan melihat bahwa URL-nya sedikit berbeda. Saat membukanya, Anda akan melihat perbaikan bug dalam deployment ini.

  1. Kirim traffic kembali ke revisi terbaru.

Sekarang Anda akan menyetel traffic kembali ke revisi terbaru.

gcloud run services update-traffic color-app \
  --to-latest \
  --region=$REGION

dan menghapus tag revisi

gcloud run services update-traffic color-app \
  --remove-tags=bugfix \
  --region=$REGION

Anda dapat mempelajari lebih lanjut rollback di dokumen.

5. Server MCP Pengetahuan Developer

Server MCP pengetahuan developer memberi alat pengembangan berteknologi AI kemampuan untuk menelusuri dokumentasi developer resmi Google dan mengambil informasi untuk produk Google seperti Firebase, Google Cloud, Android, Maps, dan lainnya. Dengan menghubungkan aplikasi AI Anda langsung ke pustaka dokumentasi resmi kami, kode dan panduan yang Anda terima akan selalu terbaru dan didasarkan pada konteks yang berwenang.

Anda harus mengikuti panduan penginstalan untuk memberikan akses agen AI Anda ke server MCP Developer Knowledge.

Setelah diinstal, Anda dapat mengajukan pertanyaan kepada agen AI tentang fitur terbaru dalam dokumentasi yang mungkin tersedia setelah batas waktu tanggal pelatihan model Anda.

Misalnya, jika Anda melihat catatan rilis Cloud Run, Anda akan melihat entri untuk 24 Februari 2026 tentang "Deploy a highly available, multi-region Cloud Run service with automated failover and failback for external traffic using Cloud Run service health (Preview)."

Sekarang Anda dapat bertanya kepada agen AI Anda "beri tahu saya lebih lanjut tentang fitur Cloud Run baru ini untuk failover otomatis multi-regional".

6. Menggunakan Secret Manager

Ada 3 cara untuk mengekspos secret di Cloud Run:

  1. Sebagai variabel lingkungan (dikunci ke versi yang ditarik pada waktu deployment).
  2. Dipasang sebagai volume file (terus diupdate ke versi terbaru).
  3. Menggunakan library klien Secret Manager dalam kode Anda.

Di bagian ini, Anda akan mengekspos secret sebagai variabel lingkungan menggunakan akun layanan khusus.

  1. Buat secret baru bernama 'my-secret':
gcloud secrets create my-secret --replication-policy="automatic"
  1. Tambahkan nilai secret sebagai versi baru:
echo -n "my precious" | gcloud secrets versions add my-secret --data-file=-
  1. Buat akun layanan khusus untuk color-app:
gcloud iam service-accounts create color-app-sa \
     --display-name="Color App Service Account"
  1. Beri akun layanan khusus akses ke secret.
   gcloud secrets add-iam-policy-binding my-secret \
     --member="serviceAccount:color-app-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
     --role="roles/secretmanager.secretAccessor"
  1. Deploy lagi. Sekarang, layanan akan memiliki akses ke variabel lingkungan MY_SECRET:
gcloud run deploy color-app \
     --source . \
     --update-secrets=MY_SECRET=my-secret:latest \
     --service-account=color-app-sa@${PROJECT_ID}.iam.gserviceaccount.com \
     --region=$REGION

7. Menghubungkan ke VPC

Di bagian ini, Anda akan menyiapkan arsitektur berikut:

  • backend pribadi yang tidak dapat diakses dari internet publik
  • frontend publik yang berkomunikasi dengan backend melalui Traffic Keluar VPC Langsung

Contoh ini akan menggunakan jaringan dan subnet default.

Prasyarat: Pastikan Akses Google Pribadi diaktifkan di subnet Anda sehingga VPC dapat merutekan permintaan internal ke layanan Cloud Run.

   gcloud compute networks subnets update default \
     --region=$REGION \
     --enable-private-ip-google-access
  1. Buat folder untuk bagian ini
mkdir ../vpc-demo
cd ../vpc-demo
  1. membuat layanan backend pribadi
mkdir backend
touch backend/app.js
touch backend/package.json

Di file backend/app.js, tambahkan kode berikut:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World from the Private Backend!');
});

const port = process.env.PORT || 8080;
server.listen(port, () => {
  console.log(`Private backend listening on port ${port}`);
});

Di file backend/package.json, tambahkan kode berikut:

{
    "name": "backend",
    "scripts": {
        "start": "node app.js"
    }
}
  1. Deploy backend pribadi dengan ingress khusus internal:
   gcloud run deploy private-backend \
     --source ./backend \
     --region $REGION \
     --ingress internal \
     --no-allow-unauthenticated
  1. Catat URL backend. Anda akan memberikan URL ini ke aplikasi frontend nanti.
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projec
tNumber)')

export BACKEND_URL="https://private-backend-${PROJECT_NUMBER}.${REGION}.run.app"
  1. Membuat Aplikasi frontend
mkdir frontend
touch frontend/app.js
touch frontend/package.json

Di file frontend/app.js, tambahkan kode berikut:

const http = require('http');

const server = http.createServer(async (req, res) => {
  const backendUrl = process.env.BACKEND_URL;
  
  if (!backendUrl) {
    res.writeHead(500, { 'Content-Type': 'text/plain' });
    return res.end('Error: BACKEND_URL environment variable is missing.');
  }

  try {
    // Fetch the OIDC token from the Metadata server
    const tokenResponse = await fetch(`http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=${backendUrl}`, {
      headers: { 'Metadata-Flavor': 'Google' }
    });

    if (!tokenResponse.ok) {
      throw new Error(`Failed to fetch identity token: ${tokenResponse.statusText}`);
    }
    const token = await tokenResponse.text();

    // Ping the backend with the token
    const response = await fetch(backendUrl, {
      headers: { 'Authorization': `Bearer ${token}` }
    });
    const text = await response.text();

    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end(`Frontend successfully routed through VPC. Backend says: "${text}"`);
  } catch (error) {
    res.writeHead(500, { 'Content-Type': 'text/plain' });
    res.end(`Frontend failed to reach the backend. Error: ${error.message}`);
  }
});

const port = process.env.PORT || 8080;
server.listen(port, () => {
  console.log(`Public frontend listening on port ${port}`);
});
  1. Di file frontend/package.json, tambahkan kode berikut:
{
    "name": "backend",
    "scripts": {
        "start": "node app.js"
    }
}
  1. Buat akun layanan khusus untuk layanan frontend:
  gcloud iam service-accounts create frontend-sa \
     --display-name="Frontend Service Account"
  1. Memberikan peran Cloud Run Invoker kepadanya
PROJECT_ID=$(gcloud config get project)
  
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:frontend-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
     --role="roles/run.invoker"
  1. Sekarang deploy frontend publik menggunakan Traffic Keluar VPC Langsung. Kita menetapkan '–vpc-egress=all-traffic' untuk memaksa permintaan keluar ke VPC:
   gcloud run deploy public-frontend \
     --source ./frontend \
     --region $REGION \
     --allow-unauthenticated \
     --network default \
     --subnet default \
     --vpc-egress all-traffic \
    --service-account=frontend-sa@${PROJECT_ID}.iam.gserviceaccount.com \
     --set-env-vars BACKEND_URL=$BACKEND_URL
  1. Memverifikasi layanan
  • Uji Frontend: Curl URL frontend publik. Aplikasi harus berhasil berkomunikasi dengan backend dan menampilkan respons.
     FRONTEND_URL=$(gcloud run services describe public-frontend --region $REGION --format='value(status.url)')
     curl $FRONTEND_URL
  • Uji Backend (Langsung): Coba curl URL backend langsung dari mesin lokal Anda (internet publik). Permintaan akan gagal dengan error 404 karena ingress dibatasi ke 'internal' dan autentikasi diperlukan.
  curl $BACKEND_URL

8. Men-deploy Agen ADK

Di bagian ini, Anda akan melihat cara buildpack Python mendukung deteksi titik entri default untuk Agent Development Kit (ADK).

Anda akan membuat struktur folder berikut:

adk-demo
 - my_agent
   - __init.py__
   - agent.py
 - requirements.txt
  1. Buat struktur folder
mkdir ../adk-demo
cd ../adk-demo
mkdir my_agent
touch my_agent/__init.py__
touch my_agent/agent.py
touch requirements.txt
  1. Tambahkan konten berikut ke file my_agent/__init.py__:
from . import agent
  1. Tambahkan konten berikut ke file my_agent/agent.py:
from google.adk import Agent

root_agent = Agent(
    name="demo_agent",
    model="gemini-3-flash-preview",
    instruction="You are a helpful assistant for a Cloud Run demo."
)
  1. Tambahkan konten berikut ke file requirements.txt:
google-adk
  1. Buat akun layanan khusus untuk agen:
  gcloud iam service-accounts create agent-sa \
     --display-name="Agent Service Account"
  1. Berikan peran Vertex AI User ke akun layanan:
PROJECT_ID=$(gcloud config get-value project)
  
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:agent-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
     --role="roles/aiplatform.user"
  1. Men-deploy agen ADK

Anda harus men-deploy di wilayah tempat Gemini API dapat diakses. Dalam contoh ini, nilainya adalah us-west1.

gcloud run deploy my-adk-agent-demo \
   --source . \
   --region us-west1 \
   --allow-unauthenticated \
   --service-account=agent-sa@${PROJECT_ID}.iam.gserviceaccount.com \
   --set-env-vars="GOOGLE_GENAI_USE_VERTEXAI=TRUE,GOOGLE_CLOUD_PROJECT=$PROJECT_ID,GOOGLE_CLOUD_LOCATION=global"
  1. Curl endpoint

Anda dapat melihat bagaimana agen langsung tersedia sebagai API siap produksi.

Mencatat URL layanan Cloud Run ke dalam variabel lingkungan.

AGENT_URL=$(gcloud run services describe my-adk-agent-demo \
  --region us-west1 \
  --format 'value(status.url)')

Membuat sesi dengan agen

curl -X POST $AGENT_URL/apps/my_agent/users/u_123/sessions/s_123 -H "Content-Type: application/json" -d '{"key1": "value1", "key2": 42}'

Tanyakan apa itu Cloud Run dan filter respons untuk hanya menampilkan apa yang dikatakan agen

curl -X POST $AGENT_URL/run \
-H "Content-Type: application/json" \
-d "{
   \"appName\": \"my_agent\",
   \"userId\": \"u_123\",
   \"sessionId\": \"s_123\",
   \"newMessage\": { 
        \"role\": \"user\", 
        \"parts\": [{ \"text\": \"What is Cloud Run?\" 
    }]}
}" | python3 -c "import sys, json; print(json.load(sys.stdin)[-1]['content']['parts'][0]['text'])"

dan Anda akan melihat sesuatu yang mirip dengan berikut:

Hello! I am **demo_agent**, and I'm here to help you with your Cloud Run demo. **Cloud Run** is a fully managed compute platform by Google Cloud that allows you to run **containerized applications** in a serverless environment...

9. Pembersihan

Agar tidak dikenai biaya berkelanjutan pada akun Google Cloud Anda, Anda dapat menghapus seluruh project (ditunjukkan di bawah) atau menghapus setiap resource yang dibuat selama codelab ini.

Hapus layanan nginx, color-app, private-backend, public-frontend

gcloud run services delete nginx-service --region $REGION --quiet
gcloud run services delete color-app --region $REGION --quiet
gcloud run services delete private-backend --region $REGION --quiet
gcloud run services delete public-frontend --region $REGION --quiet

Hapus agen ADK (catatan: di-deploy di us-west1 untuk contoh ini)

gcloud run services delete my-adk-agent-demo --region us-west1 --quiet

Hapus secret yang disimpan di Secret Manager:

gcloud secrets delete my-secret --quiet

Hapus akun layanan Color App

gcloud iam service-accounts delete color-app-sa@${PROJECT_ID}.iam.gserviceaccount.com --quiet

Menghapus akun layanan ADK Agent

gcloud iam service-accounts delete agent-sa@${PROJECT_ID}.iam.gserviceaccount.com --quiet

(Opsional) Menghapus Project

Jika Anda membuat project baru khusus untuk codelab ini, Anda dapat menghapus seluruh project untuk memastikan semua resource dihapus sekaligus:

# run only if you want to delete the entire project
gcloud projects delete $PROJECT_ID

10. Selamat!

Anda telah menyelesaikan codelab. Anda telah mempelajari dasar-dasar cara memulai penggunaan Cloud Run.

Yang telah Anda pelajari

  • Men-deploy image nginx
  • Men-deploy dari kode sumber Anda
  • Me-roll back deployment
  • Melihat pratinjau deployment
  • Menggunakan alat server MCP Pengetahuan Developer
  • Menggunakan Secret Manager dengan Cloud Run
  • Menghubungkan ke layanan Cloud Run internal dalam VPC
  • Men-deploy agen ADK ke Cloud Run