Resolver problemas com o Gemini CodeLab

1. Introdução

Neste laboratório, você vai usar o Gemini, um colaborador com tecnologia de IA no Google Cloud, para resolver um problema com a implantação do Cloud Functions. Para isso, você vai analisar registros de erros, identificar a causa principal do problema e descobrir como corrigi-lo.

O que você vai fazer…

  • Você vai usar o terminal do Cloud Shell e a CLI gcloud para configurar o ambiente, incluindo a ativação das APIs do Google relevantes e a criação de uma função do Cloud com o código fornecido.
  • Você vai usar o resumo de registros do Cloud Logging para gerar resumos e entender as informações capturadas.
  • Você vai conversar com o Gemini para receber ajuda na solução de problemas.

O que você vai aprender…

  • Como usar o Gemini com o Google Cloud Observability e para solucionar problemas.
  • Como encontrar e entender os registros do Cloud Functions com a ajuda do Gemini.

O que é necessário…

  • Navegador da Web Google Chrome
  • Tenha um projeto do Google Cloud com o faturamento ativado.
  • Uma Conta do Google com permissões de acesso ao projeto, permitindo que você ative APIs e manipule recursos

Este laboratório é voltado para engenheiros de DevOps e de plataforma e desenvolvedores de software de todos os níveis, inclusive iniciantes. Nosso foco será adquirir experiência prática com os recursos do Gemini na solução de problemas.

2. Configuração

Nesta seção, você vai encontrar tudo o que precisa fazer para começar o laboratório.

Configurar ambiente

1. Faça login no console do Cloud em https://console.cloud.google.com.

2. Selecione um projeto na nuvem do Google Cloud com que você vai trabalhar neste laboratório.

22170459a4f3ba59.png

3. Abra a página do Cloud Functions no console. Para isso, selecione "Cloud Functions" no menu de navegação (ícone ☰ no canto superior esquerdo da janela do console).

9d27c844c16ad3e4.png

Se preferir, pesquise "Cloud Functions" na área de pesquisa do console:

35f23e52875b26cd.png

Clique no botão "Criar função" na parte de cima da lista de funções. 34b5e7e36f4e48e9.png

Se você não usou o Cloud Functions neste projeto antes, será necessário ativar as APIs do Google para trabalhar.

5b7978521d6f56f7.png

Clique em ATIVAR para continuar.

4. Defina as propriedades básicas da nova função do Cloud.

  • Defina o nome como "codelab-cf"
  • Selecione a opção Permitir invocações não autenticadas.

6a2aaf9bedd161d9.png

Para concluir a etapa, clique no botão "PRÓXIMA" na parte inferior esquerda da janela:

f4e76470dbdf6854.png

Depois de clicar em PRÓXIMA, talvez você precise ativar outras APIs do Google. Como na etapa 4, clique em ATIVAR.

1ad7bf15c07eda49.png

Configurar o ambiente de execução e o código da função do Cloud

Este codelab usa Python como linguagem de programação. Não se preocupe se você não conhece o Python. Para concluir este codelab, não é necessário ter conhecimento de Python.

5. Selecione Python 3.11 como o ambiente de execução da função.

9a3cd8bf272b4d02.png

A mudança de tempo de execução altera o código-fonte mostrado no Editor in-line.

6. Copie o código abaixo no Editor in-line para modificar o exemplo de guia de início rápido gerado automaticamente.

from google.cloud import storage
import json
import re

client = storage.Client()

def get_object_list(request):
    if request.args and 'path' in request.args:
        path = request.args['path']
    else:
        return '{}'
    parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
    bucket, prefix = parsed.group(1), parsed.group(2)
    blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
    objects = []
    if (blobs):
        for blob in blobs:
            objects.append(blob.name)
    return json.dumps(objects)

Esse código lê o atributo path da solicitação GET, analisa o caminho para coletar o nome do bucket e chama a API Storage do Google Cloud para receber uma lista de objetos armazenados nesse caminho. A função (get_object_list) aceita uma solicitação, que é um objeto Flask, como argumento de entrada e retorna os nomes dos objetos como uma matriz JSON.

7. Selecione o arquivo requirements.txt na lista de arquivos restantes no Editor inline. Substitua a lista atual de dependências pela nova copiando o código abaixo no editor inline.

google-cloud-storage

8. Para implantar a Função do Cloud, clique em IMPLANTAR na parte de baixo à esquerda.

17c4828702a32cd9.png

Talvez seja necessário aguardar alguns minutos até que o processo de implantação seja concluído. Se você seguiu as instruções de configuração corretamente, a implantação vai aparecer como falha.

3. Como encontrar e resolver o problema

Nesta seção, você vai usar o recurso de explicações de registros e outras ferramentas de assistência do Gemini para identificar o problema e a maneira de resolvê-lo.

1. A implantação falha. Uma mensagem de erro vai aparecer informando sobre isso, com mais informações e uma opção para ver os registros de implantação. Clique em "MOSTRAR REGISTROS" para conferir os registros da implantação.

bc62db6ef3b35420.png

OBSERVAÇÃO: os registros de implantação serão abertos em uma guia separada no mesmo navegador. Você vai precisar navegar entre as guias para concluir este codelab.

OBSERVAÇÃO: talvez você não veja linhas de registro ao clicar em MOSTRAR REGISTROS ou veja apenas algumas linhas. Nesse caso, use o seletor de período no painel de consultas do Explorador de registros e selecione Últimos 30 minutos.

e24856920201ebf8.png

2. Revise os registros na guia aberta. Os resumos de registros parecem várias linhas do callstack da exceção. Isso acontece porque o Cloud Functions captura o texto impresso em stdout ou stderr e grava cada linha como uma entrada de registro separada. Outras linhas de registro resumem informações sobre o código de erro de saída, além de informações adicionais informadas pelas APIs do Cloud Functions e do Cloud Run.

b49e41594173b57c.png

Clique em qualquer uma das linhas para ver mais informações sobre um registro específico. Os registros expandidos têm outros elementos de interface. Ao clicar neles, é possível copiar todas as informações sobre o registro, expandir todos os campos para mostrar todos os dados da entrada de registro e explicar a entrada usando o Gemini.

4. O rastreamento de pilha de exceção não é muito informativo. Procure nos registros o fim do registro de rastreamento de pilha da exceção. É a linha que diz "Container called exit(1)". O resumo de registros a seguir diz:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

Parece ser um bom candidato para investigação. Clique nessa linha para expandir a entrada de registro. Em seguida, clique no botão Explicar esta entrada de registro para conferir mais informações sobre o registro selecionado.

b815de46d1b4597c.png

Se o Gemini não tiver sido usado antes neste projeto, você vai precisar ativar uma API obrigatória. Se você receber uma solicitação para ativar a API, clique em ATIVAR para continuar.

7ca90e087a2e99d1.png

Às vezes, você pode receber um erro ao usar o Gemini. Nesse caso, repita a operação de comando mais uma vez para receber a resposta. Por exemplo, clique no botão Explicar esta entrada de registro novamente.

5. Leia a explicação fornecida pelo Gemini. Se a explicação fornecida não for suficiente ou estiver confusa, peça ao Gemini para dar mais informações usando um dos comandos a seguir ou escrevendo sua própria pergunta:

Você pode fornecer mais informações sobre esse registro?
Você pode fornecer mais informações sobre o erro?

6. Em seguida, peça sugestões ao Gemini para resolver o problema. Por exemplo, peça ao Gemini

Como resolver esse problema?
Sugira uma solução para resolver esse erro
Sugira como posso corrigir esse erro

A resposta do Gemini pode variar dependendo do contexto atual e também da redação e do formato do seu comando. O Gemini vai recomendar que você verifique se o código-fonte da função do Cloud tem uma função com o nome hello_http.

7. No momento, você está na guia que mostra os registros do Cloud Functions. Selecione a guia anterior que mostra a página de implantação do Cloud Functions com o erro e clique em EDITAR.

c3d9b207214a2240.png

8. Confirme se a autenticação ainda está definida como Permitir invocações não autenticadas e atualize a seleção, se necessário.

6a2aaf9bedd161d9.png

9. Clique em PRÓXIMA na parte de baixo para acessar o Inline Editor. Siga a recomendação do Gemini e mude o nome da função de get_order_list para hello_http.

Depois de terminar a edição, clique em IMPLANTAR.

Talvez seja necessário aguardar alguns minutos até que o processo de implantação seja concluído. Confirme se a implantação foi concluída sem erros.

O console pode continuar mostrando a última mensagem de erro até que o processo de implantação seja concluído.

10. Verifique se a função do Cloud está operacional enviando a seguinte solicitação HTTPS usando curl. É possível usar o Cloud Shell ou fazer isso em qualquer terminal com as CLIs curl e gcloud instaladas.Execute o seguinte comando no terminal do Cloud Shell.

curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"

OBSERVAÇÃO: para executar esse comando em um terminal, você precisa se autenticar usando a CLI gcloud e definir o valor do ID do projeto na variável de ambiente GOOGLE_CLOUD_PROJECT.

Bônus

O nome da função hello_http foi definido como um ponto de entrada padrão para a função do Cloud acionada por HTTP quando o ambiente de execução do Python foi selecionado. Outra solução é manter get_order_list como o nome da função no código-fonte e atualizar o campo de ponto de entrada da Função do Cloud localizado acima do editor in-line, à direita do campo "Runtime":

9a3cd8bf272b4d02.png

Mudar o ponto de entrada de hello_http para get_order_list resolve o problema com a implantação.

4. Limpeza

Para fazer a limpeza, encerrar o projeto ou excluir a instância da Função do Cloud. É possível excluir as funções do Cloud usando o console ou com o comando da CLI, como abaixo:

gcloud functions delete codelab-cf --region=us-central1

5. Parabéns!

Parabéns! Você usou o Gemini para resolver problemas com seu aplicativo e agora entende como ele pode ajudar a entender logs e encontrar respostas a perguntas sobre o Google Cloud.

Documentos de referência…