Descripción general del proceso de compilación
Cuando despliegas el código fuente de tu función en Cloud Run functions, ese código se almacena en un segmento de Cloud Storage. A continuación, Cloud Build compila automáticamente el código 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 tu función.
El proceso de creación de la imagen es totalmente automático y no requiere que introduzcas nada directamente. Todos los recursos utilizados en el proceso de compilación se ejecutan en tu propio proyecto de usuario.
Ejecutar el proceso de compilación en tu proyecto significa que:
Tienes acceso directo a todos los registros de compilación.
No hay ninguna cuota de tiempo de compilación predefinida, aunque Cloud Build sí tiene su propia cuota de simultaneidad predeterminada.
Puedes ver la imagen de contenedor actual y las imágenes de contenedor desplegadas anteriormente, que se almacenan en Artifact Registry.
Cloud Storage se usa en tu proyecto para almacenar el directorio del código fuente de tus funciones. Ten en cuenta lo siguiente:
- Si creas una función, se crea un segmento de subida para almacenar tu código fuente. Este segmento de subida se llama
gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com
. - Una vez que se ha subido el código, se almacena en un segmento de origen independiente:
- Si usas el cifrado predeterminado, este segmento se llama
gcf-sources-PROJECT_NUMBER-REGION
. - Si proteges tus datos con CMEK, el nombre del segmento es
gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH
.
- Si usas el cifrado predeterminado, este segmento se llama
- Tanto el segmento de origen como el de subida no tienen ningún periodo de conservación.
- Si creas una función, se crea un segmento de subida para almacenar tu código fuente. Este segmento de subida se llama
Características del proceso de compilación
El proceso de compilación tiene las siguientes características:
La API Cloud Build debe estar habilitada en tu proyecto.
Para habilitar la API manualmente, haz clic en el enlace anterior, selecciona tu proyecto en el menú desplegable y sigue las indicaciones para habilitar la interfaz de usuario.
Como todo el proceso de compilación se lleva a cabo en el contexto de tu proyecto, este está sujeto a los precios de los recursos incluidos:
Para consultar los precios de Cloud Build, visita la página Precios. Este proceso usa el tamaño de instancia predeterminado de Cloud Build, ya que estas instancias se precalientan y están disponibles más rápido. Cloud Build ofrece un nivel gratuito. Consulta el documento de precios para obtener más información.
Para consultar los precios de Cloud Storage, visita la página Precios. Cloud Storage ofrece un nivel gratuito. Consulta el documento de precios para obtener más información.
Para consultar los precios de Artifact Registry, ve a la página Precios.
Para consultar los precios de Container Registry (obsoleto), visita la página Precios.
Como el proceso de compilación está sujeto a facturación, tu proyecto debe tener una cuenta de facturación de Cloud vinculada.
Ver los registros de imágenes de compilación
Una de las principales ventajas de tener el proceso de compilación de imágenes en tu proyecto de usuario es el acceso a los registros de compilación. Puedes usar la CLI de gcloud o la Google Cloud consola para acceder a los registros, que están disponibles a través de Cloud Logging.
gcloud
Despliega tu función con el
gcloud functions deploy
comando.La URL de los registros se muestra como parte de la respuesta en la ventana de tu 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.
Google Cloud consola
- En la ventana Información general de Cloud Run Functions, haz clic en el nombre de la función que quieras investigar.
- Haga clic en la pestaña Detalles.
- En el panel Información general, haz clic en el enlace Registro de compilación del contenedor para abrir el panel Explorador de registros.
- Haz clic en cualquier fila para ver los detalles de esa entrada del registro de compilación. Si se trata de una entrada de error asociada a un archivo, estos detalles incluyen el nombre, la línea y la columna del archivo.
Registro de imágenes
Las funciones de Cloud Run usan Artifact Registry para almacenar las imágenes creadas a partir del código fuente de tus funciones. Las imágenes se almacenan en un repositorio llamado REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts
.
Tu Artifact Registry debe estar en el mismo proyecto que tu función. Para crear o actualizar una función basada en Artifact Registry, sigue estos pasos:
gcloud
En el caso de Artifact Registry gestionado por el cliente, ejecuta el siguiente comando:
gcloud functions deploy --no-gen2 FUNCTION \ --docker-repository=REPOSITORY [FLAGS...]
Haz los cambios siguientes:
- FUNCTION: el nombre de la función.
- REPOSITORY: el nombre de repositorio de Artifact Registry totalmente cualificado, con el siguiente formato:
projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY
.
En Artifact Registry gestionado por Google, usa lo siguiente:
gcloud functions deploy --no-gen2 FUNCTION \ --docker-registry=artifact-registry [FLAGS...]
Google Cloud consola
Ve a la página de funciones de Cloud Run en la Google Cloud consola:
Ir a la página de funciones de Cloud RunHaga clic en el nombre de la función para la que quiere usar Artifact Registry.
Haz clic en Editar.
Haz clic en Tiempo de ejecución, compilación... para desplegar las opciones de configuración avanzada.
En la barra de menú, haz clic en Seguridad y repositorio de imágenes para abrir la pestaña de seguridad.
En Repositorio de imágenes, selecciona una de las siguientes opciones, según el tipo de Artifact Registry que estés usando:
- Artifact Registry gestionado por el cliente. Usa esta opción si has configurado tu propio repositorio de Docker.
- Artifact Registry gestionado por Google. Usa esta opción si quieres usar un repositorio de Docker gestionado por Google en lugar de configurar el tuyo.
En Artifact Registry gestionado por el cliente, usa el menú desplegable Artifact Registry para seleccionar el repositorio de Artifact Registry que quieras o sigue las indicaciones para crear uno.
Haz clic en Siguiente.
Haz clic en Desplegar.
Para obtener información detallada sobre los precios, consulta los precios de Cloud Functions.
Protege tu compilación con grupos privados
Para permitir que tus funciones usen dependencias (por ejemplo, paquetes npm), Cloud Build tiene acceso a Internet ilimitado de forma predeterminada durante el proceso de compilación. Si has configurado un perímetro de Controles de Servicio de VPC (VPC SC) y quieres limitar el acceso de la compilación solo a las dependencias almacenadas dentro del perímetro, puedes usar la función grupos de trabajadores privados de Cloud Build.
En general, sigue estos pasos para configurar tu grupo privado:
- Crea tu grupo de trabajadores privado. Consulta Crear y gestionar grupos privados.
Configura tu perímetro de Controles de Servicio de VPC. Consulta Usar Controles de Servicio de VPC.
Si tu grupo de trabajadores privado está en un proyecto diferente al de tu función, debes conceder el rol
cloudbuild.workerPoolUser
a la cuenta de servicio Agente de servicio de las funciones de Cloud Run (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) para que el servicio 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 más información en el artículo Ejecutar compilaciones en un grupo privado.
Despliega tu función para compilarla 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 tiempo de ejecución que estás usando y PRIVATE_POOL_NAME es el nombre de tu grupo.
Para dejar de usar un grupo privado determinado y usar el grupo predeterminado de Cloud Build, usa la marca --clear-build-worker-pool
al volver a desplegar.
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 tiempo de ejecución que estás usando.
Google Cloud consola
En la página Información general de Cloud Run Functions, selecciona Crear función.
En la sección Tiempo de ejecución, compilación..., haga clic en la pestaña Compilación e introduzca el nombre completo del recurso de su grupo privado en el cuadro de texto Compilación de grupos de trabajadores.
Para obtener más información, consulta Ejecutar 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 genere en contenedores. La función en contenedores se almacena en Artifact Registry y se despliega en Cloud Run como servicio. De forma predeterminada, Cloud Build asigna una cuenta de servicio para que actúe como principal al realizar la compilación. Desde julio del 2024, los proyectos nuevos de una organización usarán la cuenta de servicio predeterminada de Compute Engine para actuar como la entidad que ejecuta una compilación. Para obtener más información, consulta el artículo sobre el cambio en 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 los Google Cloud proyectos creados antes de julio del 2024, Cloud Build usa la cuenta de servicio de Cloud Build antigua. Esta cuenta de servicio se ha diseñado para ayudar a los usuarios a ejecutar una amplia gama de casos prácticos que pueden ser demasiado permisivos para las necesidades de tu proyecto. Si quieres mover tus proyectos de esta cuenta de servicio, puedes seguir estos pasos para proteger aún más tu entorno de compilación de funciones:
- Evita que se use la cuenta de servicio antigua de Cloud Build para la compilación.
- Evita que se use la cuenta de servicio predeterminada de Compute para la compilación.
- Configura una cuenta de servicio con permisos de ámbito adecuado para usarla en la compilación.
- Usa la cuenta de servicio configurada para la compilación.
Evitar que se use la cuenta de servicio antigua de Cloud Build para las compilaciones
Para comprobar si tu proyecto usa la cuenta de servicio de Cloud Build antigua, consulta 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
.
Puedes inhabilitar el uso de esta cuenta de servicio de forma obligatoria configurando la restricción de la política de la organización cloudbuild.useBuildServiceAccount
en Not Enforced
. También puedes limitar su capacidad para acceder a los recursos de Google Cloudsi le quitas todos los permisos de rol.
Evitar que se use la cuenta de servicio predeterminada de Compute para la compilación
La cuenta de servicio predeterminada de Compute tiene el formato
PROJECT_NUMBER-compute@developer.gserviceaccount.com
.
Para inhabilitar esta opción como predeterminada para la compilación, define la política de organización cloudbuild.useComputeServiceAccount
como Not Enforced
.
También puedes inhabilitar esta cuenta de servicio para que no se pueda usar para acceder a los recursos de Google Cloud .
Proporcionar 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 al desplegar la función. Si no se pueden usar la cuenta de servicio de Cloud Build antigua ni la cuenta de servicio predeterminada de Compute para compilar, debes especificar una cuenta de servicio de compilación para desplegar una función.
Consulta el artículo sobre la cuenta de servicio personalizada para Cloud Build para configurar y usar una cuenta de servicio de compilación en tu función.