Prueba un servicio de Cloud Run de forma local

Durante el desarrollo, puedes ejecutar y probar la imagen de contenedor de manera local, antes de la implementación. Puedes usar Cloud Code o Docker instalado de manera local para ejecutar y probar a nivel local, incluida la ejecución local con acceso a los servicios de Google Cloud.

Docker

Para probar la imagen de contenedor de forma local mediante Docker, haz lo siguiente:

  1. Usa el comando de Docker:

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

    Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

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

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

Si es la primera vez que trabajas con contenedores, te recomendamos revisar la guía Comienza a usar 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 bibliotecas cliente de Google Cloud para integrar tus aplicaciones en los servicios de Google Cloud y aún no has protegido esos servicios a fin de controlar el acceso externo, puedes configurar tu contenedor local para que se autentique con los servicios de Google Cloud mediante las credenciales predeterminadas de la aplicación.

Para ejecutar de forma local, sigue estos pasos:

  1. Consulta Comienza a usar la autenticación para obtener instrucciones sobre cómo generar, recuperar y configurar las credenciales de la cuenta de servicio.

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

    1. Usa la marca --volume (-v) para incorporar el archivo de credenciales en el contenedor (se supone que ya configuraste 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 establecer la variable GOOGLE_APPLICATION_CREDENTIALS dentro del contenedor:
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. De manera opcional, usa este comando run de Docker completamente 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 la ruta que se encuentra a continuación:

    /tmp/keys/FILE_NAME.json
    Es una ubicación razonable para colocar las credenciales dentro del contenedor.

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

    Además, ten en cuenta que, con algunos servicios de Google Cloud, puedes usar una configuración alternativa para aislar la solución de problemas locales de los datos y el rendimiento de producción.

Emulador de Cloud Code

El complemento de Cloud Code para VS Code y los IDE de JetBrains te permite ejecutar y depurar de forma local la imagen de contenedor en un emulador de Cloud Run en tu IDE. El emulador te permite configurar un entorno que represente el servicio que se ejecuta en Cloud Run.

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

  1. Instala Cloud Code para VS Code o un IDE de JetBrains.
  2. Sigue las instrucciones para el desarrollo y la depuración locales dentro del IDE.
  3. VS Code: Desarrollo y depuración locales
  4. IntelliJ: Desarrollo y depuración locales

CLI de gcloud

Google Cloud CLI contiene un entorno de desarrollo local para emular Cloud Run que puede compilar un contenedor desde la fuente, ejecutar el contenedor en tu máquina local y volver a compilar el contenedor automáticamente luego de los cambios del 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 usará para compilar el contenedor. Si no hay un Dockerfile, el contenedor se compila con los paquetes de compilación de Google Cloud.

Para ver el servicio en ejecución, visita http://localhost:8080/ en el navegador. Si especificaste un puerto personalizado con la opción --local-port, recuerda abrir tu navegador en ese puerto.

Para detener el servidor local, haz lo siguiente:

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

Personaliza la configuración del servicio

Puedes personalizar la configuración de Cloud Run del servicio que se ejecuta de forma local mediante un archivo YAML. El formato YAML es el mismo que se puede usar para implementar un servicio de Cloud Run, pero solo admite un subconjunto de la configuración 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, usará cualquier archivo que termine en *.service.yaml.

Puedes definir la siguiente configuración para el desarrollo local:

El campo image del contenedor no es necesario para el desarrollo local, ya que la imagen se compila 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

Prueba usar credenciales

Si deseas otorgar permiso al contenedor para usar los servicios de Google Cloud, debes darle una credencial de acceso al contenedor.

  • Para otorgar al contenedor acceso a una credencial con tu propia cuenta, accede 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 otorgar a la aplicación cedenciales como una cuenta de servicio, usa la marca --service-account:

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

    La marca --service-account hace que una clave de cuenta de servicio se descargue y se almacene en caché de forma local. El usuario es responsable de mantener la clave segura y borrarla cuando ya no sea necesaria.

Confirma que tu código se ejecute de forma local

Cuando hagas pruebas locales en Cloud Run, puedes confirmar en tu código que el contenedor se ejecuta de forma local si verificas la variable de entorno K_REVISION, que Cloud Run pone a disposición de todos los contenedores.

Docker

Para confirmar que ejecutas tu código de forma local en Google Cloud CLI, puedes intentar consultar la variable de entorno K_REVISION, pero como no se configuró, no habrá ningún valor presente.

Docker con acceso a Google Cloud

Si usaste los valores exactos de la sección anterior en el paso 3 para confirmar que ejecutas tu código de forma local en Google Cloud CLI, puedes consultar la variable de entorno K_REVISION y buscar el valor dev-00001 para confirmar que se ejecuta de manera local.

Emulador de Cloud Code

Para confirmar que ejecutas el código de forma local en Cloud Code, puedes consultar la variable de entorno K_REVISION y buscar un valor de local a fin de confirmar que se ejecuta de forma local.

CLI de gcloud

Para confirmar que ejecutas el código de forma local en Google Cloud CLI, puedes consultar la variable de entorno K_REVISION y buscar un valor que comience con dev- para confirmar que se ejecuta de forma local.

¿Qué sigue?