Implementa una Cloud Function

En esta guía, se muestra cómo implementar una Cloud Function a partir del código fuente.

El proceso de implementación toma tu código fuente y tu configuración y compila una imagen ejecutable que Cloud Functions administra de forma automática para controlar las solicitudes a tu función.

Conceptos básicos de la implementación

Los usuarios que implementan Cloud Functions deben tener el rol de IAM Cloud Functions Developer o una función que incluya los mismos permisos. Consulta también Configuración adicional para la implementación.

Selecciona una pestaña a fin de obtener instrucciones para implementar una función con la CLI de gcloud o la consola de Google Cloud.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Usa el comando gcloud functions deploy para implementar una función:

    gcloud functions deploy YOUR_FUNCTION_NAME \
    [--gen2] \
    --region=YOUR_REGION \
    --runtime=YOUR_RUNTIME \
    --source=YOUR_SOURCE_LOCATION \
    --entry-point=YOUR_CODE_ENTRYPOINT \
    TRIGGER_FLAGS
    

    El primer argumento, YOUR_FUNCTION_NAME, es un nombre para tu función implementada. El nombre de la función debe comenzar con una letra seguida de un máximo de 62 letras, números, guiones o guiones bajos, y debe terminar con una letra o un número.

    • La marca --gen2 especifica que deseas implementar en Cloud Functions (2nd gen). Esta marca es necesaria para la implementación inicial de una función de segunda generación. Consulta Comparación de versiones de Cloud Functions para ver una comparación de Cloud Functions (1st gen) y Cloud Functions (2nd gen).

    • La marca --region especifica la región en la que se implementará la función. Consulta Ubicaciones para obtener una lista de regiones compatibles con Cloud Functions.

    • La marca --runtime especifica el entorno de ejecución de lenguaje que usa tu función. Cloud Functions admite varios entornos de ejecución. Consulta Entornos de ejecución para obtener más información.

    • La marca --source especifica la ubicación del código fuente de tu función. Consulta las siguientes secciones para obtener más detalles:

    • La marca --entry-point especifica el punto de entrada a tu función en tu código fuente. Este es el código que se ejecutará cuando se ejecute tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completamente calificado que exista en tu código fuente. Consulta Punto de entrada de la función para obtener más información.

    • Para especificar el activador de tu función, se requieren marcas adicionales (representadas como TRIGGER_FLAGS en el ejemplo anterior), según el activador que deseas usar:

    Marcas del activador Descripción del activador
    --trigger-http Activa la función con una solicitud HTTP(S). Para obtener más información, consulta Activadores HTTP.
    --trigger-topic=YOUR_PUBSUB_TOPIC Activa la función cuando se publica un mensaje en el tema de Pub/Sub especificado. Consulta Activadores de Pub/Sub para obtener más información.
    --trigger-bucket=YOUR_STORAGE_BUCKET Activa la función cuando se crea o reemplaza un objeto en el bucket de Cloud Storage especificado. Para obtener más información, consulta Activadores de Cloud Storage.
    --trigger-event-filters=EVENTARC_EVENT_FILTERS (Solo 2ª gen.) Activa la función con Eventarc cuando se produce un evento que coincide con los filtros especificados. Requiere que se especifique la marca --gen2. Consulta Activadores de Eventarc para obtener más información y opciones adicionales.
    --trigger-event=EVENT_TYPE
    [--trigger-resource=RESOURCE]
    (Solo 1ª gen.) Activa la función cuando se produce el evento especificado. Especificar un recurso es obligatorio para algunos tipos de eventos. Para obtener más información, consulta Activadores admitidos en Cloud Functions (1st gen).

    De manera opcional, puedes especificar opciones adicionales de configuración, herramientas de redes y seguridad cuando implementes una función.

    Para obtener una referencia completa del comando de implementación y sus marcas, consulta la documentación de gcloud functions deploy.

    Para ver algunos ejemplos de comandos de implementación, consulta Ejemplos de línea de comandos.

Consola

  1. Ve a la página de Descripción general de Cloud Functions en la consola de Google Cloud:

    Ir a Cloud Functions

    Asegúrate de que el proyecto de Google Cloud en el que deseas implementar Cloud Functions esté seleccionado.

  2. Haga clic en Crear función.

  3. En el campo Entorno, selecciona 1st gen o 2nd gen. Consulta Comparación de versiones de Cloud Functions para ver una comparación de Cloud Functions (1st gen) y Cloud Functions (2nd gen).

  4. En el campo Nombre de la función, ingresa un nombre para tu función. El nombre de la función debe comenzar con una letra seguida de un máximo de 62 letras, números, guiones o guiones bajos, y debe terminar con una letra o un número.

  5. En el campo Región, selecciona una región para implementar tu función.

  6. En la sección Activador, sigue los pasos según el entorno seleccionado:

    • 1st gen
      1. En la sección Autenticación de HTTPS, selecciona la opción adecuada según si deseas permitir invocaciones no autenticadas de tu función. De forma predeterminada, se requiere autenticación. Consulta Autentica para la invocación a fin de obtener más información.
      2. En el campo Tipo de activador, selecciona un tipo de activador. Para obtener más detalles, consulta Activadores admitidos en Cloud Functions (1st gen).
      3. Completa los campos adicionales para el tipo de activador seleccionado.
      4. Haz clic en Guardar.
    • 2nd gen
      1. En el campo Tipo de activador, selecciona el activador que deseas usar:
        • Para un activador HTTPS, selecciona la opción adecuada según si deseas permitir invocaciones no autenticadas de tu función. Cada función de 2ª gen. tiene un extremo para activadores HTTP(S). De forma predeterminada, se requiere autenticación. Consulta Autentica para la invocación a fin de obtener más información.
        • Para una función controlada por eventos, elige una de las siguientes opciones: Cloud Pub/Sub, Cloud Storage, Cloud Firestore u Otro activador. Consulta Activadores de Eventarc para obtener más información.
        • Una vez que hayas completado los campos obligatorios, haz clic en Guardar activador.
  7. De forma opcional, expande la sección Entorno de ejecución, compilación… al final de la página para obtener opciones adicionales de configuración y seguridad.

  8. Haz clic en Siguiente para avanzar al paso Código.

  9. En el campo Entorno de ejecución, selecciona el entorno de ejecución de lenguaje que usa tu función. Cloud Functions admite varios entornos de ejecución. Consulta Entornos de ejecución para obtener más información.

  10. En el campo Punto de entrada, ingresa el punto de entrada a la función en tu código fuente. Este es el código que se ejecutará cuando se ejecute tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completamente calificado que exista en tu código fuente. Consulta Punto de entrada de la función para obtener más información.

  11. En el campo Código fuente, selecciona la opción adecuada para el modo en que proporcionarás el código fuente de la función. Consulta las siguientes secciones para obtener más detalles.

  12. Haz clic en Implementar.

Cuando la implementación finaliza correctamente, las funciones aparecen con una marca de verificación verde en la página de descripción general de Cloud Functions en la consola de Google Cloud:

Funciones implementadas en la consola de Cloud

La implementación inicial de una función puede tardar varios minutos, mientras se aprovisiona la infraestructura subyacente. Volver a implementar una función existente es más rápido, y el tráfico entrante se migra automáticamente a la versión más reciente.

Implementa desde tu máquina local

En esta sección, se describe cómo implementar una función desde el código fuente ubicado en tu máquina local.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Sigue las instrucciones de implementación anteriores con el comando gcloud functions deploy.

    Para la marca --source, especifica una ruta de sistema de archivos local al directorio raíz del código fuente de la función. Consulta Estructura del directorio fuente. Si se omite esta marca, se usa el directorio de trabajo actual.

    De forma opcional, también puedes usar la marca --stage-bucket para especificar un bucket de Cloud Storage a fin de subir el código fuente como parte de la implementación.

    Durante la carga de tu código fuente, Cloud Functions excluye archivos innecesarios mediante el archivo .gcloudignore.

Consola

  1. Sigue las instrucciones de implementación anteriores con la consola de Google Cloud hasta llegar al campo Código fuente.
  2. En el campo Código fuente, selecciona Carga de ZIP.
  3. En el campo Bucket de destino en etapa intermedia, haz clic en Explorar para seleccionar un bucket de Cloud Storage para subir tu código fuente como parte de la implementación.
  4. En el campo Archivo ZIP, haz clic en Explorar para seleccionar un archivo ZIP para subirlo desde tu sistema de archivos local. Los archivos fuente de tu función deben estar ubicados en la raíz del archivo ZIP; consulta Estructura del directorio del código fuente.
  5. Haz clic en Implementar.

Implementa desde Cloud Storage

En esta sección, se describe cómo implementar una función desde un código fuente ubicado en un bucket de Cloud Storage. El código fuente debe empaquetarse como un archivo ZIP.

Para que Cloud Functions lea desde un bucket de Cloud Storage, asegúrate de que el agente de implementación tenga el permiso storage.objects.get:

  • En Cloud Functions (1ª gen.), debes otorgar este permiso a la cuenta que realiza la implementación.
  • En Cloud Functions (2nd gen), el agente de servicio de Cloud Functions necesita este permiso. Si el bucket de origen está en el mismo proyecto que tu función, se otorga de forma automática. Si el bucket está en un proyecto diferente, debes otorgarlo al agente de servicio de forma manual.

Consulta Usa permisos de IAM en la documentación de Cloud Storage para obtener información sobre cómo controlar el acceso a los buckets.

Con este permiso, puedes implementar una función desde Cloud Storage:

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Sigue las instrucciones de implementación anteriores con el comando gcloud functions deploy.

    Para la marca --source, especifica una ruta de Cloud Storage que comience con gs://. El objeto en la ruta de acceso debe ser un archivo ZIP que contenga el código fuente de la función. Los archivos fuente de tu función deben estar ubicados en la raíz del archivo ZIP; consulta Estructura del directorio del código fuente.

Consola

  1. Sigue las instrucciones de implementación anteriores con la consola de Google Cloud hasta llegar al campo Código fuente.
  2. En el campo Código fuente, selecciona ZIP de Cloud Storage.
  3. En el campo Ubicación de Cloud Storage, haz clic en Explorar para seleccionar un archivo ZIP de Cloud Storage. Los archivos fuente de tu función deben estar ubicados en la raíz del archivo ZIP; consulta Estructura del directorio del código fuente.
  4. Haz clic en Implementar.

Implementa desde un repositorio de código fuente

En esta sección, se describe cómo implementar una función desde un código fuente ubicado en Cloud Source Repositories. La implementación desde Cloud Source Repositories también te permite implementar código alojado en un repositorio de GitHub o Bitbucket.

Antes de implementar código desde Cloud Source Repositories, debes configurar un repositorio y, de forma opcional, conectarlo a tu repositorio de GitHub o Bitbucket.

Para que Cloud Functions lea desde un repositorio de código fuente, el agente de servicio de Cloud Functions necesita el rol de IAM de Source Repository Reader (roles/source.reader) en el repositorio. Si tu repositorio de código fuente se encuentra en el mismo proyecto que tu función, este permiso se incluye automáticamente. Si el repositorio de código fuente está en un proyecto diferente, debes otorgar el permiso de forma manual.

Luego, puedes implementar una función desde el repositorio:

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Sigue las instrucciones de implementación anteriores con el comando gcloud functions deploy.

    Para la marca --source, especifica una referencia del repositorio de código fuente a la ubicación del código fuente de tu función. Consulta Estructura del directorio del código fuente. La referencia más básica para Cloud Source Repositories tiene el siguiente formato:

    https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_NAME
    

    En la ruta de acceso anterior, PROJECT_ID es el ID de tu proyecto de Google Cloud y REPOSITORY_NAME es el nombre de tu repositorio de código fuente. Con esta ruta de acceso, se usará el código fuente del directorio raíz del repositorio en la revisión etiquetada como master.

    Para implementar desde una revisión que no sea master, agrega una de las siguientes opciones a la ruta de acceso anterior:

    • /revisions/REVISION_NAME
    • /moveable-aliases/MOVEABLE_ALIAS
    • /fixed-aliases/FIXED_ALIAS

    Para implementar código fuente desde un directorio que no sea la raíz del repositorio, especifica una revisión, un alias móvil o un alias fijo como se indicó antes y agrega /paths/PATH_TO_YOUR_SOURCE_DIRECTORY a la ruta de acceso.

Consola

  1. Sigue las instrucciones de implementación anteriores con la consola de Google Cloud hasta llegar al campo Código fuente.
  2. En el campo Código fuente, selecciona Repositorio de Cloud Source.
  3. En el campo Repositorio, ingresa el nombre de tu repositorio de código fuente.
  4. En el campo Rama / etiqueta, selecciona Rama o Etiqueta según la ubicación desde la que desees realizar la implementación.
  5. Ingresa el nombre de la rama o de la etiqueta cuando se indique.
  6. En el campo Directorio con código fuente, ingresa la ruta de acceso al directorio en tu repositorio que contiene el código fuente de tu función. Consulta Estructura del directorio del código fuente.
  7. Haz clic en Implementar.

Implementa desde el editor directo de la consola de Google Console

En esta sección, se describe cómo escribir e implementar una función directamente desde la consola de Google Cloud con el editor directo proporcionado.

  1. Sigue las instrucciones de implementación anteriores con la consola de Google Cloud hasta llegar al campo Código fuente.
  2. En el campo Código fuente, selecciona Editor directo.
  3. Usa el editor proporcionado para crear o editar archivos fuente según sea necesario. Consulta Estructura del directorio del código fuente.
    • El panel izquierdo muestra los archivos fuente y te permite crear, borrar y cambiar el nombre de los archivos.
    • El panel derecho es un editor de texto que te permite editar el contenido de los archivos.
  4. Haz clic en Implementar.

Ejemplos de la línea de comandos

En esta sección, se muestran los comandos de implementación para algunas situaciones de implementación de ejemplo.

Para obtener más detalles sobre activadores diferentes que admite Cloud Functions, consulta Activadores de Cloud Functions.

Función HTTP del código fuente local

Supongamos que tienes una función HTTP como la siguiente:

  • La función usa Node.js 16
  • El código fuente se encuentra en el directorio de trabajo actual (.).
  • El punto de entrada en el código se llama myHttpFunction.

Para implementar la función en Cloud Functions (2nd gen) con el nombre my-http-function en la región us-central1, usa el siguiente comando:

gcloud functions deploy my-http-function \
  --gen2 \
  --region=us-central1 \
  --runtime=nodejs16 \
  --source=. \
  --entry-point=myHttpFunction \
  --trigger-http

Función de Pub/Sub del código fuente en Cloud Storage

Supongamos que tienes una función controlada por eventos como la siguiente:

  • La función controla los eventos de publicación de mensajes de Pub/Sub.
  • La función usa Python 3.9.
  • El código fuente se encuentra en Cloud Storage, en la ruta. gs://my-bucket/my_function_source.zip
  • El punto de entrada en el código se llama pubsub_handler.

Para implementar la función en Cloud Functions (2nd gen.) con el nombre my-pubsub-function en la región europe-west1 y hacer que la función se active con mensajes en el tema de Pub/Sub my-topic, usa el siguiente comando:

gcloud functions deploy my-pubsub-function \
  --gen2 \
  --region=europe-west1 \
  --runtime=python39 \
  --source=gs://my-bucket/my_function_source.zip \
  --entry-point=pubsub_handler \
  --trigger-topic=my-topic

Función de Cloud Storage desde el código fuente local

Supongamos que tienes una función controlada por eventos como la siguiente:

  • La función controla los eventos de eliminación de objetos de Cloud Storage.
  • La función usa Java 11.
  • El código fuente se encuentra en la ruta ./functions/storage-function de forma local.
  • El punto de entrada en el código se llama myproject.StorageFunction.

Para implementar la función en Cloud Functions (2nd gen) con el nombre my-storage-function en la región asia-northeast1 y hacer que la función se active con eventos en el bucket de Cloud Storage my-bucket, usa el siguiente comando:

gcloud functions deploy my-storage-function \
  --gen2 \
  --region=asia-northeast1 \
  --runtime=java11 \
  --source=./functions/storage-function \
  --entry-point=myproject.StorageFunction \
  --trigger-event-filters="type=google.cloud.storage.object.v1.deleted" \
  --trigger-event-filters="bucket=my-bucket"

Próximos pasos