1. Wprowadzenie
W tym module użyjesz Gemini, czyli opartej na AI usługi wspomagającej w Google Cloud, aby rozwiązać problem z wdrożeniem funkcji w Cloud Functions. W tym celu przeanalizujesz dzienniki błędów, zidentyfikujesz główną przyczynę problemu i znajdziesz sposób na jego rozwiązanie.
Co musisz zrobić...
- Do skonfigurowania środowiska użyjesz terminala Cloud Shell i gcloud CLI. Obejmuje to włączenie odpowiednich interfejsów API Google i utworzenie funkcji w Cloud Functions na podstawie podanego kodu.
- Aby zrozumieć przechwycone informacje, możesz generować podsumowania logów za pomocą funkcji podsumowywania logów w Cloud Logging.
- Będziesz rozmawiać z Gemini, aby uzyskać pomoc w rozwiązywaniu problemów.
Czego się nauczysz...
- Jak korzystać z Gemini w Google Cloud Observability i rozwiązywać problemy.
- Jak znaleźć i zrozumieć logi funkcji w Cloud Functions z pomocą Gemini.
Co będzie Ci potrzebne...
- przeglądarki Chrome,
- projekt Google Cloud z włączonymi płatnościami;
- Konto Google z uprawnieniami dostępu do projektu, które umożliwiają włączanie interfejsów API i manipulowanie zasobami.
Ten moduł jest przeznaczony dla inżynierów DevOps i platform oraz programistów na wszystkich poziomach zaawansowania, w tym dla początkujących. Skupimy się na praktycznym wykorzystaniu możliwości Gemini w rozwiązywaniu problemów.
2. Konfiguracja
W tej sekcji znajdziesz wszystko, co musisz zrobić, aby rozpocząć ten moduł.
Konfigurowanie środowiska
1. Zaloguj się w konsoli Cloud, otwierając stronę https://console.cloud.google.com.
2. Wybierz projekt w chmurze Google Cloud, z którego zamierzasz korzystać w tym module.

3. Otwórz stronę Cloud Functions w konsoli. Aby to zrobić, wybierz Cloud Functions w menu nawigacyjnym (ikona ☰ w lewym górnym rogu okna konsoli).

Możesz też wyszukać „Cloud Functions” w obszarze wyszukiwania w konsoli:

Kliknij przycisk Utwórz funkcję u góry listy funkcji
.
Jeśli w tym projekcie nie używasz jeszcze Cloud Functions, aby móc z niego korzystać, musisz włączyć interfejsy API Google.

Aby kontynuować, kliknij WŁĄCZ.
4. Zdefiniuj podstawowe właściwości nowej funkcji w Cloud Functions.
- Ustaw nazwę na „
codelab-cf” - Wybierz opcję Zezwalaj na nieuwierzytelnione wywołania.

Aby ukończyć ten krok, kliknij przycisk DALEJ w lewym dolnym rogu okna:

Po kliknięciu DALEJ może pojawić się prośba o włączenie dodatkowych interfejsów API Google. Podobnie jak w kroku 4 kliknij WŁĄCZ.

Konfigurowanie środowiska wykonawczego i kodu funkcji w Cloud Functions
W tym module używamy języka programowania Python. Nie martw się, jeśli nie znasz Pythona. Aby ukończyć to ćwiczenie, nie musisz znać języka Python.
5. Wybierz Python 3.11 jako środowisko wykonawcze funkcji.

Pamiętaj, że zmiana środowiska wykonawczego powoduje zmianę kodu źródłowego wyświetlanego w edytorze wbudowanym.
6. Skopiuj poniższy kod do edytora wierszowego, aby zmodyfikować automatycznie wygenerowany przykład krótkiego wprowadzenia.
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)
Ten kod odczytuje atrybut path z żądania GET, analizuje ścieżkę, aby pobrać nazwę zasobnika, i wywołuje interfejs Google Cloud Storage API, aby uzyskać listę obiektów przechowywanych w tej ścieżce. Funkcja (get_object_list) przyjmuje żądanie, które jest obiektem Flask, jako argument wejściowy i zwraca nazwy obiektów jako tablicę JSON.
7. Wybierz plik requirements.txt z listy plików pozostałych w edytorze wbudowanym. Zastąp bieżącą listę zależności nową, kopiując poniższy kod do edytora wbudowanego.
google-cloud-storage
8. Aby wdrożyć funkcję w Cloud Functions, w lewym dolnym rogu kliknij WDRÓŻ.

Zakończenie procesu wdrażania może potrwać kilka minut. Jeśli dokładnie wykonasz instrukcje konfiguracji, wdrożenie powinno zakończyć się niepowodzeniem.
3. Znajdowanie i rozwiązywanie problemu
W tej sekcji użyjesz funkcji wyjaśnień logów i innych funkcji Gemini, aby zidentyfikować problem i sposób jego rozwiązania.
1. Wdrożenie się nie powiedzie. Powinien pojawić się komunikat o błędzie z dodatkowymi informacjami i opcją wyświetlenia dzienników wdrażania. Aby wyświetlić logi wdrożenia, kliknij WYŚWIETL LOGI.

Pamiętaj, że dzienniki wdrażania otworzą się na osobnej karcie w tej samej przeglądarce. Aby ukończyć to ćwiczenie, musisz przełączać się między kartami.
PAMIĘTAJ, że po kliknięciu WYŚWIETL DZIENNIKI możesz nie zobaczyć wierszy dziennika lub zobaczyć tylko kilka wierszy. W takim przypadku użyj selektora zakresu czasu w okienku zapytania Eksploratora logów i wybierz Ostatnie 30 minut.

2. Przejrzyj logi na otwartej karcie. Zwróć uwagę, że podsumowania logów wyglądają jak wiele wierszy ścieżki wywołań wyjątku. Dzieje się tak, ponieważ Cloud Functions przechwytuje tekst wydrukowany w stdout lub stderr i zapisuje każdy wiersz jako osobny wpis w logu. Pozostałe wiersze logu zawierają podsumowanie informacji o kodzie błędu wyjścia oraz dodatkowe informacje zgłaszane przez interfejsy API Cloud Functions i Cloud Run.

Możesz kliknąć dowolną linię, aby wyświetlić więcej informacji o danym logu. Rozwinięte dzienniki mają dodatkowe elementy interfejsu, których kliknięcie umożliwia skopiowanie wszystkich informacji o dzienniku, rozwinięcie wszystkich pól w celu wyświetlenia wszystkich danych wpisu logu oraz wyjaśnienie wpisu logu za pomocą Gemini.
4. Ścieżka wywołań wyjątku nie zawiera zbyt wielu informacji. Przejrzyj logi, aby znaleźć koniec dziennika śledzenia stosu wyjątku. Jest to wiersz „Container called exit(1)”. Podsumowanie dziennika wygląda tak:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
Wygląda na to, że warto to zbadać. Kliknij ten wiersz, aby rozwinąć wpis logu. Następnie kliknij przycisk „Wyjaśnij ten wpis logu”, aby wyświetlić dodatkowe informacje o wybranym wpisie logu.

Jeśli Gemini nie był wcześniej używany w tym projekcie, pojawi się prośba o włączenie wymaganego interfejsu API. Jeśli pojawi się prośba o włączenie interfejsu API, kliknij WŁĄCZ, aby przejść dalej.

PAMIĘTAJ, że podczas korzystania z Gemini może się niekiedy pojawić błąd. W takim przypadku powtórz prompt jeszcze raz, aby uzyskać odpowiedź. Na przykład kliknij ponownie przycisk „Wyjaśnij ten wpis logu”.
5. Sprawdź wyjaśnienie podane przez Gemini. Jeśli podane wyjaśnienie jest niewystarczające lub niejasne, poproś Gemini o więcej informacji, używając jednego z tych promptów lub zadając własne pytanie:
Czy możesz podać więcej informacji o tym dzienniku?
Czy możesz podać więcej informacji o tym błędzie?
6. Następnie poproś Gemini o sugestie dotyczące rozwiązania problemu. Możesz na przykład zapytać Gemini o:
Jak rozwiązać ten problem?
Zaproponuj rozwiązanie tego błędu
Zaproponuj, jak mogę naprawić ten błąd
Odpowiedź Gemini może się różnić w zależności od bieżącego kontekstu, a także od sformułowania i formatu prompta. Oczekuje się, że Gemini zaleci sprawdzenie, czy kod źródłowy funkcji w Cloud Functions zawiera funkcję o nazwie hello_http.
7. Obecnie widzisz kartę z logami Cloud Functions. Wybierz poprzednią kartę, na której wyświetla się strona wdrażania funkcji w Cloud Functions z błędem, i kliknij EDYTUJ.

8. Sprawdź, czy uwierzytelnianie jest nadal ustawione na Zezwalaj na nieuwierzytelnione wywołania, i w razie potrzeby zaktualizuj wybór.

9. U dołu kliknij DALEJ, aby wyświetlić edytor wierszowy. Postępuj zgodnie z rekomendacją Gemini i zmień nazwę funkcji z get_order_list na hello_http.
Po zakończeniu edycji kliknij WDROŻ.
Zakończenie procesu wdrażania może potrwać kilka minut. Sprawdź, czy wdrożenie zakończyło się pomyślnie i nie pojawiły się żadne komunikaty o błędach.
PAMIĘTAJ, że do czasu zakończenia procesu wdrażania konsola może nadal wyświetlać ostatni komunikat o błędzie.
10. Sprawdź, czy funkcja Cloud Functions działa, wysyłając to żądanie HTTPS za pomocą curl. Możesz użyć Cloud Shell lub wykonać to działanie w dowolnym terminalu, na którym są zainstalowane interfejsy CLI curl i gcloud.W tym celu wykonaj to polecenie w terminalu 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)"
PAMIĘTAJ, że aby uruchomić to polecenie w terminalu, musisz uwierzytelnić się za pomocą interfejsu wiersza poleceń gcloud i ustawić wartość identyfikatora projektu w zmiennej środowiskowej GOOGLE_CLOUD_PROJECT.
Premia
Nazwa funkcji hello_http została zdefiniowana jako domyślny punkt wejścia dla funkcji Cloud Functions wywoływanej przez HTTP po wybraniu środowiska wykonawczego Pythona. Innym rozwiązaniem może być pozostawienie nazwy funkcji get_order_list w kodzie źródłowym i zaktualizowanie pola punktu wejścia funkcji Cloud Functions, które znajduje się nad edytorem wbudowanym po prawej stronie pola środowiska wykonawczego:

Zmiana punktu wejścia z hello_http na get_order_list rozwiąże problem z wdrożeniem.
4. Czyszczenie
Aby przeprowadzić czyszczenie, możesz zamknąć projekt lub usunąć instancję funkcji w Cloud Functions. Funkcje Cloud Functions możesz usuwać za pomocą konsoli lub za pomocą polecenia CLI, jak poniżej:
gcloud functions delete codelab-cf --region=us-central1
5. Gratulacje!
Gratulacje – udało Ci się użyć Gemini do rozwiązania problemu z aplikacją. Teraz wiesz już, jak może Ci pomóc w interpretowaniu logów i uzyskiwaniu odpowiedzi na pytania dotyczące Google Cloud.