יצירת קונטיינרים של אפליקציית Spring Boot Kotlin ופריסה שלה ל-Cloud Run

1. לפני שמתחילים

Google מספקת כלי עוצמתי לפיתוח קובצי אימג' שבאמצעותו אפשר לפתח ולפרסם בקלות קובץ אימג' של קונטיינר Docker שמותאם לאפליקציות Java, בלי להשתמש ב-Docker או בקובץ Docker. ב-Google Cloud, קונטיינרים ללא שרת הופכים גם לקונטיינרים באמצעות Cloud Run, פלטפורמת מחשוב מנוהלת שמותאמת באופן אוטומטי לקונטיינרים ללא שמירת מצב. ב-Codelab הזה תראו כמה קל ליצור קונטיינרים לאפליקציית Spring Boot Kotlin, לפרסם ב-Container Registry ולהפעיל את התמונה ב-Google Cloud בצורה חלקה!

ב-Codelab הזה תלמד איך להגדיר אפליקציה פשוטה ב-Kotlin, שבה ניתן להשתמש בשירותים ובכלים של Google Cloud, כולל Jib , Container Registry ו-Cloud Run.

דרישות מוקדמות

  • היכרות עם שפת התכנות והכלים של Java
  • ידע בעורכי טקסט סטנדרטיים של Linux, כגון Vim, Emacs ו-nano

הפעולות שתבצעו:

  • מגדירים את אפליקציית Spring Boot Kotlin.
  • פיתוח תמונת Docker אופטימלית.
  • מפרסמים את התמונה ב-Container Registry.
  • מריצים את האפליקציה בקונטיינרים ב-Cloud Run.

למה תזדקק?

  • פרויקט ב-Google Cloud
  • דפדפן, כמו Google Chrome

2. בתהליך ההגדרה

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

אם לא הפעלתם את Cloud Shell בעבר, יוצג לכם מסך ביניים (בחלק הנגלל) שמתאר מהו. במקרה כזה, לוחצים על המשך (וזה לא יקרה שוב). כך נראה המסך החד-פעמי:

70f315d7b402b476.png

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

fbe3a0674c982259.png

במכונה הווירטואלית הזו משולבת כל כלי הפיתוח שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן או Chromebook.

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר למזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list

פלט הפקודה

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה ב-gcloud יודעת על הפרויקט שלכם:
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

אם היא לא נמצאת שם, תוכלו להגדיר אותה באמצעות הפקודה הבאה:

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].

3. אתחול אפליקציה של Spring Boot

  1. יצירת אפליקציה חדשה ל-Springboot באמצעות Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

חשוב לשים לב שהאתחול יוסיף באופן אוטומטי את spring-boot-starter-web ליחסי התלות שלך ב-pom.xml של אפליקציית התבנית.

  1. שינוי לספרייה של אפליקציית התבנית.
$ cd kotlin-jib-cloud-run
  1. פיתוח והפעלה של האפליקציה באמצעות Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. לאחר ההפעלה, האפליקציה תתחיל להאזין ליציאה 8080. כדי לגשת לאפליקציה, לוחצים על Web Preview396bfd51f55afb5d.pngבסרגל הכלים של Cloud Shell ובוחרים באפשרות Preview on Port 8080.

4172e1e141daf0c1.png

  1. אתם אמורים לקבל חזרה תגובת 404 כי האפליקציה עדיין לא עושה שום דבר מועיל. עצירת האפליקציה עם Control+C.

4. הוספה של בקר אינטרנט

  1. יוצרים את המחלקה הבאה 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. יוצרים מחדש ומפעילים את האפליקציה.
$ ./mvnw spring-boot:run
  1. צריך לבדוק את האפליקציה שוב באמצעות Web Preview a6cfcaa1d2119c52.png. הפעם אמורה להופיע ההודעה "Kotlin app on Cloud Run, containerized by Jib!". עצירת האפליקציה עם Control+C.

5. יצירת קונטיינרים של האפליקציה ופרסום שלהם ב-Container Registry

באמצעות Jib אתם יכולים ליצור קונטיינרים לאפליקציה בצורה אופטימלית ללא Docker ולפרסם אותם בכל מרשם קונטיינרים.

  1. כדי להמשיך, עליך להפעיל את Container Registry API. צריך לעשות זאת רק פעם אחת לכל פרויקט כדי שה-API יהיה נגיש.
$ gcloud services enable containerregistry.googleapis.com
  1. מריצים את Jib כדי ליצור קובץ אימג' של Docker ולפרסם אותו ב-Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

בסופו של דבר תופיע ההודעה הבאה, שלפיה האפליקציה נמצאת בקונטיינר והועברה ל-Container Registry שלכם.

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

אם מופיעה שגיאה, צריך לבדוק אם $GOOGLE_CLOUD_PROJECT מוגדר בצורה נכונה למזהה הפרויקט ב-Google Cloud (PROJECT_ID).

  1. לפני שממשיכים, כדאי לבדוק אם התמונה פורסמה בהצלחה. חוזרים אל מסוף Cloud, לוחצים על תפריט הניווט c8b4ea3c68f4c1e3.png ובוחרים באפשרות Container Registry.

6421550ba806beab.png

38ae0ca573c3dcd.png

תוכלו לראות שהתמונה פורסמה בהצלחה.

c9086605411691c3.png

6. הרצת האפליקציה בקונטיינרים ב-Cloud Run

Cloud Run מאפשר גישה ללא שרת (serverless) לקונטיינרים, ומשם באופן אוטומטי את הקונטיינרים ללא שמירת מצב.

  1. לוחצים שוב על תפריט הניווט c8b4ea3c68f4c1e3.png ובוחרים באפשרות Cloud Run.

812c7c87527ebe4a.png

אם זו הפעם הראשונה שאתם ניגשים ל-Cloud Run, תוצג תיבת הדו-שיח הבאה להגדרה חד-פעמית. לוחצים על Start Use Cloud Run (התחלת השימוש ב-Cloud Run) אם הוא מופיע.

1b2bf05712f6150a.png

  1. בדף Cloud Run, לוחצים על Create Service.

c0b4b980662f7807.png

  1. במסך הבא, לוחצים על בחירה בקטע מקור. המקור הוא התמונה שרוצים להריץ ב-Cloud Run.

2049621ae97d62ee.png

  1. בתיבת הדו-שיח תוצג התמונה שיצרתם קודם. בוחרים את התמונה ולוחצים על המשך.

564367bc65caefbf.png

  1. במרחק כמה לחיצות אפשר יהיה לבצע את הפריסה של האפליקציה. בקטע Deployment Platform (פלטפורמת פריסה), בוחרים באפשרות Cloud Run (managed+) כדי לנהל את השירות באופן מלא ב-Google Cloud. בוחרים אזור שמתאים למיקום שלכם, בוחרים באפשרות לאפשר הפעלות לא מאומתות ולוחצים על יצירה. זהו!

3eb0f51d15326cac.png

כשהתמונה נפרסת באופן מלא, בדף Cloud Run תוצג כתובת URL לגישה לאפליקציה. כדאי לבדוק!

8bf800dd6e2f44f2.png

בסוף תופיע ההודעה שאתם מצפים לקבל מהאפליקציה.

Kotlin app on Cloud Run, containerized by Jib!

זהו! בעתיד, אם תצטרכו לפרוס גרסאות חדשות של האפליקציה, תוכלו לעשות זאת בלחיצה על פריסת גרסה חדשה בדף.

7. הסרת המשאבים

  1. כדי לנקות את הסביבה, עליכם למחוק את האפליקציה שנפרסה ב-Cloud Run ואת התמונה שפורסמה ב-Container Registry. עוברים אל Cloud Run, בוחרים את האפליקציה ולוחצים על Delete.

1dfc2f51c1b5f6e.png

  1. באופן דומה, נכנסים לדף Container Registry ומוחקים את התמונה.

1b724136c1655935.png

8. מזל טוב

מעולה! יצרתם בהצלחה קונטיינרים לאפליקציית Spring Boot Kotlin ופרסתם אותה ל-Cloud Run!

באמצעות Jib, פיתחתם קובץ אימג' בקונטיינר שעבר אופטימיזציה בלי להתקין או לכתוב קובץ Docker, ופרסמתם אותו ב-Container Registry. מערכת Jib מבצעת אופטימיזציה של בניית תמונות, כך שכל מי ללא ידע מעמיק ב-Docker יכול ליצור קונטיינרים לאפליקציות Java במהירות וביעילות. לאחר מכן, בכמה קליקים, פרסתם את האפליקציה ב-Cloud Run כדי להתחיל להציג מודעות במהירות.

מידע נוסף