1. Omówienie
Ta seria laboratoriów programistycznych (samodzielnych, praktycznych samouczków) ma pomóc deweloperom zrozumieć różne opcje, z których mogą korzystać podczas wdrażania aplikacji. Z tego laboratorium z kodem dowiesz się, jak używać interfejsu Google Cloud Translation API w Pythonie i uruchamiać go lokalnie lub wdrażać na bezserwerowej platformie obliczeniowej w chmurze (App Engine, Cloud Functions lub Cloud Run). Przykładową aplikację znajdującą się w repozytorium tego samouczka można wdrożyć (co najmniej) na 8 sposobów za pomocą zaledwie drobnych zmian konfiguracji:
- Lokalny serwer Flask (Python 2)
- Lokalny serwer Flask (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- Cloud Functions (Python 3)
- Cloud Run (Python 2 za pomocą Dockera)
- Cloud Run (Python 3 w Dockerze)
- Cloud Run (Python 3 za pomocą pakietów kompilacji Cloud)
Ten warsztat dotyczy wdrażania tej aplikacji na platformy oznaczone pogrubieniem powyżej.
Dowiedz się, jak
- Używanie interfejsów Google Cloud, w szczególności Cloud Translation API (zaawansowana wersja 3).
- Uruchamianie podstawowej aplikacji internetowej lokalnie lub wdrażanie jej na platformę bezserwerową w chmurze
Czego potrzebujesz
- projekt Google Cloud z aktywnym kontem rozliczeniowym Cloud.
- Flask zainstalowany do uruchamiania lokalnie lub bezserwerowa platforma obliczeniowa w chmurze włączona do wdrożeń w chmurze.
- podstawowe umiejętności w Pythonie,
- znajomość podstawowych poleceń systemu operacyjnego;
Ankieta
Jak będziesz korzystać z tego samouczka?
Jak oceniasz swoje umiejętności w zakresie Pythona?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Konfiguracja środowiska w samodzielnym tempie
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google, i który możesz zaktualizować w dowolnym momencie.
- Identyfikator projektu musi być niepowtarzalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po jego ustawieniu). Konsole Google Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zazwyczaj jest to
PROJECT_ID
). Jeśli Ci się nie podoba, wygeneruj inny losowy identyfikator lub spróbuj użyć własnego i sprawdź, czy jest dostępny. Następnie po utworzeniu projektu jest „zamrażany”. - Istnieje jeszcze trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API usługi Cloud. Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Aby wyłączyć zasoby i uniknąć opłat po zakończeniu samouczka, wykonaj instrukcje „czyszczenia” podane na końcu ćwiczenia. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
3. Włączanie interfejsu Translation API
Włączanie interfejsów Cloud API
Z tej sekcji dowiesz się, jak ogólnie włączyć interfejsy API Google. W przypadku naszej przykładowej aplikacji musisz włączyć interfejsy Cloud Translation API, Cloud Run i Cloud Artifact Registry.
Wprowadzenie
Niezależnie od tego, którego interfejsu Google API chcesz używać w aplikacji, musisz go włączyć. Ten przykład pokazuje 2 sposoby włączania interfejsu Cloud Vision API. Gdy już się nauczysz, jak włączyć jeden interfejs Cloud API, będziesz mieć możliwość włączenia innych interfejsów API, ponieważ proces jest podobny.
Opcja 1. Z Cloud Shell lub interfejsu wiersza poleceń
Chociaż częstszym sposobem jest włączanie interfejsów API w konsoli Cloud, niektórzy deweloperzy wolą wykonywać wszystkie czynności za pomocą wiersza poleceń. W tym celu musisz sprawdzić „nazwa usługi” interfejsu API. Wygląda jak adres URL: SERVICE_NAME
.googleapis.com
. Znajdziesz je w tabeli obsługiwanych usług lub możesz wysłać zapytanie programowe za pomocą interfejsu Google Discovery API.
Mając te informacje, możesz włączyć interfejs API za pomocą Cloud Shell (lub lokalnego środowiska programistycznego z zainstalowanym narzędziem wiersza poleceń gcloud
). Aby to zrobić, wykonaj te czynności:
gcloud services enable SERVICE_NAME.googleapis.com
Na przykład to polecenie włącza interfejs Cloud Vision API:
gcloud services enable vision.googleapis.com
To polecenie włącza App Engine:
gcloud services enable appengine.googleapis.com
Możesz też włączyć wiele interfejsów API za pomocą jednego żądania. Na przykład to polecenie włącza Cloud Run, Cloud Artifact Registry i interfejs Cloud Translation API:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Opcja 2. Z poziomu Cloud Console
Możesz też włączyć Vision API w Menedżerze interfejsów API. W konsoli Cloud otwórz Menedżera interfejsów API i wybierz Biblioteka.
Jeśli chcesz włączyć interfejs Cloud Vision API, zacznij wpisywać „vision” na pasku wyszukiwania. Pojawi się wszystko, co pasuje do tego, co zostało do tej pory wpisane:
Wybierz interfejs API, który chcesz włączyć, i kliknij Włącz:
Koszt
Chociaż wiele interfejsów API Google można używać bez opłat, nie można tego powiedzieć o produktach i interfejsach API Google Cloud. Podczas włączania interfejsów Cloud API możesz zostać poproszony o podanie aktywnego konta rozliczeniowego. Pamiętaj jednak, że niektóre usługi Google Cloud mają poziom „Zawsze bezpłatnie” (dobowy/miesięczny), który musisz przekroczyć, aby naliczały się opłaty. W przeciwnym razie Twoja karta kredytowa (lub wskazany instrument rozliczeniowy) nie zostanie obciążona.
Przed włączeniem interfejsu API użytkownicy powinni zapoznać się z informacjami o cenach, zwracając szczególną uwagę na to, czy interfejs ma bezpłatny poziom dostępu i jakie są jego warunki. Jeśli włączasz interfejs Cloud Vision API, powinieneś sprawdzić informacje o cenach. Cloud Vision ma bezpłatny limit, a dopóki nie przekroczysz go łącznie (w danym miesiącu), nie powinieneś ponosić żadnych opłat.
Ceny i poziomy bezpłatnego korzystania z interfejsów API Google różnią się w zależności od interfejsu. Przykłady:
- Google Cloud/GCP – każda usługa jest rozliczana inaczej i zwykle płaci się za cykl vCPU, zużycie miejsca na dane, wykorzystanie pamięci lub płatność za użycie; patrz informacje o bezpłatnym poziomie powyżej.
- Mapy Google – pakiet interfejsów API, który oferuje użytkownikom 200 USD miesięcznie.
- Interfejsy API Google Workspace (dawniej G Suite) – zapewniają bezpłatne korzystanie (w ramach określonych limitów) w ramach miesięcznej opłaty abonamentowej Workspace, więc nie ma bezpośredniego rozliczenia za korzystanie z interfejsów API Gmaila, Dysku Google, Kalendarza, Dokumentów, Arkuszy i Prezentacji.
Różne usługi Google są rozliczane na różne sposoby, dlatego zapoznaj się z dokumentacją interfejsu API, aby uzyskać te informacje.
Podsumowanie
Teraz, gdy już wiesz, jak ogólnie włączyć interfejsy API Google, otwórz Menedżer interfejsów API i włącz Cloud Translation API, Cloud Run i Cloud Artifact Registry (jeśli nie są jeszcze włączone). Włączasz pierwszą opcję, ponieważ nasza aplikacja jej używa. Musisz włączyć tę opcję, ponieważ obrazy kontenerów są przechowywane w niej przed wdrożeniem, aby uruchomić usługę Cloud Run. Jeśli wolisz włączyć je wszystkie za pomocą narzędzia gcloud
, uruchom w terminalu to polecenie:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
Chociaż limit miesięczny nie jest wymieniony na ogólnej stronie podsumowania poziomu „Zawsze bezpłatnie”, na stronie z cenami interfejsu API Tłumacz podano, że wszyscy użytkownicy otrzymują co miesiąc stałą liczbę przetłumaczonych znaków. Jeśli nie przekroczysz tego progu, nie poniesiesz żadnych opłat za korzystanie z interfejsu API. Jeśli są jakieś inne opłaty związane z Google Cloud, zostaną one omówione na końcu w sekcji „Usuwanie”.
4. Pobieranie przykładowego kodu aplikacji
Skopiuj kod z repozytorium lokalnie lub w Cloud Shell (za pomocą polecenia git clone
) albo pobierz plik ZIP, klikając zielony przycisk Kod, jak pokazano na poniższym zrzucie ekranu:
Gdy już wszystko będzie gotowe, utwórz pełną kopię folderu, aby wykonać ten samouczek, ponieważ będzie on prawdopodobnie wymagał usunięcia lub zmiany plików. Jeśli chcesz przeprowadzić inną implementację, możesz zacząć od kopiowania oryginału, aby nie trzeba było go ponownie klonować ani pobierać.
5. Prezentacja przykładowej aplikacji
Przykładowa aplikacja to prosta odmiana Tłumacza Google, która prosi użytkowników o wpisanie tekstu w języku angielskim, a następnie wyświetla jego tłumaczenie na język hiszpański. Teraz otwórz plik main.py
, aby zobaczyć, jak to działa. Pomijając skomentowane wiersze dotyczące licencjonowania, na górze i na dole wygląda to tak:
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- Importy umożliwiają korzystanie z funkcji Flask, modułu
google.auth
i biblioteki klienta Cloud Translation API. - Zmienne globalne reprezentują aplikację Flask, identyfikator projektu Cloud, klienta Translation API, nadrzędną „ścieżkę lokalizacji” dla wywołań Translation API oraz język źródłowy i docelowy. W tym przypadku są to język angielski (
en
) i hiszpański (es
), ale możesz zmienić te wartości na inne kody języków obsługiwane przez Cloud Translation API. - Duży blok
if
na dole jest używany w samouctniku do uruchamiania tej aplikacji lokalnie – korzysta z serwera deweloperskiego Flask do obsługi aplikacji. Ta sekcja jest też dostępna w samouctnikach dotyczących wdrażania Cloud Run na wypadek, gdyby serwer WWW nie był spakowany w kontenerze. Pojawi się prośba o włączenie tworzenia pakietu serwera w kontenerze, ale jeśli ją przeoczysz, kod aplikacji będzie używać serwera deweloperskiego Flask. (Nie jest to problem z App Engine ani Cloud Functions, ponieważ są to platformy oparte na źródłach, co oznacza, że Google Cloud udostępnia i uruchamia domyślny serwer internetowy).
W środku pliku main.py
znajduje się serce aplikacji, czyli funkcja translate()
:
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
Funkcja główna pobiera dane wejściowe od użytkownika i wywołuje interfejs Translation API, aby wykonać ciężką pracę. Przeanalizujmy to:
- Sprawdź, czy żądania pochodzą z Cloud Functions za pomocą zmiennej
local_request
. Cloud Functions wysyła własny obiekt żądania Flask, podczas gdy wszystkie inne (uruchamiane lokalnie lub wdrażane w App Engine lub Cloud Run) otrzymają obiekt żądania bezpośrednio z Flask. - Zresetuj podstawowe zmienne formularza. Dotyczy to przede wszystkim żądań GET, ponieważ żądania POST będą zawierać dane, które je zastąpią.
- Jeśli jest to żądanie POST, pobierz tekst do przetłumaczenia i utwórz strukturę JSON reprezentującą wymagania dotyczące metadanych interfejsu API. Następnie wywołaj interfejs API, korzystając w razie potrzeby z poprzedniej wersji interfejsu API, jeśli użytkownik używa starszej biblioteki.
- W każdym razie sformatuj rzeczywiste wyniki (POST) lub brak danych (GET) w kontekście szablonu i wyświetl.
Część wizualna aplikacji znajduje się w pliku szablonu index.html
. Pokazuje wcześniej przetłumaczone wyniki (w przeciwnym razie puste pole) oraz formularz z prośbą o coś do przetłumaczenia:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
6. Wdrażanie usługi
Teraz możesz wdrożyć usługę tłumaczenia w Cloud Run, wykonując to polecenie:
gcloud run deploy translate --source . --allow-unauthenticated --platform managed
Dane wyjściowe powinny wyglądać tak i zawierać instrukcje dotyczące dalszych kroków:
$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed Please specify a region: [1] asia-east1 [2] asia-east2 . . . (other regions) . . . [28] us-west4 [29] cancel Please enter your numeric choice: REGION_CHOICE To make this the default region, run `gcloud config set run/region REGION`. Deploying from source requires an Artifact Registry repository to store build artifacts. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)? This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]" Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Creating Container Repository... ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b 9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER]. ✓ Creating Revision... ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Aplikacja jest już dostępna na całym świecie. Możesz ją otworzyć, korzystając z adresu URL zawierającego identyfikator projektu, który znajdziesz w wynikach wdrożenia:
Przetłumacz coś, aby zobaczyć, jak to działa.
7. Podsumowanie
Gratulacje! W tym samouczku dowiesz się, jak włączyć interfejs Cloud Translation API, uzyskać niezbędne poświadczenia i wdrażać prostą aplikację internetową do Pythona 2 w Cloud Run. Więcej informacji o tym wdrożeniu znajdziesz w tabeli w repozytorium.
Czyszczenie danych
Interfejs Cloud Translation API umożliwia bezpłatne przetłumaczenie stałej liczby znaków miesięcznie. App Engine ma też bezpłatny limit, co dotyczy również Cloud Functions i Cloud Run. Jeśli przekroczysz którykolwiek z tych limitów, zostanie naliczona opłata. Jeśli chcesz przejść do następnego ćwiczenia, nie musisz zamykać aplikacji.
Jeśli jednak nie chcesz jeszcze przejść do następnego samouczka lub obawiasz się, że aplikacja, którą właśnie wdrożyłeś/wdrożyłaś, zostanie odkryta w internecie, wyłącz aplikację App Engine, usuń funkcję Cloud Functions lub wyłącz usługę Cloud Run, aby uniknąć opłat. Gdy będziesz gotowy/gotowa przejść do kolejnego Codelab, możesz ponownie włączyć ten tryb. Jeśli z drugiej strony nie chcesz kontynuować pracy nad tą aplikacją ani innymi projektami w Codelab i chcesz wszystko całkowicie usunąć, możesz zamknąć projekt.
Wdrażanie na bezserwerowej platformie obliczeniowej Google Cloud wiąże się też z niewielkimi kosztami kompilacji i przechowywania. Cloud Build ma własną bezpłatną pulę, podobnie jak Cloud Storage. Aby zwiększyć przejrzystość, usługa Cloud Build kompiluje obraz aplikacji, który jest następnie przechowywany w Cloud Container Registry lub Artifact Registry, która jest następcą tej pierwszej. Przechowywanie tego obrazu zużywa część tej puli, podobnie jak przesyłanie sieciowe podczas przesyłania obrazu do usługi. Możesz jednak mieszkać w regionie, w którym nie ma bezpłatnego poziomu, więc aby zminimalizować potencjalne koszty, zwróć uwagę na wykorzystanie miejsca na dane.
8. Dodatkowe materiały
W kolejnych sekcjach znajdziesz dodatkowe materiały do czytania oraz ćwiczenia, które pomogą Ci poszerzyć wiedzę zdobytą w trakcie samouczka.
Dodatkowe badania
Masz już pewne doświadczenie w korzystaniu z interfejsu Translation API, więc wykonaj kilka dodatkowych ćwiczeń, aby doskonalić swoje umiejętności. Aby kontynuować naukę, zmodyfikuj naszą przykładową aplikację, aby wykonać te czynności:
- Wykonaj wszystkie inne wersje tego laboratorium kodu, aby uruchomić je lokalnie lub wdrożyć na bezserwerowych platformach obliczeniowych Google Cloud (patrz README repozytorium).
- Przejdź przez ten samouczek, używając innego języka programowania.
- Zmień tę aplikację, aby obsługiwała inne języki źródłowe lub docelowe.
- Zaktualizuj tę aplikację, aby umożliwić tłumaczenie tekstu na więcej niż 1 język. Zmień plik szablonu, aby wyświetlić menu obsługiwanych języków docelowych.
Więcej informacji
Google App Engine
- Strona główna App Engine
- Dokumentacja App Engine
- Krótkie wprowadzenie do App Engine w Pythonie 3
- Domyślne konta usługi App Engine
- Środowisko wykonawcze Python 2 App Engine (standardowe)
- Środowisko wykonawcze Pythona 3 App Engine (standardowe)
- Różnice między środowiskiem uruchomieniowym Python 2 a Python 3 w App Engine (standardowym)
- Przewodnik po migracji z Pythona 2 do App Engine (standardowego) w Pythonie 3
Google Cloud Functions
- Strona główna Cloud Functions
- Dokumentacja Cloud Functions
- Krótki przewodnik po Pythonie i Cloud Functions
- Domyślne konta usługi w Cloud Functions
Google Cloud Run
- Strona główna Cloud Run
- Dokumentacja Cloud Run
- Krótki przewodnik po Pythonie w Cloud Run
- Domyślne konta usługi w Cloud Run
Google Cloud Buildpacks, Container Registry, Artifact Registry
- Ogłoszenie dotyczące Cloud Buildpacks
- Repozytorium Cloud Buildpacks
- Strona główna Cloud Artifact Registry
- Dokumentacja Cloud Artifact Registry
- Strona główna Cloud Container Registry
- Dokumentacja Cloud Container Registry
Google Cloud Translation i Google ML Kit
- Strona główna Cloud Translation
- Dokumentacja usługi Cloud Translation
- Strona z cenami Translation API
- Wszystkie interfejsy API „elementów składowych” AI/ML w chmurze
- Google ML Kit (podzbiór interfejsów Cloud AI/ML na urządzenia mobilne)
- Google ML Kit Translation API
Inne usługi/strony Google Cloud
- Pomoc Google Cloud dotycząca Pythona
- Biblioteki klienta Google Cloud
- Poziom „Always Free” Google Cloud
- Cała dokumentacja Google Cloud
Python i Flask
Licencja
Ten samouczek jest objęty licencją Creative Commons Attribution 2.0 Generic License, a kod źródłowy w repozytorium jest objęty licencją Apache 2.