Compila imágenes de Cloud Functions

Descripción general

Cuando implementas el código fuente de la función en Cloud 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 (ya sea Container Registry o Artifact Registry). Cloud 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 la imagen del contenedor implementada con anterioridad, las cuales se almacenan en Container Registry o Artifact Registry.

  • Debido a que Cloud Storage se usa directamente en tu proyecto, el directorio del código fuente de las funciones es visible en un bucket llamado gcf-sources-PROJECT_NUMBER-REGION.

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 haz clic en Continuar.

  • 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 Container Registry, consulta la página Precios.

    • Para obtener los precios de Artifact Registry, 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.

Accede a 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.
    

Google Cloud Console

  1. En la pantalla Funciones, haz clic en el Nombre de la función que te interesa. Se abrirá la página Detalles de la función (Function Details).

  2. Desplázate hacia abajo hasta que veas la sección Creación de contenedores (Container build). Si tu compilación no tenía errores, verás un vínculo que puedes seguir a fin de visualizar el registro de compilación. Si tu compilación tuvo errores, como se muestra a continuación, la sección Creación de contenedores (Container build) los muestra intercalados. Haz clic en Más información (Learn more) para visualizar el registro de compilación directamente.

    Captura de pantalla en la que se muestra el resultado de la sección Creación de contenedores

  3. Se abrirá la pantalla Visor de registros. Haz clic en la entrada que te interesa.

  4. Se abrirá la entrada de registro de compilación completa y se mostrará el archivo afectado, una descripción del error (en este caso, falta un prefijo en pom.xml), y la línea y la columna del error.

    Captura de pantalla en la que se muestra la entrada de registro de compilación

Opciones de registro de imágenes

Cloud Functions (2nd gen) usa Artifact Registry de forma exclusiva 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.

Cloud Functions (1st gen) usa Container Registry de forma predeterminada, pero también te permite usar Artifact Registry. En Cloud Functions (1st gen), puedes crear o actualizar una función basada en Artifact Registry de la siguiente manera:

Console

  1. Ve a la página de Cloud Functions en Google Cloud Console:
    Ir a la página de Cloud Functions

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

  3. Haz clic en Edit.

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

  5. Haz clic en Security and Image Repo para abrir la pestaña de seguridad.

  6. En Repositorio de imágenes > Ubicación del contenedor, 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. Haga clic en Siguiente.

  9. Haga clic en Implementar.

gcloud

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

gcloud functions deploy 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 FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Para obtener información detallada sobre los precios, consulta Precios de Cloud 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 Functions la función 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 \
       --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 \
       --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.

    Cloud Console

    En la página Create function, en la sección Runtime, build and connections settings, selecciona la pestaña Build y, luego, ingresa PRIVATE_POOL_NAME en el cuadro de texto Build worker pools Selected environment, donde PRIVATE_POOL_NAME es la el nombre de tu grupo.

    Captura de pantalla de Cloud Console