ไม่รองรับการผสานรวมกับCloud Run for Anthos
จับคู่ 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 แบบง่ายๆ
- สร้างคอนเทนเนอร์ของแอปและอัปโหลดไปยัง 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 APIs โดยทำดังนี้
เปิดหน้า API ของ Cloud Run ในคอนโซล Google APIs
เมื่อได้รับข้อความแจ้ง ให้เลือกโปรเจ็กต์ Firebase
คลิกเปิดใช้ในหน้า API ของ Cloud Run
ติดตั้งและเริ่มต้น 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
ติดตั้ง JDK ของ Java SE 8 ขึ้นไป และ CURL
โปรดทราบว่าเราต้องทำขั้นตอนนี้เพื่อสร้างโปรเจ็กต์เว็บใหม่ใน ขั้นตอนถัดไปเท่านั้น Dockerfile ซึ่งจะอธิบายในภายหลังจะโหลดการอ้างอิงทั้งหมดลงในคอนเทนเนอร์
จากคอนโซล ให้สร้างโปรเจ็กต์เว็บว่างใหม่โดยใช้ cURL แล้วใช้คำสั่ง unzip ดังนี้
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
แอปของคุณเสร็จสมบูรณ์แล้วและพร้อมที่จะสร้างคอนเทนเนอร์และอัปโหลดไปยัง 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: ส่งคำขอโฮสติ้งโดยตรงไปยังแอปที่สร้างโดยใช้คอนเทนเนอร์
กฎการเขียนใหม่ช่วยให้คุณส่งคำขอ ที่ตรงกับรูปแบบที่เฉพาะเจาะจงไปยังปลายทางเดียวได้
ตัวอย่างต่อไปนี้แสดงวิธีเปลี่ยนเส้นทางคำขอทั้งหมดจากหน้าเว็บ
/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/
โดเมนที่กำหนดเองที่เชื่อมต่อ:
CUSTOM_DOMAIN/
ไปที่Hostingหน้าการกำหนดค่าเพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับกฎการเขียนใหม่ นอกจากนี้ คุณยังดูข้อมูลเกี่ยวกับลำดับความสำคัญของคำตอบสำหรับHostingการกำหนดค่าต่างๆ ได้ด้วย
ทดสอบในเครื่อง
ในระหว่างการพัฒนา คุณสามารถเรียกใช้และทดสอบอิมเมจคอนเทนเนอร์ภายในได้ ดูวิธีการโดยละเอียดได้ที่เอกสารประกอบของ Cloud Run
ขั้นตอนถัดไป
ตั้งค่าการแคชเนื้อหาแบบไดนามิกใน CDN ทั่วโลก
โต้ตอบกับบริการอื่นๆ ของ Firebase โดยใช้ Firebase Admin SDK
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Run ซึ่งรวมถึง คำแนะนำแบบทีละขั้นตอนโดยละเอียดสำหรับ การตั้งค่า การจัดการ และการกำหนดค่าคอนเทนเนอร์
ตรวจสอบราคาและ โควต้าและขีดจำกัดสำหรับ Cloud Run