จับคู่ Cloud Run กับ Firebase Hosting เพื่อสร้างและแสดงเนื้อหาแบบไดนามิก หรือสร้าง REST API เป็นไมโครเซอร์วิส
เมื่อใช้ Cloud Run คุณจะทำให้แอปพลิเคชันที่แพ็กเกจไว้ในอิมเมจคอนเทนเนอร์ใช้งานได้ จากนั้นใช้ Firebase Hosting เพื่อกำหนดเส้นทางคำขอ HTTPS ให้ทริกเกอร์แอปที่อยู่ใน คอนเทนเนอร์
- Cloud Run รองรับ หลายภาษา (รวมถึง Go, Node.js, Python และ Java) ซึ่งช่วยให้คุณมีความยืดหยุ่นในการใช้ ภาษาโปรแกรมและเฟรมเวิร์กที่ต้องการ
- Cloud Run ปรับขนาดโดยอัตโนมัติและในแนวนอน อิมเมจคอนเทนเนอร์เพื่อจัดการคำขอที่ได้รับ จากนั้นจะลดทรัพยากรเมื่อ ความต้องการลดลง
- คุณจะจ่ายเฉพาะค่า CPU, หน่วยความจำ และเครือข่ายที่ใช้ในระหว่างการจัดการคำขอ
ดูตัวอย่างกรณีการใช้งานและตัวอย่างการผสานรวม Cloud Run กับ Firebase Hosting ได้ที่ ภาพรวมแบบไม่ใช้เซิร์ฟเวอร์
คู่มือนี้จะแสดงวิธีดำเนินการต่อไปนี้
- เขียนแอปพลิเคชัน Hello World อย่างง่าย
- สร้างคอนเทนเนอร์ของแอปและอัปโหลดไปยัง Artifact Registry
- ทำให้ใช้งานได้กับอิมเมจคอนเทนเนอร์ใน Cloud Run
- กำหนดเส้นทางคำขอ Hosting 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
ติดตั้ง 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.zipunzip 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
เมื่อสำเร็จ คุณจะเห็นข้อความ SUCCESS ที่มีชื่ออิมเมจ
(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: กำหนดเส้นทางคำขอ Hosting ไปยังแอปที่อยู่ในคอนเทนเนอร์
กฎการเขียนซ้ำช่วยให้คุณกำหนดเส้นทางคำขอที่ตรงกับรูปแบบที่เฉพาะเจาะจงไปยังปลายทางเดียวได้
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดเส้นทางคำขอทั้งหมดจากหน้า
/helloworld ในเว็บไซต์ Hosting เพื่อทริกเกอร์การเริ่มต้นและการทำงานของ
อินสแตนซ์คอนเทนเนอร์ helloworld
โปรดตรวจสอบดังนี้
คุณได้เริ่มต้น 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/
ดูรายละเอียดเพิ่มเติมเกี่ยวกับกฎการเขียนซ้ำได้ที่หน้าการกำหนดค่า Hosting สำหรับ นอกจากนี้ คุณยังดูข้อมูลเกี่ยวกับ ลำดับความสำคัญของการตอบกลับ สำหรับการกำหนดค่า Hosting ต่างๆ ได้ด้วย
ทดสอบในเครื่อง
ในระหว่างการพัฒนา คุณสามารถเรียกใช้และทดสอบอิมเมจคอนเทนเนอร์ในเครื่องได้ ดูวิธีการโดยละเอียดได้ในเอกสารประกอบของ Cloud Run
ขั้นตอนถัดไป
ตั้งค่าการแคชเนื้อหาแบบไดนามิกใน CDN ทั่วโลก
โต้ตอบกับบริการอื่นๆ ของ Firebase โดยใช้ Firebase Admin SDK
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Run ซึ่งรวมถึง คู่มือวิธีการโดยละเอียดสำหรับการ ตั้งค่า การจัดการ และการกำหนดค่าคอนเทนเนอร์
ตรวจสอบราคา ตลอดจนโควต้าและขีดจำกัดสำหรับCloud Run