จับคู่ 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 ไปยังแอปที่อยู่ในคอนเทนเนอร์
โปรดทราบว่าคุณสามารถ ปรับการตั้งค่าแคชได้หากต้องการเพื่อปรับปรุงประสิทธิภาพการแสดงเนื้อหาแบบไดนามิก
ก่อนเริ่มต้น
ก่อนใช้ 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 จากนั้นใช้คำสั่ง unzip
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) } } ] }
ทำให้การกำหนดค่า Hosting ใช้งานได้กับเว็บไซต์โดยเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีรากของโปรเจ็กต์
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