Konteneryzacja aplikacji Spring Run Kotlin i wdrożenie jej w Cloud Run

Google udostępnia zaawansowane narzędzie do tworzenia obrazów, które pozwala szybko tworzyć i publikować zoptymalizowane obrazy kontenerów Dockera pod kątem aplikacji w języku Java. Google Cloud wprowadza również bezserwerowe kontenery za pomocą Cloud Run – zarządzanej platformy obliczeniowej, która automatycznie skaluje bezstanowe kontenery. Z tego ćwiczenia dowiesz się, jak łatwo jest skonteneryzować aplikację Spring Boot Kotlin, opublikować ją w Container Registry i w łatwy sposób uruchomić obraz w Google Cloud.

Dzięki nim dowiesz się, jak skonfigurować prostą aplikację w Kotlin, która prezentuje usługi i narzędzia Google Cloud, takie 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.
  • Uruchom konteneryzowaną aplikację w Cloud Run.

Czego potrzebujesz

  • Projekt Google Cloud
  • Przeglądarka taka jak Google Chrome

Konfiguracja środowiska we własnym tempie

  1. Zaloguj się w Cloud Console i utwórz nowy projekt lub ponownie wykorzystaj istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa została już użyta i nie będzie działać). W ćwiczeniach nazywamy je później PROJECT_ID.

  1. Aby móc używać zasobów Google Cloud, musisz najpierw włączyć płatności w Cloud Console.

Ćwiczenia z programowania nie powinny kosztować więcej niż kilka dolarów, ale mogą być większe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz to uruchomione.

Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnej wersji próbnej 300 USD.

Cloud Shell

Google Cloud można uruchomić zdalnie z laptopa, ale w tym ćwiczeniu z programowania będziesz korzystać z Cloud Shell – środowiska wiersza poleceń uruchomionego w Google Cloud.

Aktywowanie Cloud Shell

  1. W Cloud Console kliknij Aktywuj Cloud Shell .

Jeśli nie korzystasz jeszcze z Cloud Shell, wyświetli się pośredni ekran (w części strony widocznej po przewinięciu), na którym widać, co to jest. Jeśli tak jest, kliknij Dalej (tj. nie zobaczysz tego ponownie). Tak wygląda jednorazowy ekran:

Udostępnienie usługi Cloud Shell i połączenie się z nią powinno zająć kilka minut.

Ta maszyna wirtualna jest wyposażona we wszystkie potrzebne narzędzia dla programistów. Oferuje trwały katalog domowy o pojemności 5 GB oraz działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. Znaczna część (lub nawet całość) zadań z tego ćwiczenia z programowania można wykonać w przeglądarce lub na Chromebooku.

Po połączeniu z Cloud Shell powinno być widoczne, że projekt jest już uwierzytelniony, a projekt jest już ustawiony na jego identyfikator.

  1. Uruchom następujące polecenie w Cloud Shell, aby potwierdzić, że jesteś uwierzytelniony:
gcloud auth list

Polecenie wyjściowe

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Polecenie wyjściowe

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

Polecenie wyjściowe

Updated property [core/project].
  1. Wygeneruj nową aplikację Spring Starter podczas uruchamiania 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 inicjator automatycznie doda spring-boot-starter-web do zależności w aplikacji pom.xml z szablonem.

  1. Przejdź do katalogu aplikacji szablonu.
$ cd kotlin-jib-cloud-run
  1. Utwórz i uruchom aplikację za pomocą Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. Gdy to zrobisz, aplikacja zacznie nasłuchiwać na porcie 8080. Kliknij Podgląd w przeglądarce na pasku narzędzi Cloud Shell i wybierz Podgląd na porcie 8080, aby otworzyć aplikację.

  1. Otrzymasz odpowiedź 404, ponieważ aplikacja nie wykonała jeszcze żadnych działań. Zatrzymaj aplikację za pomocą Control+C.
  1. Utwórz tę klasę 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. Utwórz ponownie aplikację i uruchom ją.
$ ./mvnw spring-boot:run
  1. Ponownie sprawdź aplikację, korzystając z Podglądu w przeglądarce. Tym razem powinien pojawić się komunikat "Kotlin app on Cloud Run, containerized by Jib!". Zatrzymaj aplikację, używając Control+C.

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

  1. Zanim przejdziesz dalej, musisz aktywować interfejs Container Registry API. Wystarczy to zrobić tylko raz dla każdego projektu, 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:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

W kolejnym kroku zobaczysz komunikat informujący, że aplikacja została 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 zobaczysz błąd, sprawdź dokładnie, czy identyfikator $GOOGLE_CLOUD_PROJECT jest poprawnie ustawiony dla Twojego identyfikatora 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 przenosi bezserwerowe kontenery do automatycznego skalowania bezstanowych kontenerów.

  1. Ponownie kliknij menu nawigacyjne i wybierz Cloud Run.

Jeśli po raz pierwszy korzystasz z Cloud Run, zobaczysz jednorazowe okno konfiguracji. Kliknij Zacznij korzystać z Cloud Run, jeśli się pojawi.

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

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

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

  1. Już tylko kilka kliknięć dzieli Cię od wdrożenia aplikacji. W sekcji Platforma wdrożenia wybierz Cloud Run (usługa w pełni zarządzana), aby w pełni zarządzać usługą w Google Cloud. Wybierz region odpowiedni dla Twojej lokalizacji, wybierz Zezwalaj na nieuwierzytelnione wywołania i kliknij Utwórz. To już wszystko

Po pełnym wdrożeniu obrazu strona Cloud Run wyświetli URL umożliwiający dostęp do aplikacji. Sprawdź to.

Na końcu zobaczysz komunikat, którego oczekujesz od aplikacji.

Kotlin app on Cloud Run, containerized by Jib!

To już wszystko Jeśli w przyszłości będzie trzeba wdrożyć nowe wersje aplikacji, będzie można kliknąć Wdróż nową wersję na stronie.

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

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

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

Za pomocą Jib udało się utworzyć zoptymalizowany obraz kontenera bez zainstalowania Dockera lub zapisu jego pliku i opublikować go w Container Registry. Jib optymalizuje konstrukcję obrazów, więc każdy, kto nie dysponuje dogłębną wiedzą na temat Dockera, może szybko i wydajnie konteneryzować aplikacje Java. Następnie wystarczy kilka kliknięć, aby wdrożyć aplikację w Cloud Run i szybko rozpocząć jej udostępnianie.

Więcej informacji