Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Định cấu hình môi trường của bạn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Thông thường, bạn sẽ cần cấu hình bổ sung cho các chức năng của mình, chẳng hạn như khóa API của bên thứ ba hoặc cài đặt có thể điều chỉnh. SDK Firebase dành cho Chức năng đám mây cung cấp cấu hình môi trường tích hợp để giúp dễ dàng lưu trữ và truy xuất loại dữ liệu này cho dự án của bạn.

Bạn có thể chọn giữa ba tùy chọn:

  • Cấu hình được tham số hóa (được khuyến nghị cho hầu hết các tình huống). Điều này cung cấp cấu hình môi trường được nhập mạnh với các tham số được xác thực tại thời điểm triển khai, giúp ngăn ngừa lỗi và đơn giản hóa việc gỡ lỗi.
  • Cấu hình dựa trên tệp của các biến môi trường . Với phương pháp này, bạn tự tạo một tệp dotenv để tải các biến môi trường.
  • Cấu hình môi trường thời gian chạy với Firebase CLI và functions.config .

Đối với hầu hết các trường hợp sử dụng, nên sử dụng cấu hình được tham số hóa. Cách tiếp cận này làm cho các giá trị cấu hình có sẵn cả trong thời gian chạy và thời gian triển khai, đồng thời việc triển khai bị chặn trừ khi tất cả các tham số đều có giá trị hợp lệ. Ngược lại, cấu hình với các biến môi trường không khả dụng tại thời điểm triển khai.

cấu hình tham số

Cloud Functions cho Firebase cung cấp giao diện để xác định các tham số cấu hình theo cách khai báo bên trong cơ sở mã của bạn. Giá trị của các tham số này khả dụng cả trong quá trình triển khai chức năng, khi đặt các tùy chọn triển khai và thời gian chạy cũng như trong quá trình thực thi. Điều này có nghĩa là CLI sẽ chặn triển khai trừ khi tất cả các tham số có giá trị hợp lệ.

Để xác định các tham số trong mã của bạn, hãy làm theo mô hình sau:

const functions = require('firebase-functions');
const { defineInt, defineString } = require('firebase-functions/params');

// Define some parameters
const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES');
const welcomeMessage = defineString('WELCOME_MESSAGE');

// To use configured parameters inside the config for a function, provide them 
// directly. To use them at runtime, call .value() on them.
export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
  (req, res) => {
    res.send(`${welcomeMessage.value()}! I am a function.`);
  }
);

Khi triển khai một hàm với các biến cấu hình được tham số hóa, trước tiên, Firebase CLI sẽ thử tải các giá trị của chúng từ các tệp .env cục bộ. Nếu chúng không có trong các tệp đó và không có giá trị default nào được đặt, thì CLI sẽ nhắc các giá trị trong quá trình triển khai, sau đó tự động lưu các giá trị đó vào tệp .env có tên .env.<project_ID> trong thư mục functions/ của bạn:

$ firebase deploy
i  functions: preparing codebase default for deployment
? Enter a string value for ENVIRONMENT: prod
i  functions: Writing new parameter values to disk: .env.projectId
…
$ firebase deploy
i  functions: Loaded environment variables from .env.projectId

Tùy thuộc vào quy trình phát triển của bạn, có thể hữu ích khi thêm .env.<project_ID> tạo vào kiểm soát phiên bản.

Định cấu hình hành vi CLI

Các tham số có thể được định cấu hình bằng một đối tượng Options kiểm soát cách CLI sẽ nhắc các giá trị. Ví dụ sau đặt các tùy chọn để xác thực định dạng của số điện thoại, cung cấp tùy chọn lựa chọn đơn giản và tự động điền tùy chọn lựa chọn từ dự án Firebase:

const { defineString } = require('firebase-functions/params');

const welcomeMessage = defineString('WELCOME_MESSAGE', {default: 'Hello World',
description: 'The greeting that is returned to the caller of this function'});

const onlyPhoneNumbers = defineString('PHONE_NUMBER', {input: {text:
{validationRegex: /\d{3}-\d{3}-\d{4}/, validationErrorMessage: "Please enter
a phone number in the format XXX-YYY-ZZZZ"}}});

const selectedOption = defineString('PARITY', {input: {select: {options:
[{value: "odd"}, {value: "even"}]}}})

const storageBucket = defineString('BUCKET', {input: {resource: {type:
"storage.googleapis.com/Bucket"}}, description: "This will automatically
populate the selector field with the deploying Cloud Project’s
storage buckets"})

các loại tham số

Cấu hình được tham số hóa cung cấp khả năng gõ mạnh cho các giá trị tham số và cũng hỗ trợ các bí mật từ Trình quản lý bí mật trên đám mây. Các loại được hỗ trợ là:

  • Bí mật
  • Chuỗi
  • Boolean
  • số nguyên
  • Trôi nổi

Giá trị tham số và biểu thức

Firebase đánh giá các thông số của bạn tại thời điểm triển khai và trong khi chức năng của bạn đang thực thi. Do các môi trường kép này, bạn phải cẩn thận hơn khi so sánh các giá trị tham số và khi sử dụng chúng để đặt các tùy chọn thời gian chạy cho các chức năng của mình.

Để truyền tham số cho hàm của bạn dưới dạng tùy chọn thời gian chạy, hãy truyền trực tiếp tham số đó:

const functions = require('firebase-functions');
const { defineInt} = require('firebase-functions/params');
const minInstancesConfig = defineInt('HELLO\_WORLD\_MININSTANCES');

export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
  (req, res) => {
    //…

Ngoài ra, nếu cần so sánh với một tham số để biết nên chọn tùy chọn nào, bạn sẽ cần sử dụng bộ so sánh tích hợp sẵn thay vì kiểm tra giá trị:

const functions = require('firebase-functions');
const { defineBool } = require('firebase-functions/params');
const environment = params.defineString(‘ENVIRONMENT’, {default: ‘dev’});

// use built-in comparators
const minInstancesConfig =environment.equals('PRODUCTION').thenElse(10, 1);
export const helloWorld = functions.runWith({ minInstances: minInstancesConfig}).https.onRequest(
  (req, res) => {
    //…

Các tham số và biểu thức tham số chỉ được sử dụng trong thời gian chạy có thể được truy cập bằng hàm value của chúng:

const functions = require('firebase-functions');
const { defineString } = require('firebase-functions/params');
const welcomeMessage = defineString('WELCOME_MESSAGE');

// To use configured parameters inside the config for a function, provide them
// directly. To use them at runtime, call .value() on them.
export const helloWorld = functions.https.onRequest(
 (req, res) => {
    res.send(`${welcomeMessage.value()}! I am a function.`);
  }
);

Các thông số tích hợp

SDK chức năng đám mây cung cấp ba tham số được xác định trước, có sẵn từ gói phụ firebase-functions/params :

  • projectId — dự án Đám mây mà chức năng đang chạy.
  • databaseUrl — URL của phiên bản Cơ sở dữ liệu thời gian thực được liên kết với chức năng (nếu được bật trên dự án Firebase).
  • storageBucket — bộ chứa Cloud Storage được liên kết với chức năng (nếu được bật trên dự án Firebase).

Các chức năng này giống như các tham số chuỗi do người dùng xác định ở mọi khía cạnh, ngoại trừ một điều là vì các giá trị của chúng luôn được Firebase CLI biết nên các giá trị của chúng sẽ không bao giờ được nhắc khi triển khai cũng như không được lưu vào tệp .env .

Thông số bí mật

Các tham số thuộc loại Secret , được xác định bằng cách sử defineSecret() , biểu thị các tham số chuỗi có giá trị được lưu trữ trong Cloud Secret Manager. Thay vì kiểm tra tệp .env cục bộ và ghi giá trị mới vào tệp nếu bị thiếu, các tham số bí mật sẽ kiểm tra sự tồn tại trong Cloud Secret Manager và nhắc tương tác về giá trị của bí mật mới trong quá trình triển khai.

Các tham số bí mật được xác định theo cách này phải được liên kết với các hàm riêng lẻ có quyền truy cập vào chúng:

const functions = require('firebase-functions');
const { defineSecret } = require('firebase-functions/params');
const discordApiKey = defineSecret('DISCORD_API_KEY');

export const postToDiscord = functions.runWith({ secrets: [discordApiKey] }).https.onRequest(
  (req, res) => {
    const apiKey = discordApiKey.value();
    //…

Bởi vì các giá trị của các bí mật được ẩn cho đến khi thực thi chức năng, bạn không thể sử dụng chúng trong khi định cấu hình chức năng của mình.

Biến môi trường

Cloud Functions for Firebase hỗ trợ định dạng tệp dotenv để tải các biến môi trường được chỉ định trong tệp .env vào thời gian chạy ứng dụng của bạn. Sau khi được triển khai, các biến môi trường có thể được đọc qua giao diện process.env .

Để định cấu hình môi trường của bạn theo cách này, hãy tạo tệp .env trong dự án của bạn, thêm các biến mong muốn và triển khai:

  1. Tạo một tệp .env trong thư mục functions/ của bạn:

    # Directory layout:
    #   my-project/
    #     firebase.json
    #     functions/
    #       .env
    #       package.json
    #       index.js
    
  2. Mở tệp .env để chỉnh sửa và thêm các khóa mong muốn. Ví dụ:

    PLANET=Earth
    AUDIENCE=Humans
    
  3. Triển khai các chức năng và xác minh rằng các biến môi trường đã được tải:

    firebase deploy --only functions
    # ...
    # i functions: Loaded environment variables from .env.
    # ...
    

Khi các biến môi trường tùy chỉnh của bạn được triển khai, mã chức năng của bạn có thể truy cập chúng bằng cú pháp process.env :

// Responds with "Hello Earth and Humans"
exports.hello = functions.https.onRequest((request, response) => {
  response.send(`Hello ${process.env.PLANET} and ${process.env.AUDIENCE}`);
});

Triển khai nhiều bộ biến môi trường

Nếu bạn cần một bộ biến môi trường thay thế cho các dự án Firebase của mình (chẳng hạn như dàn dựng và sản xuất), hãy tạo một .env. <project or alias > và ghi các biến môi trường dành riêng cho dự án của bạn vào đó. Các biến môi trường từ .env và tệp .env dành riêng cho dự án (nếu chúng tồn tại) sẽ được bao gồm trong tất cả các chức năng đã triển khai.

Ví dụ: một dự án có thể bao gồm ba tệp này chứa các giá trị hơi khác nhau để phát triển và sản xuất:

.env .env.dev .env.prod
HÀNH TINH=Trái đất

ĐỐI TƯỢNG=Con người

ĐỐI TƯỢNG=Nhà phát triển Con người ĐỐI TƯỢNG=Prod Humans

Với các giá trị trong các tệp riêng biệt đó, tập hợp các biến môi trường được triển khai với các chức năng của bạn sẽ khác nhau tùy thuộc vào dự án mục tiêu của bạn:

$ firebase use dev
$ firebase deploy --only functions
i functions: Loaded environment variables from .env, .env.dev.
# Deploys functions with following user-defined environment variables:
#   PLANET=Earth
#   AUDIENCE=Dev Humans

$ firebase use prod
$ firebase deploy --only functions
i functions: Loaded environment variables from .env, .env.prod.
# Deploys functions with following user-defined environment variables:
#   PLANET=Earth
#   AUDIENCE=Prod Humans

Biến môi trường dành riêng

Một số khóa biến môi trường được dành riêng để sử dụng nội bộ. Không sử dụng bất kỳ phím nào trong các tệp .env của bạn:

  • Tất cả các khóa bắt đầu bằng X_GOOGLE_
  • Tất cả các phím bắt đầu từ EXT_
  • Tất cả các khóa bắt đầu bằng FIREBASE_
  • Bất kỳ khóa nào từ danh sách sau:
  • CLOUD_RUNTIME_CONFIG
  • ENTRY_POINT
  • GCP_PROJECT
  • GCLOUD_PROJECT
  • GOOGLE_CLOUD_PROJECT
  • FUNCTION_TRIGGER_TYPE
  • TÊN CHỨC NĂNG
  • FUNCTION_MEMORY_MB
  • FUNCTION_TIMEOUT_SEC
  • FUNCTION_IDENTITY
  • FUNCTION_REGION
  • FUNCTION_TARGET
  • FUNCTION_SIGNATURE_TYPE
  • K_DỊCH VỤ
  • K_REVISION
  • HẢI CẢNG
  • K_CONFIGURATION

Lưu trữ và truy cập thông tin cấu hình nhạy cảm

Các biến môi trường được lưu trữ trong tệp .env có thể được sử dụng để cấu hình chức năng, nhưng bạn không nên coi chúng là cách an toàn để lưu trữ thông tin nhạy cảm, chẳng hạn như thông tin xác thực cơ sở dữ liệu hoặc khóa API. Điều này đặc biệt quan trọng nếu bạn kiểm tra các tệp .env của mình trong kiểm soát nguồn.

Để giúp bạn lưu trữ thông tin cấu hình nhạy cảm, Chức năng đám mây cho Firebase tích hợp với Google Cloud Secret Manager . Dịch vụ được mã hóa này lưu trữ các giá trị cấu hình một cách an toàn, trong khi vẫn cho phép dễ dàng truy cập từ các chức năng của bạn khi cần.

Tạo và sử dụng bí mật

Để tạo bí mật, hãy sử dụng Firebase CLI.

Để tạo và sử dụng bí mật:

  1. Từ thư mục gốc của thư mục dự án cục bộ của bạn, hãy chạy lệnh sau:

    firebase functions:secrets:set SECRET_NAME

  2. Nhập một giá trị cho SECRET_NAME .

    CLI lặp lại thông báo thành công và cảnh báo rằng bạn phải triển khai các chức năng để thay đổi có hiệu lực.

  3. Trước khi triển khai, hãy đảm bảo mã hàm của bạn cho phép hàm truy cập bí mật bằng cách sử dụng tham số runWith :

    exports.processPayment = functions
      // Make the secret available to this function
      .runWith({ secrets: ["SECRET_NAME"] })
      .onCall((data, context) => {
        const myBillingService = initializeBillingService(
          // reference the secret value
          process.env.SECRET_NAME
        );
        // Process the payment
      });
  4. Triển khai chức năng đám mây:

    firebase deploy --only functions

Bây giờ bạn sẽ có thể truy cập nó giống như bất kỳ biến môi trường nào khác. Ngược lại, nếu một chức năng khác không chỉ định bí mật trong runWith cố gắng truy cập bí mật, thì nó sẽ nhận được một giá trị không xác định:

exports.anotherEndpoint = functions.https.onRequest((request, response) => {
  response.send(`The secret API key is ${process.env.SECRET_NAME}`);
  // responds with "The secret API key is undefined" because the `runWith` parameter is missing
});

Sau khi chức năng của bạn được triển khai, nó sẽ có quyền truy cập vào giá trị bí mật. Chỉ những hàm bao gồm cụ thể một bí mật trong tham số runWith của chúng mới có quyền truy cập vào bí mật đó dưới dạng một biến môi trường. Điều này giúp bạn đảm bảo rằng các giá trị bí mật chỉ khả dụng ở những nơi cần thiết, giảm nguy cơ vô tình làm rò rỉ bí mật.

Quản lý bí mật

Sử dụng Firebase CLI để quản lý bí mật của bạn. Trong khi quản lý bí mật theo cách này, hãy nhớ rằng một số thay đổi CLI yêu cầu bạn sửa đổi và/hoặc triển khai lại các chức năng liên quan. Đặc biệt:

  • Bất cứ khi nào bạn đặt một giá trị mới cho một bí mật, bạn phải triển khai lại tất cả các hàm tham chiếu đến bí mật đó để chúng nhận giá trị mới nhất.
  • Nếu bạn xóa một bí mật, hãy đảm bảo rằng không có hàm nào được triển khai của bạn tham chiếu đến bí mật đó. Các chức năng sử dụng một giá trị bí mật đã bị xóa sẽ bị lỗi âm thầm.

Dưới đây là tóm tắt các lệnh Firebase CLI để quản lý bí mật:

# Change the value of an existing secret
firebase functions:secrets:set SECRET_NAME

# View the value of a secret
functions:secrets:access SECRET_NAME

# Destroy a secret
functions:secrets:destroy SECRET_NAME

# View all secret versions and their state
functions:secrets:get SECRET_NAME

# Automatically clean up all secrets that aren't referenced by any of your functions
functions:secrets:prune

Đối với các lệnh accessdestroy , bạn có thể cung cấp tham số phiên bản tùy chọn để quản lý một phiên bản cụ thể. Ví dụ:

functions:secrets:access SECRET_NAME[@VERSION]

Để biết thêm thông tin về các thao tác này, hãy chuyển -h bằng lệnh để xem trợ giúp CLI.

Làm thế nào bí mật được lập hóa đơn

Secret Manager cho phép 6 phiên bản bí mật hoạt động miễn phí. Điều này có nghĩa là bạn có thể có 6 bí mật mỗi tháng trong dự án Firebase mà không mất phí.

Theo mặc định, Firebase CLI cố gắng tự động hủy các phiên bản bí mật không sử dụng khi thích hợp, chẳng hạn như khi bạn triển khai các chức năng với phiên bản bí mật mới. Ngoài ra, bạn có thể chủ động dọn dẹp các bí mật không sử dụng bằng cách sử dụng functions:secrets:destroyfunctions:secrets:prune .

Trình quản lý bí mật cho phép 10.000 hoạt động truy cập hàng tháng không được lập hóa đơn trên một bí mật. Các phiên bản chức năng chỉ đọc các bí mật được chỉ định trong tham số runWith của chúng mỗi khi chúng khởi động nguội. Nếu bạn có nhiều phiên bản chức năng đọc nhiều bí mật, thì dự án của bạn có thể vượt quá mức cho phép này, tại thời điểm đó, bạn sẽ bị tính phí 0,03 USD cho mỗi 10.000 thao tác truy cập.

Để biết thêm thông tin, hãy xem Định giá của Người quản lý Bí mật .

hỗ trợ giả lập

Cấu hình môi trường với dotenv được thiết kế để tương tác với trình giả lập Chức năng đám mây cục bộ .

Khi sử dụng trình mô phỏng Cloud Function cục bộ, bạn có thể ghi đè các biến môi trường cho dự án của mình bằng cách thiết lập tệp .env.local . Nội dung của .env.local được ưu tiên hơn .env và tệp .env dành riêng cho dự án.

Ví dụ: một dự án có thể bao gồm ba tệp này chứa các giá trị hơi khác nhau để phát triển và thử nghiệm cục bộ:

.env .env.dev .env.local
HÀNH TINH=Trái đất

ĐỐI TƯỢNG=Con người

ĐỐI TƯỢNG=Nhà phát triển Con người ĐỐI TƯỢNG=Người địa phương

Khi bắt đầu trong ngữ cảnh cục bộ, trình giả lập sẽ tải các biến môi trường như sau:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Bí mật và thông tin xác thực trong trình giả lập Chức năng đám mây

Trình giả lập Chức năng đám mây hỗ trợ sử dụng bí mật để lưu trữ và truy cập thông tin cấu hình nhạy cảm . Theo mặc định, trình giả lập sẽ cố gắng truy cập các bí mật sản xuất của bạn bằng thông tin đăng nhập mặc định của ứng dụng. Trong một số trường hợp như môi trường CI, trình giả lập có thể không truy cập được các giá trị bí mật do hạn chế về quyền.

Tương tự như hỗ trợ trình giả lập Cloud Function cho các biến môi trường, bạn có thể ghi đè các giá trị bí mật bằng cách thiết lập tệp .secret.local . Điều này giúp bạn dễ dàng kiểm tra các chức năng của mình cục bộ, đặc biệt nếu bạn không có quyền truy cập vào giá trị bí mật.

Di chuyển từ cấu hình môi trường

Nếu bạn đang sử dụng cấu hình môi trường với functions.config , thì bạn có thể di chuyển cấu hình hiện tại của mình dưới dạng biến môi trường (ở định dạng dotenv ). Firebase CLI cung cấp lệnh xuất xuất cấu hình của từng bí danh hoặc dự án được liệt kê trong tệp .firebaserc của thư mục của bạn (trong ví dụ bên dưới là local , devprod ) dưới dạng tệp .env .

Để di chuyển, hãy xuất các cấu hình môi trường hiện tại của bạn bằng cách sử dụng lệnh firebase functions:config:export :

firebase functions:config:export
i  Importing configs from projects: [project-0, project-1]
⚠  The following configs keys could not be exported as environment variables:

⚠  project-0 (dev):
    1foo.a => 1FOO\_A (Key 1FOO\_A must start with an uppercase ASCII letter or underscore, and then consist of uppercase ASCII letters, digits, and underscores.)

Enter a PREFIX to rename invalid environment variable keys: CONFIG\_
✔  Wrote functions/.env.prod
✔  Wrote functions/.env.dev
✔  Wrote functions/.env.local
✔  Wrote functions/.env

Lưu ý rằng, trong một số trường hợp, bạn sẽ được nhắc nhập tiền tố để đổi tên các khóa biến môi trường đã xuất. Điều này là do không phải tất cả các cấu hình đều có thể được chuyển đổi tự động vì chúng có thể không hợp lệ hoặc có thể là khóa biến môi trường dành riêng .

Chúng tôi khuyên bạn nên xem xét cẩn thận nội dung của các tệp .env tạo trước khi triển khai các chức năng của mình hoặc kiểm tra các tệp .env trong kiểm soát nguồn. Nếu bất kỳ giá trị nào nhạy cảm và không nên bị rò rỉ, hãy xóa chúng khỏi tệp .env của bạn và lưu trữ chúng an toàn trong Trình quản lý bí mật .

Bạn cũng sẽ cần cập nhật mã chức năng của mình. Bất kỳ chức năng nào sử dụng functions.config giờ đây sẽ cần sử dụng process.env , như được hiển thị trong Biến môi trường .

Cấu hình môi trường

Trước khi hỗ trợ biến môi trường được phát hành trong firebase-functions v3.18.0 , sử dụng functions.config() là phương pháp được đề xuất cho cấu hình môi trường. Phương pháp này vẫn được hỗ trợ, nhưng chúng tôi khuyên tất cả các dự án mới nên sử dụng biến môi trường thay vì chúng đơn giản hơn để sử dụng và cải thiện tính di động của mã của bạn.

Đặt cấu hình môi trường với CLI

Để lưu trữ dữ liệu môi trường, bạn có thể sử dụng lệnh firebase functions:config:set trong Firebase CLI . Mỗi khóa có thể được đặt tên bằng dấu chấm để nhóm cấu hình có liên quan lại với nhau. Hãy nhớ rằng chỉ các ký tự chữ thường được chấp nhận trong keys ; ký tự hoa không được phép.

Chẳng hạn, để lưu ID khách hàng và khóa API cho "Một số dịch vụ", bạn có thể chạy:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

Truy xuất cấu hình môi trường hiện tại

Để kiểm tra những gì hiện được lưu trữ trong cấu hình môi trường cho dự án của bạn, bạn có thể sử dụng firebase functions:config:get . Nó sẽ xuất JSON một cái gì đó như thế này:

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

Chức năng này dựa trên Google Cloud Runtime Configuration API .

Sử dụng functions.config để truy cập cấu hình môi trường trong một hàm

Một số cấu hình được cung cấp tự động trong không gian tên firebase dành riêng. Cấu hình môi trường được cung cấp bên trong chức năng đang chạy của bạn thông qua functions.config() . Để sử dụng cấu hình trên, mã của bạn có thể giống như sau:

const functions = require('firebase-functions');
const request = require('request-promise');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

Sử dụng cấu hình môi trường để khởi tạo mô-đun

Một số mô-đun Node đã sẵn sàng mà không cần bất kỳ cấu hình nào. Các mô-đun khác cần cấu hình bổ sung để khởi tạo chính xác. Chúng tôi khuyên bạn nên lưu trữ cấu hình này trong các biến cấu hình môi trường thay vì mã hóa cứng cấu hình đó. Điều này giúp bạn giữ cho mã của mình linh hoạt hơn nhiều, cho phép bạn mở nguồn ứng dụng của mình hoặc dễ dàng chuyển đổi giữa phiên bản sản xuất và phiên bản dàn dựng.

Ví dụ: để sử dụng mô-đun Slack Node SDK , bạn có thể viết như sau:

const functions = require('firebase-functions');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);

Trước khi triển khai, hãy đặt biến cấu hình môi trường slack.url :

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

Các lệnh môi trường bổ sung

  • firebase functions:config:unset key1 key2 xóa các khóa đã chỉ định khỏi cấu hình
  • firebase functions:config:clone --from <fromProject> sao chép môi trường của dự án khác vào dự án hiện đang hoạt động.

Các biến môi trường được điền tự động

Có các biến môi trường được điền tự động trong thời gian chạy hàm và trong các hàm được mô phỏng cục bộ. Chúng bao gồm những thứ được tạo bởi Google Cloud , cũng như biến môi trường dành riêng cho Firebase:

process.env.FIREBASE_CONFIG : Cung cấp thông tin cấu hình dự án Firebase sau:

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

Cấu hình này được áp dụng tự động khi bạn khởi chạy SDK quản trị Firebase mà không có đối số. Nếu bạn đang viết các hàm bằng JavaScript, hãy khởi tạo như sau:

const admin = require('firebase-admin');
admin.initializeApp();

Nếu bạn đang viết các hàm trong TypeScript, hãy khởi tạo như sau:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();

Nếu bạn cần khởi chạy SDK quản trị với cấu hình dự án mặc định bằng thông tin đăng nhập tài khoản dịch vụ, bạn có thể tải thông tin đăng nhập từ một tệp và thêm chúng vào FIREBASE_CONFIG như sau:

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);