Implementa desde tu máquina local

En esta página, se muestra cómo implementar una función de Cloud Functions desde tu máquina local con la herramienta de línea de comandos de gcloud. Cuando usas la herramienta de línea de comandos, Cloud Functions empaqueta y sube el contenido del directorio de la función a un bucket de Cloud Storage y excluye de forma automática los archivos innecesarios mediante el archivo .gcloudignore.

De manera alternativa, puedes usar la interfaz de Cloud Functions en Cloud Console para subir un archivo ZIP creado por ti.

Para ver un ejemplo completo ejecutable que incluya código de muestra descargable, consulta la guía de inicio rápido Usa la herramienta de línea de comandos de gcloud.

Implementa mediante la herramienta de gcloud

Con la herramienta de línea de comandos de gcloud, implementa la función desde el directorio que contiene el código de función con el comando gcloud functions deploy:

gcloud functions deploy NAME --entry-point ENTRY-POINT --runtime RUNTIME TRIGGER [FLAGS...]

Consulta los argumentos de este comando y ten en cuenta la terminología que se analiza en Conceptos básicos:

Argumento Descripción
NAME El nombre registrado de la función de Cloud Functions que estás implementando. NAME solo puede contener letras, números, guiones bajos y guiones. NAME puede ser el nombre de una función en tu código fuente o una string personalizada (por ejemplo, my-http-function). Si usas una string personalizada, también debes usar la marca --entry-point para especificar una función contenida en tu código y decirle al comando deploy qué función ejecutar.
--entry-point ENTRY-POINT El nombre de una función o clase en tu código fuente. Esta marca tiene dos usos principales:
  • Puedes usarla en lugar de NAME cuando las funciones de tu código fuente no cumplen con los requisitos de nombre de Cloud Functions. Por ejemplo, si especificas un nombre de clase completamente calificado (FQN) para Java que contiene puntos (no permitido en NAME), debes usar esta marca.
  • Si solo quieres que tu NAME registrado sea diferente del nombre de la función ejecutada. Si no usas esta marca, eso significa que NAME debe especificar la función en tu código fuente que se ejecutará durante la implementación. Tu nombre registrado tendrá el mismo nombre que la función.
--runtime RUNTIME El nombre del entorno de ejecución que usas. Para obtener una lista completa, consulta la referencia de gcloud. Ten en cuenta que debes incluir esta marca la primera vez que implementes una función, pero puedes omitirla en implementaciones posteriores.
TRIGGER El tipo de activador para esta función (consulta Eventos y activadores). Estas son las reglas para especificar los activadores cuando se implementa una función:
  • Si no especificas un activador cuando implementas una actualización en una función existente, esta conservará el activador actual.
  • Cuando implementas una función nueva, debes especificar uno de --trigger-http, --trigger-topic o --trigger-bucket, o bien especificar --trigger-event Y --trigger-resource. Usas el marcador --trigger-http para implementar funciones de HTTP. Usas otras marcas para implementar funciones controladas por eventos.
FLAGS... Marcas adicionales que puedes especificar durante la implementación, como --stage-bucket o --source (opcional). Para obtener una referencia completa, consulta la documentación de gcloud functions deploy.

Cada entorno de ejecución tiene requisitos específicos de estructuración de archivos para que Cloud Functions pueda encontrar la definición de tu función.

Ejemplo de función de HTTP

Existen estos tres tipos de funciones de Cloud Functions: funciones de HTTP, funciones en segundo plano y funciones de CloudEvent. Para ver un ejemplo que muestre cómo implementar una función controlada por eventos, consulta el Ejemplo de función controlada por eventos.

Ejemplo de Java

En el siguiente ejemplo, se implementa una función de HTTP escrita en Java y se le asigna un activador mediante la marca --trigger-http:

gcloud functions deploy my-java-function --entry-point com.example.MyFunction --runtime java11 --trigger-http --allow-unauthenticated

Ve los argumentos de este comando:

Argumento Descripción
my-java-function El nombre registrado de la función de Cloud Functions que estás implementando, en este caso my-java-function. Este es un nombre personalizado que proporcionas. Solo puede contener letras, números, guiones bajos y guiones.
--entry-point El nombre de un nombre de clase de Java completamente calificado en tu código fuente, en este ejemplo, com.example.MyFunction.
--runtime java11 El entorno de ejecución para esta función, en este caso java11.
--trigger-http El tipo de activador para esta función, en este caso, una solicitud HTTP (webhook).
--allow-unauthenticated Especifica que la función no requiere autenticación para invocar. De forma predeterminada, las funciones de HTTP requieren autenticación. Si no incluyes esta marca la primera vez que implementas una función de HTTP, se te solicitará que permitas las invocaciones no autenticadas. No se te solicitarán invocaciones posteriores.

Ejemplo de Python

La sintaxis es la misma cuando se usa la marca --entry-point para implementar una función HTTP que no es de Java. En este ejemplo, el nombre registrado es my-python-function y la función es helloworld:

gcloud functions deploy my-python-function --entry-point helloworld --runtime python37 --trigger-http --allow-unauthenticated

Si ejecutas el mismo comando, pero sin la marca entry-point, el campo NAME (nombre registrado) debe ser una función en tu código fuente (en este ejemplo, helloworld):

gcloud functions deploy helloworld --runtime python37 --trigger-http --allow-unauthenticated

Ejemplo de función controlada por eventos

En el siguiente ejemplo, se implementa una función controlada por eventos escrita en Node.js 12 y que Cloud Storage activará.

gcloud functions deploy helloGCS --runtime nodejs12 --trigger-resource TRIGGER_BUCKET_NAME --trigger-event google.storage.object.finalize

Ve los argumentos de este comando:

Argumento Descripción
helloGCS El nombre registrado de la función de Cloud Functions que estás implementando, en este caso helloGCS. Debido a que el comando no usa la marca --entry-point, este debe ser el nombre de la función en tu código fuente que se ejecutará durante la implementación.
--runtime nodejs12 El entorno de ejecución para esta función, en este caso nodejs12.
--trigger-resource El recurso activador de esta función. El recurso activador especifica el recurso para el cual se observa el evento activador. En este caso, el recurso es el nombre (TRIGGER_BUCKET_NAME) del bucket de Cloud Storage que activa la función.
--trigger-event El evento activador de esta función, que especifica qué acción debería activar la función. En este caso, el evento es google.storage.object.finalize.

Usar las marcas --trigger-resource MY_RESOURCE y --trigger-event MY_EVENT es la forma más explícita de especificar un activador para una función controlada por eventos. Sin embargo, gcloud proporciona abreviaturas para Pub/Sub y Cloud Storage:

  • Cuando implementas funciones que tienen asignados activadores de Pub/Sub, puedes usar la marca --trigger-topic MY_TOPIC. Este marca es una abreviatura de --trigger-resource MY_TOPIC --trigger-event google.pubsub.topic.publish.

  • Cuando implementes funciones a las que se les asignaron activadores de Cloud Storage, puedes usar el marcador --trigger-bucket MY_STORAGE_BUCKET para activar la ejecución de la función cuando cambien los archivos en el bucket especificado.

Próximos pasos