จับคู่ Cloud Run กับ Firebase Hosting เพื่อสร้างและให้บริการเนื้อหาแบบไดนามิกของคุณ หรือสร้าง REST API เป็นไมโครเซอร์วิส
เมื่อใช้ Cloud Run คุณสามารถปรับใช้แอปพลิเคชันที่บรรจุในอิมเมจคอนเทนเนอร์ได้ จากนั้น เมื่อใช้โฮสติ้ง Firebase คุณจะส่งคำขอ HTTPS เพื่อทริกเกอร์แอปคอนเทนเนอร์ได้
- Cloud Run รองรับ หลายภาษา (รวมถึง Go, Node.js, Python และ Java) ทำให้คุณมีความยืดหยุ่นในการใช้ภาษาโปรแกรมและเฟรมเวิร์กที่คุณเลือก
- Cloud Run จะปรับขนาดอิมเมจคอนเทนเนอร์ในแนวนอนโดยอัตโนมัติ เพื่อจัดการคำขอที่ได้รับ จากนั้นจึงลดขนาดลงเมื่อความต้องการลดลง
- คุณ จะจ่าย เฉพาะ CPU หน่วยความจำ และเครือข่ายที่ใช้ระหว่างการจัดการคำขอเท่านั้น
ตัวอย่างกรณีการใช้งานและตัวอย่างสำหรับ Cloud Run ที่ผสานรวมกับโฮสติ้ง Firebase โปรดไปที่ ภาพรวมไร้เซิร์ฟเวอร์ ของเรา
คู่มือนี้แสดงวิธีการ:
- เขียนแอปพลิเคชัน Hello World อย่างง่าย
- ทำให้แอพเป็นคอนเทนเนอร์และอัปโหลดไปยัง Container Registry
- ทำให้อิมเมจคอนเทนเนอร์ใช้งานได้กับ Cloud Run
- ส่งคำขอโฮสติ้งโดยตรงไปยังแอปคอนเทนเนอร์ของคุณ
โปรดทราบว่าหากต้องการปรับปรุงประสิทธิภาพการแสดงเนื้อหาแบบไดนามิก คุณสามารถเลือกปรับ การตั้งค่าแคช ได้
ก่อนที่คุณจะเริ่มต้น
ก่อนที่จะใช้ Cloud Run คุณต้องทำงานเริ่มต้นบางอย่างให้เสร็จ รวมถึงการตั้งค่าบัญชีการเรียกเก็บเงินใน Cloud เปิดใช้งาน Cloud Run API และติดตั้งเครื่องมือบรรทัดคำสั่ง gcloud
ตั้งค่าการเรียกเก็บเงินสำหรับโครงการของคุณ
Cloud Run ให้ โควต้าการใช้งานฟรี แต่คุณยังต้องมี บัญชีสำหรับการเรียกเก็บเงินใน Cloud ที่เชื่อมโยงกับโปรเจ็กต์ Firebase เพื่อใช้หรือลองใช้ Cloud Run
เปิดใช้งาน API และติดตั้ง SDK
เปิดใช้งาน Cloud Run API ในคอนโซล Google APIs:
เปิด หน้า Cloud Run API ในคอนโซล Google APIs
เมื่อได้รับแจ้ง ให้เลือกโครงการ Firebase ของคุณ
คลิก เปิดใช้งาน บนหน้า Cloud Run API
ติดตั้งและเริ่มต้น Cloud SDK
ตรวจสอบว่ามีการกำหนดค่าเครื่องมือ
gcloud
สำหรับโครงการที่ถูกต้อง:gcloud config list
ขั้นตอนที่ 1 : เขียนใบสมัครตัวอย่าง
โปรดทราบว่า Cloud Run รองรับ ภาษาอื่นๆ มากมาย นอกเหนือจากภาษาที่แสดงในตัวอย่างต่อไปนี้
ไป
สร้างไดเร็กทอรีใหม่ชื่อ
helloworld-go
จากนั้นเปลี่ยนไดเร็กทอรีเป็น:mkdir helloworld-go
cd helloworld-go
สร้างไฟล์ใหม่ชื่อ
helloworld.go
จากนั้นเพิ่มรหัสต่อไปนี้:รหัสนี้สร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รับฟังพอร์ตที่กำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสิ้นและพร้อมที่จะบรรจุและอัปโหลดไปยัง Container Registry
โหนด js
สร้างไดเร็กทอรีใหม่ชื่อ
helloworld-nodejs
จากนั้นเปลี่ยนไดเร็กทอรีเป็น:mkdir helloworld-nodejs
cd helloworld-nodejs
สร้างไฟล์
package.json
โดยมีเนื้อหาดังต่อไปนี้:สร้างไฟล์ใหม่ชื่อ
index.js
จากนั้นเพิ่มโค้ดต่อไปนี้:รหัสนี้สร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รับฟังพอร์ตที่กำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสิ้นและพร้อมที่จะบรรจุและอัปโหลดไปยัง Container Registry
หลาม
สร้างไดเร็กทอรีใหม่ชื่อ
helloworld-python
จากนั้นเปลี่ยนไดเร็กทอรีเป็น:mkdir helloworld-python
cd helloworld-python
สร้างไฟล์ใหม่ชื่อ
app.py
จากนั้นเพิ่มโค้ดต่อไปนี้:รหัสนี้สร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รับฟังพอร์ตที่กำหนดโดยตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จสิ้นและพร้อมที่จะบรรจุและอัปโหลดไปยัง Container Registry
ชวา
ติดตั้ง Java SE 8 หรือใหม่กว่า JDK และ 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
แอปของคุณเสร็จสิ้นและพร้อมที่จะบรรจุและอัปโหลดไปยัง Container Registry
ขั้นตอนที่ 2 : ทำให้แอพบรรจุในคอนเทนเนอร์และอัปโหลดไปยัง Container Registry
ทำให้แอปตัวอย่างเป็นคอนเทนเนอร์โดยสร้างไฟล์ใหม่ชื่อ
Dockerfile
ในไดเร็กทอรีเดียวกันกับไฟล์ต้นฉบับ คัดลอกเนื้อหาต่อไปนี้ลงในไฟล์ของคุณไป
โหนด js
หลาม
ชวา
สร้างอิมเมจคอนเทนเนอร์ของคุณโดยใช้ Cloud Build โดยเรียกใช้คำสั่งต่อไปนี้จากไดเร็กทอรีที่มี Dockerfile ของคุณ:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
เมื่อสำเร็จ คุณจะเห็นข้อความ SUCCESS ที่มีชื่อภาพ
(gcr.io/ PROJECT_ID /helloworld
)
ตอนนี้อิมเมจคอนเทนเนอร์ถูกจัดเก็บไว้ใน Container Registry และสามารถนำมาใช้ใหม่ได้หากต้องการ
โปรดทราบว่าแทนที่จะใช้ Cloud Build คุณสามารถใช้ Docker เวอร์ชันที่ติดตั้งในเครื่องเพื่อ สร้างคอนเทนเนอร์ในเครื่อง
ขั้นตอนที่ 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 ของบริการในเว็บเบราว์เซอร์
ขั้นตอนต่อไปจะอธิบายวิธีเข้าถึงแอปคอนเทนเนอร์นี้ จาก URL โฮสติ้งของ Firebase เพื่อให้แอปสร้างเนื้อหาไดนามิกสำหรับไซต์ที่โฮสต์โดย Firebase
ขั้นตอนที่ 4: ส่งคำขอโฮสต์โดยตรงไปยังแอปคอนเทนเนอร์ของคุณ
ด้วย กฎการเขียนใหม่ คุณสามารถส่งคำขอที่ตรงกับรูปแบบเฉพาะไปยังปลายทางแห่งเดียวได้
ตัวอย่างต่อไปนี้แสดงวิธีส่งคำขอทั้งหมดจากหน้า /helloworld
บนไซต์โฮสติ้งของคุณเพื่อทริกเกอร์การเริ่มต้นและเรียกใช้อินสแตนซ์คอนเทนเนอร์ helloworld
ของคุณ
ทำให้เเน่นอน:
คุณได้เริ่มต้นโฮสติ้ง Firebase แล้ว
สำหรับคำแนะนำโดยละเอียดเกี่ยวกับการติดตั้ง CLI และการเริ่มต้นการโฮสต์ โปรดดูที่ คู่มือเริ่มต้นใช้งานสำหรับการโฮสต์
เปิด ไฟล์
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
ด้วยฟีเจอร์นี้ คุณจะมั่นใจได้ว่าการแก้ไขบริการ Cloud Run ของคุณสำหรับการสร้างเนื้อหาไดนามิกของไซต์นั้นซิงค์กับทรัพยากรโฮสติ้งแบบคงที่และการกำหนดค่าโฮสติ้ง นอกจากนี้ ฟีเจอร์นี้ยังช่วยให้คุณดูตัวอย่างการเขียนซ้ำของคุณไปยังช่องตัวอย่าง Cloud Run บนโฮสติ้ง
หากคุณเพิ่ม
"pingTag": true
ในบล็อกrun
ของการกำหนดค่าhosting.rewrites
ทรัพยากรการโฮสต์และการกำหนดค่าแบบคงที่ของคุณจะถูกตรึงไว้กับการแก้ไขล่าสุดของบริการ Cloud Run ณ เวลาที่ปรับใช้ หากคุณย้อนกลับเวอร์ชันของเว็บไซต์ การแก้ไขบริการ Cloud Run ที่ "ตรึงไว้" จะถูกย้อนกลับด้วยคุณลักษณะนี้อาศัย แท็ก Cloud Run ซึ่งจำกัดไว้ที่ 1,000 แท็กต่อบริการและ 2,000 แท็กต่อภูมิภาค ซึ่งหมายความว่าหลังจากการปรับใช้หลายร้อยครั้ง ไซต์เวอร์ชันเก่าที่สุดอาจหยุดทำงาน
ขณะนี้คอนเทนเนอร์ของคุณสามารถเข้าถึงได้ผ่าน URL ต่อไปนี้:
โดเมนย่อย Firebase ของคุณ:
PROJECT_ID .web.app/
และPROJECT_ID .firebaseapp.com/
โดเมนแบบกำหนดเอง ที่เชื่อมต่อใดๆ :
CUSTOM_DOMAIN /
ไปที่หน้าการกำหนดค่าโฮสติ้งเพื่อดู รายละเอียดเพิ่มเติมเกี่ยวกับกฎการเขียนใหม่ คุณยังสามารถเรียนรู้เกี่ยวกับ ลำดับความสำคัญของการตอบกลับ สำหรับการกำหนดค่าโฮสติ้งต่างๆ
ทดสอบในพื้นที่
ในระหว่างการพัฒนา คุณสามารถเรียกใช้และทดสอบอิมเมจคอนเทนเนอร์ภายในเครื่องได้ สำหรับคำแนะนำโดยละเอียด โปรดไปที่ เอกสารประกอบของ Cloud Run
ขั้นตอนถัดไป
ตั้งค่าการแคช เนื้อหาไดนามิกของคุณบน CDN ส่วนกลาง
โต้ตอบกับบริการ Firebase อื่นๆ โดยใช้ Firebase Admin SDK
เรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Run รวมถึง คำแนะนำวิธีใช้โดยละเอียด สำหรับการตั้งค่า การจัดการ และการกำหนดค่าคอนเทนเนอร์
ตรวจสอบ ราคา และ โควต้าและขีดจำกัด สำหรับ Cloud Run