สำหรับการกำหนดค่าขั้นสูงอย่างตัวแปรสภาพแวดล้อมหรือการตั้งค่ารันไทม์
เช่น การเกิดขึ้นพร้อมกัน, CPU และขีดจำกัดของหน่วยความจำ คุณจะต้องสร้างและแก้ไขไฟล์ apphosting.yaml
ในไดเรกทอรีรากของแอป ไฟล์นี้ยังรองรับการอ้างอิงไปยังข้อมูลลับที่มีการจัดการด้วย Cloud Secret Manager ทำให้ตรวจสอบการควบคุมแหล่งที่มาได้อย่างปลอดภัย
ต่อไปนี้คือลักษณะของไฟล์ apphosting.yaml
ทั่วไปที่มีการตั้งค่าสำหรับบริการ Cloud Run ของแบ็กเอนด์ ตัวแปรสภาพแวดล้อมบางอย่าง และการอ้างอิงไปยังข้อมูลลับที่จัดการโดย Cloud Secret Manager
# Settings for Cloud Run
runConfig:
minInstances: 2
maxInstances: 100
concurrency: 100
cpu: 2
memoryMiB: 1024
# Environment variables and secrets
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
- variable: API_KEY
secret: myApiKeySecret
# Same as API_KEY above but with a pinned version.
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
# Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
- variable: VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID
# Same as API_KEY above but with the long form secret reference with pinned version.
- variable: PINNED_VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID/versions/5
ส่วนที่เหลือของคู่มือนี้จะให้ข้อมูลและบริบทเพิ่มเติมสำหรับตัวอย่างการตั้งค่าเหล่านี้
กำหนดการตั้งค่าบริการ Cloud Run
ด้วยการตั้งค่า apphosting.yaml
คุณจะกำหนดค่าวิธีจัดสรรบริการ Cloud Run ได้ การตั้งค่าที่ใช้ได้สำหรับบริการ Cloud Run จะอยู่ในออบเจ็กต์ runConfig
ดังนี้
cpu
– จำนวน CPU ที่ใช้สำหรับแต่ละอินสแตนซ์ที่แสดงผล (ค่าเริ่มต้น 0)memoryMiB
– จำนวนหน่วยความจำที่จัดสรรสำหรับแต่ละอินสแตนซ์ที่แสดงผลใน MiB (ค่าเริ่มต้น 512)maxInstances
– จำนวนคอนเทนเนอร์สูงสุดที่จะเรียกใช้ได้ต่อครั้ง (ค่าเริ่มต้นคือ 100 รายการและจัดการตามโควต้า)minInstances
– จำนวนคอนเทนเนอร์ที่คุณต้องการให้ทำงานตลอดเวลา (ค่าเริ่มต้น 0)concurrency
– จำนวนคำขอสูงสุดที่อินสแตนซ์ที่แสดงแต่ละอินสแตนซ์รับได้ (ค่าเริ่มต้นคือ 80)
โปรดทราบว่าความสัมพันธ์ที่สำคัญระหว่าง cpu
กับ memoryMiB
คุณสามารถตั้งค่าหน่วยความจำเป็นค่าจำนวนเต็มระหว่าง 128 ถึง 32768 ได้ แต่การเพิ่มขีดจำกัดหน่วยความจำอาจทำให้ต้องเพิ่มขีดจำกัดของ CPU ดังนี้
- มากกว่า 4GiB ต้องใช้ CPU อย่างน้อย 2 ตัว
- 8GiB มากกว่า 4 GB ต้องใช้ CPU อย่างน้อย 4 รายการ
- มากกว่า 16 GiB ต้องใช้ CPU อย่างน้อย 6 ตัว
- มากกว่า 24 GiB ต้องใช้ CPU อย่างน้อย 8 ตัว
ในทํานองเดียวกัน ค่าของ cpu
จะส่งผลต่อการตั้งค่าการเกิดขึ้นพร้อมกัน หากกำหนดค่าน้อยกว่า 1 CPU คุณจะต้องตั้งค่าการเกิดขึ้นพร้อมกันเป็น 1 และ CPU จะได้รับการจัดสรรระหว่างการประมวลผลคำขอเท่านั้น
กำหนดค่าสภาพแวดล้อมของบิลด์
บางครั้งคุณอาจต้องกำหนดค่าเพิ่มเติมสำหรับกระบวนการบิลด์ เช่น คีย์ API ของบุคคลที่สามหรือการตั้งค่าที่ปรับแต่งได้ App Hosting มีการกำหนดค่าสภาพแวดล้อมใน apphosting.yaml
เพื่อจัดเก็บและเรียกข้อมูลประเภทนี้สำหรับโปรเจ็กต์ของคุณ
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
สำหรับแอป Next.js ไฟล์ Dotenv ที่มีตัวแปรสภาพแวดล้อมจะใช้งานกับ App Hosting ได้ด้วย เราขอแนะนำให้ใช้ apphosting.yaml
สำหรับการควบคุมตัวแปรสภาพแวดล้อมแบบละเอียดกับเฟรมเวิร์กใดก็ได้
ใน apphosting.yaml
คุณระบุกระบวนการที่มีสิทธิ์เข้าถึงตัวแปรสภาพแวดล้อมได้โดยใช้พร็อพเพอร์ตี้ availability
คุณสามารถจำกัดตัวแปรสภาพแวดล้อมให้พร้อมใช้งานสำหรับสภาพแวดล้อมบิลด์เท่านั้น หรือพร้อมใช้งานในสภาพแวดล้อมรันไทม์เท่านั้น โดยค่าเริ่มต้น ช่องนี้จะได้ทั้ง 2 แบบ
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
สำหรับแอป Next.js คุณใช้คำนำหน้า NEXT_PUBLIC_
แบบเดียวกับที่ใช้ในไฟล์ dotenv เพื่อทำให้เข้าถึงตัวแปรในเบราว์เซอร์ได้
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
คีย์ตัวแปรที่ถูกต้องประกอบด้วยอักขระ A-Z หรือขีดล่าง คีย์ตัวแปรสภาพแวดล้อมบางคีย์สงวนไว้สำหรับการใช้งานภายใน โปรดอย่าใช้คีย์เหล่านี้ในไฟล์การกำหนดค่า
- ตัวแปรใดๆ ที่ขึ้นต้นด้วย
X_FIREBASE_
PORT
K_SERVICE
K_REVISION
K_CONFIGURATION
จัดเก็บและเข้าถึงพารามิเตอร์ข้อมูลลับ
ควรจัดเก็บข้อมูลที่ละเอียดอ่อน เช่น คีย์ API ไว้เป็นความลับ คุณสามารถอ้างอิงข้อมูลลับใน apphosting.yaml
เพื่อหลีกเลี่ยงการตรวจสอบข้อมูลที่ละเอียดอ่อนในการควบคุมแหล่งที่มา
พารามิเตอร์ประเภท secret
แสดงพารามิเตอร์สตริงซึ่งมีค่าเก็บไว้ใน Cloud Secret Manager
โดยพารามิเตอร์ลับจะตรวจสอบกับการมีอยู่ใน Secret Manager ของ Cloud และโหลดค่าระหว่างการเปิดตัว แทนการดึงค่ามาโดยตรง
- variable: API_KEY
secret: myApiKeySecret
ข้อมูลลับใน Secret Manager ของ Cloud อาจมีได้หลายเวอร์ชัน โดยค่าเริ่มต้น ค่าของพารามิเตอร์ลับที่ใช้ได้กับแบ็กเอนด์แบบสดจะปักหมุดไว้ที่ข้อมูลลับเวอร์ชันล่าสุดขณะที่สร้างแบ็กเอนด์ หากมีข้อกำหนดในการกำหนดเวอร์ชันและการจัดการอายุการใช้งานของพารามิเตอร์ คุณสามารถปักหมุดเป็นเวอร์ชันที่ต้องการได้ด้วย Cloud Secret Manager ตัวอย่างเช่น หากต้องการปักหมุด ในเวอร์ชัน 5 ให้ทำดังนี้
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
คุณสร้างข้อมูลลับได้ด้วยคำสั่ง CLI ชื่อ firebase apphosting:secrets:set
และระบบจะแจ้งให้เพิ่มสิทธิ์ที่จำเป็น ขั้นตอนนี้ช่วยให้คุณเพิ่มการอ้างอิงลับไปยัง apphosting.yaml
โดยอัตโนมัติได้
หากต้องการใช้ฟังก์ชัน Cloud Secret Manager ชุดเต็ม ให้ใช้คอนโซล Cloud Secret Manager แทน หากทำเช่นนี้ คุณจะต้องให้สิทธิ์แก่แบ็กเอนด์การโฮสต์แอปด้วยคำสั่ง CLI firebase
apphosting:secrets:grantaccess
ซิงค์สถานะการตรวจสอบสิทธิ์ Firebase
แอปที่ใช้ Firebase Auth ควรพิจารณาใช้ Firebase Web SDK เพื่อช่วยให้สถานะการตรวจสอบสิทธิ์ซิงค์ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์อยู่เสมอ ซึ่งอาจช่วยอำนวยความสะดวกด้วยการใช้ FirebaseServerApp
ร่วมกับ Service Worker ได้ ขั้นตอนพื้นฐาน
ของงานคือ
- ใช้ Service Worker ที่เพิ่มส่วนหัวที่ถูกต้องสำหรับแอปของคุณในคำขอไปยังเซิร์ฟเวอร์
- รับส่วนหัวจากคำขอบนเซิร์ฟเวอร์ แล้วแปลงเป็นผู้ใช้การตรวจสอบสิทธิ์ด้วย
FirebaseServerApp