Thông thường, bạn cần 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 chế độ cài đặt có thể điều chỉnh. Firebase SDK for Cloud Functions cung cấp cấu hình môi trường tích hợp sẵn để giúp dễ dàng lưu trữ và truy xuất dữ liệu này cho dự án của bạn.
Bạn có thể chọn một trong ba cách sau:
- Cấu hình có thông số (nên dùng cho hầu hết các trường hợp). Thao tác này cung cấp môi trường được định kiểu mạnh có các tham số được xác thực tại thời điểm triển khai, 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 biến môi trường. Với phương pháp này, bạn có thể tạo dotenv để tải biến môi trường.
- Cấu hình môi trường trong thời gian chạy bằng Giao diện dòng lệnh (CLI) của Firebase
và
functions.config
(chỉ dành cho Cloud Functions (thế hệ thứ 1).
Đố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 cung cấp giá trị cấu hình trong cả thời gian chạy và thời gian triển khai, và quá trình triển khai sẽ bị chặn trừ phi tất cả thông số đều có giá trị hợp lệ. Ngược lại, cấu hình có các biến môi trường không có sẵn lúc triển khai bất cứ lúc nào.
Cấu hình tham số hóa
Cloud Functions cho Firebase cung cấp giao diện để xác định cấu hình các tham số được khai báo bên trong cơ sở mã của bạn. Giá trị của các thông số này là có sẵn cả trong quá trình triển khai chức năng, khi thiết lập hoạt động triển khai và thời gian chạy tùy chọn và trong quá trình thực thi. Điều này có nghĩa là CLI sẽ chặn việc triển khai trừ khi tất cả các thông số đều có giá trị hợp lệ.
Để xác định 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 hàm có các biến cấu hình có tham số,
Trước tiên, CLI của Firebase cố gắng tải các giá trị từ các tệp .env cục bộ. Nếu
không có trong các tệp đó và không có default
nào được đặt, CLI sẽ nhắc
các giá trị trong quá trình triển khai, sau đó tự động lưu 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
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 phần quản lý phiên bản.
Sử dụng các thông số trong phạm vi toàn cầu
Trong quá trình triển khai, mã hàm của bạn 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 các giá trị thông số trong khoảng thời gian
phạm vi toàn cầu dẫn đến lỗi triển khai. Đối với trường hợp bạn muốn sử dụng
để khởi tạo một 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ị.
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 thông số bằng đối tượng Options
kiểm soát cách CLI
sẽ nhắc nhập các giá trị. Ví dụ sau đây đặt ra các tuỳ chọn để xác thực
của một số điện thoại, để cung cấp một lựa chọn đơn giản và
tự động điền sẵn một 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 thông số
Cấu hình tham số hóa giúp nhập mạnh các giá trị thông số và cũng hỗ trợ các khoá bí mật từ Cloud Secret Manager. Các loại được hỗ trợ là:
- Bí mật
- Chuỗi
- Boolean
- Số nguyên
- Số thực
Biểu thức và giá trị 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ó hai môi trường này, bạn cần phải thận trọng hơn khi so sánh các giá trị thông số và khi sử dụng các giá trị đó để đặt tuỳ chọn thời gian chạy cho .
Để 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');
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 bạn cần so sánh với một thông số để biết bạn sẽ cần sử dụng các công cụ 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 thông số và biểu thức thông số chỉ được dùng trong thời gian chạy có thể là
đượ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.`);
}
);
Tham số tích hợp sẵn
SDK Chức năng đám mây cung cấp ba thông số được xác định trước, có sẵn từ
gói con firebase-functions/params
:
projectID
– Dự án trên đám mây mà hàm đang chạy.databaseURL
— URL của phiên bản Cơ sở dữ liệu theo thời gian thực được liên kết bằng hàm (nếu được bật trong dự án Firebase).storageBucket
— bộ chứa Cloud Storage liên kết với hàm (nếu được bật trong dự án Firebase).
Các hàm này như chuỗi do người dùng xác định
về mọi khía cạnh, ngoại trừ việc đó, vì giá trị của chúng luôn được
CLI Firebase, các giá trị của chúng sẽ không bao giờ được nhắc khi triển khai hoặc
đã được lưu vào .env
tệp.
Tham số bí mật
Các tham số thuộc loại Secret
, được xác định bằng defineSecret()
, biểu thị chuỗi
các tham số có giá trị được lưu trữ trong Cloud Secret Manager. Thay vì
kiểm tra đối chiếu với tệp .env
cục bộ và ghi một giá trị mới vào tệp nếu
thiếu, các tham số bí mật kiểm tra sự tồn tại trong Cloud Secret Manager, và
nhắc theo cách tương tác về giá trị của một khoá bí mật mới trong quá trình triển khai.
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ẻ sẽ có quyền truy cập vào các ứng dụ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();
//…
Do giá trị của các khoá bí mật bị ẩn cho đến khi thực thi hàm, nên bạn không thể sử dụng chúng khi định cấu hình chức năng.
Biến môi trường
Cloud Functions cho Firebase hỗ trợ
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 của ứng dụng. Sau khi được triển khai, bạn có thể đọc các biến môi trường thông qua
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 bạn triển khai các biến môi trường tuỳ chỉnh,
mã hàm của bạn có thể truy cập vào các hàm đó bằng
process.env
cú pháp:
// 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 Firebase
các dự án (chẳng hạn như thử nghiệm và sản xuất), hãy tạo một
.env.<project or
alias>
tệp và ghi
biến môi trường của dự án cụ thể. Các biến môi trường từ
Tệp .env
và tệp .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 ba tệp này chứa hơi các giá trị khác nhau cho hoạt động phát triển và sản xuất:
.env
|
.env.dev
|
.env.prod
|
Hành tinh=Trái đất
KHÁN GIẢ=Con người |
KHÁN GIẢ=Nhà phát triển | KHÁN GIẢ=Con người sản xuất |
Dựa trên các giá trị trong những tệp riêng biệt đó, tập hợp các biến môi trường được triển khai cùng với các chức năng sẽ khác nhau tuỳ 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ố khoá 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ỳ
sau đây là các khoá trong tệp .env
của bạn:
- Tất cả các khoá bắt đầu bằng X_GOOGLE_
- Tất cả các khoá bắt đầu từ EXT_
- Tất cả cá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 (Dự án trên GCP)
- GCLOUD_PROJECT
- GOOGLE_CLOUD_PROJECT
- CHỨC NĂNG KÍCH HOẠT KÍCH HOẠT
- TÊN_Hàm
- FUNCTION_MEMORY_MB
- FUNCTION_TIMEOUT_SEC
- FUNCTION_IDENTITY (Mã nhận dạng cho các chức năng)
- VÙNG_HÀM_ĐƯỢC
- FUNCTION_TARGET (Hàm FUNCTION_TARGET)
- FUNCTION_SIGNATURE_TYPE (Hàm FUNCTION_SIGNATURE_TYPE)
- DỊCH VỤ K
- K_REVISION
- CỔNG
- K_CONFIGURATION (Cấu hình K)
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 dùng cho hàm
cấu hình, nhưng bạn không nên coi chúng là cách an toàn để lưu trữ các 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
rất quan trọng nếu bạn kiểm tra các tệp .env
của mình ở 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 cho Firebase tích hợp với Google Cloud Trình quản lý bí mật. Dịch vụ đã mã hoá này lưu trữ các giá trị cấu hình một cách an toàn, trong khi mà vẫn có thể dễ dàng truy cập các chức năng khi cần.
Tạo và sử dụng một giá trị bí mật
Để tạo một khoá bí mật, hãy sử dụng Giao diện dòng lệnh (CLI) của Firebase.
Cách tạo và sử dụng khoá bí mật:
Từ gốc của thư mục 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 lặp lại một 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 để sự thay đổi này có hiệu lực.
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 vào giá trị 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 });
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 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, 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 bạn triển khai hàm, hàm sẽ có quyền truy cập vào giá trị bí mật. Chỉ
các hàm có chứa một bí mật trong tham số runWith
của chúng sẽ
có quyền truy cập vào khoá bí mật đó dưới dạng 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úp giảm nguy cơ
vô tình làm lộ một bí mật.
Quản lý khoá bí mật
Sử dụng Giao diện dòng lệnh (CLI) của Firebase để quản lý các thông tin bí mật của bạn. Khi quản lý các bí mật theo cách này, xin lưu ý rằng một số thay đổi về CLI yêu cầu bạn phải sửa đổi và/hoặc triển khai lại hàm liên kết. Cụ thể:
- Mỗi khi thiết lập giá trị mới cho giá trị bí mật, bạn phải triển khai lại tất cả các giá trị bí mật các hàm tham chiếu bí mật đó để họ nắm bắt 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 được triển khai của bạn tham chiếu đến khoá bí mật đó. Các hàm sử dụng giá trị bí mật đã được bị xoá sẽ tự động không thành công.
Dưới đây là bản tóm tắt các lệnh Giao diện dòng lệnh (CLI) của 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 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
cùng lệnh đến
xem phần trợ giúp về CLI.
Cách tính phí bí mật
Trình quản lý bí mật cho phép 6 khoá bí mật hoạt động phiên bản miễn phí. Tức là bạn có thể có 6 khoá bí mật mỗi tháng trong một Firebase dự án miễn phí.
Theo mặc định, Giao diện dòng lệnh (CLI) của Firebase cố gắng tự động huỷ khoá bí mật không dùng đến
các phiên bản khi thích hợp, chẳng hạn như khi bạn triển khai các hàm bằng một phiên bản mới
bí mật. Ngoài ra, bạn có thể chủ động dọn dẹp những 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
bí mật. Các thực thể hàm chỉ đọc các mã bí mật được chỉ định trong runWith
mỗi khi thiết bị khởi động nguội. Nếu bạn có nhiều thực thể hàm
đọ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, khi đó
bạn sẽ bị tính phí 0,03 USD cho mỗi 10.000 hoạt động truy cập.
Để biết thêm thông tin, hãy xem Giá dành cho người quản lý bí mật.
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 đè môi trường
cho dự án của bạ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 ba tệp này chứa hơi các giá trị khác nhau để 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 |
KHÁN GIẢ=Nhà phát triển | 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 môi trường biến 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 các giá trị 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 mô phỏng sẽ cố gắng truy cập vào các mã thông báo bí mật phát hành công khai của bạn bằng cách sử dụ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 giá trị bí mật do các hạn chế về quyền.
Tương tự như 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ị của khoá bí mật bằng cách thiết lập tệp .secret.local
. Điều này giúp
giúp bạn dễ dàng kiểm thử các hàm cục bộ, đặc biệt là khi không có quyền truy cập
cho giá trị bí mật.
Di chuyển từ cấu hình môi trường
Nếu đang sử dụng cấu hình môi trường bằng functions.config
, bạn
có thể di chuyển cấu hình hiện tại của mình dưới dạng các biến môi trường (trong
định dạng dotenv).
Giao diện dòng lệnh (CLI) của Firebase cung cấp một lệnh xuất để xuất cấu hình
của mỗi bí danh hoặc dự án được liệt kê trong tệp .firebaserc
trong thư mục của bạn
(trong ví dụ bên dưới là local
, dev
và prod
) làm tệp .env
.
Để di chuyển, hãy xuất các 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
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 khoá biến môi trường đã xuất. Điều này là do không phải mọi cấu hình đều có thể được tự động chuyển đổi vì chúng 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 xét 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 tệp .env
trong chế độ kiểm soát nguồn. Nếu
mọi giá trị đều nhạy cảm và không được làm rò rỉ, hãy xoá các giá trị đó khỏi .env
của bạn
và lưu trữ chúng một cách an toàn trong
Secret Manager (Trình quản lý bí mật).
Bạn cũng cần cập nhật mã hàm. Bất kỳ hàm nào sử dụng
Thay vào đó, functions.config
sẽ cần sử dụng process.env
, như minh hoạ trong
Nâng cấp lên thế hệ thứ 2.
Cấu hình môi trường
Trước khi chúng tôi ra mắt tính năng hỗ trợ biến môi trường trong firebase-functions
v3.18.0
, phương pháp được đề xuất là dùng functions.config()
cho
cấu hình môi trường. Phương pháp này vẫn được hỗ trợ, nhưng bạn nên
tất cả dự án mới đều sử dụng biến môi trường, vì các biến này dễ dùng hơn
và cải thiện tính linh động của mã.
Đặt 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 firebase functions:config:set
trong Firebase CLI.
Bạn có thể đặt mỗi khoá trong vùng chứa tên bằng cách sử dụng dấu chấm để nhóm các khoá liên quan
cấu hình với nhau. Xin lưu ý rằng chỉ các ký tự viết thường được
được chấp nhận trong khoá; không được phép sử dụng ký tự viết hoa.
Ví dụ: để lưu trữ Client-ID 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
. Thao tác này sẽ xuất JSON có dạng 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.
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 firebase
dành riêng
không gian tên. Cấu hình môi trường có sẵn bên trong quá trình 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ể trông 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 chạy mô-đun
Một số mô-đun Nút đã 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 bổ sung 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 vào các biến cấu hình môi trường thay vì mã hoá cứng nó. Điều này giúp giúp bạn giữ cho mã dễ di chuyển hơn nhiều, điều này cho phép bạn mở nguồn hoặc dễ dàng chuyển đổi giữa phiên bản chính thức và phiên bản 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');
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 khác của môi trường
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 điền tự động
Có một số biến môi trường được tự động điền vào hoạt động trong thời gian chạy và trong các hàm được mô phỏng cục bộ. Các cách này bao gồm những từ khoá do Google Cloud điề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 những thông tin về 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 tự động áp dụng khi bạn khởi chạy Firebase SDK quản trị không có đối số. Nếu bạn đang viết các hàm trong JavaScript, khởi chạy 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 chạy như sau:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();
Trường hợp bạn cần khởi chạy SDK dành cho quản trị viên bằng cấu hình dự án mặc định
bằng cách sử dụ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 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);