ปัจจุบัน
จับคู่ Cloud Run กับ Firebase Hosting เพื่อสร้างและแสดงเนื้อหาแบบไดนามิก หรือสร้าง REST API เป็น Microservice
เมื่อใช้ Cloud Run คุณจะทําให้แอปพลิเคชันที่แพ็กเกจในอิมเมจคอนเทนเนอร์ใช้งานได้ จากนั้นใช้ Firebase Hosting เพื่อส่งคำขอ HTTPS เพื่อทริกเกอร์แอปที่อยู่ในคอนเทนเนอร์
- Cloud Run รองรับหลายภาษา (รวมถึง Go, Node.js, Python และ Java) ซึ่งช่วยให้คุณมีความยืดหยุ่นในการใช้ภาษาโปรแกรมและเฟรมเวิร์กที่ต้องการ
- Cloud Run ปรับขนาดภาพคอนเทนเนอร์โดยอัตโนมัติและปรับขนาดในแนวนอนเพื่อจัดการกับคำขอที่ได้รับ จากนั้นจะปรับขนาดลงเมื่อความต้องการลดลง
- คุณจ่ายเฉพาะค่า CPU, หน่วยความจำ และเครือข่ายที่ใช้ในระหว่างการจัดการคําขอเท่านั้น
ดูตัวอย่าง Use Case และตัวอย่างสําหรับ Cloud Run ที่ผสานรวมกับ Firebase Hosting ได้ที่ภาพรวมเกี่ยวกับ Serverless
คู่มือนี้จะแสดงวิธีต่อไปนี้
- เขียนแอปพลิเคชัน Hello World แบบง่าย
- จัดคอนเทนเนอร์ของแอปและอัปโหลดไปยัง Artifact Registry
- ทำให้อิมเมจคอนเทนเนอร์ใช้งานได้กับ Cloud Run
- ส่งHostingคำขอไปยังแอปที่อยู่ในคอนเทนเนอร์โดยตรง
โปรดทราบว่าหากต้องการปรับปรุงประสิทธิภาพของการแสดงเนื้อหาแบบไดนามิก คุณสามารถปรับการตั้งค่าแคชได้ (ไม่บังคับ)
ก่อนเริ่มต้น
ก่อนใช้ Cloud Run คุณต้องทํางานเบื้องต้นบางอย่างให้เสร็จสิ้น ซึ่งรวมถึงการตั้งค่าบัญชี Cloud Billing, เปิดใช้ Cloud Run API และติดตั้งเครื่องมือบรรทัดคําสั่ง gcloud
ตั้งค่าการเรียกเก็บเงินสำหรับโปรเจ็กต์
Cloud Run มีโควต้าการใช้งานฟรี แต่คุณยังคงต้องมีบัญชี Cloud Billing ที่เชื่อมโยงกับโปรเจ็กต์ Firebase เพื่อใช้หรือทดลองใช้ Cloud Run
เปิดใช้ API และติดตั้ง SDK
เปิดใช้ Cloud Run API ในคอนโซล Google API
เปิดหน้า Cloud Run API ในคอนโซล Google API
เลือกโปรเจ็กต์ Firebase เมื่อได้รับข้อความแจ้ง
คลิกเปิดใช้ในหน้า Cloud Run API
ติดตั้งและเริ่มต้นใช้งาน Cloud SDK
ตรวจสอบว่าเครื่องมือ
gcloud
ได้รับการกําหนดค่าสําหรับโปรเจ็กต์ที่ถูกต้องgcloud config list
ขั้นตอนที่ 1: เขียนแอปพลิเคชันตัวอย่าง
โปรดทราบว่า Cloud Run รองรับภาษาอื่นๆ อีกมากมาย นอกเหนือจากภาษาที่แสดงในตัวอย่างต่อไปนี้
Go
สร้างไดเรกทอรีใหม่ชื่อ
helloworld-go
จากนั้นเปลี่ยนไดเรกทอรีเป็น ดังนี้mkdir helloworld-go
cd helloworld-go
สร้างไฟล์ใหม่ชื่อ
helloworld.go
แล้วเพิ่มโค้ดต่อไปนี้โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสมบูรณ์แล้วและพร้อมที่จะบรรจุคอนเทนเนอร์และอัปโหลดไปยัง Artifact Registry
Node.js
สร้างไดเรกทอรีใหม่ชื่อ
helloworld-nodejs
จากนั้นเปลี่ยนไดเรกทอรีเป็นไดเรกทอรีนั้นmkdir helloworld-nodejs
cd helloworld-nodejs
สร้างไฟล์
package.json
ที่มีเนื้อหาต่อไปนี้สร้างไฟล์ใหม่ชื่อ
index.js
แล้วเพิ่มโค้ดต่อไปนี้โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสมบูรณ์แล้วและพร้อมที่จะใส่คอนเทนเนอร์และอัปโหลดไปยัง Artifact Registry
Python
สร้างไดเรกทอรีใหม่ชื่อ
helloworld-python
จากนั้นเปลี่ยนไดเรกทอรีเป็นไดเรกทอรีนั้นmkdir helloworld-python
cd helloworld-python
สร้างไฟล์ใหม่ชื่อ
app.py
แล้วเพิ่มโค้ดต่อไปนี้โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสมบูรณ์แล้วและพร้อมที่จะบรรจุคอนเทนเนอร์และอัปโหลดไปยัง Artifact Registry
Java
ติดตั้ง JDK ของ Java SE 8 ขึ้นไป และ CURL
โปรดทราบว่าเราจําเป็นต้องทําเช่นนี้เพื่อสร้างโปรเจ็กต์เว็บใหม่ในขั้นตอนถัดไปเท่านั้น Dockerfile ซึ่งจะอธิบายในภายหลังจะโหลดข้อกำหนดทั้งหมดลงในคอนเทนเนอร์
จากคอนโซล ให้สร้างโปรเจ็กต์เว็บใหม่เปล่าโดยใช้ cURL แล้วใช้คำสั่งแตกไฟล์ ดังนี้
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
ซึ่งจะสร้างโปรเจ็กต์ SpringBoot
อัปเดตคลาส
SpringBootApplication
ในsrc/main/java/com/example/helloworld/HelloworldApplication.java
โดยเพิ่ม@RestController
เพื่อจัดการการแมป/
และเพิ่มฟิลด์@Value
เพื่อระบุตัวแปรสภาพแวดล้อมTARGET
โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสมบูรณ์แล้วและพร้อมที่จะใส่คอนเทนเนอร์และอัปโหลดไปยัง Artifact Registry
ขั้นตอนที่ 2: บรรจุแอปลงในคอนเทนเนอร์และอัปโหลดไปยัง Artifact Registry
บรรจุแอปตัวอย่างลงในคอนเทนเนอร์โดยสร้างไฟล์ใหม่ชื่อ
Dockerfile
ในไดเรกทอรีเดียวกับไฟล์ต้นทาง คัดลอกเนื้อหาต่อไปนี้ลงในไฟล์Go
Node.js
Python
Java
สร้างอิมเมจคอนเทนเนอร์โดยใช้ Cloud Build โดยเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีที่มี Dockerfile
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
เมื่อดำเนินการเสร็จเรียบร้อยแล้ว คุณจะเห็นข้อความ "สำเร็จ" ที่มีชื่อรูปภาพ
(gcr.io/PROJECT_ID/helloworld
)
ตอนนี้ระบบจะจัดเก็บรูปภาพคอนเทนเนอร์ไว้ใน Artifact Registry และสามารถนำกลับมาใช้ใหม่ได้หากต้องการ
โปรดทราบว่าคุณใช้ Docker เวอร์ชันที่ติดตั้งในเครื่องเพื่อสร้างคอนเทนเนอร์ในเครื่องแทน Cloud Build ได้
ขั้นตอนที่ 3: ติดตั้งใช้งานอิมเมจคอนเทนเนอร์ใน Cloud Run
ติดตั้งใช้งานโดยใช้คําสั่งต่อไปนี้
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
เมื่อได้รับข้อความแจ้ง ให้ทำดังนี้
- เลือกภูมิภาค (เช่น
us-central1
) - ยืนยันชื่อบริการ (เช่น
helloworld
) - ตอบ
Y
เป็น อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
- เลือกภูมิภาค (เช่น
โปรดรอสักครู่เพื่อให้การทำให้ใช้งานได้เสร็จสมบูรณ์ หากดำเนินการสำเร็จ บรรทัดคำสั่งจะแสดง URL ของบริการ เช่น
https://helloworld-RANDOM_HASH-us-central1.a.run.app ไปที่คอนเทนเนอร์ที่ติดตั้งใช้งานโดยเปิด URL ของบริการในเว็บเบราว์เซอร์
ขั้นตอนถัดไปจะอธิบายวิธีเข้าถึงแอปคอนเทนเนอร์นี้จากFirebase Hosting URL เพื่อให้สร้างเนื้อหาแบบไดนามิกสำหรับเว็บไซต์ที่โฮสต์โดย Firebase ได้
ขั้นตอนที่ 4: ส่งคำขอโฮสติ้งไปยังแอปที่ใช้คอนเทนเนอร์โดยตรง
กฎการเขียนใหม่ช่วยให้คุณกําหนดเส้นทางคําขอที่ตรงกับรูปแบบที่เฉพาะเจาะจงไปยังปลายทางเดียวได้
ตัวอย่างต่อไปนี้แสดงวิธีกําหนดเส้นทางคําขอทั้งหมดจากหน้า /helloworld
ในเว็บไซต์ Hosting เพื่อทริกเกอร์การเริ่มต้นและเรียกใช้อินสแตนซ์คอนเทนเนอร์ helloworld
โปรดตรวจสอบดังนี้
คุณมี Firebase CLI เวอร์ชันล่าสุด
คุณได้เริ่มต้น Firebase Hosting แล้ว
ดูวิธีการโดยละเอียดเกี่ยวกับการติดตั้ง CLI และเริ่มต้นใช้งาน Hosting ได้ที่คู่มือเริ่มต้นใช้งาน Hosting
เปิดไฟล์
firebase.json
เพิ่มการกําหนดค่า
rewrite
ต่อไปนี้ในส่วนhosting
"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
ติดตั้งใช้งานการกำหนดค่าโฮสติ้งในเว็บไซต์โดยเรียกใช้คำสั่งต่อไปนี้จากรูทของไดเรกทอรีโปรเจ็กต์
firebase deploy --only hosting
ตอนนี้คุณเข้าถึงคอนเทนเนอร์ผ่าน URL ต่อไปนี้ได้แล้ว
ซับโดเมน Firebase ของคุณ
PROJECT_ID.web.app/
และPROJECT_ID.firebaseapp.com/
โดเมนที่กำหนดเองที่เชื่อมต่ออยู่
CUSTOM_DOMAIN/
ไปที่Hostingหน้าการกําหนดค่าเพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับกฎการเขียนใหม่ นอกจากนี้ คุณยังดูข้อมูลเกี่ยวกับลําดับความสําคัญของคําตอบสําหรับการกําหนดค่า Hosting ต่างๆ ได้ด้วย
ทดสอบในเครื่อง
ในระหว่างการพัฒนา คุณสามารถเรียกใช้และทดสอบอิมเมจคอนเทนเนอร์ภายในได้ ดูวิธีการโดยละเอียดได้ในเอกสารประกอบของ Cloud Run
ขั้นตอนถัดไป
ตั้งค่าการแคชเนื้อหาแบบไดนามิกใน CDN ทั่วโลก
โต้ตอบกับบริการอื่นๆ ของ Firebase โดยใช้ Firebase Admin SDK
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Run รวมถึงคู่มือวิธีการโดยละเอียดสำหรับการสร้าง จัดการ และกำหนดค่าคอนเทนเนอร์
ตรวจสอบราคาและโควต้าและขีดจํากัดสําหรับCloud Run