Implementa imágenes de contenedor

En esta página, se describe cómo implementar servicios nuevos y revisiones nuevas en Cloud Run.

Permisos necesarios para realizar una implementación

Debes tener UNA de las siguientes funciones:

  • Propietario
  • Editor
  • Las funciones de administrador de Cloud Run y usuario de cuenta de servicio
  • Cualquier función personalizada que incluya esta lista específica de permisos

Imágenes y registros de contenedores compatibles

No hay un límite de tamaño que se aplique a la imagen de contenedor que puedes implementar.

Puedes implementar imágenes de contenedor almacenadas en Container Registry o Artifact Registry. Solo puedes usar los siguientes tipos de imágenes de contenedor:

Si almacenas imágenes de contenedor en otro tipo de Container Registry, sigue las instrucciones en implementar imágenes de registros no compatibles.

Implementa un servicio nuevo

Puedes especificar una imagen de contenedor con una etiqueta (por ejemplo, gcr.io/my-project/my-image:latest) o con un resumen exacto (por ejemplo, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

Cuando implementas en un servicio por primera vez, se crea su primera revisión. Ten en cuenta que las revisiones son inmutables. Si implementas desde una etiqueta de imagen de contenedor, se resolverá en un resumen y la revisión siempre entregará este resumen en particular.

Puedes implementar un contenedor mediante Cloud Console, la línea de comandos de gcloud o desde un archivo de configuración YAML.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Console

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ir a Cloud Run

  2. Haz clic en Crear servicio para mostrar la página Create service (Crear servicio).

    create-service-image

    En el formulario, haz lo siguiente:

    1. Selecciona la región donde quieres que se ubique el servicio. El selector de región indica el nivel de precio, la disponibilidad de los mapeos de dominios y Eventarc y destaca las regiones con con el impacto más bajo de huella de carbono.

    2. Ingresa el nombre del servicio que quieras. Los nombres de servicio deben ser únicos por región y proyecto o por clúster. Un nombre de servicio no se puede cambiar más adelante y es visible de forma pública cuando se usa Cloud Run.

  3. Haz clic en Siguiente para ir a la página Configurar la primera revisión del servicio:

    imagen

  4. En el formulario, haz lo siguiente:

    1. Si deseas implementar un contenedor de forma manual, selecciona Implementar una revisión desde una imagen de contenedor.
    2. Si deseas automatizar para la implementación continua, selecciona Implementar continuamente revisiones nuevas desde el repositorio de código fuente y sigue las instrucciones correspondientes.
    3. De manera opcional, haz clic en Configuración avanzada y en las pestañas posteriores para establecer lo siguiente:
  5. Haz clic en Siguiente para ir a la página Configurar cómo se activa este servicio:

    imagen

    1. Establece la configuración de Ingress en el formato que desees.

    2. En Authentication (Autenticación), haz lo siguiente:

      • Si creas una API o un sitio web públicos, selecciona Permitir invocaciones no autenticadas. Si seleccionas esta opción, se asigna la función de invocador de IAM al identificador especial allUser. Puedes usar IAM para editar esta configuración más adelante una vez que hayas creado el servicio.
      • Si quieres tener un servicio seguro protegido por autenticación, selecciona Solicitar autenticación.
  6. Haz clic en Crear para implementar la imagen en Cloud Run y espera a que termine la implementación.

  7. Haz clic en el vínculo de la URL que se muestra para abrir el extremo único y estable del servicio implementado.

Línea de comandos

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta este comando:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Reemplaza SERVICE por el nombre del servicio en el que deseas implementar. Si aún no existe, con este comando se crea el servicio durante la implementación. Puedes omitir este parámetro por completo, pero se te solicitará el nombre del servicio si lo haces.
    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest. Ten en cuenta que, si no proporcionas la marca --image, el comando de implementación intentará implementar desde el código fuente.

      Si creas una API o un sitio web públicos, puedes permitir las invocaciones sin autenticación de tu servicio mediante la marca --allow-unauthenticated. Así asignas la función de IAM de invocador de Cloud Run a allUsers. También puedes especificar --no-allow-unauthenticated para prohibir invocaciones no autenticadas. Si omites cualquiera de estas marcas, se te solicitará que confirmes cuando se ejecute el comando deploy.

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

Ten en cuenta que para implementar en una ubicación diferente a la que estableciste mediante las propiedades de run/region gcloud, usa lo siguiente:

  • gcloud run deploy SERVICE --region REGION

YAML

Puedes almacenar la especificación de servicio en un archivo YAML y, luego, implementarla con la herramienta de gcloud.

  1. Crea un archivo service.yaml nuevo con este contenido:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Reemplaza los siguientes elementos:

    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE por la URL de la imagen de contenedor

    También puedes especificar más opciones de configuración, como variables de entorno o límites de memoria.

  2. Implementa el servicio nuevo mediante el siguiente comando:

    gcloud run services replace service.yaml
  3. De manera opcional, haz que tu servicio sea público si deseas permitir el acceso sin autenticación.

Cloud Code

Para implementar con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Terraform

Si usas Terraform, puedes definir tu servicio en una configuración de Terraform con el recurso google_cloud_run_service del proveedor de Google Cloud Platform.

  1. Crea un archivo main.tf nuevo con este contenido:

    provider "google" {
        project = "PROJECT-ID"
    }
    
    resource "google_cloud_run_service" "default" {
        name     = "SERVICE"
        location = "REGION"
    
        metadata {
          annotations = {
            "run.googleapis.com/client-name" = "terraform"
          }
        }
    
        template {
          spec {
            containers {
              image = "gcr.io/PROJECT-ID/IMAGE"
            }
          }
        }
     }
    
     data "google_iam_policy" "noauth" {
       binding {
         role = "roles/run.invoker"
         members = ["allUsers"]
       }
     }
    
     resource "google_cloud_run_service_iam_policy" "noauth" {
       location    = google_cloud_run_service.default.location
       project     = google_cloud_run_service.default.project
       service     = google_cloud_run_service.default.name
    
       policy_data = data.google_iam_policy.noauth.policy_data
    }
    

    Reemplaza los siguientes elementos:

    • PROJECT-ID por el ID del proyecto de Google Cloud
    • REGION por la región de Google Cloud
    • SERVICE por el nombre del servicio de Cloud Run
    • IMAGE por el nombre de la imagen de contenedor

    La configuración anterior permite el acceso público (el equivalente a --allow-unauthenticated). Para que el servicio sea privado, quita las estrofas google_iam_policy y google_cloud_run_service_iam_policy.

  2. Inicializa Terraform mediante este comando:

    terraform init
  3. Aplica la configuración de Terraform:

    terraform apply

    Ingresa yes para confirmar que deseas aplicar las acciones descritas.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • asia-south2 Delhi (India)
  • australia-southeast1 (Sídney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Varsovia, Polonia)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast1 (Montreal) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast2 (Toronto) Ícono de la hoja Bajo CO2
  • southamerica-east1 (São Paulo, Brasil) Ícono de la hoja Bajo nivel de CO2
  • southamerica-west1 (Santiago, Chile)
  • us-west2 (Los Ángeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Cuando se implementa, el agente de servicio de Cloud Run debe poder acceder al contenedor implementado, que es el caso de forma predeterminada.

Cada servicio tiene una URL única y permanente que no cambiará con el tiempo a medida que implementes revisiones nuevas.

Implementa una revisión nueva de un servicio existente

Puedes implementar una revisión nueva mediante Cloud Console, la línea de comandos de gcloud o un archivo de configuración YAML.

Ten en cuenta que cualquier cambio en la configuración hace que se cree una revisión nueva, incluso si no hay cambios en la imagen de contenedor. Cada revisión creada es inmutable.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Console

Para implementar una revisión nueva de un servicio existente, sigue estos pasos:

  1. Ir a Cloud Run

  2. Ubica el servicio que deseas actualizar en la lista de servicios y haz clic en él para abrir los detalles de ese servicio.

  3. Haz clic en EDITAR E IMPLEMENTAR NUEVA REVISIÓN. Esto muestra el formulario de implementación de revisión:

    imagen

  4. Si es necesario, proporciona la URL a la imagen de contenedor nueva que deseas implementar.

  5. De manera opcional, usa las pestañas para configurar lo siguiente:

  6. Para enviar todo el tráfico a la revisión nueva, marca la casilla de verificación Publicar esta revisión de inmediato. A fin de lanzar una revisión nueva de forma gradual, desmarca esa casilla de verificación; esto dará como resultado una implementación en la que no se envíe tráfico a la revisión nueva. Sigue las instrucciones para los lanzamientos graduales después de la implementación.

  7. Haz clic en IMPLEMENTAR y espera a que finalice la implementación.

Línea de comandos

Para usar la línea de comandos, debes tener configurada la herramienta de gcloud.

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta este comando:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Reemplaza SERVICE por el nombre del servicio en el que realizas la implementación. Puedes omitir este parámetro por completo, pero se te solicitará el nombre del servicio si lo haces.
    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest.

      El sufijo de revisión se asigna de forma automática para las revisiones nuevas. Si deseas proporcionar tu propio sufijo de revisión, usa el parámetro de herramienta de gcloud --revision-suffix.

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

YAML

Si necesitas descargar o ver la configuración de un servicio existente, usa el siguiente comando para guardar los resultados en un archivo YAML:

gcloud run services describe SERVICE --format export > service.yaml

Desde un archivo YAML de configuración de servicio, modifica cualquier atributo secundario spec.template como desees para actualizar la configuración de revisión y, luego, implementa la revisión nueva:

gcloud run services replace service.yaml

Cloud Code

Para implementar una nueva revisión de un servicio existente con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Terraform

Ya deberías haber configurado Terraform según el ejemplo de Implementa un servicio nuevo.

  1. Realiza un cambio en el archivo de configuración.

  2. Aplica la configuración de Terraform:

    terraform apply

    Ingresa yes para confirmar que deseas aplicar las acciones descritas.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • asia-south2 Delhi (India)
  • australia-southeast1 (Sídney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Varsovia, Polonia)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast1 (Montreal) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast2 (Toronto) Ícono de la hoja Bajo CO2
  • southamerica-east1 (São Paulo, Brasil) Ícono de la hoja Bajo nivel de CO2
  • southamerica-west1 (Santiago, Chile)
  • us-west2 (Los Ángeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Implementa imágenes de otros proyectos de Google Cloud

Puedes implementar imágenes de contenedor de otros proyectos de Google Cloud si estableces los permisos de IAM correctos:

  1. En la consola de Cloud Console, abre el proyecto de tu servicio de Cloud Run.

    Ve a la página IAM

  2. Marca la casilla de verificación Incluir otorgamientos de funciones que proporciona Google.

  3. Copia el correo electrónico del agente de servicio de Cloud Run. Tiene el sufijo @serverless-robot-prod.iam.gserviceaccount.com

  4. Abre el proyecto que posee el registro de contenedores que deseas usar.

    Ve a la página IAM

  5. Haz clic en Agregar para agregar una principal nueva.

  6. En el cuadro de texto Principales nuevas, pega el correo electrónico de la cuenta de servicio que copiaste antes.

  7. En la lista desplegable Seleccionar una función, si usas Container Registry, elige la función Almacenamiento -> Visualizador de objetos de Storage. Si usas Artifact Registry, selecciona la función Artifact Registry -> Lector de Artifact Registry.

  8. Implementa la imagen del contenedor en el proyecto que contiene tu servicio de Cloud Run.

Implementa imágenes de registros no compatibles

Si almacenas imágenes de contenedor en un registro de contenedores público o privado no compatible, puedes enviarlas de forma temporal a Artifact Registry mediante docker push a fin de implementarlas en Cloud Run. Cloud Run importa la imagen del contenedor cuando se implementa, por lo que, después de la implementación, puedes borrarla de Artifact Registry mediante docker image rm.

¿Qué sigue?

Después de implementar un servicio nuevo, puedes hacer lo siguiente:

Puedes automatizar las implementaciones y compilaciones de los servicios de Cloud Run mediante el uso de activadores de Cloud Build.