Configura zonas de pruebas para los servicios

Las zonas de pruebas de Cloud Run proporcionan un entorno rápido, seguro y aislado para ejecutar código no confiable o herramientas, como agentes de IA, dentro de tu servicio existente en el entorno de segunda generación. Las zonas de pruebas están altamente optimizadas para la latencia y se ejecutan dentro de la misma instancia que tu contenedor, y comparten la CPU y la memoria asignadas.

En esta página, se describe cómo configurar zonas de pruebas en tu contenedor. Para obtener detalles sobre cómo escribir código para interactuar con el entorno de pruebas con la CLI, consulta Ejecución de código en Cloud Run.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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. Instala e inicializa la CLI de gcloud
  7. Implementa un servicio de Cloud Run en el entorno de ejecución de segunda generación.

Roles obligatorios

Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Si implementas un servicio o una función desde el código fuente, también debes tener roles adicionales otorgados en tu proyecto y en la cuenta de servicio de Cloud Build.

Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con lasGoogle Cloud APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta los permisos de implementación y cómo administrar el acceso.

Habilita las zonas de pruebas

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

Cuando habilitas los entornos de pruebas, tu servicio de Cloud Run se implementa en el entorno de ejecución de segunda generación. Para habilitar las zonas de pruebas en los servicios de Cloud Run, usa Google Cloud CLI o una configuración en YAML:

gcloud

Para implementar o actualizar el servicio, especifica la marca --sandbox-launcher:

  • Para implementar un servicio nuevo, ejecuta el siguiente comando:

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

    Reemplaza lo siguiente:

    • SERVICE: El nombre de tu servicio de Cloud Run.
    • IMAGE_URL: Una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • Para actualizar un servicio existente, ejecuta el siguiente comando:

    gcloud beta run services update SERVICE --sandbox-launcher

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza el archivo YAML de tu servicio para incluir el atributo sandboxLauncher establecido en true dentro de la configuración del contenedor:

    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
    

    Reemplaza lo siguiente:

    • SERVICE: El nombre de tu servicio de Cloud Run.
    • CONTAINER: El nombre de tu contenedor
    • IMAGE_URL: Una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

    El comando gcloud run services replace usa de forma predeterminada el archivo service.yaml si está presente.

Las zonas de pruebas comparten la CPU y la memoria asignadas al contenedor host. Asegúrate de que los límites del contenedor principal para la CPU y la memoria sean suficientes para admitir tu aplicación y los sandbox activos que ejecutes al mismo tiempo.

Inhabilita las zonas de pruebas

Para inhabilitar la capacidad de iniciar una zona de pruebas en tu servicio, usa Google Cloud CLI o una configuración YAML:

gcloud

Actualiza el servicio con la marca --no-sandbox-launcher ejecutando el siguiente comando:

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

SERVICE por el nombre del servicio

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza el archivo YAML de tu servicio para quitar el atributo sandboxLauncher dentro de la configuración del contenedor:

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

    Reemplaza lo siguiente:

    • SERVICE: El nombre de tu servicio de Cloud Run.
    • CONTAINER: El nombre de tu contenedor
    • IMAGE_URL: Una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

    El comando gcloud run services replace usa de forma predeterminada el archivo service.yaml si está presente.

Cómo iniciar zonas de pruebas

Una vez que habilites las zonas de pruebas, podrás iniciarlas desde tu entorno de ejecución de contenedores. El objeto binario de zona de pruebas se encuentra en /usr/local/gcp/bin/sandbox.

Puedes ejecutar el archivo binario haciendo referencia a su ruta de acceso absoluta en el código fuente. Por ejemplo, para imprimir Hello dentro de tu zona de pruebas aislada, elige una de las siguientes opciones:

Node.js

Para ejecutar el comando de zona de pruebas desde una aplicación de Node.js, incluye el siguiente código:

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

Python

Para ejecutar el comando de zona de pruebas desde una aplicación de Python, incluye el siguiente código:

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

Para ejecutar el comando de zona de pruebas desde una aplicación de Go, incluye el siguiente código:

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

CLI de Sandbox

Para ejecutar el comando de zona de pruebas directamente desde la línea de comandos, ejecuta el siguiente comando:

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

En los ejemplos de esta guía, se usa el comando sandbox en lugar de su ruta de acceso absoluta /usr/local/gcp/bin/sandbox.

Para ver la lista completa de comandos disponibles, ejecuta el comando /usr/local/gcp/bin/sandbox -h.

Para ejecutar código no confiable en un entorno de pruebas desde tu servicio, consulta Ejecución de código en Cloud Run.