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

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

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

2. การตั้งค่า

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

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

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

Cloud Shell

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

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

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน 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`
  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 ไปยังทรัพยากร Dependency ใน 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 ก่อนดำเนินการต่อ คุณต้องดำเนินการนี้เพียงครั้งเดียวต่อโปรเจ็กต์เพื่อให้ 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 เป็นครั้งแรก คุณจะเห็นกล่องโต้ตอบต่อไปนี้สำหรับการตั้งค่าแบบครั้งเดียว คลิก Start Using 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 คุณสร้างอิมเมจคอนเทนเนอร์ที่มีการเพิ่มประสิทธิภาพได้โดยไม่ต้องติดตั้งหรือเขียน Dockerfile และเผยแพร่ไปยัง Container Registry Jib เพิ่มประสิทธิภาพการสร้างอิมเมจ ดังนั้นใครก็ตามที่ไม่มีความรู้เรื่อง Docker ในเชิงลึกจะสามารถสร้างคอนเทนเนอร์แอป Java ได้อย่างรวดเร็วและมีประสิทธิภาพ จากนั้นคุณทำให้แอปใช้งานได้ใน Cloud Run ด้วยการคลิกเพียงไม่กี่ครั้ง เพื่อเริ่มให้บริการได้ในทันที

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