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

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

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

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

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

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

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

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

สิ่งที่คุณจะได้ทำ

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

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

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

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

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

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.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 ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานใน 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 แล้ว คุณสามารถใช้บรรทัดคำสั่งเพื่อสร้างแอป 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 วิธี ได้แก่ ใช้ Maven App Engine Plugin หรือ Gradle App Engine Plugin หรือทำให้ไดเรกทอรีแพ็กเกจ 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 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 แล้วเลือก Disable Application

8052c1e4ad73d70e.png

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

$ gcloud projects delete YOUR-PROJECT-ID

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

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

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