En este tutorial se describe cómo utilizar funciones de Cloud Run para implementar un comando de barra diagonal de Slack que haga búsquedas en la API Knowledge Graph de Google.
Objetivos
- Crea un comando de barra diagonal en Slack.
- Escribe y despliega una función HTTP de Cloud Run.
- Buscar en la API Knowledge Graph de Google con el comando de barra inclinada.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, and Google Knowledge Graph Search APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, and Google Knowledge Graph Search APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Prepara tu entorno de desarrollo.
- El usuario ejecuta el comando de barra
/kg <search_query>
en un canal de Slack. - Slack envía la carga útil del comando al endpoint del activador de la función.
- La función envía una solicitud con la consulta de búsqueda del usuario a la API Knowledge Graph.
- La API Knowledge Graph responde con los resultados coincidentes.
- La función da formato a la respuesta como un mensaje de Slack.
- La función envía el mensaje de vuelta a Slack.
- El usuario ve la respuesta formateada en el canal de Slack.
Clona el repositorio de aplicaciones de muestra en la máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo de Cloud Run Functions:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/slack/
Java
cd java-docs-samples/functions/slack/
Ruby
cd ruby-docs-samples/functions/slack/
Crea una aplicación de Slack para alojar tu comando de barra diagonal de Slack. Asóciala a un equipo de Slack en el que tengas permisos para instalar integraciones.
Ve a Comandos de barra y haz clic en el botón Crear comando.
Introduce
/kg
como nombre del comando.Introduce la URL del comando:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Go
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/KGSearch
Java
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/java-slack-function
Ruby
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
donde
YOUR_REGION
es la región en la que se ha desplegado tu función yYOUR_PROJECT_ID
es el ID de tu proyecto de Cloud.Ambos valores se mostrarán en tu terminal cuando termine de implementarse la función.
Haz clic en Guardar.
Ve a Información básica.
Haz clic en Instalar la aplicación en tu espacio de trabajo y sigue las instrucciones que aparecen en pantalla para habilitar la aplicación en tu espacio de trabajo.
Tu comando de barra diagonal de Slack debería estar disponible en breve.
Escribe el comando en tu canal de Slack:
/kg giraffe
Consulta los registros para asegurarte de que las ejecuciones se han completado:
gcloud functions logs read --limit 100
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Si ya tienes instalada la CLI de gcloud, actualízala ejecutando el siguiente comando:
gcloud components update
Visualizar el flujo de datos
El flujo de datos de la aplicación del tutorial de comandos de barra inclinada de Slack consta de varios pasos:
Puede ser útil visualizar los pasos:
Crear la clave de API Knowledge Graph
En la Google Cloud página Credenciales de la consola, haz clic en el botón Crear credenciales y selecciona Clave de API. Recuerda esta clave, ya que la usarás para acceder a la API Knowledge Graph en la siguiente sección.
Preparando la función
Desplegar la función
Para desplegar la función que se ejecuta cuando tú (o Slack) haces una solicitud HTTP POST al endpoint de la función, ejecuta el siguiente comando en el directorio que contiene el código de ejemplo (o el archivo pom.xml
en el caso de Java):
Sustituye YOUR_SLACK_SIGNING_SECRET
por el secreto de firma que te proporciona Slack en la página Información básica de la configuración de tu aplicación y YOUR_KG_API_KEY
por la clave de la API Knowledge Graph que has creado anteriormente.
Node.js
gcloud functions deploy kgSearch \ --runtime nodejs20 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID del entorno de ejecución de una
versión compatible de Node.js para ejecutar
tu función.
Python
gcloud functions deploy kg_search \ --runtime python312 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID de tiempo de ejecución de una
versión de Python compatible para ejecutar
tu función.
Go
gcloud functions deploy KGSearch \ --runtime go121 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID de tiempo de ejecución de una versión de Go compatible para ejecutar tu función.
Java
gcloud functions deploy java-slack-function \ --entry-point functions.SlackSlashCommand \ --runtime java17 \ --memory 512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID de tiempo de ejecución de una
versión de Java compatible para ejecutar
tu función.
Ruby
gcloud functions deploy kg_search --runtime ruby33 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
Usa la marca --runtime
para especificar el ID de tiempo de ejecución de una
versión de Ruby compatible para ejecutar
tu función.
Configurar la aplicación
Una vez que se haya implementado la función, debes crear un comando de barra inclinada de Slack que envíe la consulta a tu función cada vez que se active el comando:
Información sobre el código
Importar dependencias
La aplicación debe importar varias dependencias para comunicarse con los servicios de Google Cloud Platform:
Node.js
Python
Go
Java
Ruby
Recibir el webhook
La siguiente función se ejecuta cuando tú (o Slack) haces una solicitud HTTP POST al endpoint de la función:
Node.js
Python
Go
Java
Ruby
La siguiente función autentica la solicitud entrante verificando el encabezado X-Slack-Signature
proporcionado por Slack:
Node.js
Python
Go
Java
Ruby
Consultar la API Knowledge Graph
La siguiente función envía una solicitud con la consulta de búsqueda del usuario a la API Knowledge Graph:
Node.js
Python
Go
Java
Ruby
Dar formato al mensaje de Slack
Por último, la siguiente función da formato al resultado de Knowledge Graph para convertirlo en un mensaje de Slack con formato enriquecido que se mostrará al usuario:
Node.js
Python
Go
Java
Ruby
Tiempos de espera de la API de Slack
La API de Slack espera que tu función responda en un plazo de 3 segundos tras recibir una solicitud de webhook.
Los comandos de este tutorial suelen tardar menos de 3 segundos en responder. En el caso de los comandos de larga duración, te recomendamos que configures una función para enviar solicitudes (incluidas sus response_url
) a un tema de Pub/Sub que actúe como cola de tareas.
A continuación, puedes crear una segunda función activada por Pub/Sub que procese esas tareas y envíe los resultados a la response_url
de Slack.
Usar el comando de barra inclinada
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
Eliminar la función
Para eliminar la función que has desplegado en este tutorial, ejecuta el siguiente comando:
Node.js
gcloud functions delete kgSearch
Python
gcloud functions delete kg_search
Go
gcloud functions delete KGSearch
Java
gcloud functions delete java-slack-function
Ruby
gcloud functions delete kg_search
También puedes eliminar funciones de Cloud Run desde la Google Cloud consola.