กำหนดค่าการโฮสต์แอป

สำหรับการกำหนดค่าขั้นสูงอย่างตัวแปรสภาพแวดล้อมหรือการตั้งค่ารันไทม์ เช่น การเกิดขึ้นพร้อมกัน, 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 ได้ ขั้นตอนพื้นฐาน ของงานคือ

  1. ใช้ Service Worker ที่เพิ่มส่วนหัวที่ถูกต้องสำหรับแอปของคุณในคำขอไปยังเซิร์ฟเวอร์
  2. รับส่วนหัวจากคำขอบนเซิร์ฟเวอร์ แล้วแปลงเป็นผู้ใช้การตรวจสอบสิทธิ์ด้วย FirebaseServerApp