จับคู่ 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 แบบเรียบง่าย
- สร้างคอนเทนเนอร์และอัปโหลดไปยัง Container 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 APIs
เปิด หน้า API ของ Cloud Run ในคอนโซล Google APIs
เมื่อมีข้อความแจ้ง ให้เลือกโปรเจ็กต์ 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
แอปของคุณเสร็จแล้วและพร้อมที่จะสร้างด้วยคอนเทนเนอร์และอัปโหลดไปยัง Container Registry
Node.js
สร้างไดเรกทอรีใหม่ชื่อ
helloworld-nodejs
แล้วเปลี่ยนไดเรกทอรี ไว้ในรูปแบบดังนี้mkdir helloworld-nodejs
cd helloworld-nodejs
สร้างไฟล์
package.json
ที่มีเนื้อหาต่อไปนี้สร้างไฟล์ใหม่ชื่อ
index.js
จากนั้นเพิ่มโค้ดต่อไปนี้โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รับข้อมูลบนพอร์ตที่กำหนดโดย ตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จแล้วและพร้อมที่จะสร้างด้วยคอนเทนเนอร์และอัปโหลดไปยัง Container Registry
Python
สร้างไดเรกทอรีใหม่ชื่อ
helloworld-python
แล้วเปลี่ยนไดเรกทอรี ไว้ในรูปแบบดังนี้mkdir helloworld-python
cd helloworld-python
สร้างไฟล์ใหม่ชื่อ
app.py
จากนั้นเพิ่มโค้ดต่อไปนี้โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รับข้อมูลบนพอร์ตที่กำหนดโดย ตัวแปรสภาพแวดล้อม
PORT
แอปของคุณเสร็จแล้วและพร้อมที่จะสร้างด้วยคอนเทนเนอร์และอัปโหลดไปยัง Container 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
แอปของคุณเสร็จแล้วและพร้อมที่จะสร้างด้วยคอนเทนเนอร์และอัปโหลดไปยัง Container Registry
ขั้นตอนที่ 2: สร้างคอนเทนเนอร์แอปและอัปโหลดไปยัง Container Registry
สร้างคอนเทนเนอร์แอปตัวอย่างโดยการสร้างไฟล์ใหม่ชื่อ
Dockerfile
ใน ไดเรกทอรีเดียวกับไฟล์ต้นฉบับ คัดลอกเนื้อหาต่อไปนี้ลงในGo
Node.js
Python
Java
สร้างอิมเมจคอนเทนเนอร์โดยใช้ Cloud Build โดยการเรียกใช้โค้ดต่อไปนี้ จากไดเรกทอรีที่มี Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
เมื่อทำสำเร็จแล้ว คุณจะเห็นข้อความ "สำเร็จ" ที่มีชื่อรูปภาพ
(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
เป็น อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
- เลือกภูมิภาค (เช่น
เพื่อประสิทธิภาพที่ดีที่สุด โปรดย้ายบริการ Cloud Run ของคุณกับ Hosting โดยใช้ภูมิภาคต่อไปนี้
us-west1
us-central1
us-east1
europe-west1
asia-east1
การเขียนใหม่เป็น Cloud Run จาก Hosting ใช้ได้ในภูมิภาคต่อไปนี้
asia-east1
asia-east2
asia-northeast1
asia-northeast2
asia-northeast3
asia-south1
asia-south2
asia-southeast1
asia-southeast2
australia-southeast1
australia-southeast2
europe-central2
europe-north1
europe-southwest1
europe-west1
europe-west12
europe-west2
europe-west3
europe-west4
europe-west6
europe-west8
europe-west9
me-central1
me-west1
northamerica-northeast1
northamerica-northeast2
southamerica-east1
southamerica-west1
us-central1
us-east1
us-east4
us-east5
us-south1
us-west1
us-west2
us-west3
us-west4
us-west1
us-central1
us-east1
europe-west1
asia-east1
โปรดรอสักครู่เพื่อให้การติดตั้งใช้งานเสร็จสมบูรณ์ เมื่อทำสำเร็จ บรรทัดคำสั่ง แสดง URL ของบริการ ดังตัวอย่างต่อไปนี้
https://helloworld-RANDOM_HASH-us-central1.a.run.app ไปที่คอนเทนเนอร์ที่ทำให้ใช้งานได้แล้วโดยเปิด URL ของบริการในเว็บเบราว์เซอร์
ขั้นตอนถัดไปจะแนะนำวิธีเข้าถึงแอปที่สร้างโดยใช้คอนเทนเนอร์นี้จาก URL Firebase Hosting เพื่อให้สร้างเนื้อหาแบบไดนามิกสำหรับ เว็บไซต์ที่โฮสต์ด้วย Firebase
ขั้นตอนที่ 4: ส่งคำขอโฮสติ้งไปยังแอปที่สร้างโดยใช้คอนเทนเนอร์โดยตรง
ด้วย กฎการเขียนใหม่ คุณสามารถส่งคำขอโดยตรง ที่ตรงกับรูปแบบที่เฉพาะเจาะจงกับปลายทางเดียว
ตัวอย่างต่อไปนี้แสดงวิธีส่งคำขอทั้งหมดจากหน้าเว็บ
/helloworld
ในเว็บไซต์ Hosting เพื่อทริกเกอร์การเริ่มต้นและการเรียกใช้
อินสแตนซ์คอนเทนเนอร์ helloworld
ของคุณ
โปรดตรวจสอบดังนี้
คุณได้เริ่มต้น Firebase Hosting แล้ว
ดูวิธีการโดยละเอียดเกี่ยวกับการติดตั้ง CLI และเริ่มต้นใช้งาน Hosting ได้ที่คู่มือเริ่มต้นใช้งานสำหรับ Hosting
เพิ่มการกําหนดค่า
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