Konteneryzowanie aplikacji Spring Boot Kotlin i wdrażanie jej w Cloud Run

Google udostępnia zaawansowane narzędzie do tworzenia obrazów, za pomocą którego możesz łatwo i szybko tworzyć oraz publikować zoptymalizowane obrazy kontenerów Dockera dla aplikacji Java bez użycia Dockera ani pliku Dockerfile. Google Cloud udostępnia też bezserwerowe kontenery w ramach Cloud Run, czyli zarządzanej platformy obliczeniowej, która automatycznie skaluje bezstanowe kontenery. Z tego modułu dowiesz się, jak łatwo skonteneryzować aplikację Spring Boot Kotlin, opublikować ją w Container Registry i bezproblemowo uruchomić obraz w Google Cloud.

Ten przewodnik przeprowadzi Cię przez proces konfigurowania prostej aplikacji w Kotlinie, która pokazuje, jak korzystać z usług i narzędzi Google Cloud, w tym Jib, Container RegistryCloud Run.

Wymagania wstępne

  • Znajomość języka programowania Java i narzędzi
  • Znajomość standardowych edytorów tekstu systemu Linux, takich jak Vim, Emacs i nano

Jakie zadania wykonasz

  • Skonfiguruj aplikację Spring Boot w Kotlinie.
  • Utwórz zoptymalizowany obraz Dockera.
  • Opublikuj obraz w Container Registry.
  • Uruchom skonteneryzowaną aplikację w Cloud Run.

Czego potrzebujesz

  • projekt Google Cloud,
  • przeglądarka, np. Google Chrome;

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć).

Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID.

  1. Następnie musisz włączyć płatności w Cloud Console, aby móc korzystać z zasobów Google Cloud.

Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione.

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.

Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell .

Jeśli nigdy wcześniej nie uruchamiałeś(-aś) Cloud Shell, zobaczysz ekran pośredni (poniżej linii podziału) z opisem tego środowiska. W takim przypadku kliknij Dalej (i nie zobaczysz już tego ekranu). Ekran jednorazowy wygląda tak:

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ść, jeśli nie wszystkie, zadań w tym laboratorium możesz wykonać za pomocą przeglądarki lub Chromebooka.

Po połączeniu z Cloud Shell zobaczysz, że jesteś już uwierzytelniony, a projekt jest już ustawiony na Twój identyfikator projektu.

  1. 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`
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].
  1. Wygeneruj nową aplikację Spring Boot za pomocą Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

Pamiętaj, że Initializr automatycznie doda spring-boot-starter-web do zależności w pom.xml aplikacji szablonu.

  1. Przejdź do katalogu aplikacji szablonu.
$ cd kotlin-jib-cloud-run
  1. Skompiluj i uruchom aplikację za pomocą Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Po uruchomieniu aplikacja zacznie nasłuchiwać na porcie 8080. Aby uzyskać dostęp do aplikacji, na pasku narzędzi Cloud Shell kliknij Podgląd w przeglądarce i wybierz Podejrzyj na porcie 8080.

  1. Powinna zostać zwrócona odpowiedź 404, ponieważ aplikacja nie wykonuje jeszcze żadnych przydatnych działań. Zatrzymaj aplikację za pomocą Control+C.
  1. W pakiecie demonstracyjnym utwórz tę klasę Controller:
$ vi src/main/kotlin/com/example/demo/Controller.kt
    or
$ nano src/main/kotlin/com/example/demo/Controller.kt

src/main/kotlin/com/example/demo/Controller.kt

package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class Controller {
  
  @GetMapping("/")
  fun saySomething(): String {
    return "Kotlin app on Cloud Run, containerized by Jib!"
  }
}
  1. Ponownie skompiluj i uruchom aplikację.
$ ./mvnw spring-boot:run
  1. Sprawdź ponownie aplikację, korzystając z podglądu w przeglądarce . Tym razem powinien wyświetlić się komunikat „Kotlin app on Cloud Run, containerized by Jib!”. Zatrzymaj aplikację za pomocą klawisza Control+C.

Za pomocą Jib możesz w zoptymalizowany sposób konteneryzować aplikację bez użycia Dockera i publikować ją w dowolnym rejestrze kontenerów.

  1. Zanim przejdziesz dalej, musisz aktywować interfejs Container Registry API. Aby interfejs API był dostępny, wystarczy to zrobić raz w przypadku każdego projektu.
$ gcloud services enable containerregistry.googleapis.com
  1. Uruchom Jib, aby utworzyć obraz Dockera i opublikować go w Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

W końcu zobaczysz komunikat informujący o tym, że aplikacja została skonteneryzowana i przesłana do Container Registry.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

Jeśli pojawi się błąd, sprawdź, czy zmienna $GOOGLE_CLOUD_PROJECT jest prawidłowo ustawiona na identyfikator projektu Google Cloud (PROJECT_ID).

  1. Zanim przejdziesz dalej, sprawdź, czy obraz został opublikowany. Wróć do Cloud Console, kliknij Menu nawigacyjne i wybierz Container Registry.

Zobaczysz, że obraz został opublikowany.

Cloud Run udostępnia bezserwerowe kontenery, automatycznie skalując bezstanowe kontenery.

  1. Ponownie kliknij Menu nawigacyjne i wybierz Cloud Run.

Jeśli korzystasz z Cloud Run po raz pierwszy, zobaczysz to okno dialogowe z jednorazową konfiguracją. Jeśli pojawi się opcja Zacznij korzystać z Cloud Run, kliknij ją.

  1. Na stronie Cloud Run kliknij Utwórz usługę.

  1. Na następnym ekranie w sekcji Źródło kliknij Wybierz. Źródłem jest obraz, który chcesz uruchomić w Cloud Run.

  1. W oknie pojawi się utworzony wcześniej obraz. Wybierz obraz i kliknij Dalej.

  1. Wystarczy kilka kliknięć, aby wdrożyć aplikację. W sekcji Platforma wdrożenia wybierz Cloud Run (usługa w pełni zarządzana), aby usługa była w pełni zarządzana w Google Cloud. Wybierz region odpowiedni dla Twojej lokalizacji, zaznacz Zezwalaj na nieuwierzytelnione wywołania i kliknij Utwórz. Znakomicie.

Gdy obraz zostanie w pełni wdrożony, na stronie Cloud Run pojawi się adres URL umożliwiający dostęp do aplikacji. Sprawdź go.

Na koniec zobaczysz komunikat, którego oczekujesz od aplikacji.

Kotlin app on Cloud Run, containerized by Jib!

Znakomicie. Jeśli w przyszłości będziesz potrzebować wdrożyć nowe wersje aplikacji, możesz to zrobić, klikając na stronie Wdróż nową wersję.

  1. Aby wyczyścić środowisko, musisz usunąć wdrożoną aplikację w Cloud Run i opublikowany obraz w Container Registry. Otwórz Cloud Run, wybierz aplikację i kliknij Usuń.

  1. Podobnie otwórz stronę Container Registry i usuń obraz.

Gratulacje! Udało Ci się skonteneryzować aplikację Spring Boot Kotlin i wdrożyć ją w Cloud Run.

Za pomocą Jib udało Ci się utworzyć zoptymalizowany obraz kontenera bez instalowania Dockera i pisania pliku Dockerfile, a następnie opublikować go w Container Registry. Jib optymalizuje tworzenie obrazów, dzięki czemu każdy, kto nie ma dogłębnej wiedzy o Dockerze, może szybko i wydajnie konteneryzować aplikacje Java. Następnie kilkoma kliknięciami wdrożysz aplikację w Cloud Run, aby w mgnieniu oka zacząć ją udostępniać.

Więcej informacji