กำหนดค่าและจัดการแบ็กเอนด์โฮสติ้งของแอป

App Hosting ออกแบบมาให้ใช้งานง่ายและบำรุงรักษาน้อย พร้อมการตั้งค่าเริ่มต้นที่ได้รับการเพิ่มประสิทธิภาพสำหรับกรณีการใช้งานส่วนใหญ่ ในขณะเดียวกัน App Hosting ยังมีเครื่องมือให้คุณจัดการและกำหนดค่าแบ็กเอนด์ตามความต้องการเฉพาะของคุณ คู่มือนี้จะอธิบายเครื่องมือและกระบวนการเหล่านั้น

กำหนดค่าแบ็กเอนด์

สําหรับการกําหนดค่าขั้นสูง เช่น ตัวแปรสภาพแวดล้อมหรือการตั้งค่ารันไทม์ เช่น การทำงานพร้อมกัน, CPU และขีดจํากัดของหน่วยความจํา คุณจะต้องสร้างและแก้ไขไฟล์ apphosting.yaml ในไดเรกทอรีรูทของแอป ไฟล์นี้ยังรองรับการอ้างอิงข้อมูลลับที่จัดการด้วย Secret Manager ของ Cloud ด้วย จึงตรวจสอบสิทธิ์ในระบบควบคุมแหล่งที่มาได้อย่างปลอดภัย

หากต้องการสร้าง apphosting.yaml ให้เรียกใช้คำสั่งต่อไปนี้

firebase init apphosting

การดำเนินการนี้จะสร้างไฟล์เริ่มต้น apphosting.yaml ขั้นพื้นฐานที่มีการกำหนดค่าตัวอย่าง (มีการแสดงความคิดเห็น) หลังจากแก้ไข ไฟล์ 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 ด้วย

  • มากกว่า 4 GiB ต้องใช้ 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

คุณสร้าง Secret ได้ด้วยคําสั่ง CLI firebase apphosting:secrets:set แล้วระบบจะแจ้งให้คุณเพิ่มสิทธิ์ที่จําเป็น ขั้นตอนนี้ช่วยให้คุณมีตัวเลือกในการเพิ่มการอ้างอิงลับไปยัง apphosting.yaml โดยอัตโนมัติ

หากต้องการใช้ฟังก์ชันการทำงานของ Cloud Secret Manager อย่างเต็มรูปแบบ ให้ใช้คอนโซล Cloud Secret Manager แทน หากทำเช่นนี้ คุณจะต้องให้สิทธิ์App Hostingแบ็กเอนด์ด้วยคําสั่ง CLI firebase apphosting:secrets:grantaccess

ซิงค์สถานะ Firebase Auth

แอปที่ใช้ Firebase Auth ควรพิจารณาใช้ Firebase Web SDK เพื่อช่วยซิงค์สถานะการตรวจสอบสิทธิ์ระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ ซึ่งอาจช่วยอำนวยความสะดวกด้วยการใช้ FirebaseServerApp ร่วมกับ Service Worker ได้ ขั้นตอนพื้นฐานของงานมีดังนี้

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

จัดการแบ็กเอนด์

คำสั่งสำหรับการจัดการแบ็กเอนด์ App Hosting ขั้นพื้นฐานมีอยู่ใน Firebase CLI การดำเนินการบางอย่างจะพร้อมใช้งานในคอนโซล Firebase ด้วย ส่วนนี้จะอธิบายงานการจัดการที่พบบ่อย เช่น การสร้างและลบแบ็กเอนด์

สร้างแบ็กเอนด์

App Hostingแบ็กเอนด์คือคอลเล็กชันของทรัพยากรที่มีการจัดการซึ่ง App Hosting สร้างขึ้นเพื่อสร้างและเรียกใช้เว็บแอป คุณสามารถสร้างและแสดงรายการApp Hostingแบ็กเอนด์ได้โดยใช้คอนโซล Firebase หรือ Firebase CLI

คอนโซล Firebase: จากเมนูสร้าง ให้เลือกโฮสติ้งแอป แล้วเลือกเริ่มต้นใช้งาน

CLI: (เวอร์ชัน 13.15.4 ขึ้นไป) หากต้องการสร้างแบ็กเอนด์ ให้เรียกใช้คำสั่งต่อไปนี้จากรูทของไดเรกทอรีโปรเจ็กต์ในเครื่อง โดยระบุ projectID และภูมิภาคที่ต้องการเป็นอาร์กิวเมนต์

firebase apphosting:backends:create --project PROJECT_ID --location us-central1

สําหรับทั้งคอนโซลหรือ CLI ให้ทําตามข้อความแจ้งเพื่อตั้งชื่อแบ็กเอนด์ ตั้งค่าการเชื่อมต่อ GitHub และกำหนดการตั้งค่าการทําให้ใช้งานได้พื้นฐานต่อไปนี้

  • ตั้งค่าไดเรกทอรีรูทของแอป (ค่าเริ่มต้นคือ /)

    โดยปกติแล้ว ไฟล์ package.json จะอยู่ที่ตำแหน่งนี้

  • ตั้งค่าสาขาที่ใช้งานอยู่

    นี่คือสาขาของที่เก็บ GitHub ที่จะนำไปติดตั้งใช้งานใน URL ที่ใช้จริง บ่อยครั้งที่เป็นสาขาที่ผสานสาขาฟีเจอร์หรือสาขาการพัฒนา

  • ยอมรับหรือปฏิเสธการเปิดตัวอัตโนมัติ

    ระบบจะเปิดใช้การเปิดตัวอัตโนมัติโดยค่าเริ่มต้น เมื่อสร้างแบ็กเอนด์เสร็จแล้ว คุณสามารถเลือกที่จะติดตั้งใช้งานแอปใน App Hosting ได้ทันที

ลบแบ็กเอนด์

หากต้องการนําแบ็กเอนด์ออกอย่างสมบูรณ์ ให้ใช้ Firebase CLI ก่อน แล้วนําชิ้นงานที่เกี่ยวข้องออกด้วยตนเอง โดยระมัดระวังเป็นพิเศษไม่ให้ลบทรัพยากรที่แบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase อาจใช้อยู่

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อลบแบ็กเอนด์ App Hosting ซึ่งจะปิดใช้โดเมนทั้งหมดสําหรับแบ็กเอนด์และลบบริการ Cloud Run ที่เชื่อมโยง

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
    
  2. (ไม่บังคับ) ในแท็บ Google Cloud Console ของ Artifact Registry ให้ลบรูปภาพสำหรับแบ็กเอนด์ใน "firebaseapphosting-images"

  3. ใน Cloud Secret Manager ให้ลบข้อมูลลับที่มี "apphosting" ในชื่อข้อมูลลับ โดยตรวจสอบอย่างละเอียดว่าไม่มีการใช้ข้อมูลลับเหล่านี้โดยแบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase