יצירת קונטיינרים של אפליקציית 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 ועם כלים של Java
  • ידע בכלי עריכת טקסט סטנדרטיים של Linux, כמו Vim,‏ Emacs ו-nano

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

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

הדרישות

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

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

הגדרת סביבה בקצב אישי

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

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

  1. לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.

העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' שבו מוסבר איך להשבית משאבים כדי שלא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

Cloud Shell

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

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על 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. יוצרים אפליקציית Spring Boot חדשה באמצעות Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

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

  1. עוברים לספרייה של אפליקציית התבנית.
$ cd kotlin-jib-cloud-run
  1. מפתחים ומריצים את האפליקציה באמצעות Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. אחרי ההפעלה, האפליקציה תתחיל להאזין ליציאה 8080. לוחצים על תצוגה מקדימה של אתר 396bfd51f55afb5d.pngבסרגל הכלים של Cloud Shell ובוחרים באפשרות תצוגה מקדימה ביציאה 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. בודקים שוב את האפליקציה באמצעות תצוגה מקדימה של אתר 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.png38ae0ca573c3dcd.png

התמונה תפורסם בהצלחה.

c9086605411691c3.png

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

‫Cloud Run מאפשר להריץ קונטיינרים בלי שרתים, ומתאים את גודל הקונטיינרים בלי שמירת מצב באופן אוטומטי.

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

812c7c87527ebe4a.png

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

1b2bf05712f6150a.png

  1. בדף Cloud Run, לוחצים על יצירת שירות.

c0b4b980662f7807.png

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

2049621ae97d62ee.png

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

564367bc65caefbf.png

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

3eb0f51d15326cac.png

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

8bf800dd6e2f44f2.png

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

Kotlin app on Cloud Run, containerized by Jib!

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

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

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

1dfc2f51c1b5f6e.png

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

1b724136c1655935.png

8. מזל טוב

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

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

מידע נוסף