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

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

ตั้งค่าและอัปเดตตัวแปรสภาพแวดล้อมและข้อมูลลับ

App Hosting ช่วยให้คุณใช้ตัวแปรสภาพแวดล้อมสำหรับค่าการกำหนดค่าที่ไม่ละเอียดอ่อน และใช้ข้อมูลลับสำหรับพารามิเตอร์ที่ละเอียดอ่อน เช่น คีย์ API, ข้อมูลเข้าสู่ระบบฐานข้อมูล และโทเค็นบริการ

  • ตัวแปรสภาพแวดล้อมมาตรฐาน: ใช้สำหรับการกำหนดค่าข้อความธรรมดาที่ไม่ละเอียดอ่อน (เช่น URL ของ API สาธารณะ, แฟล็กฟีเจอร์ หรือเป้าหมายบิลด์) ค่าต่างๆ จะแสดงต่อสมาชิกทุกคนในโปรเจ็กต์
  • ข้อมูลลับ: ใช้สำหรับพารามิเตอร์ที่ละเอียดอ่อน (เช่น รหัสลับไคลเอ็นต์ OAuth, โทเค็น API หรือรหัสผ่านฐานข้อมูล) ข้อมูลลับได้รับการสนับสนุนโดย Cloud Secret Manager ค่าข้อมูลลับจะได้รับการปกป้องและไม่แสดงเป็นข้อความธรรมดาในคอนโซล Firebase แต่คอนโซลจะแสดง Deep Link เพื่อดูและจัดการค่าข้อมูลลับโดยตรงใน Cloud Secret Manager

คุณสามารถกำหนดและจัดการพารามิเตอร์สภาพแวดล้อมได้โดยใช้ 2 วิธีที่เสริมกัน ดังนี้

  • คอนโซล Firebase: เพิ่ม แก้ไข และแนบข้อมูลลับหรือตัวแปรแบบไดนามิกได้อย่างรวดเร็วในระหว่างการสร้างแบ็กเอนด์ครั้งแรกหรือหลังการติดตั้งใช้งานในการตั้งค่าแบ็กเอนด์
  • Code-first (apphosting.yaml): ประกาศตัวแปรสภาพแวดล้อมและการอ้างอิงข้อมูลลับในไฟล์การกำหนดค่าของที่เก็บสำหรับการทำให้ใช้งานได้ที่มีการควบคุมเวอร์ชัน หรือใช้ apphosting.<env>.yaml เพื่อกำหนดค่าที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกัน

คอนโซล Firebase

ภาพหน้าจอของกล่องโต้ตอบคอนโซล Firebase สำหรับการเพิ่มตัวแปรสภาพแวดล้อม

apphosting.yaml

env:
  - variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
  - variable: API_KEY
    secret: myApiKeySecret

จัดการตัวแปรและข้อมูลลับในคอนโซล Firebase

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

ตั้งค่าตัวแปรและข้อมูลลับระหว่างการสร้างแบ็กเอนด์

เมื่อสร้างแบ็กเอนด์ App Hosting ใหม่ในคอนโซล Firebase คุณสามารถกำหนดค่าตัวแปรสภาพแวดล้อมมาตรฐานและข้อมูลลับได้ในขั้นตอนกำหนดค่าแบ็กเอนด์ของวิซาร์ดการตั้งค่า ดังนี้

  1. ในคอนโซล Firebase ให้ไปที่โฮสติ้งและ Serverless > App Hosting แล้วคลิกสร้างแบ็กเอนด์
  2. ทำตามขั้นตอนเริ่มต้นของวิซาร์ดเพื่อเลือกภูมิภาคหลักและที่เก็บโค้ด
  3. ในส่วนกำหนดค่าแบ็กเอนด์ ให้ค้นหาการ์ดที่ยุบได้สำหรับตัวแปรสภาพแวดล้อมและข้อมูลลับ ซึ่งคุณสามารถเพิ่มตัวแปรมาตรฐานและแนบข้อมูลลับได้
  4. ทำตามวิซาร์ดการสร้างแบ็กเอนด์ให้เสร็จสมบูรณ์ แล้วคลิกเสร็จสิ้นและทำให้ใช้งานได้

จัดการตัวแปรและข้อมูลลับในการตั้งค่าแบ็กเอนด์

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

  1. ในคอนโซล Firebase ให้เลือกแบ็กเอนด์ App Hosting แล้วเปิดการตั้งค่า > สภาพแวดล้อม
  2. ตรวจสอบการกำหนดค่าที่มีอยู่ในตารางตัวแปรสภาพแวดล้อม ดังนี้
    • ตัวแปรมาตรฐาน: ค่าจะแสดงเป็นข้อความธรรมดาในบล็อกโค้ดที่คัดลอกได้
    • ข้อมูลลับ: แสดงเป็นลิงก์ที่คลิกได้ซึ่งแสดงชื่อข้อมูลลับ (ซึ่งจะเปิด Cloud Secret Manager ในคอนโซล Google Cloud) พร้อมกับเวอร์ชันเป้าหมาย (เช่น latest หรือหมายเลขเวอร์ชันที่เจาะจง เช่น 2)
  3. วิธีเพิ่มตัวแปรหรือข้อมูลลับ
    1. คลิกเพิ่มใหม่
    2. ในขั้นตอนที่ 1: เลือกประเภท ให้เลือกตัวแปรสภาพแวดล้อมมาตรฐาน (สำหรับข้อมูลที่ไม่ละเอียดอ่อนซึ่งสมาชิกทุกคนในโปรเจ็กต์มองเห็นได้) หรือข้อมูลลับ (สำหรับคีย์ API และข้อมูลเข้าสู่ระบบที่ละเอียดอ่อนซึ่งมีการจำกัดการเข้าถึง) แล้วคลิกถัดไป
    3. ในขั้นตอนที่ 2: กำหนดการตั้งค่า ให้ป้อนชื่อคีย์และค่าข้อความธรรมดา (สำหรับตัวแปรมาตรฐาน) หรือเลือกรหัสข้อมูลลับและเวอร์ชัน (สำหรับข้อมูลลับ)
    4. บันทึกการเปลี่ยนแปลงโดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
      • บันทึกและทำให้ใช้งานได้: อัปเดตการกำหนดค่าแบ็กเอนด์ทันที และทริกเกอร์บิลด์และการเปิดตัวใหม่
      • บันทึกเท่านั้น (จากลูกศรแบบเลื่อนลงข้างบันทึกและทำให้ใช้งานได้): บันทึกการเปลี่ยนแปลงการกำหนดค่าโดยไม่ทริกเกอร์การเปิดตัวทันที การตั้งค่าที่อัปเดตจะมีผลในการติดตั้งใช้งานครั้งถัดไป
  4. หากต้องการแก้ไขหรือลบรายการที่มีอยู่ ให้คลิกเมนูการดำเนินการเพิ่มเติม (...) ที่ท้ายแถว
    • เลือกแก้ไขเพื่อแก้ไขคีย์ ค่า การแมปข้อมูลลับ หรือเวอร์ชัน แล้วคลิกบันทึกและทำให้ใช้งานได้หรือบันทึกเท่านั้น
    • เลือกลบและยืนยันการนำออกในกล่องโต้ตอบ

โอนตัวแปรจากไฟล์ dotenv รายการ

สำหรับแอป Next.js ไฟล์ dotenv ที่มีตัวแปรสภาพแวดล้อมจะทำงานร่วมกับ App Hosting

เมื่อสร้างหรืออัปเดตแบ็กเอนด์ คุณสามารถโอนตัวแปรสภาพแวดล้อมจากไฟล์ dotenv ไปยังคอนโซล Firebase ได้โดยคัดลอกและวางเนื้อหาทั้งหมดของไฟล์ dotenv ลงในช่องคีย์แรกในแบบฟอร์มเพิ่มใหม่ในการตั้งค่า > สภาพแวดล้อม

ตัวแปรสภาพแวดล้อมทั้งหมดที่คัดลอกด้วยวิธีนี้จะได้รับการจัดรูปแบบลงในแบบฟอร์มโดยอัตโนมัติ โดยไม่จำเป็นต้องป้อนทีละรายการ ตราบใดที่อินพุตใช้การจัดรูปแบบ KEY=value มาตรฐาน ดังนี้

KEY1=value1
KEY2=value2
KEY3=value3

สำหรับการควบคุมตัวแปรสภาพแวดล้อมที่ซับซ้อนหรือละเอียดด้วยเฟรมเวิร์กใดก็ตาม เราขอแนะนำให้ใช้ apphosting.yaml

จัดการตัวแปรและข้อมูลลับใน apphosting.yaml

สำหรับเวิร์กโฟลว์ที่ใช้โค้ดเป็นหลัก ให้ประกาศตัวแปรสภาพแวดล้อมมาตรฐานและการอ้างอิงข้อมูลลับภายใต้คีย์ env: ในไฟล์การกำหนดค่า apphosting.yaml ของที่เก็บโปรเจ็กต์ (ดูหัวข้อสร้างและแก้ไข apphosting.yaml)

env:
  # Standard environment variables
  - variable: PUBLIC_API_URL
    value: https://api.example.com
    availability:
      - BUILD
      - RUNTIME
  - variable: FEATURE_FLAG_NEW_UI
    value: "true"

  # Secret references backed by Cloud Secret Manager
  - variable: DATABASE_URL
    secret: projects/PROJECT_ID/secrets/db-connection-string/versions/latest
  - variable: GEMINI_API_KEY
    secret: myGeminiApiKeySecret@1

แต่ละรายการใน env: รองรับฟิลด์ต่อไปนี้

  • variable: ชื่อตัวแปรสภาพแวดล้อมที่แสดงต่อกระบวนการของแอปพลิเคชัน
  • value: ค่าสตริงข้อความธรรมดา (สำหรับตัวแปรสภาพแวดล้อมมาตรฐาน)
  • secret: ข้อมูลอ้างอิง Secret ของ Cloud Secret Manager (สำหรับ Secret) คุณสามารถใช้ชื่อสั้นๆ ของข้อมูลลับ (เช่น myGeminiApiKeySecret หรือ myGeminiApiKeySecret@1 ที่ปักหมุดไว้) หรือเส้นทางทรัพยากรแบบเต็ม (projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION) ดูรายละเอียดเพิ่มเติมได้ที่หัวข้อจัดเก็บและเข้าถึงพารามิเตอร์ข้อมูลลับ
  • availability: ควบคุมว่าจะเข้าถึงตัวแปรหรือข้อมูลลับได้หรือไม่ในระหว่างระยะ BUILD, ที่ RUNTIME หรือทั้ง 2 อย่าง

ตั้งค่าความพร้อมใช้งานของตัวแปร

ตัวแปรสภาพแวดล้อมและข้อมูลลับที่กำหนดค่าไว้ในคอนโซล Firebase จะพร้อมใช้งานทั้งในเวลาบิลด์และรันไทม์ ซึ่งเป็นลักษณะการทำงานเริ่มต้นสำหรับรายการที่กำหนดไว้ใน apphosting.yaml ด้วย เว้นแต่คุณจะจำกัดขอบเขตโดยใช้พร็อพเพอร์ตี้ availability ใน apphosting.yaml (แต่ไม่ใช่ในคอนโซล) คุณสามารถจำกัดตัวแปรหรือข้อมูลลับให้ใช้ได้เฉพาะกับสภาพแวดล้อมของบิลด์ (BUILD) หรือเฉพาะสภาพแวดล้อมรันไทม์ (RUNTIME)

เข้าถึงตัวแปรและข้อมูลลับในโค้ดของแอปพลิเคชัน

ไม่ว่าจะกำหนดค่าในคอนโซล Firebase หรือ apphosting.yaml ตัวแปรสภาพแวดล้อมและข้อมูลลับจะแสดงต่อรันไทม์ของแอปพลิเคชันเป็นตัวแปรสภาพแวดล้อมมาตรฐาน (เช่น process.env ใน Node.js)

// Accessing a standard environment variable
const apiUrl = process.env.PUBLIC_API_URL;

// Accessing a secret
const apiKey = process.env.GEMINI_API_KEY;

export async function fetchData() {
  const response = await fetch(`${apiUrl}/data`, {
    headers: {
      'Authorization': `Bearer ${apiKey}`
    }
  });
  return response.json();
}
  • การเข้าถึงฝั่งเซิร์ฟเวอร์: ตัวแปรสภาพแวดล้อมและข้อมูลลับทั้งหมดจะเข้าถึงได้อย่างปลอดภัยในบริบทการดำเนินการฝั่งเซิร์ฟเวอร์ (เช่น คอมโพเนนต์เซิร์ฟเวอร์ Next.js, เส้นทาง API หรือแฮนเดิลแบ็กเอนด์ Node.js)
  • การแสดงผลฝั่งไคลเอ็นต์: หากต้องการแสดงตัวแปรสภาพแวดล้อมมาตรฐานต่อเบราว์เซอร์ในเฟรมเวิร์กอย่าง Next.js ให้ตรวจสอบว่าคีย์ตัวแปรเป็นไปตามรูปแบบของเฟรมเวิร์ก (เช่น ขึ้นต้นด้วย NEXT_PUBLIC_)

    env:
      - variable: NEXT_PUBLIC_STORAGE_BUCKET
        value: mybucket.firebasestorage.app
        availability:
          - BUILD
          - RUNTIME
    

ลำดับชั้นของตัวแปร

Firebase App Hosting จะใช้ตัวแปรสภาพแวดล้อมและข้อมูลลับตามลำดับความสำคัญโดยอิงตามแหล่งที่มา การกำหนดค่าที่ตั้งไว้ในคอนโซล Firebase จะลบล้างพารามิเตอร์ที่ประกาศไว้ในไฟล์ apphosting.yaml และ dotenv เสมอ หากมีตัวแปรสภาพแวดล้อมหรือคีย์ลับที่มีชื่อเดียวกัน อยู่ในทั้ง apphosting.yaml และคอนโซล Firebase ค่าในคอนโซล จะมีลำดับความสำคัญเหนือกว่าในระหว่างการสร้างและการรันไทม์

ลำดับความสำคัญทั้งหมดมีดังนี้

  1. คอนโซล Firebase → ตัวแปรและข้อมูลลับที่ตั้งค่าในคอนโซล
  2. apphosting.<env>.yaml → ตัวแปรและข้อมูลลับที่ระบุในไฟล์ YAML เฉพาะสภาพแวดล้อม เช่น apphosting.staging.yaml (ดูติดตั้งใช้งานหลายสภาพแวดล้อม)
  3. apphosting.yaml → ตัวแปรและข้อมูลลับที่ระบุในไฟล์ apphosting.yaml
  4. ระบบ Firebase → ตัวแปรที่ Firebase ตั้งค่าไว้ซึ่งมีค่าสำหรับ FIREBASE_CONFIG หรือ FIREBASE_WEBAPP_CONFIG รวมถึงตัวแปรสภาพแวดล้อมที่ตั้งค่าชื่อโฮสต์และพอร์ตสำหรับแอป SSR (ตั้งค่าโดยอะแดปเตอร์ App Hosting ใน bundle.yaml)

ตัวแปรสภาพแวดล้อมที่สร้างขึ้นโดยอัตโนมัติ

มีตัวแปรสภาพแวดล้อมที่ App Hosting ป้อนข้อมูลโดยอัตโนมัติ ซึ่งรวมถึงตัวแปรที่สร้างโดย Google Cloud และตัวแปรสภาพแวดล้อมเฉพาะ Firebase เมื่อตั้งค่า appId ในแบ็กเอนด์ระหว่างการตั้งค่า

  • FIREBASE_CONFIG: (ใช้ได้ในสภาพแวดล้อมการสร้างและรันไทม์) ให้ข้อมูลการกำหนดค่าโปรเจ็กต์ Firebase ต่อไปนี้

    {
      "databaseURL": "https://DATABASE_NAME.firebaseio.com",
      "storageBucket": "PROJECT_ID.firebasestorage.app",
      "projectId": "PROJECT_ID"
    }
    

    ระบบจะใช้การกำหนดค่านี้โดยอัตโนมัติเมื่อคุณเริ่มต้น Firebase Admin SDK โดยไม่มีอาร์กิวเมนต์

  • FIREBASE_WEBAPP_CONFIG: (ใช้ได้ในสภาพแวดล้อมของบิลด์เท่านั้น) ให้ข้อมูลการกำหนดค่าโปรเจ็กต์ Firebase ต่อไปนี้

    {
      "apiKey": "API_KEY",
      "appId": "APP_ID",
      "authDomain": "AUTH_DOMAIN.firebaseapp.com",
      "databaseURL": "https://DATABASE_NAME.firebaseio.com",
      "messagingSenderId": "PROJECT_NUMBER",
      "projectId": "PROJECT_ID",
      "storageBucket": "PROJECT_ID.firebasestorage.app"
    }</span>
    

    Firebase JS SDK จะตรวจหาFIREBASE_WEBAPP_CONFIGตัวแปรสภาพแวดล้อมนี้ในสคริปต์ postinstall โดยอัตโนมัติระหว่างการบิลด์ ซึ่งช่วยให้คุณเริ่มต้น SDK ของไคลเอ็นต์ได้โดยไม่ต้องมีอาร์กิวเมนต์ใดๆ

ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้ตัวแปรสภาพแวดล้อมเหล่านี้เพื่อเริ่มต้น SDK ได้ที่เริ่มต้น Firebase Admin SDK และ SDK บนเว็บโดยอัตโนมัติ

โปรดทราบว่าค่าในการกำหนดค่า Firebase จริงจะสอดคล้องกับทรัพยากรเฉพาะที่คุณจัดสรรไว้ในโปรเจ็กต์

ลำดับชั้นของตัวแปร

Firebase App Hosting จะใช้ตัวแปรตามลำดับความสำคัญโดยอิงตามแหล่งที่มา ตัวอย่างเช่น ค่าที่ตั้งไว้ในคอนโซล Firebase จะลบล้างหรือมีความสำคัญเหนือกว่าค่าที่ตั้งไว้ในไฟล์ apphosting.yaml และ dotenv เสมอ

ลำดับความสำคัญทั้งหมดมีดังนี้

  1. คอนโซล Firebase → ตัวแปรที่ตั้งค่าในคอนโซล
  2. apphosting.<env>.yaml → ตัวแปรที่ระบุในไฟล์ yaml เฉพาะสภาพแวดล้อม เช่น apphosting.staging.yaml (ดูติดตั้งใช้งานหลายสภาพแวดล้อม)
  3. apphosting.yaml → ตัวแปรที่ระบุในไฟล์ apphosting.yaml
  4. ระบบ Firebase → ตัวแปรที่ Firebase ตั้งค่าไว้ซึ่งมีค่าสำหรับ firebase_config json หรือ firebase_webapp_config รวมถึงตัวแปรสภาพแวดล้อมที่ตั้งค่าชื่อโฮสต์และพอร์ตสำหรับแอป SSR (ตั้งค่าโดยอะแดปเตอร์ App Hosting ใน bundle.yaml)

ชื่อและข้อจำกัดที่สงวนไว้

ตัวแปรสภาพแวดล้อมที่กำหนดไว้ในสัญญาเกี่ยวกับรันไทม์ของคอนเทนเนอร์ Cloud Run จะสงวนไว้และตั้งค่าไม่ได้

ตัวแปรสภาพแวดล้อมที่สภาพแวดล้อมระบุ นอกเหนือจากตัวแปรที่ตั้งค่าโดยอัตโนมัติ อาจมีการเปลี่ยนแปลงในเวอร์ชันรันไทม์ในอนาคต แนวทางปฏิบัติแนะนำคืออย่าพึ่งพาหรือแก้ไขตัวแปรสภาพแวดล้อมที่คุณไม่ได้ตั้งค่าไว้อย่างชัดเจน และพิจารณาใส่คำนำหน้าตัวแปรสภาพแวดล้อมด้วยคีย์ที่ไม่ซ้ำกันเพื่อหลีกเลี่ยงความขัดแย้ง

คีย์ตัวแปรสภาพแวดล้อมบางรายการสงวนไว้สำหรับการใช้งานภายใน อย่าใช้คีย์ต่อไปนี้ในไฟล์การกำหนดค่า

  • สตริงว่าง ("")
  • คีย์ที่มี "="
  • คีย์ที่ขึ้นต้นด้วย X_FIREBASE_, X_GOOGLE_ หรือ CLOUD_RUN_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION
  • คีย์ซ้ำกัน

สร้างและแก้ไข apphosting.yaml

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

หากต้องการสร้าง 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.firebasestorage.app
    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, memoryMiB และ concurrency มีขีดจำกัดที่ขึ้นอยู่กับกันและกัน (เช่น การกำหนดค่าหน่วยความจำที่สูงขึ้นต้องใช้ขีดจำกัด CPU ขั้นต่ำที่สูงขึ้น และ CPU แบบเศษส่วนต้องใช้การทำงานพร้อมกันที่ 1) โปรดดูเอกสารประกอบของ Cloud Run เกี่ยวกับขีดจำกัด CPU และขีดจำกัดหน่วยความจำสำหรับช่วงที่ถูกต้องและการรวมที่จำเป็น

ลบล้างสคริปต์บิลด์และรัน

App Hosting จะอนุมานคำสั่งบิลด์และคำสั่งเริ่มต้นของแอปตามเฟรมเวิร์กที่ตรวจพบ หากต้องการใช้คำสั่งบิลด์หรือคำสั่งเริ่มต้นที่กำหนดเอง คุณสามารถลบล้างค่าเริ่มต้นของ App Hosting ใน apphosting.yaml ได้

scripts:
  buildCommand: next build --no-lint
  runCommand: node dist/index.js

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

ใช้การลบล้างคำสั่งเรียกใช้เมื่อมีคำสั่งเฉพาะที่คุณต้องการใช้เพื่อเริ่มแอปซึ่งแตกต่างจากคำสั่งที่ App Hosting คาดการณ์ไว้

กำหนดค่าเอาต์พุตบิลด์

App Hosting จะเพิ่มประสิทธิภาพการติดตั้งใช้งานแอปโดยค่าเริ่มต้นด้วยการลบไฟล์เอาต์พุตที่ไม่ได้ใช้ตามที่เฟรมเวิร์กระบุ หากต้องการเพิ่มประสิทธิภาพขนาดการติดตั้งใช้งานแอปเพิ่มเติมหรือละเว้นการเพิ่มประสิทธิภาพเริ่มต้น คุณสามารถลบล้างการตั้งค่านี้ได้ใน apphosting.yaml

outputFiles:
  serverApp:
    include: [dist, server.js]

พารามิเตอร์ include จะรับรายการไดเรกทอรีและไฟล์ที่เกี่ยวข้องกับไดเรกทอรีรากของแอปซึ่งจำเป็นต่อการทำให้แอปใช้งานได้ หากต้องการตรวจสอบว่าไฟล์ทั้งหมดได้รับการเก็บไว้ ให้ตั้งค่า include เป็น [.] แล้วระบบจะทำให้ไฟล์ทั้งหมดใช้งานได้

จัดเก็บและเข้าถึงพารามิเตอร์ข้อมูลลับ

ข้อมูลที่ละเอียดอ่อน เช่น คีย์ API ควรจัดเก็บเป็นข้อมูลลับ คุณสามารถแนบข้อมูลลับกับแบ็กเอนด์ในคอนโซล Firebase หรืออ้างอิงข้อมูลลับใน apphosting.yaml เพื่อหลีกเลี่ยงการตรวจสอบข้อมูลที่ละเอียดอ่อนในการควบคุมแหล่งที่มา

พารามิเตอร์ประเภท secret แสดงพารามิเตอร์สตริงที่มีค่าซึ่งจัดเก็บไว้ใน Cloud Secret Manager พารามิเตอร์ลับจะตรวจสอบการมีอยู่ของค่าใน Cloud Secret Manager และโหลดค่าระหว่างการเปิดตัว แทนที่จะรับค่าโดยตรง

env:
  - variable: API_KEY
    secret: myApiKeySecret

ข้อมูลลับใน Cloud Secret Manager มีได้หลายเวอร์ชัน โดยค่าเริ่มต้น ค่าของพารามิเตอร์ข้อมูลลับที่พร้อมใช้งานสำหรับแบ็กเอนด์ที่ใช้งานอยู่จะปักหมุดไว้ที่ข้อมูลลับเวอร์ชันล่าสุดที่พร้อมใช้งาน ณ เวลาที่สร้างแบ็กเอนด์ หากคุณมีข้อกำหนดสำหรับการกำหนดเวอร์ชันและการจัดการวงจรของพารามิเตอร์ คุณสามารถปักหมุดเวอร์ชันที่เฉพาะเจาะจงในคอนโซล Firebase หรือใน apphosting.yaml ได้ เช่น หากต้องการตรึงเป็นเวอร์ชัน 5 ใน apphosting.yaml ให้ทำดังนี้

env:
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

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

ให้สิทธิ์เข้าถึง Cloud Secret Manager

เพื่อให้ App Hosting ดึงข้อมูลค่าข้อมูลลับระหว่างการสร้างและการเปิดตัวรันไทม์ บัญชีบริการแบ็กเอนด์ของ App Hosting ต้องมีสิทธิ์เข้าถึง Cloud Secret Manager

หากคุณสร้างข้อมูลลับโดยใช้คอนโซล Cloud Secret Manager หรือ gcloud CLI แทน firebase apphosting:secrets:set ให้ให้สิทธิ์เข้าถึงแบ็กเอนด์โดยใช้ Firebase CLI:

firebase apphosting:secrets:grantaccess SECRET_NAME

หรือจะให้สิทธิ์บทบาทผู้เข้าถึงข้อมูลลับของ Secret Manager (roles/secretmanager.secretAccessor) แก่ตัวแทนบริการ App Hosting (service-PROJECT_NUMBER@gcp-sa-apphosting.iam.gserviceaccount.com) หรือบัญชีบริการรันไทม์ของแบ็กเอนด์โดยใช้ gcloud CLI ก็ได้ ดังนี้

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-apphosting.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

สิทธิ์เข้าถึงคอนโซลและสิทธิ์ตามบทบาท

คอนโซล Firebase จะจำกัดฟีเจอร์การจัดการสภาพแวดล้อมและ Secret Manager แบบไดนามิกตามสิทธิ์ IAM ของผู้ใช้ ดังนี้

  • บทบาทผู้ดู: ผู้ใช้ที่มีสิทธิ์อ่านโปรเจ็กต์เท่านั้นจะดูการตั้งค่าที่มีอยู่ได้ แต่จะทำการเปลี่ยนแปลงไม่ได้
    • ในระหว่างการสร้างแบ็กเอนด์ ปุ่มสร้างแบ็กเอนด์จะปิดใช้
    • ในการตั้งค่าแบ็กเอนด์ > สภาพแวดล้อม ปุ่มเพิ่มใหม่จะปิดใช้และเมนูแถวการดำเนินการเพิ่มเติม (...) จะซ่อนอยู่
  • ไม่มีสิทธิ์ Secret Manager: ผู้ใช้ที่ไม่มีสิทธิ์ IAM ในการโต้ตอบกับ Cloud Secret Manager จะเห็นข้อความเตือนในคอนโซล (ขอสิทธิ์จากเจ้าของโปรเจ็กต์เพื่อเพิ่มข้อมูลลับ) ดังนี้
    • ในระหว่างการสร้างแบ็กเอนด์ การ์ดข้อมูลลับจะปิดอยู่
    • ในการตั้งค่าแบ็กเอนด์ > สภาพแวดล้อม ตัวเลือกข้อมูลลับจะปิดใช้เมื่อคลิกเพิ่มใหม่ และตัวเลือกบางอย่างในเมนูแถวการดำเนินการเพิ่มเติม (...) จะซ่อนอยู่ในรายการข้อมูลลับที่มีอยู่

กำหนดค่าการเข้าถึง VPC

แบ็กเอนด์ App Hosting สามารถเชื่อมต่อกับเครือข่าย Virtual Private Cloud (VPC) ได้ ดูข้อมูลเพิ่มเติมและตัวอย่างได้ที่หัวข้อเชื่อมต่อ Firebase App Hosting กับเครือข่าย VPC

ใช้การแมป vpcAccess ในไฟล์ apphosting.yaml เพื่อกำหนดค่าสิทธิ์เข้าถึง ใช้ชื่อเครือข่าย/เครื่องมือเชื่อมต่อที่สมบูรณ์ในตัวเองหรือรหัส การใช้รหัสช่วยให้สามารถย้ายข้อมูลระหว่างสภาพแวดล้อม Staging และสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ที่มีเครื่องมือเชื่อมต่อ/เครือข่ายที่แตกต่างกันได้

การกำหนดค่าขาออกของ VPC โดยตรง (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: PRIVATE_RANGES_ONLY # Default value
    networkInterfaces:
      # Specify at least one of network and/or subnetwork
      - network: my-network-id
        subnetwork: my-subnetwork-id

การกำหนดค่าเครื่องมือเชื่อมต่อแบบ Serverless (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

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

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

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

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

คอนโซล Firebase: ไปที่โฮสติ้งและ Serverless > App Hosting แล้วคลิกสร้างแบ็กเอนด์ (หากเป็นแบ็กเอนด์แรกในโปรเจ็กต์ Firebase ให้คลิกเริ่มต้นใช้งาน)

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

firebase apphosting:backends:create --project PROJECT_ID

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

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

    ซึ่งมักจะเป็นตำแหน่งที่ไฟล์ package.json อยู่

  • ตั้งค่าสาขาที่เผยแพร่อยู่

    นี่คือ Branch ของที่เก็บ GitHub ที่ทำให้ใช้งานได้ใน URL ที่เผยแพร่อยู่ ซึ่งมักจะเป็นสาขาที่มีการผสานรวมสาขาฟีเจอร์หรือสาขาการพัฒนา

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

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

  • กำหนดชื่อให้กับแบ็กเอนด์

  • เลือกสภาพแวดล้อมรันไทม์ โดยค่าเริ่มต้น ระบบจะเลือก Node.js เวอร์ชันใหม่ล่าสุดที่แนะนำไว้ให้คุณล่วงหน้า

    • กำหนดค่าการอัปเดตอิมเมจพื้นฐานอัตโนมัติ (ABIU) ระบบจะเปิดใช้ ABIU โดยค่าเริ่มต้นและใช้แพตช์ด้านความปลอดภัยกับสภาพแวดล้อมที่สำคัญโดยอัตโนมัติ คุณเลือกไม่ใช้ ABIU ได้โดยเลือก "ไม่ได้ระบุ" สำหรับรันไทม์

ลบแบ็กเอนด์

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

คอนโซล Firebase: จากเมนูการตั้งค่า ให้เลือกลบแบ็กเอนด์

Firebase CLI: (v13.15.4 ขึ้นไป)

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

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

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