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

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

‫Google מספקת כלי עוצמתי ליצירת קובץ אימג' שמאפשר ליצור ולפרסם בקלות קובץ אימג' של קונטיינר של Docker שעברה אופטימיזציה לאפליקציות Java, בלי להשתמש ב-Docker או ב-קובץ Docker. ב-Google Cloud יש גם פתרון בלי שרת (serverless) לקונטיינרים – 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 Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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.png

38ae0ca573c3dcd.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

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

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 כדי להתחיל להציג אותה במהירות.

מידע נוסף