FOTC
  • Produkty
    • Google Workspace
    • Google Cloud
    • Chrome Enterprise
  • Usługi
    • Audyt bezpieczeństwa Google Workspace
    • Droga do Chmury
    • Elastyczne usługi cloud engineering
    • Google AI
    • Landing Zone
    • Wsparcie Techniczne
  • O nas
  • Startupy
  • Materiały
    • Historie klientów
    • Blog
    • Program Partnerski
  • Kariera
Kontakt
ro pl hu en
  • Polityka Prywatności

Cloud Run – błyskawiczne wdrażanie aplikacji w chmurze Google

PL » Blog » Cloud Run – błyskawiczne wdrażanie aplikacji w chmurze Google

Piotr Gocłowski

Piotr Gocłowski

19 października 2021
Cloud Run – błyskawiczne wdrażanie aplikacji w chmurze Google

Spis treści

  • Compute & Serverless: moc obliczeniowa chmury Google
  • Co to jest Cloud Run?
    • Funkcjonalności Cloud Run
  • Przykłady użycia Cloud Run
    • Serwis internetowy
    • Aplikacja dla działów back-office
    • Automatyczne generowanie dokumentów
  • Tutorial – uruchomienie usługi i wdrożenie kontenera
    • Zanim zaczniesz
    • Utworzenie aplikacji Hello World
    • Sposób 1: Wdrożenie aplikacji w Cloud Run z lokalnego środowiska
    • Sposób 2: Wdrożenie w konsoli z rejestru kontenerów
  • Ile kosztuje Cloud Run? Koszty usługi

Chmura pozwala znacznie odciążyć zespoły IT. Jej zarządzane usługi przejmują lwią część prac utrzymaniowych, pozostawiając więcej przestrzeni na rozwój. Pozwalają szybciej wdrażać i modyfikować aplikacje, zapewniają wysoką dostępność poprzez skalowanie w odpowiedzi na bieżące zapotrzebowanie oraz prowadzą do optymalizacji kosztów dzięki rozliczeniom w modelu pay-as-you-use. Szczególnie popularnymi usługami wśród przedsiębiorstw, jak też indywidualnych specjalistów, są te z wachlarza Compute & Serverless – usługi maszyn wirtualnych i platform developerskich.

Compute & Serverless: moc obliczeniowa chmury Google

Google Cloud Platform oferuje blisko 200 zarządzanych usług chmurowych, w tym maszyny wirtualne oraz platformy developerskie (grupa Compute & Serverless). To usługi, które dają dostęp do niemal nieograniczonej mocy obliczeniowej Google oraz specyfikacji, której konfiguracja w modelu on-premise byłaby bardzo kosztowna.

Do usług Compute & Serverless należą między innymi:

  • Compute Engine – usługa maszyn wirtualnych w modelu Infrastructure as a Service,
  • App Engine – platforma developerska służąca do pisania i deployowania kodu, z zautomatyzowanymi procesami obsługi infrastruktury,
  • Google Kubernetes Engine – Kubernetes w chmurze, czyli platforma orkiestracji kontenerów i klastrów,
  • Cloud Run – bezserwerowa usługa dedykowana tworzeniu i rozwijaniu aplikacji w kontenerach,
  • Cloud Functions – usługa w modelu Function as a Service, która daje możliwość zamieszczenia oraz wywołania i wykonania kodu funkcji w odpowiedzi na określony event.

Co to jest Cloud Run?

Cloud Run to oparta na Knative zarządzana platforma chmurowa, która umożliwia szybkie tworzenie i wdrażanie aplikacji w kontenerach. Jest bezserwerowa, co oznacza, że użytkownik nie musi doglądać żadnego elementu infrastruktury – konserwacji fizycznych maszyn, aktualizacji oprogramowania, równoważenia obciążenia czy skalowania. Skupia się jedynie na pisaniu kodu w dowolnej, wybranej przez siebie technologii, z użyciem ulubionych bibliotek czy własnych plików binarnych.

Funkcjonalności Cloud Run

  • Dowolna technologia. Ponieważ usługa operuje na kontenerach, umożliwia tworzenie kodu aplikacji z użyciem dowolnego języka programowania (m.in. Go, Python, Java, Ruby czy Node.js), bibliotek czy plików binarnych.
  • Wykorzystanie możliwości kontenerów. Cloud Run pobiera dowolne obrazy kontenerów i dobrze integruje się z takimi technologiami jak Cloud Build, Artifact Registry czy Docker.
  • Integracja z innymi usługami chmurowymi. Ponieważ Cloud Run jest elementem Google Cloud Platform, relatywnie łatwo jest stworzyć jedno zintegrowane środowisko wykorzystujące kilka czy nawet kilkanaście innych usług GCP.
  • Brak ograniczenia do jednej chmury. Usługa bazuje na otwartoźródłowej technologii Knative oraz na kontenerach, dzięki czemu zasoby mają zapewnioną przenośność, co uniemożliwia uzależnienie się od jednego dostawcy chmurowego (cloud lock-in).
  • W pełni zarządzana usługa. Raz skonfigurowana nie wymaga ponownych aktualizacji, by prawidłowo zarządzać środowiskiem aplikacji.
  • Natychmiastowe automatyczne skalowanie. W sytuacjach zwiększonego obciążenia usługa skaluje się w górę, by zapewnić wysoką dostępność, a w momencie spadku ruchu zmniejsza liczbę funkcjnujących intancji, zapewniają tym samym koszty adekwatne do zużycia.
  • Stabilność dzięki redundancji. Zasoby uruchomione w Cloud Run w modelu regional są nieustannie przesyłane pomiędzy zonami, by zapewnić trwałość danych nawet w obliczu awarii serwerowni Google Cloud. 
  • Bezpieczeństwo. Usługa Binary Authorization pozwala wdrażać jedynie zaufane obrazy kontenerów. Zasoby są uruchamiane w odizolowanych środowiskach, z określonymi tożsamościami i poziomami dostępu. Do zabezpieczenia możesz użyć własnego klucza szyfrowana, a danymi dostępu zarządzać poprzez usługę Secret Manager.
  • Kontrola i monitoring. Usługa jest zintegrowana z narzędziami Cloud Monitoring, Cloud Logging, Cloud Trace i Error Reporting w celu zapewnienia dobrej kondycji aplikacji. Poziom użycia usługi można monitorować w GUI Metrics, wraz z logami z kontenerów. Ponadto Cloud Run posiada wbudowaną funkcjonalność umożlwiaijaącą szybkie przywrócenie poprzedniej wersji kontenera (rollback).

Przykłady użycia Cloud Run

Serwis internetowy

Przy użyciu usługi Cloud Run można utworzyć dynamicznie renderowane strony HTTP, angażując takie technologie jak nginx, ExpressJS czy django, a bazę danych posiadać w Cloud SQL.

Serwis internetowy z wykorzystaniem Cloud Run

Aplikacja dla działów back-office

Działania administracyjne w organizacjach często obejmują prace na arkuszach kalkulacyjncych czy w programach zewnętrznych dostawców. Z pomocą Cloud Run można utworzyć aplikację wspierającą integracje między programami, usprawniającą zarządzanie dostępami wśród użytkowników czy obieg dokumentacji w organizacji.

Aplikacja dla działów back office z wykorzystaniem Cloud Run

Automatyczne generowanie dokumentów

Cloud Run w połączeniu z Cloud Schedulerem pozwala zbudować aplikację wykonującą automatycznie cykliczne akcje – na przykład generowanie co miesiąc faktury. Ponieważ do Cloud Run można wdrożyć kontenery zawierające dowolne (również własne) pliki binarne, aplikacja może angażować narzędzia do tworzenia plików PDF, np. LibreOffice.

Automatyczne generowanie dokumentów z wykorzystaniem Cloud Run

Ponieważ usługa jest rozliczana za użycie, w sytuacji gdy aplikacja nie jest używana, nie ponosi się żadnych opłat (o ile dolny limit skalowania wynosi 0). W przykładzie wyżej, opłata za Cloud Run będzie naliczana tylko raz w miesiącu, w momencie generowania faktury.

Tutorial – uruchomienie usługi i wdrożenie kontenera

Poniższy tutorial wskazuje, w jaki sposób utworzyć prostą aplikację Hello World, spakować ją do obrazu kontenera, a następnie wdrożyć obraz w Cloud Run. Wspierane są wszystkie języki programowania, które można uruchomić w kontenerze.

Czyli w skrócie: Aplikacja.py → Kontener → Cloud Run

Zanim zaczniesz

1. Zaloguj się do konsoli Google Cloud Platform – console.cloud.google.com.

2. Upewnij się, że płatności w Twoim projekcie są włączone (zakładka Billing).

3. Zainstaluj i zainicjuj Cloud SDK.

Utworzenie aplikacji Hello World

1. Utwórz katalog i przejdź do niego.

mkdir helloworld
cd helloworld

2. Stwórz plik main.py i wklej do niego poniższą treść:

import os

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    name = os.environ.get("NAME", "World")
    return "Hello {}!".format(name)


if __name__ == "__main__":
    app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))

Powyższy kod uruchamia prosty serwer www Gunicorn z aplikacją, która zwraca tekst „Hello World” po otrzymaniu zapytania HTTP. Port, na którym nasłuchuje aplikacja, jest zdefiniowany przez zmienną środowiskową lub jest to 8080.

3. Następnie utwórz plik requirements.txt, w którym wpiszesz niezbędne zależności (moduły) potrzebne do uruchomienia aplikacji. Poniżej treść pliku:

Flask==2.0.1
gunicorn==20.1.0

4. Dockerfile to plik definiujący kontener, między innymi to, co ma się dziać po jego uruchomieniu. W tym przypadku uruchamia webserwer Gunicorn, który nasłuchuje na porcie zdefiniowanym przez zmienną środowiskową PORT.

Jako obraz bazowy używany jest oficjalny lekki obraz Python – https://hub.docker.com/_/python

FROM python:3.9-slim

Poniższa dyrektywa pozwala, by logi Python pojawiały się od razu logach Knative:

ENV PYTHONUNBUFFERED True

Za pomocą tej funkcji odbywa się kopiowanie lokalnego kodu do obrazu kontenera:

ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./

Instalowanie zależności produkcyjnych odbywa się za pomocą:

RUN pip install --no-cache-dir -r requirements.txt

Uruchomienie webserwera Gunicorn następuje w trakcie uruchamiania kontenera.

Dla środowisk uruchomieniowych z procesorem wielordzeniowym warto zwiększyć liczbę workerów (gunicorn) do wartości równiej liczbie rdzeni. Timeout workerów jest ustawiony na 0, aby umożliwić usłudze Cloud Run skalowanie instancji:

CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

5. Następnie dodaj plik .dockerignore, aby wykluczyć kopiowanie określonych plików. Treść pliku:

Dockerfile
README.md
*.pyc
*.pyo
*.pyd
__pycache__
.pytest_cache

Sposób 1: Wdrożenie aplikacji w Cloud Run z lokalnego środowiska

Żeby przeprowadzić wdrożenie w usłudze Cloud Run, musisz posiadać odpowiednie uprawnienia na projekcie GCP – „Owner” lub „Editor”.

1. W katalogu z aplikacją wpisz poniższą komendę:

gcloud run deploy

2. Jeśli pojawi się monit o włączeniu API, należy wpisać y, aby je uruchomić.

3. Gdy pojawi się pytanie o lokalizację kodu źródłowego, wciśnij klawisz Enter, aby wdrożyć bieżący folder.

4. Po wyświetleniu pytania o nazwę usługi wciśnij klawisz Enter, aby zaakceptować domyślną nazwę helloworld.

5. Jeśli pojawi się pytanie o włączenie interfejsu Artifact Registry API, wystarczy nacisnąć y.

6. Gdy zostaniesz poproszony o podanie regionu, wskaż nazwę lokalizacji (na przykład europe-central2). Tutaj znajduje się lista regionów Cloud Run.

7. Na pytanie o nieuwierzytelnione wywoływanie odpowiedz y. Dzięki temu każdy znający URL usługi będzie mógł się do niej dostać.

8. Następnie należy poczekać chwilę, aż wdrożenie zostanie zakończone. W przypadku powodzenia, wiersz poleceń wyświetli adres URL usługi.

9. Sprawdź, czy rzeczywiście usługa działa, wklejając w przeglądarce zwrócony adres URL.

10. Jeśli dotarłeś do tego miejsca, to gratulacje! Właśnie wdrożyłeś obraz kontenera z kodu źródłowego w Cloud Run. Cloud Run automatycznie skaluje usługę w górę w razie wzrostu zapotrzebowania, czyli dodaje kolejne instancje. Kiedy obciążenie spadnie, to również liczba instancji się redukuje, dzięki czemu nie będziesz przepłacać za usługę.

Sposób 2: Wdrożenie w konsoli z rejestru kontenerów

W Cloud Run aplikacje można też wdrożyć inaczej, z poziomu graficznego UI konsoli. Jako źródło kodu można wskazać obraz, wcześniej przygotowany i przesłany do repozytorium (Cloud Artifacts Registry lub Cloud Container Registry) albo wybrać repozytorium kodu źródłowego. Poniżej znajduje się krótka instrukcja, jak przeprowadzić wdrożenie z użyciem repozytorium obrazów:

1. Przejdź do folderu z aplikacją Hello World, którą wcześniej przygotowałeś.

2. Zbuduj obraz, podając komendę docker build.

Po prawidłowej budowie obrazu powinien pokazać się komunikat:

Successfully built [ID obrazu]

W przypadku projektu z tutoriala jest to:

Successfully built ad890e53825e

3. Warto sprawdzić, czy obraz uruchamia się prawidłowo lokalnie. W tym celu wywołaj komendę:

docker run -p 8080 -e PORT=8080 [ID obrazu]
wywołanie komendy w cloudshell

Po przejściu do przeglądarki, na adres localhost po zdefiniowanym wcześniej porcie (w tym przypadku 127.0.0.1:8080), powinieneś zobaczyć efekt wdrożenia:

efekt wdrożenia z poziomu konsoli

4. Kolejnym krokiem jest otagowanie obrazu tak, aby można go było wysłać do container registry: 

docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/IMAGE

W przypadku opisanym w tutorialu komenda wygląda następująco:

docker tag ad890e53825e eu.gcr.io/preemptible-vm-instances/helloworld-2

5. Następnie należy wysłać obraz do rejestru kontenerów:

docker push eu.gcr.io/preemptible-vm-instances/helloworld-2

Jeśli akcja zakończyła się powodzeniem, w terminalu powinieneś zobaczyć taki widok:

efekt wywołania komendy docker push

Aby sprawdzić, czy obraz rzeczywiście znajduje się w repozytorium, wystarczy wpisać:

gcloud container images list-tags eu.gcr.io/preemptible-vm-instances/helloworld-2

Komendę należy zmodyfikować o region, w którym jest uruchomiona usługa, nazwę projektu oraz nazwę obrazu.

Terminal powinien zwrócić wartości:

DIGEST: 44682cb07278
TAGS: latest

6. Jeśli już masz obraz w rejestrze, nie pozostaje nic innego, jak przejść do konsoli graficznej i wdrożyć kontener.

Po przejściu do konsoli, do zakładki Cloud Run, kliknij Create Service.

wdrożenie kontenera gcp

7. W panelu konfiguracyjnym kliknij Select…

załączanie obrazu kontenera

…i wybierz obraz kontenera.

Wybieranie obrazu kontenera z container registry

8. Następnie wskaż region, w którym mają być wdrożone usługi:

Wybranie preferowanego regionu

9. Kolejnym krokiem jest wybór procesora. Wskaż, czy procesor ma być alokowany tylko podczas zapytania, czy zawsze. Jeśli chcesz płacić tylko za rzeczywiste zużycie, lepsza będzie pierwsza opcja.

Zdefiniuj też wartości automatycznego skalowania – minimalną i maksymalną liczbę instancji. Jeśli ustawisz minimalny limit 1 (lub wyższy), będziesz płacić za usługę, nawet gdy nie będzie używana, ale usługa będzie uruchamiać się szybciej dzięki pominięciu Cold Start. Jeśli nie chcesz płacić za nieużywaną usługę, ustaw dolny limit 0. Zwróć szczególną usługę na górny limit skalowania – bezpiecznie jest ustawić niewysoką liczbę instancji (tutaj możesz przeczytać o niepotrzebnie wysokim rachunku za usługę w wyniku zbyt wysokiego górnego limitu skalowania).

alokacja zasobów i ustalanie limitów autoskalowania

10. Zdefiniuj, czy ruch do usługi ma być uwierzytelniany oraz czy dopuszczony jest ruch wewnętrzny (sieć VPS) czy ruch publiczny. 

konfiguracja walidacji ruchu

11. Kliknij Create i zaczekaj, aż usługa się uruchomi.

12. Jeśli zobaczysz podobny widok, jak na poniższym zrzucie ekranu, to oznacza, że usługa jest aktywna.

widok aktywnej usługi w ramach cloud run

Możesz sprawdzić jej działanie, wchodząc na wygenerowany URL.

hello world w cloud run

13. Wdrożenie aplikacji na Google Cloud Run zakończyło się powodzeniem. W następnym kroku możesz skonfigurować Continous Deployment do Cloud Run, by zautomatyzować wdrożenia. Możesz też zarządzać ruchem między wersjami, by prowadzić testy A/B aplikacji. Oprócz obsługi zapytań HTTPS, można zdefiniować zdarzenia, które będą wyzwalać obraz – obecnie dostępnych jest ponad 90 eventów spośród różnych usług GCP.

Ile kosztuje Cloud Run? Koszty usługi

Usługa jest rozliczana w modelu pay-as-you-use w ujęciu sekundowym. W kosztach uwzględnione są CPU, pamięć, liczba zapytań oraz użycie sieci. Usługa ma bezpłatny odnawialny miesięczny limit Free Tier.

CPUPamięćZapytania
Koszt 0,00002400 USD za sekundę vCPU 0,00000250 USD za GB na sekundę 0,40 USD za milion requestów
Free Tier (limity miesięczne) 180 000 sekund vCPU 360 000 GB na sekundę 2 miliony requestów

By otrzymać dokładną estymację, możesz skorzystać z kalkulatora Google Cloud Platform. 

Compute & Serverless: moc obliczeniowa chmury Google
Co to jest Cloud Run?
Przykłady użycia Cloud Run
Tutorial – uruchomienie usługi i wdrożenie kontenera
Ile kosztuje Cloud Run? Koszty usługi
Piotr Gocłowski

Piotr Gocłowski

Usługi
  • Droga do Chmury-Strategia i Roadmapa
  • Landing zone
  • Szkolenia
Produkty
  • Google Workspace
  • Google Cloud
  • Google Workspace for Education
Branża
  • Administracja publiczna
  • Edukacja
  • Gaming
  • Małe i średnie przedsiębiorstwa
  • Ochrona zdrowia
  • Retail
Wiedza
  • Blog
  • Case Studies
  • Dyrektywa NIS2
Firma
  • O nas
  • Kariera
  • Kontakt
  • Program Partnerski
  • Audyt bezpieczeństwa
  • Google Workspace Support
  • Polityka Prywatności
  • Regulamin
Copyright © 2014 – 2024 Fly On The Cloud sp. z o.o. KRS: 0000500884, NIP: 8971797086, REGON: 022370270