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

‫Google מספקת כלי עוצמתי ליצירת תמונות שמאפשר ליצור ולפרסם בקלות תמונת קונטיינר של Docker שעברה אופטימיזציה לאפליקציות Java, בלי להשתמש ב-Docker או ב-Dockerfile. ב-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

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

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

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

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

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

משתמשים חדשים ב-Google Cloud זכאים לתקופת ניסיון בחינם בשווי 300$.

Cloud Shell

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

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על Activate Cloud Shell .

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

הקצאת המשאבים וחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 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`
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].
  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. כדי לגשת לאפליקציה, לוחצים על Web Preview בסרגל הכלים של Cloud Shell ובוחרים באפשרות Preview on port 8080.

  1. צריך לקבל תשובה 404 כי האפליקציה עדיין לא עושה משהו שימושי. להפסיק את השימוש באפליקציה באמצעות Control+C.
  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. בודקים שוב את האפליקציה באמצעות תצוגה מקדימה של אתר . הפעם אמורה להופיע ההודעה Kotlin app on Cloud Run, containerized by Jib!. מפסיקים את האפליקציה באמצעות Control+C.

עם 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:1.8.0: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 Console, לוחצים על Navigation menu ובוחרים באפשרות Container Registry.

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

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

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

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

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

  1. במסך הבא, לוחצים על בחירה בקטע מקור. המקור הוא האימג' שרוצים להפעיל ב-Cloud Run.

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

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

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

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

Kotlin app on Cloud Run, containerized by Jib!

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

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

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

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

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

מידע נוסף