ปัจจุบัน
จับคู่ 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 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
แอปของคุณเสร็จสมบูรณ์แล้ว และพร้อมที่จะสร้างโดยใช้คอนเทนเนอร์และอัปโหลดไปยัง 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 ซึ่งอธิบายไว้ทีหลัง จะโหลดทรัพยากร Dependency ทั้งหมดในคอนเทนเนอร์
จากคอนโซล ให้สร้างโปรเจ็กต์เว็บใหม่เปล่าโดยใช้ 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 แล้ว และนํามาใช้ใหม่ได้หากต้องการ
โปรดทราบว่าคุณใช้ Docker เวอร์ชันที่ติดตั้งในเครื่องเพื่อสร้างคอนเทนเนอร์ในเครื่องแทน Cloud Build ได้
ขั้นตอนที่ 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 ของบริการในเว็บเบราว์เซอร์
ขั้นตอนถัดไปจะอธิบายวิธีเข้าถึงแอปคอนเทนเนอร์นี้จาก 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