ستحتاج غالبًا إلى تهيئة إضافية للدوال الخاصة بك، مثل مفاتيح واجهة برمجة التطبيقات التابعة لجهة خارجية أو الإعدادات القابلة للضبط عروض حزمة تطوير البرامج (SDK) لمنصّة Firebase for Cloud Functions تهيئة بيئة مدمجة لتسهيل تخزين واسترداد ونوع البيانات لمشروعك.
يمكنك الاختيار من بين ثلاثة خيارات:
- الإعداد باستخدام مَعلمة (يُنصح به في معظم السيناريوهات). يوفر هذا الوضع بيئة عالية الكتابة التهيئة بالمعلمات التي تم التحقق من صحتها في وقت النشر، وهي لمنع الأخطاء وتبسيط تصحيح الأخطاء.
- ضبط متغيّرات البيئة استنادًا إلى الملفات: باستخدام هذا النهج، يمكنك يدويًا إنشاء ملف dotenv لتحميله والمتغيرات البيئية.
- ضبط البيئة لوقت التشغيل باستخدام واجهة سطر الأوامر في Firebase
و
functions.config
(Cloud Functions (الجيل الأول) فقط).
في معظم حالات الاستخدام، يُنصَح بإعداد مَعلمات. هذا الأسلوب تجعل قيم التهيئة متاحة في كل من وقت التشغيل ووقت النشر، تم حظر النشر ما لم تكن جميع المَعلمات ذات قيمة صالحة. وعلى العكس من ذلك، لا تتوفر التهيئة باستخدام متغيرات البيئة عند النشر الوقت.
الإعدادات باستخدام مَعلمة
توفّر وظائف السحابة الإلكترونية لبرنامج Firebase واجهة لتحديد الإعدادات البيانات بشكل صريح داخل قاعدة التعليمات البرمجية. قيمة هذه المعاملات هي تكون متاحة أثناء نشر الدالة وعند إعداد النشر ووقت التشغيل والخيارات وأثناء التنفيذ. يعني ذلك أنّ واجهة سطر الأوامر ستحظر النشر ما لم تكن جميع المَعلمات ذات قيمة صالحة.
لتحديد المعلمات في التعليمات البرمجية، اتبع النموذج التالي:
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.`);
}
);
عند نشر دالة باستخدام متغيرات تهيئة المعلمة،
يحاول واجهة سطر الأوامر في Firebase أولاً تحميل قيمه من ملفات .env المحلية. إذا
غير موجودة في هذين الملفين ولم يتم ضبط default
، سيطلب سطر الأوامر
القيم أثناء النشر، ثم حفظ القيم تلقائيًا في
ملف .env
باسم .env.<project_ID>
في دليل 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
بناءً على سير عمل التطوير، قد يكون من المفيد إضافة ملف .env.<project_ID>
الذي تم إنشاؤه إلى عنصر التحكّم في الإصدار.
استخدام مَعلمات في نطاق عمومي
أثناء النشر، يتم تحميل رمز الوظائف وفحصه قبل
المعاملات لها قيم فعلية. هذا يعني أن استرجاع قيم المعلمات أثناء
النطاق العمومي في إخفاق النشر. بالنسبة إلى الحالات التي تريد فيها استخدام
لإعداد قيمة عمومية، استخدم استدعاء الإعداد
onInit()
يتم تشغيل عملية الاستدعاء هذه قبل أي دوال في الإنتاج ولكنها
أثناء وقت النشر، لذا فهي مكان آمن للوصول إلى بيانات ملف
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());
})
ضبط سلوك واجهة سطر الأوامر
يمكن ضبط المَعلمات باستخدام كائن Options
الذي يتحكّم في طريقة واجهة سطر الأوامر
ستظهر للقيم. يحدد المثال التالي خيارات للتحقق من صحة
رقم الهاتف، ولتوفير خيار تحديد بسيط،
تعبئة خيار تحديد تلقائيًا من مشروع 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"})
أنواع المَعلمات
توفر التكوينات المعلمة كتابة قوية لقيم المعلمات، وتدعم أيضًا الأسرار من Cloud Secret Manager الأنواع المتوافقة هي:
- سري
- سلسلة
- منطقي
- العدد الصحيح
- عائم
تعابير المَعلمات وقيمها
يقيّم Firebase معلماتك في وقت النشر وأثناء الدالة. قيد التنفيذ. وبسبب هذه البيئتين المزدوجتين، يجب توخي الحذر الإضافي عندما ومقارنة قيم المعامل، وعند استخدامها لتحديد خيارات بيئة التشغيل الأخرى.
لتمرير معلمة إلى الدالة كخيار وقت تشغيل، عليك تمريرها مباشرةً:
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) => {
//…
بالإضافة إلى ذلك، إذا كنت بحاجة إلى المقارنة مع معلمة لمعرفة ما ينبغي اختياره، ينبغي استخدام مقارنات مضمنة بدلاً من التحقق من القيمة:
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) => {
//…
يمكن أن تكون المعلّمات وتعبيرات المعلَمات التي لا يتم استخدامها إلا في وقت التشغيل
يتم الوصول إليها باستخدام دالة value
:
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.`);
}
);
المعلمات المضمنة
توفِّر حزمة تطوير برامج Cloud Functions ثلاث معلَمات محدّدة مسبقًا، وهي متاحة من
الحزمة الفرعية firebase-functions/params
:
projectID
: مشروع Cloud الذي يتم فيه تشغيل الدالةdatabaseURL
— عنوان URL لمثيل قاعدة البيانات في الوقت الفعلي المرتبط مع الدالة (إذا كانت مفعّلة في مشروع Firebase).storageBucket
— حزمة Cloud Storage المرتبطة بالدالة (في حال تفعيله في مشروع Firebase).
هذه الدالة مثل السلسلة التي يحددها المستخدم
بكل الجوانب، باستثناء أنه، نظرًا لأن قيمها معروفة دائمًا
واجهة سطر الأوامر في Firebase، فلن يُطلب منك أبدًا كتابة قيمها عند النشر
تم حفظ الملف في .env
ملف.
المعلمات السرية
تمثل المعلمات من النوع Secret
، المحددة باستخدام defineSecret()
، السلسلة
التي لها قيمة مخزنة في Cloud Secret Manager. بدلاً من
والتحقق من ملف .env
محلي وكتابة قيمة جديدة في الملف إذا
المفقودة، تتحقق المعلمات السرية من وجودها في Cloud Secret Manager
بشكل تفاعلي للحصول على قيمة سر جديد أثناء النشر.
ويجب ربط المعاملات السرية المحددة بهذه الطريقة بالدوال الفردية التي يمكنهم الوصول إليها:
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();
//…
نظرًا لأن قيم الأسرار مخفية حتى تنفيذ الدالة، لا يمكنك استخدامها أثناء تهيئة الدالة.
متغيرات البيئة
تدعم "وظائف السحابة الإلكترونية لبرنامج Firebase"
dotenv
نسق ملف لتحميل متغيرات البيئة المحددة في ملف .env
على ملف
وقت تشغيل التطبيق. وبمجرد نشر المتغيرات، يمكن قراءة متغيرات البيئة من خلال
process.env
من واجهة pyplot.
لضبط بيئتك بهذه الطريقة، يمكنك إنشاء ملف .env
في مشروعك،
وإضافة المتغيرات المطلوبة ونشرها:
أنشِئ ملف
.env
في دليلfunctions/
:# Directory layout: # my-project/ # firebase.json # functions/ # .env # package.json # index.js
افتح ملف
.env
لتعديله وأضِف المفاتيح المطلوبة. على سبيل المثال:PLANET=Earth AUDIENCE=Humans
تفعيل الدوال والتأكّد من تحميل متغيّرات البيئة:
firebase deploy --only functions # ... # i functions: Loaded environment variables from .env. # ...
بعد نشر متغيرات البيئة المخصصة،
يمكن لرمز الدالة الوصول إليها باستخدام
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}`);
});
نشر مجموعات متعددة من متغيرات البيئة
إذا كنت بحاجة إلى مجموعة بديلة من متغيّرات البيئة لمنصة Firebase
(مثل التقسيم مقابل الإنتاج)، وإنشاء
ملف .env.<project or
alias>
وكتابة
المتغيرات البيئية الخاصة بالمشروع هناك. متغيرات البيئة من
.env
وملفات .env
الخاصة بالمشروع (إن وجدت)
في جميع الدوال المنشورة.
على سبيل المثال، يمكن أن يتضمن المشروع هذه الملفات الثلاثة التي تحتوي على قيم مختلفة للتطوير والإنتاج:
.env
|
.env.dev
|
.env.prod
|
PLANET=الأرض
الجمهور=البشر |
الجمهور=فريق مطوّري البرامج | AUDIENCE=قسم الإنتاج |
وبالنظر إلى القيم الموجودة في هذه الملفات المنفصلة، فإن مجموعة متغيرات البيئة ستختلف الوظائف الخاصة بك تبعًا لمشروعك المستهدف:
$ 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
متغيّرات البيئة المحجوزة
بعض مفاتيح متغيّرات البيئة محجوزة للاستخدام الداخلي. لا تستخدم أيًا من
المفاتيح التالية في ملفات .env
:
- جميع المفاتيح تبدأ بـ X_GOOGLE_
- تبدأ جميع المفاتيح بـ EXT_
- تبدأ كل المفاتيح بـ FIREBASE_
- أي مفتاح من القائمة التالية:
- CLOUD_RUNTIME_CONFIG
- ENTRY_POINT
- مشروع_Google Cloud Platform
- مشروع GCLOUD
- مشروع GOOGLE_CLOUD
- FUNCTION_TRIGGER_TYPE
- الدالة FUNCTION_NAME
- FUNCTION_MEMORY_ميغابايت
- الدالة FUNCTION_🔐_SEC
- الدالة FUNCTION_IDENTITY
- FUNCTION_ AR
- الدالة FUNCTION_TARGET
- الوظيفة_SIGNATURE_TYPE
- خدمة K_SERVICE
- المراجعة_K
- المنفذ
- الإعداد كيه
تخزين معلومات الإعداد الحساسة والوصول إليها
يمكن استخدام متغيرات البيئة المخزَّنة في ملفات .env
للدالة.
التكوين، ولكن لا ينبغي لك اعتبارها طريقة آمنة لتخزين معلومات
مثل بيانات اعتماد قاعدة البيانات أو مفاتيح واجهة برمجة التطبيقات. يعد ذلك خاصةً
مهم إذا تحققت من ملفات .env
في عنصر تحكم المصدر.
لمساعدتك على تخزين معلومات الإعداد الحسّاسة، يمكنك استخدام Cloud Functions for Firebase. تتكامل مع Google Cloud المدير السري. وتخزن هذه الخدمة المشفرة قيم التهيئة بأمان، بينما مع الاستمرار في السماح بالوصول بسهولة من الدوال عند الحاجة.
إنشاء مفتاح سرّي واستخدامه
لإنشاء واجهة برمجة تطبيقات سرّية، استخدِم واجهة سطر الأوامر (CLI) في Firebase.
لإنشاء مفتاح سرّي واستخدامه:
من جذر دليل المشروع المحلي، شغِّل الأمر التالي:
firebase functions:secrets:set SECRET_NAME
يُرجى إدخال قيمة في حقل "SECRET_NAME".
يعرض واجهة سطر الأوامر رسالة نجاح ويحذرك من ضرورة نشر دوال. لكي يتم تطبيق التغيير.
قبل النشر، تأكد من أن رمز الدوال يسمح للدالة بالوصول إلى السر باستخدام المعلمة
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 });
تفعيل دوال السحابة الإلكترونية:
firebase deploy --only functions
ستتمكن الآن من الوصول إليه مثل أي متغير بيئي آخر.
وعلى العكس، إذا كانت دالة أخرى لا تحدد السر في
يحاول runWith
الوصول إلى المفتاح السرّي، وسيتلقّى قيمة غير محدَّدة:
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
});
بمجرد نشر الدالة، ستتمكن من الوصول إلى القيمة السرية. فقط
الدوال التي تتضمن على وجه التحديد سرًا في المعلمة runWith
الخاصة بها
حق الوصول إلى هذا السر كمتغير بيئي. يساعدك هذا في التأكد من
أن القيم السرية متاحة فقط عند الحاجة، مما يقلل من خطر
تسريب سر عن طريق الخطأ.
إدارة الأسرار
استخدِم واجهة سطر الأوامر في Firebase لإدارة البيانات السرّية. أثناء إدارة الأسرار بهذه الطريقة، فبعض تغييرات واجهة سطر الأوامر تتطلب منك تعديلها و/أو إعادة نشرها الدوال المرتبطة بها. وعلى وجه التحديد:
- عندما تحدد قيمة جديدة لأحد المفاتيح، يجب إعادة نشر جميع الدوال التي تشير السر للحصول على أحدث قيمة.
- إذا حذفت سرًا، تأكد من عدم وجود أي من الدوال المنشورة يشير إلى هذا السر. الدوال التي تستخدم قيمة سرية تم المحذوفة بشكل صمت.
في ما يلي ملخّص لأوامر واجهة سطر الأوامر في Firebase للإدارة السرية:
# 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
بالنسبة إلى الأمرَين access
وdestroy
، يمكنك تقديم الإصدار الاختياري.
لإدارة إصدار معين. على سبيل المثال:
functions:secrets:access SECRET_NAME[@VERSION]
لمزيد من المعلومات حول هذه العمليات، أدخِل -h
مع الأمر إلى
عرض مساعدة واجهة سطر الأوامر.
كيفية فوترة الأسرار
يسمح "المدير السري" بـ 6 رموز سرّية نشطة إصدارات بدون أي تكلفة. هذا يعني أنّه بإمكانك امتلاك 6 أسرار شهريًا في منصّة Firebase مشروعك بدون أي تكلفة.
يحاول واجهة سطر الأوامر في Firebase تلقائيًا تدمير المفتاح السرّي غير المستخدَم تلقائيًا
الإصدارات متى كان ذلك مناسبًا، مثل نشر الدوال مع إصدار جديد
السر. يمكنك أيضًا إزالة الأسرار غير المستخدمة بشكل فعّال باستخدام
"functions:secrets:destroy
" وfunctions:secrets:prune
"
يتيح Secret Manager 10000 عملية وصول شهرية لم يتم تحصيل فواتير بها
سرّي. تقرأ مثيلات الدوال المفاتيح السرّية المحدّدة في runWith
فقط.
في كل مرة تعمل فيها على البارد. إذا كان لديك الكثير من مثيلات الدوال
قراءة الكثير من الأسرار، فقد يتجاوز مشروعك هذا الحد، وعندها
سيتم تحصيل 0.03 دولار منك مقابل كل 10000 عملية وصول.
لمزيد من المعلومات، يُرجى مراجعة أسعار المدير السري.
إتاحة المحاكي
تم تصميم تهيئة البيئة باستخدام dotenv للتشغيل التفاعلي مع محاكي Cloud Functions المحلي.
عند استخدام محاكي Cloud Functions المحلي، يمكنك إلغاء ضبط البيئة.
المتغيّرات لمشروعك من خلال إعداد ملف .env.local
. محتويات
تكون الأولوية .env.local
على .env
وملف .env
الخاص بالمشروع.
على سبيل المثال، يمكن أن يتضمن المشروع هذه الملفات الثلاثة التي تحتوي على قيم مختلفة للتطوير والاختبار المحلي:
.env
|
.env.dev
|
.env.local
|
PLANET=الأرض
الجمهور=البشر |
الجمهور=فريق مطوّري البرامج | الجمهور=أشخاص محليون |
عند بدء تشغيل المحاكي في السياق المحلي، فإنه يحمّل البيئة المتغيرات كما هو موضح:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
الأسرار وبيانات الاعتماد في محاكي Cloud Functions
يتيح محاكي Cloud Functions استخدام المفاتيح السرّية تخزين معلومات الضبط الحساسة والوصول إليها سيحاول المحاكي بشكل تلقائي الوصول إلى أسرار الإنتاج باستخدام بيانات الاعتماد التلقائية للتطبيق. في بعض الحالات مثل بيئات CI، قد يتعذّر على المحاكي الوصول إلى القيم السرية بسبب قيود الأذونات.
على غرار إتاحة محاكي Cloud Functions مع متغيّرات البيئة، يمكنك
تجاوز قيم الأسرار من خلال إعداد ملف .secret.local
. هذا يجعل من
اختبار الدوال محليًا، خاصةً إذا لم يكن لديك وصول
إلى القيمة السرية.
النقل من إعدادات البيئة
إذا كنت تستخدم إعدادات البيئة من خلال functions.config
، عليك
يمكنه ترحيل تهيئةك الحالية كمتغيرات للبيئة (في
dotenv).
يوفّر واجهة سطر الأوامر في Firebase أمر تصدير يُخرج الإعدادات.
من كل اسم مستعار أو مشروع مدرج في ملف .firebaserc
بالدليل
(في المثال أدناه، local
وdev
وprod
) كملفات .env
.
لنقل البيانات، يمكنك تصدير عمليات ضبط البيئة الحالية باستخدام
الأمر 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
لاحظ أنه في بعض الحالات، سيُطلب منك إدخال بادئة لإعادة تسميتها من مفاتيح متغيرات البيئة التي تم تصديرها. وذلك لأنه لا يمكن لبعض التهيئات يتم تحويلها تلقائيًا؛ نظرًا لأنها قد تكون غير صالحة أو قد تكون مفتاح متغير البيئة المحجوزة.
ننصحك بمراجعة محتوى ملفات .env
التي تم إنشاؤها بعناية.
قبل نشر الدوال أو التحقق من ملفات .env
في عنصر تحكم المصدر. في حال حذف
أي قيم حسّاسة ويجب عدم تسريبها، يُرجى إزالتها من ".env
".
من الملفات وتخزينها بأمان في
يمكنك استخدام المدير السري بدلاً من ذلك.
ستحتاج أيضًا إلى تحديث رمز الدوال. أي دوال تستخدم
سيكون على "functions.config
" الآن استخدام process.env
بدلاً من ذلك، كما هو موضّح في
الترقية إلى الجيل الثاني
ضبط البيئة
قبل إصدار دعم متغيرات البيئة في firebase-functions
v3.18.0
، كان استخدام functions.config()
هو الأسلوب الموصى به
تهيئة بيئة التشغيل. لا يزال هذا الأسلوب متاحًا، ولكنّنا ننصح
تستخدم جميع المشروعات الجديدة متغيرات البيئة بدلاً من ذلك، حيث يسهل استخدامها
وتحسين إمكانية نقل التعليمات البرمجية الخاصة بك.
ضبط إعدادات البيئة باستخدام واجهة سطر الأوامر
لتخزين بيانات البيئة، يمكنك استخدام firebase functions:config:set
.
في واجهة سطر الأوامر في Firebase.
يمكن تحديد مساحة اسم كل مفتاح باستخدام النقاط لتجميع البيانات المرتبطة
والتكوين معًا. ضع في اعتبارك أن الأحرف الصغيرة فقط هي
مقبولة في المفاتيح، الأحرف الكبيرة غير مسموح بها.
على سبيل المثال، لتخزين معرف العميل ومفتاح واجهة برمجة التطبيقات "بعض الخدمات"، قد يتم تشغيل:
firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"
استرداد إعدادات البيئة الحالية
لفحص ما يتم تخزينه حاليًا في تهيئة البيئة لمشروعك،
استخدام firebase functions:config:get
. سينتج عن ذلك JSON شيئًا مثل
التالي:
{
"someservice": {
"key":"THE API KEY",
"id":"THE CLIENT ID"
}
}
تعتمد هذه الوظيفة على Google Cloud Runtime Configuration API
استخدام functions.config
للوصول إلى إعداد البيئة في دالة
يتم توفير بعض الإعدادات تلقائيًا بموجب firebase
المحجوزة.
مساحة الاسم. أصبحت إعدادات البيئة متاحة في جهازك الذي تم تشغيله.
الوظيفة عبر functions.config()
.
لاستخدام الإعدادات أعلاه، قد تظهر الرمز كما يلي:
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}
});
});
استخدام تهيئة البيئة لإعداد وحدة
بعض وحدات العُقد جاهزة بدون أي إعدادات. تحتاج الوحدات الأخرى إلى ميزات إضافية تهيئة الإعدادات لتهيئتها بشكل صحيح. ننصحك بتخزين هذه الإعدادات. باستخدام متغيرات تهيئة البيئة بدلاً من ترميزها الثابت. يساعد ذلك في فإنك تجعل الرمز البرمجي أكثر سهولة في الاستخدام، مما يتيح لك فتح المصدر أو التبديل بسهولة بين إصدارات الإنتاج والمراحل.
على سبيل المثال، لاستخدام وحدة حزمة تطوير البرامج (SDK) لعقدة Slack، يمكنك كتابة ما يلي:
const functions = require('firebase-functions');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);
قبل النشر، يمكنك ضبط متغيّر ضبط بيئة slack.url
:
firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX
أوامر البيئة الإضافية
- يزيل
firebase functions:config:unset key1 key2
المفاتيح المحدَّدة من الإعدادات - يستنسخ
firebase functions:config:clone --from <fromProject>
بيئة مشروع آخر في المشروع النشط حاليًا.
متغيّرات البيئة التي تتم تعبئتها تلقائيًا
هناك متغيرات بيئة تتم تعبئتها تلقائيًا في وقت التشغيل وفي الدوال التي تتم محاكاتها محليًا. وتشمل هذه الأحداث التي يتم ملؤها من خلال Google Cloud بالإضافة إلى متغيّر بيئة خاص بمنصّة Firebase وهو:
process.env.FIREBASE_CONFIG
: يوفِّر هذا الخيار معلومات إعدادات مشروع Firebase التالية:
{
databaseURL: 'https://databaseName.firebaseio.com',
storageBucket: 'projectId.appspot.com',
projectId: 'projectId'
}
يتم تطبيق هذه الإعدادات تلقائيًا عند إعداد Firebase. SDK للمشرف بدون وسيطات. إذا كنت تكتب دوال باستخدام JavaScript، على النحو التالي:
const admin = require('firebase-admin');
admin.initializeApp();
إذا كنت تكتب دوال باستخدام TypeScript، يمكنك إعدادها على النحو التالي:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();
إذا كنت بحاجة إلى إعداد حزمة تطوير البرامج (SDK) للمشرف باستخدام إعدادات المشروع التلقائية
باستخدام بيانات اعتماد حساب الخدمة، يمكنك تحميل بيانات الاعتماد من ملف
قم بإضافتها إلى FIREBASE_CONFIG
على النحو التالي:
serviceAccount = require('./serviceAccount.json');
const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);