פריסת אפליקציית Spring Boot בסביבה סטנדרטית של App Engine

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

קל ליצור אפליקציות של App Engine, לתחזק אותן ולהתאים אותן לעומס, ככל שנפח התנועה והאחסון של הנתונים משתנים. באמצעות App Engine אין שרתים לתחזק. פשוט מעלים את האפליקציה והיא מוכנה לפעולה.

אפליקציות App Engine מותאמות באופן אוטומטי לעומס, לפי התנועה הנכנסת. תמיכה מקומית: איזון עומסים, מיקרו-שירותים, הרשאות, מסדי נתונים של SQL ו-NoSQL, שמירה במטמון של זיכרון, פיצול תנועה, רישום ביומן, חיפוש, ניהול גרסאות, השקות ושינויים חוזרים ובסריקת אבטחה.

הסביבה הסטנדרטית של App Engine והסביבה הגמישה של App Engine תומכות במגוון שפות תכנות, כולל Java, Python, PHP, NodeJS ו-Go. שתי הסביבות מספקות למפתחים גמישות מקסימלית לגבי אופן הפעולה של האפליקציה שלהם. לכל סביבה יש יתרונות מסוימים. למידע נוסף, קראו את המאמר בחירת סביבה של App Engine.

תלמדו לפרוס אפליקציית Spring Boot בסביבה הרגילה של App Engine. הסביבה הרגילה מוקטנת לאפס מופעים כשאין אף אחד בשימוש בה, וההתאמה לעומס (scaling) מתבצעת באופן אוטומטי!

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

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

מה תעשו

  • איך יוצרים אפליקציית Spring Boot Java ב-App Engine

מה צריך להכין

2. הגדרה ודרישות

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

Cloud Shell

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

הפעלת Cloud Shell

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

אחרי ההתחברות ל-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

אחרי ההשקה של Cloud Shell, תוכלו להשתמש בשורת הפקודה כדי ליצור אפליקציית Springboot חדשה עם Spring Initializr.

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web \
  -d type=maven-project \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

4. עדכון pom.xml של Maven

יש שתי דרכים לפרוס אפליקציית שרת Java – באמצעות תוכנת הפלאגין Maven App Engine או הפלאגין Gradle App Engine, או על ידי פריסה של ספריית החבילות war. כדי לפרוס את האפליקציה צריך להשתמש ב-Maven App Engine Plugin.

הוספת הפלאגין של Maven App Engine

צריך לעדכן את pom.xml כך שיכלול פלאגין של Google Cloud לפשט את תהליך הפריסה. אפשר לערוך את הקובץ באמצעות Vim, nano או Emacs.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>

5. הוספת מתאר של App Engine

  1. כדי לפרוס את האפליקציה בסביבה הרגילה של App Engine, צריך ליצור קובץ מתאר src/main/appengine/app.yaml חדש.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. עורכים את הקובץ src/main/appengine/app.yaml ומוסיפים את התוכן הבא:

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. הוספת שלט רחוק

הוספת בקר חדש שמחזיר "hello world!" ב-DemoApplication.java.

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

// Add the controller.
@RestController
class HelloWorldController {
  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}

7. הפעלה מקומית של האפליקציה

  1. צריך לוודא שגרסת JAVA_HOME מוגדרת לגרסה הנכונה של JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. אפשר להפעיל את האפליקציה Spring shoes באמצעות הפלאגין Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. אחרי שהאפליקציה מופעלת, לוחצים על Web Preview1a94d5bd10bfc072.pngבסרגל הכלים של Cloud Shell ובוחרים באפשרות Preview on Port 8080.

3aca52f76c6c22a3.png

כרטיסייה בדפדפן נפתחת ומתחברת לשרת שהתחלתם.

7b0d8494f647822a.png

8. פריסת האפליקציה ב-App Engine

  1. קודם כול, צריך לאתחל את הפרויקט כדי לאפשר לך להריץ אפליקציות של App Engine. בנוסף, צריך לאתחל את הפרויקט כדי שיפעל באזור המרכזי של ארה"ב.
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. לאחר מכן, עליכם לפרוס את האפליקציה בסביבה הסטנדרטית של App Engine באמצעות הרצה של mvn appengine:deploy.
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. אחרי שהאפליקציה נפרסת, אפשר להיכנס אליה על ידי פתיחת http://<project-id>.appspot.com בדפדפן האינטרנט או שימוש בפקודה הבאה ב-Cloud Shell:
$ gcloud app browse
... [It may print out the URL for your app]

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

לא ניתן למחוק אפליקציה של App Engine אך ניתן להשבית אותה.

נכנסים אל App Engine ו-Settings במסוף Google Cloud ובוחרים באפשרות Disable Application:

8052c1e4ad73d70e.png

לחלופין, אפשר למחוק את הפרויקט כולו:

$ gcloud projects delete YOUR-PROJECT-ID

10. מזל טוב

למדת לכתוב את אפליקציית האינטרנט הראשונה שלך ב-App Engine!

מידע נוסף