Descripción general del proceso de compilación

Cuando implementas el código fuente de la función en Cloud Run Functions, esa fuente se almacena en un bucket de Cloud Storage. A continuación, Cloud Build compila el código de forma automática en una imagen de contenedor y envía esa imagen a un registro de imágenes. Cloud Run Functions accede a esta imagen cuando necesita ejecutar el contenedor para ejecutar la función.

Todo el proceso de compilación de la imagen es automático y no requiere ninguna entrada de tu parte. Todos los recursos usados en el proceso de compilación se ejecutan en tu propio proyecto de usuario.

Ejecutar el proceso de compilación dentro de tu proyecto implica lo siguiente:

  • Tienes acceso directo a todos los registros de compilaciones.

  • No existe una cuota de tiempo de compilación predeterminada, aunque Cloud Build tiene su propia cuota de simultaneidad predeterminada.

  • Puedes visualizar la imagen del contenedor actual y las imágenes de contenedores implementadas con anterioridad, las cuales se almacenan en Container Registry.

  • Cloud Storage se usa directamente en tu proyecto, y el directorio del código fuente de las funciones se almacena en un bucket dentro de tu proyecto. Ten en cuenta lo siguiente:

    • Si usas la encriptación predeterminada, este bucket se llama gcf-sources-PROJECT_NUMBER-REGION.
    • Si proteges tus datos con CMEK, el bucket se llama gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • El bucket no tiene período de retención.

Características del proceso de compilación

El proceso de compilación tiene las siguientes características:

  • La API de Cloud Build debe estar habilitada en tu proyecto.

    Para habilitar la API de forma manual, haz clic en el vínculo anterior, selecciona tu proyecto en el menú desplegable y sigue las indicaciones para habilitar la IU.

  • Debido a que todo el proceso de compilación se produce dentro del contexto de tu proyecto, este está sujeto a los precios de los recursos incluidos:

    • Para obtener los precios de Cloud Build, consulta la página Precios. Este proceso usa el tamaño de instancia predeterminado de Cloud Build, ya que estas instancias se preparan de forma previa y están disponibles más rápido. Cloud Build proporciona un nivel gratuito: revisa el documento de precios para obtener más detalles.

    • Para obtener los precios de Cloud Storage, consulta la página Precios. Cloud Storage proporciona un nivel gratuito: revisa el documento de precios para obtener más información.

    • Para obtener los precios de Artifact Registry, consulta la página Precios.

    • Para obtener los precios de Container Registry (obsoleto), consulta la página Precios.

  • Debido a que el proceso de compilación está sujeto a facturación, tu proyecto debe tener una cuenta de Facturación de Cloud adjunta.

Visualiza los registros de imágenes de compilación

Un beneficio clave de tener el proceso de imagen de compilación en tu proyecto de usuario es acceso a los registros de compilación. Puedes usar la CLI de  o la consola de Google Cloud para acceder a los registros, que están disponibles a través de Cloud Logging.

gcloud

  1. Implementa la función mediante el comando gcloud functions deploy.

  2. La URL de los registros se muestra como parte de la respuesta en la ventana de la terminal. Por ejemplo:

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.

Consola de Google Cloud

  1. En la ventana Descripción general de Cloud Run Functions, haz clic en el nombre de la función que investigas.
  2. Haz clic en la pestaña Detalles.
  3. En el panel Información general, haz clic en el vínculo Registro de compilación del contenedor para abrir el panel Explorador de registros.
  4. Haz clic en cualquier fila para ver los detalles de esa entrada de registro de compilación. Si es una entrada de error asociada con un archivo, estos detalles incluyen el nombre, la línea y la columna del archivo.

Registro de imágenes

Cloud Run Functions usa Artifact Registry para almacenar las imágenes compiladas a partir del código fuente de tu función. Las imágenes se almacenan en un repositorio llamado REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts.

Artifact Registry debe estar en el mismo proyecto que tu función. Puedes crear o actualizar una función basada en Artifact Registry de la siguiente manera:

gcloud

Para Artifact Registry administrado por el cliente, ejecuta el siguiente comando:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-repository=REPOSITORY
[FLAGS...]

Reemplaza lo siguiente:

  • FUNCTION: Es el nombre de la función.
  • REPOSITORY: El nombre del repositorio de Artifact Registry completamente calificado, en el siguiente formato: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

Para Artifact Registry administrado por Google, usa lo siguiente:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Consola de Google Cloud

  1. Ve a la página de funciones de Cloud Run en la consola de Google Cloud:
    Ir a la página de funciones de Cloud Run

  2. Haz clic en el nombre de la función para la que deseas usar Artifact Registry.

  3. Haz clic en Editar.

  4. Haz clic en Entorno de ejecución, compilación… para expandir las opciones de configuración avanzada.

  5. Haz clic en Seguridad y repositorio de imágenes en la barra de menú para abrir la pestaña de seguridad.

  6. En Repositorio de imágenes, selecciona una de las siguientes opciones, según el tipo de Artifact Registry que uses:

    • Artifact Registry administrado por el cliente Usa esta opción si configuras tu propio repositorio de Docker.
    • Artifact Registry administrado por Google Usa esta opción si deseas usar un repositorio de Docker administrado por Google en lugar de configurar el tuyo.
  7. En Artifact Managed Registry, usa el menú desplegable Artifact Registry para seleccionar el repositorio de Artifact Registry que desees o sigue las indicaciones y crea un nuevo uno.

  8. Haz clic en Siguiente.

  9. Haz clic en Implementar.

Para obtener información detallada sobre los precios, consulta Precios de Cloud Run Functions.

Protege tu compilación con grupos privados

Para permitir que las funciones usen dependencias (por ejemplo, paquetes de Administración de socios de red), Cloud Build tiene acceso ilimitado a Internet de forma predeterminada durante el proceso de compilación. Si configuraste un perímetro de los Controles del servicio de VPC (VPC SC) y deseas limitar el acceso de la compilación solo a las dependencias almacenadas dentro del perímetro, puedes usar la función de los Grupos de trabajadores privados de Cloud Build.

En general, sigue estos pasos para configurar tu grupo privado:

  1. Crea tu grupo de trabajadores privados. Consulta Crea y administra grupos privados.
  2. Configura el perímetro de los Controles del servicio de VPC. Consulta Usa los Controles del servicio de VPC.

  3. Si tu grupo de trabajadores privados está en un proyecto diferente al de tu función, debes otorgar a la cuenta de servicio (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) del agente de servicio de Cloud Run Functions el rol cloudbuild.workerPoolUser para que el servicio de Cloud Build pueda acceder al grupo de trabajadores.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser

    donde FUNCTION_PROJECT_NUMBER es el número del proyecto en el que se ejecuta la función y PRIVATE_POOL_PROJECT_ID es el id del proyecto en el que se encuentra el grupo de trabajadores. Consulta Ejecuta compilaciones en un grupo privado para obtener más información.

  4. Implementa la función para compilar con un grupo privado:

gcloud

gcloud functions deploy FUNCTION_NAME --no-gen2\
  --runtime RUNTIME \
  --build-worker-pool PRIVATE_POOL_NAME
  [FLAGS...]

donde FUNCTION_NAME es el nombre de la función, RUNTIME es el entorno de ejecución que usas y PRIVATE_POOL_NAME es el nombre de tu grupo.

Para dejar de usar un grupo privado determinado y, en su lugar, usar el grupo predeterminado de Cloud Build, usa la marca --clear-build-worker-pool cuando vuelvas a implementar.

gcloud functions deploy FUNCTION_NAME --no-gen2 \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

donde FUNCTION_NAME es el nombre de la función y RUNTIME es el entorno de ejecución que usas.

Consola de Google Cloud

  1. En la página Descripción general de Cloud Run Functions, selecciona Crear función.

  2. En la sección Entorno de ejecución, compilación..., haz clic en la pestaña Compilar y, luego, ingresa el nombre completo del recurso de tu grupo privado en Compilar grupos de trabajadores.

Para obtener más información, consulta Ejecuta compilaciones en un grupo privado.

Protege tu compilación con una cuenta de servicio personalizada

Cloud Run Functions toma tu código fuente y lo envía a Cloud Build para que se almacene en contenedores. La función alojada en contenedores se almacena en Artifact Registry y se implementa en Cloud Run como un servicio. De forma predeterminada, Cloud Build asigna una cuenta de servicio para que actúe como la principal cuando se realiza la compilación. A partir de julio de 2024, los proyectos nuevos de una organización usarán la cuenta de servicio predeterminada de Compute Engine para actuar como la principal que ejecuta una compilación. Para obtener más información, consulta Cambio de la cuenta de servicio predeterminada de Cloud Build. Por motivos de seguridad, la cuenta de servicio predeterminada de Compute Engine no tiene permisos suficientes para realizar la compilación.

En el caso de los proyectos de Google Cloud creados antes de julio de 2024, Cloud Build usa la cuenta de servicio heredada de Cloud Build. Esta cuenta de servicio se diseñó para ayudar a los usuarios a ejecutar una amplia variedad de casos de uso que pueden ser demasiado permisivos para las necesidades de tu proyecto. Si deseas trasladar tus proyectos existentes de esta cuenta de servicio, puedes seguir estos pasos para proteger aún más tu entorno de compilación de funciones:

  1. Evita que se use la cuenta de servicio heredada de Cloud Build para la compilación.
  2. Evita que se use la cuenta de servicio de Compute predeterminada para la compilación.
  3. Configura una cuenta de servicio nueva con permisos de alcance adecuados para usar en la compilación.
  4. Usa la cuenta de servicio configurada para la compilación.

Evita que se use la cuenta de servicio heredada de Cloud Build para la compilación

Para verificar que tu proyecto use la cuenta de servicio de Cloud Build heredada, inspecciona los detalles de la compilación de tu función. La cuenta de servicio de compilación predeterminada tiene el siguiente formato:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Para inhabilitar de forma forzosa el uso de esta cuenta de servicio, configura la restricción cloudbuild.useBuildServiceAccount de la política de la organización como Not Enforced. Como alternativa, quitar todos sus otorgamientos de roles limitará su capacidad para acceder a los recursos de Google Cloud.

Evita que se use la cuenta de servicio de procesamiento predeterminada para la compilación

La cuenta de servicio de procesamiento predeterminada tiene el formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Para inhabilitar que sea el valor predeterminado que se usa para la compilación, configura la política de la organización cloudbuild.useComputeServiceAccount como Not Enforced. Como alternativa, inhabilitar esta cuenta de servicio evita que se use para acceder a los recursos de Google Cloud.

Proporciona una cuenta de servicio para compilar funciones

Como parte de la configuración de una función, se puede especificar una cuenta de servicio de compilación cuando se implementa la función. Cuando se impide que se usen la cuenta de servicio heredada de Cloud Build y la cuenta de servicio de procesamiento predeterminada para la compilación, debes especificar una cuenta de servicio de compilación para implementar una función.

Consulta Cuenta de servicio personalizada para Cloud Build si deseas configurar y usar una cuenta de servicio de compilación para tu función.