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

1. Zanim zaczniesz

Google udostępnia zaawansowane narzędzie do tworzenia obrazów, które pozwala łatwo utworzyć i opublikować zoptymalizowany obraz kontenera Dockera na potrzeby aplikacji w języku Java bez użycia Dockera czy Dockerfile. Google Cloud udostępnia też kontenery bezserwerowe za pomocą Cloud Run – zarządzanej platformy obliczeniowej, która automatycznie skaluje bezstanowe kontenery. Dzięki temu ćwiczeniu w programowaniu dowiesz się, jak łatwo jest skonteneryzować aplikację Spring Boot Kotlin, opublikować ją w Container Registry i sprawnie uruchomić obraz w Google Cloud.

Dzięki nim dowiesz się, jak skonfigurować prostą aplikację w Kotlin. Przedstawia ona korzystanie z usług i narzędzi Google Cloud, takich jak Jib, Container Registry i Cloud Run.

Wymagania wstępne

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

Jakie zadania wykonasz

  • Skonfiguruj aplikację Spring Boot Kotlin.
  • Utwórz zoptymalizowany obraz Dockera.
  • Opublikuj obraz w Container Registry.
  • uruchomić skonteneryzowaną aplikację w Cloud Run;

Czego potrzebujesz

  • Projekt Google Cloud
  • przeglądarki, na przykład Google Chrome;

2. Przygotowanie

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID.

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

Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Cloud Shell – środowisko wiersza poleceń działające w Google Cloud.

Aktywowanie Cloud Shell

  1. W konsoli Cloud kliknij Aktywuj Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Jeśli dopiero zaczynasz korzystać z Cloud Shell, wyświetli się ekran pośredni (w części strony widocznej po przewinięciu) z opisem tej funkcji. W takim przypadku kliknij Dalej (nie zobaczysz go więcej). Tak wygląda ten jednorazowy ekran:

70f315d7b402b476.png

Uzyskanie dostępu do Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

fbe3a0674c982259.png

Ta maszyna wirtualna ma 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ść czynności z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.

Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu.

  1. Uruchom to polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list

Dane wyjściowe polecenia

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Uruchom to polecenie w Cloud Shell, aby sprawdzić, czy polecenie gcloud zna Twój projekt:
gcloud config list project

Dane wyjściowe polecenia

[core]
project = <PROJECT_ID>

Jeśli tak nie jest, możesz go ustawić za pomocą tego polecenia:

gcloud config set project <PROJECT_ID>

Dane wyjściowe polecenia

Updated property [core/project].

3. Inicjowanie aplikacji Spring Boot

  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 narzędzie Zdarzenie inicjujące automatycznie doda spring-boot-starter-web do zależności w sekcji pom.xml aplikacji z szablonami.

  1. Przejdź do katalogu aplikacji do tworzenia szablonów.
$ 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. Kliknij Podgląd w przeglądarce396bfd51f55afb5d.png na pasku narzędzi Cloud Shell i wybierz Podejrzyj na porcie 8080, aby uzyskać dostęp do aplikacji.

4172e1e141daf0c1.png

  1. Powinien wyświetlić się komunikat 404, ponieważ aplikacja nie jest jeszcze przydatna. Zatrzymaj aplikację za pomocą funkcji Control+C.

4. Dodaj kontroler sieciowy

  1. Utwórz tę klasę w języku Controller w pakiecie demonstracyjnym:
$ 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ź aplikację ponownie za pomocą podglądu w przeglądarce a6cfcaa1d2119c52.png. Tym razem powinien wyświetlić się komunikat „Kotlin app on Cloud Run, containerized by Jib!”. Zatrzymaj aplikację za pomocą funkcji Control+C.

5. Konteneryzowanie aplikacji i publikowanie jej w Container Registry

Dzięki Jib możesz skonteneryzować aplikację w zoptymalizowany sposób bez Dockera i opublikować ją w dowolnym rejestrze kontenerów.

  1. Zanim przejdziesz dalej, musisz aktywować interfejs Container Registry API. Wystarczy to zrobić raz w każdym projekcie, aby udostępnić interfejs API.
$ 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:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

W końcu zobaczysz komunikat informujący o tym, że aplikacja jest skonteneryzowana i przekazana 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, dokładnie sprawdź, czy w parametrze $GOOGLE_CLOUD_PROJECT jest poprawnie ustawiony identyfikator Twojego projektu Google Cloud (PROJECT_ID).

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

6421550ba806beab.png

38ae0ca573c3dcd.png

Zobaczysz, że obraz został opublikowany.

c9086605411691c3.png

6. Uruchamianie skonteneryzowanej aplikacji w Cloud Run

Cloud Run wprowadza do kontenerów rozwiązania bezserwerowe i automatycznie skaluje bezstanowe kontenery.

  1. Ponownie kliknij Menu nawigacyjnec8b4ea3c68f4c1e3.png i wybierz Cloud Run.

812c7c87527ebe4a.png

Jeśli po raz pierwszy uzyskujesz dostęp do Cloud Run, zobaczysz widoczne poniżej okno konfiguracji jednorazowej. Jeśli opcja Start Using Cloud Run (Rozpocznij używanie Cloud Run) się pojawi, kliknij ją.

1b2bf05712f6150a.png

  1. Na stronie Cloud Run kliknij Create Service (Utwórz usługę).

c0b4b980662f7807.png

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

2049621ae97d62ee.png

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

564367bc65caefbf.png

  1. Tylko kilka kliknięć dzieli Cię od wdrożenia aplikacji. W sekcji Deployment platform (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.

3eb0f51d15326cac.png

Po pełnym wdrożeniu obrazu na stronie Cloud Run wyświetli się adres URL umożliwiający dostęp do aplikacji. Wypróbuj

8bf800dd6e2f44f2.png

Na koniec zobaczysz komunikat, jakiego oczekujesz od aplikacji.

Kotlin app on Cloud Run, containerized by Jib!

Znakomicie. Jeśli w przyszłości konieczne będzie wdrożenie nowych wersji aplikacji, możesz to zrobić, klikając Wdróż nową wersję na stronie.

7. Czyszczenie danych

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

1dfc2f51c1b5f6e.png

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

1b724136c1655935.png

8. Gratulacje

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

Korzystając z Jib, udało Ci się skompilować zoptymalizowany obraz kontenera bez zainstalowania Dockera lub napisać pliku Dockerfile i opublikować go w Container Registry. Jib optymalizuje tworzenie obrazów, więc każdy, kto nie ma dogłębnej wiedzy na temat Dockera, może szybko i efektywnie skonteneryzować aplikacje w języku Java. Następnie za pomocą kilku kliknięć wdrożyłeś aplikację w Cloud Run, aby od razu zacząć ją udostępniać.

Więcej informacji