สร้างคอนเทนเนอร์แอป Spring Boot Kotlin แล้วทำให้ใช้งานได้ใน Cloud Run

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

Google มีเครื่องมือสร้างอิมเมจที่มีประสิทธิภาพซึ่งคุณสามารถใช้สร้างและเผยแพร่อิมเมจคอนเทนเนอร์ Docker ที่เพิ่มประสิทธิภาพสำหรับแอป Java ได้อย่างง่ายดายในเวลาอันรวดเร็วโดยไม่ต้องใช้ Docker หรือ Dockerfile นอกจากนี้ Google Cloud ยังนำเทคโนโลยีแบบไม่ใช้เซิร์ฟเวอร์มาใช้กับคอนเทนเนอร์ด้วย Cloud Run ซึ่งเป็นแพลตฟอร์มการประมวลผลที่มีการจัดการซึ่งจะปรับขนาดคอนเทนเนอร์แบบไม่เก็บสถานะโดยอัตโนมัติ ในโค้ดแล็บนี้ คุณจะได้เห็นว่าการทำแอป 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 ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

Cloud Shell

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

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

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

เครื่องเสมือนนี้มีเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เพียงเบราว์เซอร์หรือ 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 ก่อนดำเนินการต่อ โดยจำเป็นต้องดำเนินการอย่างน้อย 1 ครั้งต่อโปรเจ็กต์เพื่อให้เข้าถึง 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 Console คลิกเมนูการนำทาง c8b4ea3c68f4c1e3.png แล้วเลือก Container Registry

6421550ba806beab.png

38ae0ca573c3dcd.png

คุณจะเห็นว่าระบบเผยแพร่รูปภาพเรียบร้อยแล้ว

c9086605411691c3.png

6. เรียกใช้แอปที่สร้างโดยใช้คอนเทนเนอร์ใน Cloud Run

Cloud Run นำ Serverless มาสู่คอนเทนเนอร์ โดยจะปรับขนาดคอนเทนเนอร์แบบไม่เก็บสถานะโดยอัตโนมัติ

  1. คลิกเมนูการนำทาง c8b4ea3c68f4c1e3.png อีกครั้ง แล้วเลือก Cloud Run

812c7c87527ebe4a.png

หากเข้าถึง Cloud Run เป็นครั้งแรก คุณจะเห็นกล่องโต้ตอบต่อไปนี้สำหรับการตั้งค่าแบบครั้งเดียว คลิกเริ่มใช้ Cloud Run หากปรากฏขึ้น

1b2bf05712f6150a.png

  1. ในหน้า Cloud Run ให้คลิกสร้างบริการ

c0b4b980662f7807.png

  1. ในหน้าจอถัดไป ให้คลิกเลือกในส่วนแหล่งที่มา แหล่งที่มาคืออิมเมจที่ต้องการเรียกใช้ใน Cloud Run

2049621ae97d62ee.png

  1. กล่องโต้ตอบจะแสดงอิมเมจที่คุณสร้างไว้ก่อนหน้านี้ เลือกรูปภาพ แล้วคลิกต่อไป

564367bc65caefbf.png

  1. คุณสามารถคลิกเพียงไม่กี่ครั้งเพื่อติดตั้งใช้งานแอปได้เลย ในส่วนแพลตฟอร์มการทำให้ใช้งานได้ ให้เลือก Cloud Run (มีการจัดการครบวงจร) เพื่อให้ Google Cloud จัดการบริการอย่างเต็มรูปแบบ เลือกภูมิภาคที่เหมาะสมกับสถานที่ตั้งของคุณ เลือกอนุญาตการเรียกใช้ที่ไม่ได้รับการตรวจสอบสิทธิ์ แล้วคลิกสร้าง เท่านี้ก็เรียบร้อย

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 เพิ่มประสิทธิภาพการสร้างอิมเมจ เพื่อให้ทุกคนที่ไม่มีความรู้เกี่ยวกับ Docker อย่างลึกซึ้งสามารถใส่แอป Java ลงในคอนเทนเนอร์ได้อย่างรวดเร็วและมีประสิทธิภาพ จากนั้นเพียงไม่กี่คลิก คุณก็ทำให้แอปใช้งานได้ใน Cloud Run เพื่อเริ่มให้บริการได้ในเวลาอันรวดเร็ว

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