En este instructivo, se demuestra cómo implementar una función de Pub/Sub mediante la carga de un archivo ZIP de código fuente de función a un bucket de Cloud Storage mediante Terraform para aprovisionar los recursos. Terraform es una herramienta de código abierto que te permite aprovisionar recursos de Google Cloud con archivos de configuración declarativos.
En este instructivo, se usa una función de Node.js como ejemplo, pero también se aplica a las funciones de Python, Go y Java. Las instrucciones son las mismas sin importar el entorno de ejecución que uses. Consulta las páginas de referencia de Hashicorp para obtener detalles sobre el uso de Terraform con la API de Cloud Functions v2.
Objetivos
- Aprende a usar Terraform para implementar una función de Pub/Sub.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
For details, see Cloud Run functions pricing.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Otorga
roles/run.invoker
yroles/cloudbuild.builds.builder
a la cuenta de servicio de procesamiento predeterminada. -
Prepara tu entorno de desarrollo.
Si ya tienes instalado gcloud CLI, ejecuta el siguiente comando para actualizarla:
gcloud components update
Configure su entorno
En este instructivo, ejecutarás comandos en Cloud Shell. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada, incluida Google Cloud CLI, y valores ya establecidos para el proyecto actual. La inicialización de Cloud Shell puede tomar varios minutos:
Prepara la aplicación
En Cloud Shell, sigue los siguientes pasos:
Clona el repositorio de la app de muestra en tu instancia de Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Ve al directorio que contiene el código de muestra de funciones de Cloud Run:
cd nodejs-docs-samples/functions/v2/helloPubSub/
La muestra de Node.js que se usa en este instructivo es una función “Hello World” básica de Pub/Sub.
Crea un archivo ZIP que contenga el código fuente de la función que Terraform subirá a un bucket de Cloud Storage:
zip -r function-source.zip .
Ten en cuenta que la raíz del archivo ZIP debe ser el directorio raíz del código fuente de la función, por lo que el comando anterior incluye los archivos dentro del directorio
helloworld
, pero no incluye el directorio en sí.
Crea tu archivo main.tf
En el directorio
nodejs-docs-samples/functions/
, crea un archivomain.tf
para la configuración de Terraform:touch main.tf
Copia esta configuración de Terraform en tu archivo
main.tf
:Edita el archivo
main.tf
a fin de asegurarte de que tenga los valores correctos para los siguientes elementos. Debes editar este archivo cada vez que cambie la configuración (por ejemplo, para usar un entorno de ejecución diferente o implementar una función diferente):- Entorno de ejecución: en este ejemplo, el entorno de ejecución es
nodejs16
. - Punto de entrada de la función: en este ejemplo, el punto de entrada de la función es
helloPubSub
. - Ruta al archivo ZIP: en este ejemplo, si colocaste el archivo
main.tf
en el directorionodejs-docs-samples/functions/
como se describió antes, la ruta es./v2/helloPubSub/function-source.zip
.
- Entorno de ejecución: en este ejemplo, el entorno de ejecución es
Inicialice Terraform
En Cloud Shell, ejecuta el siguiente comando para inicializar Terraform:
docker run -v $(pwd):/app -w /app hashicorp/terraform:0.12.0 init
Usa la imagen de Docker pública de Terraform. Docker ya está instalado en Cloud Shell. El directorio de trabajo actual se activa como un volumen para que el contenedor de Docker pueda leer el archivo de configuración de Terraform.
Ejecuta este comando para agregar los complementos necesarios y compilar el directorio
.terraform
:terraform init
Valida la configuración de Terraform
Obtén una vista previa de la configuración de Terraform. Este paso es opcional, pero te permite
verificar que la sintaxis de main.tf
sea correcta. Este comando muestra una vista previa de los recursos que se crearán:
terraform plan
Aplica la configuración de Terraform
Aplica la configuración para implementar la función. Cuando se te solicite, ingresa yes
:
terraform apply
Activa la función
Para probar la función de Pub/Sub, sigue estos pasos:
Publica un mensaje en el tema (en este ejemplo, el nombre del tema es
functions2-topic
):gcloud pubsub topics publish TOPIC_NAME --message="Friend"
Lee los registros de la función para ver el resultado, en el que
FUNCTION_NAME
es el nombre de tu función (en este ejemplo, el nombre de la función es solofunction
):gcloud beta functions logs read FUNCTION_NAME --gen2
Deberías ver un resultado de registro que incluya tu nuevo mensaje “Amigable”.
Realiza una limpieza
Después de completar el instructivo, puedes borrar todo lo que creaste para no incurrir en más costos.
Terraform te permite quitar todos los recursos definidos en el archivo de configuración mediante la ejecución del comando terraform destroy
:
terraform destroy
Ingresa yes
para permitir que Terraform borre tus recursos.