Mengonfigurasi sandbox untuk layanan

Sandbox Cloud Run menyediakan lingkungan yang cepat, aman, dan terisolasi untuk menjalankan kode yang tidak tepercaya atau menjalankan alat, seperti agen AI, dalam layanan yang ada di lingkungan generasi kedua. Sandbox sangat dioptimalkan untuk latensi dan berjalan dalam instance yang sama dengan container Anda, serta berbagi CPU dan memori yang dialokasikan.

Halaman ini menjelaskan cara mengonfigurasi sandbox di container Anda. Untuk mengetahui detail tentang cara menulis kode untuk berinteraksi dengan sandbox menggunakan CLI, lihat Eksekusi kode di Cloud Run.

Sebelum memulai

  1. Sign in to your Google Cloud account. 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  6. Instal dan lakukan inisialisasi gcloud CLI.
  7. Deploy layanan Cloud Run service di lingkungan eksekusi generasi kedua.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi dan men-deploy layanan Cloud Run, minta administrator untuk memberi Anda peran IAM berikut:

Jika Anda men-deploy layanan atau fungsi dari kode sumber, Anda juga harus memiliki peran tambahan yang diberikan kepada Anda di project dan akun layanan Cloud Build.

Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika layanan Cloud Run Anda berinteraksi dengan Google Cloud API, seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.

Mengaktifkan sandbox

Setiap perubahan konfigurasi akan menghasilkan revisi baru. Revisi selanjutnya juga akan otomatis mendapatkan setelan konfigurasi ini, kecuali jika Anda melakukan pembaruan eksplisit untuk mengubahnya.

Saat Anda mengaktifkan sandbox, layanan Cloud Run Anda akan di-deploy di lingkungan eksekusi generasi kedua. Untuk mengaktifkan sandbox di layanan Cloud Run, gunakan Google Cloud CLI atau konfigurasi YAML:

gcloud

Untuk men-deploy atau mengupdate layanan, tentukan flag --sandbox-launcher:

  • Untuk men-deploy layanan baru, jalankan perintah berikut:

    gcloud beta run deploy SERVICE --image IMAGE_URL --sandbox-launcher

    Ganti kode berikut:

    • SERVICE: nama layanan Cloud Run Anda.
    • IMAGE_URL: referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • Untuk mengupdate layanan yang sudah ada, jalankan perintah berikut:

    gcloud beta run services update SERVICE --sandbox-launcher

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Update file YAML layanan Anda untuk menyertakan atribut sandboxLauncher yang ditetapkan ke true di dalam konfigurasi container Anda:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            sandboxLauncher: true
            port: 8080
    

    Ganti kode berikut:

    • SERVICE: nama layanan Cloud Run Anda.
    • CONTAINER: nama container Anda.
    • IMAGE_URL: referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

    Perintah gcloud run services replace secara default menggunakan file service.yaml jika ada.

Sandbox berbagi CPU dan memori yang dialokasikan ke container host. Pastikan batas container utama Anda untuk CPU dan memori cukup untuk mengakomodasi aplikasi Anda dan sandbox aktif yang Anda jalankan secara bersamaan.

Menonaktifkan sandbox

Untuk menonaktifkan kemampuan meluncurkan sandbox di layanan Anda, gunakan Google Cloud CLI atau konfigurasi YAML:

gcloud

Update layanan menggunakan flag --no-sandbox-launcher dengan menjalankan perintah berikut:

gcloud beta run services update SERVICE --no-sandbox-launcher

Ganti SERVICE dengan nama layanan Anda.

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML-nya:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Update file YAML layanan Anda untuk menghapus atribut sandboxLauncher di dalam konfigurasi container Anda:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - name: CONTAINER
            image: IMAGE_URL
            port: 8080
    

    Ganti kode berikut:

    • SERVICE: nama layanan Cloud Run Anda.
    • CONTAINER: nama container Anda.
    • IMAGE_URL: referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL mengikuti format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  3. Buat atau update layanan menggunakan perintah berikut:

    gcloud run services replace service.yaml

    Perintah gcloud run services replace secara default menggunakan file service.yaml jika ada.

Meluncurkan sandbox

Setelah mengaktifkan sandbox, Anda dapat meluncurkan sandbox dari dalam lingkungan eksekusi container. Biner sandbox terletak di /usr/local/gcp/bin/sandbox.

Anda dapat menjalankan biner dengan mereferensikan jalur absolutnya dalam kode sumber. Misalnya, untuk mencetak Hello di dalam sandbox terisolasi, pilih salah satu opsi berikut:

Node.js

Untuk menjalankan perintah sandbox dari aplikasi Node.js, sertakan kode berikut:

exec(`/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"`, (e, stdout, stderr) => {
    res.send({ stdout, stderr });
});

Python

Untuk menjalankan perintah sandbox dari aplikasi Python, sertakan kode berikut:

import subprocess
result = subprocess.run(
    ["/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello"],
    capture_output=True,
    text=True,
)
return {"stdout": result.stdout, "stderr": result.stderr}

Go

Untuk menjalankan perintah sandbox dari aplikasi Go, sertakan kode berikut:

cmd := exec.Command("/usr/local/gcp/bin/sandbox", "do", "--", "/bin/echo", "Hello")
out, err := cmd.CombinedOutput()

CLI Sandbox

Untuk menjalankan perintah sandbox langsung dari command line, jalankan perintah berikut:

/usr/local/gcp/bin/sandbox do -- /bin/echo "Hello"

Contoh dalam panduan ini menggunakan perintah sandbox, bukan jalur absolutnya /usr/local/gcp/bin/sandbox.

Untuk melihat daftar lengkap perintah yang tersedia, jalankan perintah /usr/local/gcp/bin/sandbox -h.

Untuk menjalankan kode yang tidak tepercaya di sandbox dari layanan Anda, lihat Eksekusi kode di Cloud Run.