1. Wprowadzenie
Cloud Run to zarządzana platforma obliczeniowa, która umożliwia uruchamianie bezstanowych kontenerów wywoływanych przez żądania HTTP. Jest ona oparta na projekcie open source Knative, co umożliwia przenoszenie obciążeń między platformami. Cloud Run jest rozwiązaniem bezserwerowym, które nie wymaga zarządzania infrastrukturą, dzięki czemu możesz skupić się na tym, co najważniejsze, czyli tworzeniu świetnych aplikacji.
Celem tego samouczka jest utworzenie aplikacji internetowej „Hello World” Streamlit i wdrożenie jej w Cloud Run.
Czego się nauczysz
- Jak utworzyć aplikację „Hello World” w Streamlit.
- Testowanie aplikacji przez uruchomienie aplikacji Streamlit przed wdrożeniem.
- Pakiety kompilacji Cloud Buildpacks i to, jak obecność
streamlit
wrequirements.txt
pozwala uniknąć konieczności używania pliku Dockerfile. - Jak wdrożyć aplikację Streamlit w Cloud Run.
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail lub Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa dla uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID
). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu. - Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. 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.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym samouczku będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell.
Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.
Udostępnienie Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Większość zadań w tym laboratorium możesz wykonać w przeglądarce.
Po połączeniu z Cloud Shell zobaczysz, że jesteś uwierzytelniony, a identyfikator projektu jest ustawiony na identyfikator Twojego projektu.
- Aby potwierdzić, że masz autoryzację, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz ustawić go za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Włączanie interfejsów API
W Cloud Shell włącz interfejsy Artifact Registry API, Cloud Build API i Cloud Run API:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
Wyświetli się komunikat o powodzeniu podobny do tego:
Operation "operations/..." finished successfully.
Możesz teraz zacząć pracę i napisać aplikację…
4. Tworzenie aplikacji
W tym kroku utworzysz aplikację Streamlit w języku Python „Hello World”, która odpowiada na żądania HTTP.
Katalog roboczy
Użyj Cloud Shell, aby utworzyć katalog roboczy o nazwie helloworld-streamlit
i przełączyć się na niego:
mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit
main.py
Utwórz plik o nazwie main.py
:
touch main.py
Edytuj plik za pomocą preferowanego edytora wiersza poleceń (nano, vim lub emacs) albo kliknij przycisk edytora Cloud Shell:
Aby bezpośrednio edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:
cloudshell edit main.py
main.py
import streamlit as st
st.title("Hello World! 👋🌎")
st.markdown(
"""
This is a demo Streamlit app.
Enter your name in the text box below and press a button to see some fun features in Streamlit.
"""
)
name = st.text_input("Enter your name:")
# Use columns to create buttons side by side
col1, col2 = st.columns(2)
with col1:
if st.button("Send balloons! 🎈"):
st.balloons()
st.write(f"Time to celebrate {name}! 🥳")
st.write("You deployed a Streamlit app! 👏")
with col2:
if st.button("Send snow! ❄️"):
st.snow()
st.write(f"Let it snow {name}! 🌨️")
st.write("You deployed a Streamlit app! 👏")
Ten kod tworzy podstawową usługę internetową, która odpowiada na żądania HTTP GET przyjazną wiadomością.
requirements.txt
Ponownie otwórz terminal i dodaj plik o nazwie requirements.txt
, aby zdefiniować zależności:
touch requirements.txt
Aby bezpośrednio edytować plik za pomocą edytora Cloud Shell, użyj tego polecenia:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/streamlit
streamlit==1.47.0
Aplikacja Streamlit jest gotowa do wdrożenia, ale najpierw ją przetestujmy…
5. Testowanie aplikacji
Aby przetestować aplikację, użyj uv (bardzo szybkiego menedżera pakietów i projektów Pythona), który jest wstępnie zainstalowany w Cloud Shell.
Aby przetestować aplikację, utwórz środowisko wirtualne:
uv venv
Zainstaluj zależności:
uv pip install -r requirements.txt
Uruchom aplikację za pomocą streamlit run
(wyłączając --server.enableCORS
na potrzeby testowania, ponieważ zakłóca działanie Cloud Shell):
uv run streamlit run main.py --server.port=8080 --server.enableCORS=false
Logi będą wskazywać, że aplikacja Streamlit jest uruchomiona:
You can now view your Streamlit app in your browser. Local URL: http://localhost:8080 Network URL: http://10.1.0.1:8080 External URL: http://34.37.7.94:8080
W oknie Cloud Shell kliknij ikonę Web Preview
i wybierz Preview on port 8080
:
Powinno się otworzyć okno przeglądarki z tytułem Hello World! 👋🌎
.
Spróbuj wpisać swoje imię i nazwisko oraz przetestować 2 przyciski na ekranie.
Gdy skończysz, wróć do głównej sesji Cloud Shell i zatrzymaj aplikację Streamlit, naciskając CTRL+C
.
Aplikacja działa zgodnie z oczekiwaniami: czas ją wdrożyć…
6. Wdrożenie w Cloud Run
Cloud Run działa regionalnie, co oznacza, że infrastruktura, która uruchamia usługi Cloud Run, znajduje się w określonym regionie i jest zarządzana przez Google w taki sposób, aby była redundantnie dostępna we wszystkich strefach w tym regionie. Określ region, w którym chcesz wdrożyć usługę, np.:
REGION=europe-west1
Sprawdź, czy nadal jesteś w katalogu roboczym:
ls
Powinny się na niej pojawić te pliki:
main.py requirements.txt
Przed wdrożeniem utwórz plik .gcloudignore
zawierający .venv/
. Zapobiega to uwzględnianiu w procesie wdrażania Cloud Run środowiska wirtualnego utworzonego na podstawie uv
podczas testowania lokalnego.
Utwórz .gcloudignore
za pomocą tego polecenia:
echo ".venv/" > .gcloudignore
Wdróż aplikację w Cloud Run:
gcloud run deploy helloworld-streamlit \
--source . \
--region $REGION \
--allow-unauthenticated
- Opcja
--allow-unauthenticated
sprawia, że usługa jest dostępna publicznie. Aby uniknąć nieautoryzowanych żądań, użyj zasady--no-allow-unauthenticated
.
Gdy zrobisz to po raz pierwszy, pojawi się monit o utworzenie repozytorium Artifact Registry. Aby potwierdzić, kliknij Enter
:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Spowoduje to przesłanie kodu źródłowego do repozytorium Artifact Registry i skompilowanie obrazu kontenera:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Następnie poczekaj chwilę na zakończenie wdrażania. Kiedy operacja zostanie wykonana, w wierszu poleceń wyświetli się URL usługi:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Adres URL usługi możesz uzyskać za pomocą tego polecenia:
SERVICE_URL=$( \
gcloud run services describe helloworld-streamlit \
--region $REGION \
--format "value(status.address.url)" \
)
echo $SERVICE_URL
Powinien pojawić się ekran podobny do tego:
https://helloworld-streamlit-PROJECTHASH-REGIONID.a.run.app
Możesz teraz korzystać z aplikacji, otwierając URL usługi w przeglądarce:
Gratulacje! Właśnie wdrożyliśmy w Cloud Run aplikację. Cloud Run automatycznie skaluje obraz kontenera w poziomie, aby obsługiwać otrzymane żądania, a następnie skaluje go w dół, gdy zapotrzebowanie maleje. W przypadku tej usługi Cloud Run płacisz tylko za procesor, pamięć i sieć wykorzystywane w trakcie obsługiwania żądań.
7. Czyszczenie danych
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana należność za przechowywanie obrazu kontenera w Artifact Registry. Aby uniknąć obciążenia konta opłatami, możesz usunąć repozytorium lub projekt Cloud. Usunięcie projektu Cloud spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu.
Aby usunąć repozytorium obrazów kontenerów:
gcloud artifacts repositories delete cloud-run-source-deploy \
--location $REGION
Aby usunąć usługę Cloud Run:
gcloud run services delete helloworld-streamlit \
--region $REGION
Aby usunąć projekt Google Cloud:
- Pobierz bieżący identyfikator projektu:
PROJECT_ID=$(gcloud config get-value core/project)
- Sprawdź, czy to jest projekt, który chcesz usunąć:
echo $PROJECT_ID
- Usuń projekt:
gcloud projects delete $PROJECT_ID
8. Gratulacje!
Utworzyliśmy aplikację internetową Streamlit „Hello World” i wdrożyliśmy ją w Cloud Run.
Omówione zagadnienia
- Jak utworzyć aplikację „Hello World” w Streamlit.
- Testowanie aplikacji przez uruchomienie aplikacji Streamlit przed wdrożeniem.
- Pakiety kompilacji Cloud Buildpacks i to, jak obecność
streamlit
wrequirements.txt
pozwala uniknąć konieczności używania pliku Dockerfile. - wdrożyć aplikację Streamlit w Cloud Run;
Więcej informacji
- Zapoznaj się z dokumentacją Cloud Run
- Zapoznaj się z artykułem Wdrażanie aplikacji z środowiska deweloperskiego do produkcyjnego w 3 krokach za pomocą Cloud Run, aby poznać więcej opcji.
- Wykonaj czynności opisane w artykule Django w Cloud Run, aby utworzyć bazę danych Cloud SQL, zarządzać danymi logowania za pomocą Secret Manager i wdrożyć Django.
- Więcej codelabów Cloud Run...