Thông thường, bạn sẽ cần định cấu hình bổ sung cho các chức năng của mình, chẳng hạn như khoá API của bên thứ ba hoặc các chế độ cài đặt có thể điều chỉnh. SDK Firebase dành cho Cloud Functions cung cấp cấu hình môi trường tích hợp sẵn để giúp bạn dễ dàng lưu trữ và truy xuất loại dữ liệu này cho dự án của mình.
Bạn có thể chọn một trong các lựa chọn sau:
- Cấu hình được tham số hoá (nên dùng cho hầu hết các trường hợp). Điều này cung cấp cấu hình môi trường được xác định rõ ràng với các tham số được xác thực tại thời điểm triển khai, giúp ngăn chặn lỗi và đơn giản hoá 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 sẽ tạo tệp dotenv theo cách thủ công để tải các biến môi trường.
Đối với hầu hết các trường hợp sử dụng, bạn nên sử dụng cấu hình có tham số. Phương pháp 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 sẽ bị chặn trừ phi tất cả các tham số đều có giá trị hợp lệ. Ngược lại, cấu hình với biến môi trường sẽ không có sẵn tại thời điểm triển khai.
Cấu hình có tham số
Cloud Functions for Firebase cung cấp một giao diện để xác định các thông 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 có sẵn trong cả quá trình triển khai hàm, khi thiết lập các tuỳ 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 quá trình triển khai trừ khi tất cả các tham số đều có giá trị hợp lệ.
Để xác định các tham số trong mã, hãy làm theo mô hình sau:
const functions = require('firebase-functions/v1');
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 có các biến cấu hình có tham số, trước tiên, CLI của Firebase sẽ cố gắng tải các giá trị của chúng từ các tệp .env cục bộ. Nếu các giá trị này không có trong các tệp đó và không có default
nào được đặt, thì CLI sẽ nhắc bạn nhập 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/
:
$ 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
Tuỳ thuộc vào quy trình phát triển của bạn, bạn có thể thêm tệp .env.<project_ID>
đã tạo vào tính năng quản lý phiên bản.
Sử dụng tham số trong phạm vi toàn cục
Trong quá trình triển khai, mã hàm sẽ được tải và kiểm tra trước khi tham số có giá trị thực tế. Điều này có nghĩa là việc tìm nạp giá trị tham số trong phạm vi toàn cục sẽ dẫn đến lỗi triển khai. Trong trường hợp bạn muốn sử dụng một tham số để khởi tạo giá trị toàn cục, hãy sử dụng lệnh gọi lại khởi chạy onInit()
. Lệnh gọi lại này chạy trước khi bất kỳ hàm nào chạy trong phiên bản chính thức nhưng không được gọi trong thời gian triển khai, vì vậy, đây là nơi an toàn để truy cập vào giá trị của tham số.
const { GoogleGenerativeAI } = require('@google/generative-ai');
const { defineSecret } = require('firebase-functions/params');
const { onInit } = require('firebase-functions/v1');
const apiKey = defineSecret('GOOGLE_API_KEY');
let genAI;
onInit(() => {
genAI = new GoogleGenerativeAI(apiKey.value());
})
Định cấu hình hành vi của CLI
Bạn có thể định cấu hình các tham số bằng đối tượng Options
kiểm soát cách CLI sẽ nhắc về các giá trị. Ví dụ sau đây đặt các tuỳ chọn để xác thực định dạng số điện thoại, cung cấp một tuỳ chọn lựa chọn đơn giản và tự động điền một tuỳ 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"})
Loại thông số
Cấu hình được tham số hoá cung cấp tính năng nhập 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
- Nổi
Giá trị và biểu thức tham số
Firebase đánh giá các thông số của bạn cả tại thời điểm triển khai và trong khi hàm 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 các giá trị đó để đặt các tuỳ chọn thời gian chạy cho hàm.
Để truyền một tham số vào hàm dưới dạng tuỳ chọn thời gian chạy, hãy truyền trực tiếp tham số đó:
const functions = require('firebase-functions/v1');
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 thông số để biết nên chọn tuỳ chọn nào, bạn sẽ cần sử dụng các công cụ so sánh tích hợp thay vì kiểm tra giá trị:
const functions = require('firebase-functions/v1');
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) => {
//…
Bạn có thể truy cập các tham số và biểu thức tham số chỉ được dùng trong thời gian chạy bằng hàm value
:
const functions = require('firebase-functions/v1');
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.`);
}
);
Tham số tích hợp sẵn
SDK của Cloud Functions cung cấp 3 tham số được xác định trước, có trong gói con firebase-functions/params
:
projectID
– dự án trên Google Cloud trong đó hàm đang chạy.databaseURL
– URL của thực thể Cơ sở dữ liệu theo thời gian thực được liên kết với hàm (nếu được bật trên dự án Firebase).storageBucket
– bộ chứa Cloud Storage được liên kết với hàm (nếu được bật trên dự án Firebase).
Các tham số này hoạt độ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ừ việc vì giá trị của các tham số này luôn được CLI Firebase biết, nên giá trị của các tham số này 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
.
Tham số bí mật
Các tham số thuộc loại Secret
, được xác định bằng defineSecret()
, đại diện cho các tham số chuỗi có giá trị được lưu trữ trong Trình quản lý bí mật trên đám mây. Thay vì kiểm tra một tệp .env
cục bộ và ghi giá trị mới vào tệp nếu thiếu, các tham số bí mật sẽ kiểm tra xem có sự tồn tại trong Cloud Secret Manager hay không và nhắc tương tác về giá trị của khoá 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 các tham số đó:
const functions = require('firebase-functions/v1');
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();
//…
Vì các giá trị của thông tin bảo mật bị ẩn cho đến khi thực thi hàm, nên bạn không thể sử dụng các giá trị đó trong khi định cấu hình hàm.
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. Sau khi triển khai, bạn có thể đọc các biến môi trường thông qua giao diện process.env
.
Để định cấu hình môi trường theo cách này, hãy tạo một tệp .env
trong dự án, thêm các biến mong muốn và triển khai:
Tạo tệp
.env
trong thư mụcfunctions/
:# Directory layout: # my-project/ # firebase.json # functions/ # .env # package.json # index.js
Mở tệp
.env
để chỉnh sửa và thêm các khoá mong muốn. Ví dụ:PLANET=Earth AUDIENCE=Humans
Triển khai các hàm 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. # ...
Sau khi các biến môi trường tuỳ chỉnh được triển khai, mã hàm của bạn có thể truy cập vào các biến đó 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 tập hợp biến môi trường
Nếu bạn cần một nhóm biến môi trường thay thế cho các dự án Firebase (chẳng hạn như môi trường thử nghiệm và môi trường phát hành chính thức), hãy tạo một tệp .env.<project or
alias>
và ghi các biến môi trường dành riêng cho dự án vào đó. Các biến môi trường từ các tệp .env
và .env
dành riêng cho dự án (nếu có) sẽ được đưa vào tất cả hàm được triển khai.
Ví dụ: một dự án có thể bao gồm 3 tệp sau đây, trong đó chứa các giá trị hơi khác nhau cho hoạt động phát triển và sản xuất:
.env
|
.env.dev
|
.env.prod
|
PLANET=Earth
KHÁN GIẢ=Con người |
AUDIENCE=Dev Humans | AUDIENCE=Nhân viên sản xuất |
Do 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 bằng các hàm sẽ thay đổi tuỳ theo 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ố khoá biến môi trường được dành riêng cho mục đích sử dụng nội bộ. Không sử dụng bất kỳ khoá nào trong số này trong tệp .env
:
- Tất cả các khoá bắt đầu bằng X_GOOGLE_
- Tất cả khoá bắt đầu bằng EXT_
- Tất cả khoá bắt đầu bằng FIREBASE_
- Bất kỳ khoá nào trong danh sách sau:
- CLOUD_RUNTIME_CONFIG
- ĐIỂM_NHẬT
- GCP_PROJECT
- GCLOUD_PROJECT
- GOOGLE_CLOUD_PROJECT
- FUNCTION_TRIGGER_TYPE
- FUNCTION_NAME
- FUNCTION_MEMORY_MB
- FUNCTION_TIMEOUT_SEC
- Hàm FUNCTION_IDENTITY
- FUNCTION_REGION
- FUNCTION_TARGET
- FUNCTION_SIGNATURE_TYPE
- K_SERVICE
- K_REVISION
- PORT
- K_CONFIGURATION
Lưu trữ và truy cập thông tin cấu hình nhạy cảm
Bạn có thể sử dụng các biến môi trường được lưu trữ trong tệp .env
để định cấu hình hàm, nhưng không nên coi đó là cách an toàn để lưu trữ thông tin nhạy cảm như thông tin xác thực cơ sở dữ liệu hoặc khoá API. Điều này đặc biệt quan trọng nếu bạn kiểm tra các tệp .env
vào chế độ kiểm soát nguồn.
Để giúp bạn lưu trữ thông tin cấu hình nhạy cảm, Cloud Functions for Firebase tích hợp với Google Cloud Secret Manager. Dịch vụ được mã hoá này lưu trữ các giá trị cấu hình một cách an toàn, đồng thời vẫn cho phép bạn dễ dàng truy cập từ các hàm của mình khi cần.
Tạo và sử dụng khoá bí mật
Để tạo một khoá bí mật, hãy sử dụng CLI Firebase.
Cách tạo và sử dụng khoá bí mật:
Từ thư mục gốc của dự án cục bộ, hãy chạy lệnh sau:
firebase functions:secrets:set SECRET_NAME
Nhập một giá trị cho SECRET_NAME.
CLI sẽ đưa ra thông báo thành công và cảnh báo rằng bạn phải triển khai các hàm để thay đổi có hiệu lực.
Trước khi triển khai, hãy đảm bảo mã hàm cho phép hàm truy cập vào khoá bí mật bằ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 });
Triển khai Cloud Functions:
firebase deploy --only functions
Bây giờ, bạn sẽ có thể truy cập biến này như mọi biến môi trường khác.
Ngược lại, nếu một hàm khác không chỉ định khoá bí mật trong runWith
cố gắng truy cập vào khoá bí mật, thì hàm đó 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 được triển khai, hàm của bạn sẽ có quyền truy cập vào giá trị bí mật. Chỉ các hàm có chứa một khoá bí mật trong tham số runWith
mới có quyền truy cập vào khoá 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ỉ có sẵn khi cần, giảm nguy cơ vô tình rò rỉ thông tin bí mật.
Quản lý khoá bí mật
Sử dụng CLI Firebase để quản lý các thông tin bí mật. Khi quản lý thông tin bí mật theo cách này, hãy lưu ý rằng một số thay đổi về CLI yêu cầu bạn sửa đổi và/hoặc triển khai lại các hàm liên kết. Cụ thể:
- Bất cứ khi nào bạn đặt giá trị mới cho một khoá bí mật, bạn phải triển khai lại tất cả các hàm tham chiếu đến khoá bí mật đó để các hàm đó nhận giá trị mới nhất.
- Nếu bạn xoá một khoá bí mật, hãy đảm bảo rằng không có hàm nào đã triển khai tham chiếu đến khoá bí mật đó. Các hàm sử dụng giá trị bí mật đã bị xoá sẽ không hoạt động.
Dưới đây là thông tin tóm tắt về các lệnh CLI Firebase để quản lý khoá 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 access
và destroy
, bạn có thể cung cấp tham số phiên bản tuỳ 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 truyền -h
bằng lệnh để xem phần trợ giúp về CLI.
Cách tính phí cho khoá bí mật
Secret Manager cho phép 6 phiên bản mật mã đang hoạt động mà không tính phí. Tức là bạn có thể có 6 khoá bí mật mỗi tháng trong một dự án Firebase mà không mất phí.
Theo mặc định, CLI Firebase sẽ cố gắng tự động huỷ bỏ các phiên bản khoá bí mật không dùng đến khi thích hợp, chẳng hạn như khi bạn triển khai các hàm bằng phiên bản khoá 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 dùng đến bằng cách sử dụng functions:secrets:destroy
và functions:secrets:prune
.
Secret Manager cho phép 10.000 hoạt động truy cập hằng tháng không được lập hoá đơn trên một chế độ bí mật. Các thực thể hàm chỉ đọc các khoá bí mật được chỉ định trong tham số runWith
mỗi khi khởi động nguội. Nếu có nhiều thực thể hàm đọc nhiều bí mật, dự án của bạn có thể vượt quá mức cho phép này. Khi đó, bạn sẽ bị tính phí 0,03 đô la cho mỗi 10.000 thao tác truy cập.
Để biết thêm thông tin, hãy xem phần Giá Secret Manager.
Hỗ trợ trình mô phỏng
Cấu hình môi trường với dotenv được thiết kế để tương tác với trình mô phỏng Cloud Functions cục bộ.
Khi sử dụng trình mô phỏng Cloud Functions cục bộ, bạn có thể ghi đè các biến môi trường cho dự án 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 3 tệp này chứa các giá trị hơi khác nhau cho hoạt động phát triển và kiểm thử cục bộ:
.env
|
.env.dev
|
.env.local
|
Hành tinh=Trái đất
KHÁN GIẢ=Con người |
AUDIENCE=Dev Humans | KHÁN GIẢ=Người địa phương |
Khi khởi động trong ngữ cảnh cục bộ, trình mô phỏng 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
Thông tin bí mật và thông tin xác thực trong trình mô phỏng Cloud Functions
Trình mô phỏng Cloud Functions hỗ trợ việc sử dụng thông tin bảo 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 mô phỏng sẽ cố gắng truy cập vào các bí mật sản xuất bằng thông tin xác thực mặc định của ứng dụng. Trong một số trường hợp như môi trường CI, trình mô phỏng có thể không truy cập được các giá trị bí mật do các hạn chế về quyền.
Tương tự như tính năng hỗ trợ trình mô phỏng Cloud Functions 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 thử các hàm trên máy, đặc biệt là khi 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 đã sử dụng cấu hình môi trường với functions.config
, bạn có thể di chuyển cấu hình hiện có dưới dạng biến môi trường (ở định dạng dotenv).
CLI Firebase cung cấp một 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 (trong ví dụ bên dưới, local
, dev
và prod
) dưới dạng tệp .env
.
Để di chuyển, hãy xuất cấu hình môi trường hiện có bằ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
Xin 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 khoá biến môi trường đã xuất. Lý do là không phải cấu hình nào cũng có thể được chuyển đổi tự động vì các cấu hình đó có thể không hợp lệ hoặc có thể là khoá biến môi trường dành riêng.
Bạn nên xem kỹ nội dung của các tệp .env
đã tạo trước khi triển khai các hàm hoặc kiểm tra các tệp .env
vào hệ thống quản lý nguồn. Nếu có giá trị nào nhạy cảm và không được rò rỉ, hãy xoá các giá trị đó khỏi tệp .env
và lưu trữ an toàn trong Secret Manager.
Bạn cũng cần cập nhật mã hàm. Bây giờ, mọi hàm sử dụng functions.config
sẽ cần sử dụng process.env
, như minh hoạ trong phần Nâng cấp lên thế hệ 2.
Cấu hình môi trường
Thiết lập cấu hình môi trường bằng 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.
Bạn có thể đặt tên không gian cho từng khoá bằng dấu chấm để nhóm các cấu hình liên quan lại với nhau. Xin lưu ý rằng chỉ chấp nhận ký tự viết thường trong khoá; không chấp nhận ký tự viết hoa.
Ví dụ: để lưu trữ Mã ứng dụng và khoá 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 nội dung hiện được lưu trữ trong cấu hình môi trường cho dự án, bạn có thể sử dụng firebase functions:config:get
. Hàm này sẽ xuất JSON như sau:
{
"someservice": {
"key":"THE API KEY",
"id":"THE CLIENT ID"
}
}
Chức năng này dựa trên API Cấu hình thời gian chạy Google Cloud.
Sử dụng functions.config
để truy cập vào cấu hình môi trường trong một hàm
Một số cấu hình được tự động cung cấp trong không gian tên firebase
đã đặt trước. Cấu hình môi trường được cung cấp bên trong hàm đang chạy thông qua functions.config()
.
Để sử dụng cấu hình trên, mã của bạn có thể có dạng như sau:
const functions = require('firebase-functions/v1');
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 chạy 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 thêm cấu hình để khởi chạy chính xác. 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ã hoá cứng. Điều này giúp bạn lưu giữ mã dễ dàng di chuyển hơn, cho phép bạn mở nguồn ứng dụng hoặc dễ dàng chuyển đổi giữa các phiên bản phát hành công khai và thử nghiệm.
Ví dụ: để sử dụng mô-đun SDK Nút Slack, bạn có thể viết mã sau:
const functions = require('firebase-functions/v1');
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
sẽ xoá các khoá đã chỉ định khỏi cấu hìnhfirebase functions:config:clone --from <fromProject>
sao chép môi trường của một dự án khác vào dự án đang hoạt động.
Biến môi trường được tự động điền
Có những biến môi trường được tự động điền trong thời gian chạy của hàm và trong các hàm được mô phỏng cục bộ. Các biến này bao gồm cả những biến do Google Cloud điền sẵn, cũng như một 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 đây:
{
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ào. Nếu bạn đang viết các hàm trong JavaScript, hãy khởi động như sau:
const admin = require('firebase-admin');
admin.initializeApp();
Nếu bạn đang viết hàm trong TypeScript, hãy khởi chạy như sau:
import * as functions from 'firebase-functions/v1';
import * as admin from 'firebase-admin';
import 'firebase-functions/v1';
admin.initializeApp();
Nếu cần khởi chạy SDK quản trị bằng cấu hình dự án mặc định bằng thông tin xác thực tài khoản dịch vụ, bạn có thể tải thông tin xác thực từ một tệp và thêm thông tin xác thực đó 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);