Este tutorial demonstra a utilização de funções do Cloud Run para implementar um comando de barra do Slack que pesquisa a API Google Knowledge Graph.
Objetivos
- Crie um comando com barra no Slack.
- Escrever e implementar uma função HTTP do Cloud Run.
- Pesquise a API Google Knowledge Graph através do comando de barra.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Antes de começar
- 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Prepare o ambiente de desenvolvimento.
- O utilizador executa o comando com barra
/kg <search_query>num canal do Slack. - O Slack envia a carga útil do comando para o ponto final do acionador da função.
- A função envia um pedido com a consulta de pesquisa do utilizador para a API Knowledge Graph.
- A API Knowledge Graph responde com todos os resultados correspondentes.
- A função formata a resposta numa mensagem do Slack.
- A função envia a mensagem de volta para o Slack.
- O utilizador vê a resposta formatada no canal do Slack.
Clone o repositório da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Ir
cd golang-samples/functions/slack/
Java
cd java-docs-samples/functions/slack/
Ruby
cd ruby-docs-samples/functions/slack/
Crie uma app Slack para alojar o seu comando com barra do Slack. Associá-lo a uma equipa do Slack na qual tenha autorizações para instalar integrações.
Aceda a Comandos com barra e clique no botão Criar novo comando.
Introduza
/kgcomo o nome do comando.Introduza o URL do comando:
Node.js
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kgSearch
Python
https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/kg_search
Ir
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
onde
YOUR_REGIONé a região onde a sua função está implementada eYOUR_PROJECT_IDé o ID do projeto do Cloud.Ambos os valores ficam visíveis no terminal quando a implementação da função estiver concluída.
Clique em Guardar.
Aceda a Informações básicas.
Clique em Instalar a app no seu espaço de trabalho e siga as instruções no ecrã para ativar a aplicação para o seu espaço de trabalho.
O seu comando com barra do Slack deve ficar online em breve.
Escreva o comando no seu canal do Slack:
/kg giraffe
Monitorize os registos para se certificar de que as execuções foram concluídas:
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.
Se já tiver a CLI gcloud instalada, atualize-a executando o seguinte comando:
gcloud components update
Visualizar o fluxo de dados
O fluxo de dados na aplicação do tutorial de comando com barra do Slack envolve vários passos:
Pode ser útil visualizar os passos:
Criar a chave da API Knowledge Graph
Na Google Cloud página de credenciais da consola, clique no botão Criar credenciais e selecione Chave de API. Lembre-se desta chave, uma vez que a vai usar para aceder à API Knowledge Graph na secção seguinte.
A preparar a função
Implementar a função
Para implementar a função que é executada quando faz (ou o Slack faz) um pedido HTTP POST para o ponto final da função, execute o seguinte comando no diretório que contém o código de exemplo (ou o ficheiro pom.xml para Java):
Substitua YOUR_SLACK_SIGNING_SECRET pelo segredo de assinatura fornecido pelo Slack na página Informações básicas da configuração da sua app e YOUR_KG_API_KEY pela chave da API Knowledge Graph que criou anteriormente.
Node.js
gcloud functions deploy kgSearch \ --runtime nodejs22 \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET,KG_API_KEY=YOUR_KG_API_KEY" \
--allow-unauthenticated
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão suportada do Node.js para executar
a sua função.
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
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Python suportada para executar
a sua função.
Ir
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
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Go suportada para executar
a sua função.
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
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão Java suportada para executar
a sua função.
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
Use a flag --runtime
para especificar o ID de tempo de execução de uma
versão do Ruby suportada para executar
a sua função.
Configurar a aplicação
Depois de implementar a função, tem de criar um comando de barra do Slack que envia a consulta para a sua função sempre que o comando é acionado:
Compreender o código
Importar dependências
A aplicação tem de importar várias dependências para comunicar com os serviços da Google Cloud Platform:
Node.js
Python
Ir
Java
Ruby
Receber o webhook
A seguinte função é executada quando faz (ou o Slack faz) um pedido HTTP POST para o ponto final da função:
Node.js
Python
Ir
Java
Ruby
A função seguinte autentica o pedido recebido validando o cabeçalho X-Slack-Signature fornecido pelo Slack:
Node.js
Python
Ir
Java
Ruby
Consultar a API Knowledge Graph
A função seguinte envia um pedido com a consulta de pesquisa do utilizador para a API Knowledge Graph:
Node.js
Python
Ir
Java
Ruby
Formatar a mensagem do Slack
Por último, a função seguinte formata o resultado do gráfico de conhecimentos numa mensagem do Slack com formatação avançada que é apresentada ao utilizador:
Node.js
Python
Ir
Java
Ruby
Tempos limite da API Slack
A API Slack espera que a sua função responda no prazo de 3 segundos após receber um pedido de webhook.
Normalmente, os comandos neste tutorial demoram menos de 3 segundos a responder. Para comandos de execução mais longa, recomendamos que configure uma função para enviar pedidos
(incluindo o respetivo response_url)
para um tópico do Pub/Sub que atue como uma fila de tarefas.
Em seguida, pode criar uma segunda função acionada pelo Pub/Sub
que processa essas tarefas e envia os resultados de volta para o response_url do Slack.
Usar o comando com barra
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Eliminar o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
Eliminar a função
Para eliminar a função implementada neste tutorial, execute o seguinte comando:
Node.js
gcloud functions delete kgSearch
Python
gcloud functions delete kg_search
Ir
gcloud functions delete KGSearch
Java
gcloud functions delete java-slack-function
Ruby
gcloud functions delete kg_search
Também pode eliminar funções do Cloud Run a partir da Google Cloud consola.