ทำให้แอป Spring Boot ใช้งานได้ในสภาพแวดล้อมมาตรฐานของ App Engine

1. ก่อนเริ่มต้น

แอป App Engine สร้างง่าย ดูแลรักษาง่าย และปรับขนาดได้ง่ายเมื่อความต้องการด้านการเข้าชมและการจัดเก็บข้อมูลเปลี่ยนแปลงไป App Engine ช่วยให้คุณไม่ต้องบำรุงรักษาเซิร์ฟเวอร์ เพียงอัปโหลดแอปของคุณ แอปก็จะพร้อมใช้งาน

แอป App Engine จะปรับขนาดโดยอัตโนมัติตามการเข้าชมที่เข้ามา ระบบรองรับการปรับสมดุลภาระงาน, ไมโครเซอร์วิส, การให้สิทธิ์, ฐานข้อมูล SQL และ NoSQL, การแคชในหน่วยความจำ, การแยกการรับส่งข้อมูล, การบันทึก, การค้นหา, การควบคุมเวอร์ชัน, การเปิดตัวและการย้อนกลับ รวมถึงการสแกนความปลอดภัยโดยค่าเริ่มต้น และปรับแต่งได้สูง

สภาพแวดล้อมมาตรฐานของ App Engine และสภาพแวดล้อมที่ยืดหยุ่นของ App Engine รองรับภาษาโปรแกรมมากมาย เช่น Java, Python, PHP, NodeJS และ Go สภาพแวดล้อมทั้ง 2 แบบช่วยให้นักพัฒนาแอปมีความยืดหยุ่นสูงสุดในการกำหนดลักษณะการทำงานของแอป แต่ละสภาพแวดล้อมก็มีจุดแข็งที่แตกต่างกัน ดูข้อมูลเพิ่มเติมได้ที่การเลือกสภาพแวดล้อม App Engine

คุณจะได้เรียนรู้วิธีทำให้แอป Spring Boot ใช้งานได้ในสภาพแวดล้อมมาตรฐานของ App Engine สภาพแวดล้อมมาตรฐานจะลดขนาดลงเหลือ 0 อินสแตนซ์เมื่อไม่มีใครใช้งาน และจะเพิ่มขนาดโดยอัตโนมัติ

ข้อกำหนดเบื้องต้น

  • ความคุ้นเคยกับภาษาโปรแกรมและเครื่องมือ Java
  • ความรู้เกี่ยวกับโปรแกรมแก้ไขข้อความมาตรฐานของ Linux เช่น Vim, Emacs และ nano

สิ่งที่คุณต้องทำ

  • วิธีสร้างแอป Java ของ Spring Boot ใน App Engine

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • เบราว์เซอร์ เช่น Google Chrome

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

Cloud Shell

คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell 853e55310c205094.png

55efc1aaa7a4d3ad.png

หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

9c92662c6a846a5c.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

9f0e51b578fecce5.png

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์

เมื่อเชื่อมต่อกับ 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 แล้ว คุณจะใช้บรรทัดคำสั่งเพื่อสร้างแอป Spring Boot ใหม่ด้วย 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. อัปเดต Maven pom.xml

การทําให้แอปเซิร์ฟเวอร์ Java ใช้งานได้มี 2 วิธี ได้แก่ การใช้ปลั๊กอิน App Engine ของ Maven หรือปลั๊กอิน App Engine ของ Gradle หรือการทําให้ไดเรกทอรีแพ็กเกจ war ใช้งานได้ คุณจะใช้ปลั๊กอิน Maven App Engine เพื่อทำให้แอปใช้งานได้

เพิ่ม Maven App Engine Plugin

อัปเดต 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 Boot ได้ด้วยปลั๊กอิน Spring Boot โดยทำดังนี้
$ ./mvnw -DskipTests spring-boot:run
  1. หลังจากแอปเริ่มทำงานแล้ว ให้คลิกตัวอย่างเว็บ1a94d5bd10bfc072.pngในแถบเครื่องมือ Cloud Shell แล้วเลือกแสดงตัวอย่างบนพอร์ต 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 Console แล้วเลือก Disable Application

8052c1e4ad73d70e.png

หรือจะลบทั้งโปรเจ็กต์ก็ได้โดยทำดังนี้

$ gcloud projects delete YOUR-PROJECT-ID

10. ขอแสดงความยินดี

คุณได้เรียนรู้วิธีเขียนเว็บแอป App Engine แรกแล้ว

ดูข้อมูลเพิ่มเติม