Probar un servicio de Cloud Run de forma local

Durante el desarrollo, puedes ejecutar y probar las imágenes de contenedores de forma local antes de desplegarlas. Puedes usar Cloud Code o Docker instalado de forma local para ejecutar y probar de forma local, incluido el acceso local a los servicios de Google Cloud .

Antes de empezar

Si es la primera vez que intentas ejecutarlo de forma local, es posible que no tengas todos los permisos necesarios para acceder a la imagen desde el registro de contenedores compatible que estés usando.

Consulta la documentación del registro de contenedores compatible para saber cómo obtener acceso. Puedes configurar Docker para obtener acceso a Artifact Registry mediante el asistente de credenciales de gcloud CLI:

gcloud auth configure-docker LOCATION-docker.pkg.dev
Sustituye LOCATION por el nombre de la región de tu repositorio de contenedores (por ejemplo, us-west2).

Probar localmente

Puedes hacer pruebas de forma local con Docker, Docker con Google Cloud Access, el emulador de Cloud Code o Google Cloud CLI. Seleccione la pestaña correspondiente para ver las instrucciones.

Docker

Para probar tu imagen de contenedor de forma local con Docker, sigue estos pasos:

  1. Usa el comando de Docker:

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    Sustituye IMAGE_URL por una referencia a la imagen de contenedor. Por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

    La variable de entorno PORT especifica el puerto que usará tu aplicación para recibir solicitudes HTTP o HTTPS. Se trata de un requisito del contrato de entorno de ejecución de contenedor. En este ejemplo, usamos el puerto 8080.

  2. Abre http://localhost:9090 en tu navegador.

Si no tienes experiencia con los contenedores, te recomendamos que consultes la guía Introducción a Docker. Para obtener más información sobre los comandos de Docker, consulta la documentación de Docker.

Docker con acceso a Google Cloud

Si usas Google Cloud bibliotecas de cliente para integrar tu aplicación con Google Cloud servicios y aún no has protegido esos servicios para controlar el acceso externo, puedes configurar tu contenedor local para que se autentique con los servicios de Google Cloud mediante credenciales predeterminadas de la aplicación.

Para ejecutarlo localmente, haz lo siguiente:

  1. Siga las instrucciones para configurar una clave de cuenta de servicio.

  2. Las siguientes marcas de ejecución de Docker insertan las credenciales y la configuración de tu sistema local en el contenedor local:

    1. Usa la marca --volume (-v) para insertar el archivo de credenciales en el contenedor (se presupone que ya has definido la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en tu máquina):
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. Usa la marca --environment (-e) para definir la variable GOOGLE_APPLICATION_CREDENTIALS dentro del contenedor:
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. También puedes usar este comando de Docker run totalmente configurado:

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    Ten en cuenta que la ruta

    /tmp/keys/FILE_NAME.json
    que se muestra en el ejemplo anterior es una ubicación adecuada para colocar las credenciales dentro del contenedor.

    Sin embargo, también funcionarán otras ubicaciones de directorios. El requisito fundamental es que la variable de entorno GOOGLE_APPLICATION_CREDENTIALS debe coincidir con la ubicación del montaje de enlace dentro del contenedor.

    Ten en cuenta también que, con algunos Google Cloud servicios, puede que quieras usar una configuración alternativa para aislar la solución de problemas local del rendimiento y los datos de producción.

Emulador de Cloud Code

El complemento Cloud Code para VS Code y los IDEs de JetBrains te permite ejecutar y depurar localmente tu imagen de contenedor en un emulador de Cloud Run dentro de tu IDE. El emulador te permite configurar un entorno que representa tu servicio en Cloud Run.

Puedes configurar propiedades como la asignación de CPU y memoria, especificar variables de entorno y definir conexiones de bases de datos de Cloud SQL.

  1. Instala Cloud Code para VS Code o un IDE de JetBrains.
  2. Sigue las instrucciones para desarrollar y depurar localmente en tu IDE.
  3. VS Code: desarrollo y depuración locales
  4. IntelliJ desarrollo y depuración locales

CLI de gcloud

La CLI de Google Cloud contiene un entorno de desarrollo local para emular Cloud Run que puede compilar un contenedor a partir del código fuente, ejecutarlo en tu máquina local y volver a compilarlo automáticamente cuando se modifique el código fuente.

Para iniciar el entorno de desarrollo local, sigue estos pasos:

  1. Cambia al directorio que contiene el código fuente de tu servicio.

  2. Invoca el comando:

    gcloud beta code dev
    Si hay un Dockerfile en el directorio local, se usa para compilar el contenedor. Si no hay ningún Dockerfile, el contenedor se compila con buildpacks de Google Cloud.

Para ver el servicio en funcionamiento, ve a http://localhost:8080/ en tu navegador. Si has especificado un puerto personalizado con la opción --local-port, recuerda abrir el navegador en ese puerto.

Para detener el servidor local, sigue estos pasos:

  • Mac OS y Linux: Control + C
  • Windows: Control-Inter

Personalizar la configuración del servicio

Puedes personalizar la configuración de Cloud Run del servicio que se ejecuta localmente con un archivo YAML. El formato YAML es el mismo que se puede usar para desplegar un servicio de Cloud Run, pero solo admite un subconjunto de los ajustes del servicio de Cloud Run. gcloud beta code dev busca y usa cualquier archivo que termine en *.service.dev.yaml en el directorio actual. Si no se encuentra ninguno, se usará cualquier archivo que termine en *.service.yaml.

Puedes configurar los siguientes ajustes para el desarrollo local:

El campo de contenedor image no es obligatorio para el desarrollo local, ya que la imagen se crea y se proporciona al servicio cuando se ejecuta el comando.

Puedes usar el siguiente archivo service.dev.yaml de ejemplo para el desarrollo local:

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

Pruebas con credenciales

Para dar permiso al contenedor para que use los servicios de Google Cloud , debes proporcionarle una credencial de acceso.

  • Para dar acceso al contenedor a una credencial con tu propia cuenta, inicia sesión con gcloud y usa la marca --application-default-credential:

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • Para proporcionar las credenciales de la aplicación como cuenta de servicio, usa la marca --service-account:

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

Confirma que tu código se ejecuta de forma local

Cuando hagas pruebas locales en Cloud Run, puedes confirmar en tu código que el contenedor se está ejecutando localmente comprobando la variable de entorno K_REVISION, que Cloud Run pone a disposición de todos los contenedores.

Docker

Para confirmar que estás ejecutando el código de forma local en la CLI de Google Cloud, puedes intentar consultar la variable de entorno K_REVISION, pero, como no se ha definido, no habrá ningún valor.

Docker con acceso a Google Cloud

Si has usado los valores exactos de la sección anterior en el paso 3 para confirmar que estás ejecutando el código de forma local en la CLI de Google Cloud, puedes consultar la variable de entorno K_REVISION y buscar el valor dev-00001 para confirmar que se está ejecutando de forma local.

Emulador de Cloud Code

Para confirmar que estás ejecutando tu código de forma local en Cloud Code, puedes consultar la variable de entorno K_REVISION y buscar el valor local para confirmar que se está ejecutando de forma local.

CLI de gcloud

Para confirmar que estás ejecutando el código de forma local en la CLI de Google Cloud, puedes consultar la variable de entorno K_REVISION y buscar un valor que empiece por dev- para confirmar que se está ejecutando de forma local.

Siguientes pasos