1 المقدمة
الأهداف
يمكنك استخدام Terraform لإعداد مشروع Firebase وإدارته، بما في ذلك التكوين البرمجي للبنية الأساسية ومنتجات Firebase.
يصف هذا الدرس التطبيقي حول التعليمات البرمجية أولاً كيفية إنشاء ملف تكوين Terraform لإنشاء مشروع Firebase جديد، متبوعًا بكيفية تكوين التطبيقات ومنتجات Firebase التي تريد استخدامها في هذا المشروع. نحن نغطي أيضًا أساسيات سطر أوامر Terraform، مثل معاينة التغييرات التي سيتم إجراؤها ثم تنفيذها.
إذا كنت تريد معرفة كيفية إعداد مشاريع ومنتجات Firebase وإدارتها باستخدام Terraform، فهذا الدرس التطبيقي حول البرمجة مناسب لك!
ما ستتعلمه
- كيفية إنشاء ملف تكوين Terraform (
*.tf
) - كيفية استخدام أوامر Terraform CLI لإدارة البنية الأساسية لديك
- كيفية تعديل التكوين الخاص بك لتحديث الموارد والخدمات الخاصة بك
- كيفية تطبيق التكوين الخاص بك على تطبيق ويب حقيقي (يسمى Friendly Chat )
- كيفية تحديد التكوينات المتوازية (والمتزامنة) في بيئات مختلفة (الإنتاج، والتجهيز، وما إلى ذلك)
ماذا ستحتاج
- محطة/وحدة التحكم
- محرر IDE/النصوص الذي تختاره، مثل WebStorm أو Atom أو Sublime أو VS Code
- المتصفح الذي تختاره، مثل Chrome
- Google Cloud CLI (gCloud CLI) - قم بتثبيت واجهة سطر الأوامر (CLI) هذه وقم بتسجيل الدخول باستخدام حساب مستخدم أو حساب خدمة
لتحقيق النجاح في هذا الدرس التطبيقي حول التعليمات البرمجية، تحتاج إلى إتقان أساسيات استخدام Terraform ومصطلحاته، بما في ذلك المتطلبات الأساسية التالية:
- قم بتثبيت Terraform والتعرف على Terraform باستخدام البرامج التعليمية الرسمية الخاصة بهم
يوفر هذا الدرس التطبيقي حول التعليمات البرمجية نموذجًا حقيقيًا للتطبيق حتى تتمكن من اختبار ما توفره عبر Terraform والتفاعل معه. للقيام بذلك، سوف تحتاج إلى ما يلي:
- نموذج التعليمات البرمجية لتطبيق ويب - قم بتنزيل هذا الرمز في الخطوة التالية من الدرس التطبيقي حول التعليمات البرمجية
- يقوم مدير الحزم npm (الذي يأتي عادةً مع Node.js ) - بتثبيت هذه الأدوات
- Firebase CLI - قم بتثبيت CLI هذا وقم بتسجيل الدخول
2. احصل على رمز البداية
في هذا الدرس التطبيقي حول التعليمات البرمجية، يمكنك اختبار ما توفره عبر Terraform باستخدام تطبيق ويب حقيقي. نوصي بالقيام بذلك حتى تتمكن من فهم جميع الخطوات اللازمة لاستخدام الموارد المتوفرة من Terraform.
قم باستنساخ مستودع GitHub الخاص بـ Codelab من سطر الأوامر:
git clone https://github.com/firebase/codelab-friendlychat-web
وبدلاً من ذلك، إذا لم يكن git مثبتًا لديك، فيمكنك تنزيل المستودع كملف ZIP .
3. قم بإنشاء تكوين Terraform
تم إعداد Terraform
- في قاعدة التعليمات البرمجية للتطبيق النموذجي الذي تم تنزيله، انتقل إلى جذر دليل
web
. - في جذر هذا الدليل، قم بإنشاء ملف تكوين Terraform يسمى
main.tf
مع الإعداد الأولي التالي:
main.tf# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
يتمتع كل من موفري خدمة google-beta
بسمة باسم user_project_override
والتي تحدد كيفية التحقق من الحصص للعمليات من Terraform. لتوفير معظم الموارد، يجب عليك استخدام user_project_override = true
، مما يعني التحقق من الحصة النسبية مقابل مشروع Firebase الخاص بك. ومع ذلك، لإعداد مشروعك الجديد بحيث يمكنه قبول عمليات التحقق من الحصص، تحتاج أولاً إلى استخدام user_project_override=false
. يسمح لك بناء جملة alias
Terraform بالتمييز بين إعدادي الموفرين في الخطوات التالية من هذا الدرس التطبيقي حول التعليمات البرمجية.
قم بتهيئة Terraform في الدليل
يتطلب إنشاء تكوين جديد لأول مرة تنزيل الموفر المحدد في التكوين.
للقيام بهذه التهيئة، قم بتشغيل الأمر التالي من جذر نفس الدليل مثل ملف التكوين main.tf
الخاص بك:
terraform init
4. قم بإنشاء مشروع Firebase عبر Terraform
"لإنشاء مشروع Firebase"، من المهم أن تتذكر أن كل مشروع Firebase هو في الواقع مشروع Google Cloud، فقط مع تمكين خدمات Firebase له.
أضف كتلًا لمشروع Google Cloud الأساسي وواجهات برمجة التطبيقات
- أولاً، قم بتوفير مشروع Google Cloud الأساسي.
إلى ملف التكوينmain.tf
الخاص بك، قم بإضافة كتلة الموارد التالية.
يلزمك تحديد اسم المشروع الخاص بك (مثل"Terraform FriendlyChat Codelab"
) ومعرف المشروع الخاص بك (مثل"terraform-codelab-your-initials"
). لاحظ أن قيمةname
تُستخدم فقط في واجهات Firebase ولا تكون مرئية للمستخدمين النهائيين. ومع ذلك، فإن قيمةproject_id
تحدد مشروعك بشكل فريد لـ Google، لذا تأكد من تحديد قيمة فريدة. main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } }
- بعد ذلك، تحتاج إلى تمكين واجهات برمجة التطبيقات الأساسية المطلوبة: واجهة برمجة تطبيقات استخدام الخدمة وواجهة برمجة تطبيقات إدارة Firebase.
تتم عادةً معالجة تمكين واجهة برمجة التطبيقات (API) خلف الكواليس عند استخدام وحدة تحكم Firebase لإنشاء مشروع Firebase، ولكن يجب أن يتم إخبار Terraform بشكل صريح للقيام بهذا التمكين.
إلى ملف التكوينmain.tf
الخاص بك (أسفل الكتلة التي تنشئ مشروع السحابة الجديد)، أضف كتلة الموارد التالية:
main.tf
من خلال تمكين واجهة برمجة تطبيقات استخدام الخدمة، سيتمكن مشروعك الجديد من قبول عمليات التحقق من الحصص! لذلك، بالنسبة لجميع عمليات توفير الموارد وتمكين الخدمة اللاحقة، يجب عليك استخدام الموفر مع... # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false }
user_project_override
(لا حاجة إلى اسم مستعار).
أضف كتلة لتمكين خدمات Firebase
آخر شيء مطلوب "لإنشاء مشروع Firebase" هو تمكين خدمات Firebase في المشروع.
للاستمرار في ملف التكوين main.tf
، قم بإضافة كتلة الموارد التالية.
كما ذكر أعلاه، لاحظ أن كتلة الموارد هذه تستخدم الموفر مع user_project_override
(لا حاجة إلى اسم مستعار).
main.tf
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
في كتلة الموارد المذكورة أعلاه، قد تلاحظ جملة depends_on
، التي تخبر Terraform بالانتظار حتى يتم تمكين واجهات برمجة التطبيقات الأساسية. بدون هذا الشرط، لا يعرف Terraform التبعية وقد يواجه أخطاء عند توفير الموارد بالتوازي.
تطبيق التكوين
- لتوفير الموارد الجديدة وتمكين واجهات برمجة التطبيقات المحددة في ملف التكوين الخاص بك، قم بتشغيل الأمر التالي من جذر نفس الدليل مثل ملف
main.tf
(الذي يجب أن يكونweb
):terraform apply
- في الوحدة الطرفية، يقوم Terraform بطباعة خطة الإجراءات التي سيقوم بتنفيذها.
إذا كان كل شيء يبدو كما هو متوقع، قم بالموافقة على الإجراءات عن طريق إدخالyes
.
main.tfTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
لاحظ أنه إذا كنت تحتاج فقط إلى معاينة التغييرات دون تطبيق، فيمكنك استخدام أمر terraform plan
بدلاً من ذلك.
التحقق من صحة التغييرات
بعد انتهاء تشغيل Terraform، يمكنك فحص حالة جميع موارد Terraform المتوفرة والخدمات التي تم تمكينها عن طريق تشغيل الأمر التالي:
terraform show
فيما يلي مثال لما يجب أن تراه مطبوعًا. ستحتوي حالتك على قيم خاصة بمشروعك.
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
وبدلاً من ذلك، يمكنك التحقق من إنشاء المشروع من خلال مشاهدته في وحدة تحكم Firebase .
5. قم بتسجيل تطبيق Firebase الخاص بك عبر Terraform
لاستخدام Firebase، يتعين عليك تسجيل كل متغير للنظام الأساسي لتطبيقك في مشروع Firebase الخاص بك. في هذا الدرس التطبيقي حول التعليمات البرمجية، ستستخدم تطبيقًا حقيقيًا لاختبار ما توفره عبر Terraform والتفاعل معه. هذا التطبيق عبارة عن تطبيق ويب، لذا يتعين عليك إخبار Terraform بتسجيل تطبيق Firebase Web App في مشروع Firebase الذي تم إنشاؤه حديثًا.
أضف كتلة لتسجيل تطبيق الويب
لتسجيل تطبيق الويب الخاص بك في مشروع Firebase الخاص بك، قم بإلحاق ملف main.tf
بكتلة الموارد التالية.
تحتاج إلى تحديد display_name
الخاص بك لتطبيق الويب الخاص بك. لاحظ أن هذا الاسم يُستخدم فقط في واجهات Firebase ولا يكون مرئيًا للمستخدمين النهائيين.
main.tf
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
تطبيق التكوين
- لتوفير المورد الجديد، قم بتشغيل الأمر التالي من جذر نفس الدليل مثل ملف
main.tf
(الذي يجب أن يكونweb
).terraform apply
لاحظ أن هذا الأمر لن يعيد إنشاء مشروع Google Cloud جديد. سيكتشف Terraform وجود مشروع بمعرف المشروع المحدد بالفعل وسيقارن الحالة الحالية للمشروع بما هو موجود في ملف.tf
وسيجري أي تغييرات يعثر عليها. - قم بمراجعة خطة العمل المطبوعة. إذا بدا كل شيء كما هو متوقع، فاكتب
yes
واضغط على Enter للموافقة على الإجراءات.
التحقق من صحة التغييرات
يمكنك فحص حالة المورد الذي تم توفيره حديثًا عن طريق تشغيل الأمر التالي:
terraform show
وبدلاً من ذلك، يمكنك التحقق من تسجيل التطبيق بنجاح في مشروعك من خلال مشاهدته في وحدة تحكم Firebase. انتقل إلى إعدادات المشروع ، ثم قم بالتمرير لأسفل إلى قسم تطبيقاتك .
6. قم بإعداد مصادقة Firebase
المصادقة جزء مهم من أي تطبيق. للسماح للمستخدمين النهائيين بتسجيل الدخول إلى تطبيق الويب الخاص بك باستخدام حسابات Google الخاصة بهم، يمكنك تمكين مصادقة Firebase وإعداد تسجيل الدخول باستخدام طريقة Google.
لاحظ أنه في هذا الدرس التطبيقي حول التعليمات البرمجية، نقدم خيارين مختلفين لإعداد مصادقة Firebase:
- الخيار 1 (مستحسن) : قم بإعداد مصادقة Firebase في وحدة التحكم، والتي لا تتطلب GCIP.
- يعني استخدام هذا الخيار أنه ليس عليك ربط مشروعك الجديد بحساب Cloud Billing.
- الخيار 2 : إعداد مصادقة Firebase عبر Terraform باستخدام واجهات برمجة تطبيقات Google Cloud Identity Platform (GCIP).
- يعني استخدام هذا الخيار أنه يتعين عليك ربط مشروعك الجديد بحساب Cloud Billing نظرًا لأن GCIP يتطلب أن يكون المشروع مدرجًا في خطة تسعير Blaze.
الخيار 1: إعداد المصادقة باستخدام وحدة تحكم Firebase
لإعداد مصادقة Firebase باستخدام وحدة تحكم Firebase، لا يلزم أن يكون مشروعك مدرجًا في خطة تسعير Blaze.
فيما يلي كيفية إعداد مصادقة Firebase وتسجيل الدخول باستخدام Google:
- في وحدة تحكم Firebase ، حدد موقع قسم البناء في اللوحة اليمنى.
- انقر فوق المصادقة ، وانقر فوق البدء ، ثم انقر فوق علامة التبويب طريقة تسجيل الدخول (أو انقر هنا للانتقال إلى هناك مباشرة).
- انقر فوق إضافة موفر جديد ، ومن قسم مقدمي الخدمة الإضافيين ، حدد Google .
- قم بتنشيط مفتاح التمكين .
- قم بتعيين الاسم العام لتطبيقك على شيء مثل
FriendlyChat
(لا يلزم أن يكون هذا فريدًا عالميًا). - اختر بريدًا إلكترونيًا لدعم المشروع من القائمة المنسدلة، ثم انقر فوق حفظ .
- يجب أن ترى Google كموفر تسجيل دخول ممكّن.
الخيار 2: إعداد المصادقة عبر Terraform باستخدام واجهات برمجة تطبيقات Google Cloud Identity Platform (GCIP).
لإعداد مصادقة Firebase عبر Terraform، يجب عليك استخدام واجهات برمجة تطبيقات GCIP، مما يعني أن المشروع يجب أن يكون مدرجًا في خطة تسعير Blaze. يمكنك ترقية مشروع Firebase الخاص بك لاستخدام خطة Blaze عن طريق ربط حساب Cloud Billing بالمشروع.
تمكين الفوترة عبر Terraform
- إذا لم يكن لديك بالفعل حساب Cloud Billing، فإن الخطوة الأولى هي إنشاء حساب جديد في Google Cloud Console . عند القيام بذلك، لاحظ معرف حساب الفوترة الخاص به. يمكن العثور على معرف حساب الفوترة في صفحة الفوترة في معرف حساب الفوترة المرتبط بمشروعك.
- لتمكين الفوترة في مشروعك عبر Terraform، أضف سمة
billing_account
إلى موردgoogle_project
الموجود في ملفmain.tf
الخاص بك:
main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
قم بتمكين مصادقة Firebase وتسجيل الدخول باستخدام Google عبر Terraform
- لتوفير مصادقة Firebase باستخدام GCIP، قم بإلحاق ملف
main.tf
بكتل الموارد التالية:
main.tf... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] }
- يتطلب تمكين تسجيل الدخول باستخدام Google أن يكون لديك عميل OAuth . انتقل إلى قسم واجهات برمجة التطبيقات والخدمات في Google Cloud Console للقيام بهذا الإعداد.
- نظرًا لأن هذه هي المرة الأولى التي تقوم فيها بإنشاء معرف عميل لهذا المشروع، فأنت بحاجة إلى تكوين شاشة موافقة OAuth الخاصة بك.
- افتح صفحة شاشة موافقة OAuth ، ثم حدد المشروع الذي أنشأته للتو.
- قم بتعيين نوع المستخدم إلى خارجي ، ثم انقر فوق إنشاء .
- في الشاشة التالية، أكمل ما يلي، ثم انقر فوق حفظ ومتابعة .
- قم بتعيين اسم التطبيق العام لتطبيقك على شيء مثل
FriendlyChat
(لا يلزم أن يكون هذا فريدًا عالميًا). - اختر بريدًا إلكترونيًا لدعم المستخدم من القائمة المنسدلة.
- أدخل بريدًا إلكترونيًا لمعلومات الاتصال بالمطور .
- قم بتعيين اسم التطبيق العام لتطبيقك على شيء مثل
- في الشاشات التالية، أكمل ما يلي:
- اقبل الإعدادات الافتراضية في صفحة النطاقات ، ثم انقر فوق حفظ ومتابعة .
- اقبل الإعدادات الافتراضية في صفحة المستخدمين الاختباريين ، ثم انقر فوق حفظ ومتابعة .
- قم بمراجعة الملخص، ثم انقر فوق الرجوع إلى لوحة المعلومات .
- قم بإعداد عميل OAuth في صفحة بيانات الاعتماد عن طريق القيام بما يلي:
- انقر فوق إنشاء بيانات اعتماد وحدد معرف عميل OAuth .
- من القائمة المنسدلة نوع التطبيق ، حدد تطبيق الويب .
- في حقل الاسم ، أدخل اسم تطبيقك، على سبيل المثال
FriendlyChat
(لا يلزم أن يكون هذا فريدًا عالميًا). - اسمح لعنوان URL الخاص بتطبيقك باستخدام عميل OAuth هذا، من خلال إعداد ما يلي:
- ضمن أصول JavaScript المعتمدة ، انقر فوق إضافة URI ثم أدخل
https://<PROJECT_ID>.firebaseapp.com
، حيث<PROJECT_ID>
هو معرف المشروع الذي قمت بتعيينه فيmain.tf
- ضمن عناوين URI لإعادة التوجيه المعتمدة ، انقر فوق إضافة URI ثم أدخل
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
، حيث<PROJECT_ID>
هو معرف المشروع الذي قمت بتعيينه فيmain.tf
.
- ضمن أصول JavaScript المعتمدة ، انقر فوق إضافة URI ثم أدخل
- انقر فوق حفظ .
- لتمكين تسجيل الدخول باستخدام Google باستخدام معرف عميل OAuth وسر العميل، قم بإلحاق ملف
main.tf
بالكتلة التالية:
main.tf... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
تطبيق التكوين
- لإعداد المصادقة وفقًا للتكوين الخاص بك، قم بتشغيل الأوامر التالية من جذر نفس الدليل مثل ملف
main.tf
الخاص بك (والذي يجب أن يكونweb
):export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
terraform apply
لاحظ أن تشغيلterraform apply
لن يؤدي إلى إعادة الإنشاء مشروع جوجل السحابي الجديد. سيكتشف Terraform وجود مشروع بمعرف المشروع المحدد بالفعل وسيقارن الحالة الحالية للمشروع بما هو موجود في ملف.tf
. سيقوم بعد ذلك بإجراء أية تغييرات يجدها. - قم بمراجعة خطة العمل المطبوعة. إذا بدا كل شيء كما هو متوقع، فاكتب
yes
واضغط على Enter للموافقة على الإجراءات.
التحقق من صحة التغييرات
- في وحدة تحكم Firebase ، حدد موقع قسم البناء في اللوحة اليمنى.
- انقر فوق المصادقة ، ثم انقر فوق علامة التبويب طريقة تسجيل الدخول (أو انقر هنا للانتقال مباشرة إلى هناك).
- يجب أن ترى Google كموفر تسجيل دخول ممكّن.
7. قم بإعداد قاعدة بيانات Firestore وقواعد الأمان الخاصة بها
بالنسبة لتطبيق الويب الخاص ببرنامج Codelab هذا، ستقوم بتخزين الرسائل بين المستخدمين النهائيين في قاعدة بيانات Firestore.
- لتمكين واجهات برمجة التطبيقات المطلوبة وتوفير مثيل قاعدة البيانات، قم بإلحاق ملف
main.tf
بكتل الموارد التالية:
main.tf... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firestore.googleapis.com", "firebaserules.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] }
- قم بتغيير
<NAME_OF_DESIRED_REGION>
إلى المنطقة التي تريد أن تتواجد فيها قاعدة البيانات.
عند تطوير تطبيق إنتاج، ستحتاج إلى أن يكون هذا في منطقة قريبة من غالبية المستخدمين ومشتركًا مع خدمات Firebase الأخرى، مثل Cloud Functions. بالنسبة إلى هذا الدرس التطبيقي حول التعليمات البرمجية، يمكنك استخدامus-east1
(كارولينا الجنوبية) أو استخدام المنطقة الأقرب إليك (راجع مواقع Cloud Firestore ). - يجب حماية كل مثيل لقاعدة بيانات Firestore يمكن الوصول إليها بواسطة Firebase بواسطة قواعد أمان Firebase .
يوفر نموذج التعليمات البرمجية الخاص ببرنامج Codelab مجموعة من قواعد Firestore الآمنة في الملفfirestore.rules
، والتي يمكنك العثور عليها في جذر دليلweb
. - قم بإلحاق ملف
main.tf
الخاص بك بكتل الموارد التالية للقيام بما يلي:- قم بإنشاء مجموعة قواعد لقواعد أمان Firebase من ملف
firestore.rules
المحلي. - حرر مجموعة القواعد لمثيل Firestore.
firebase deploy --only firestore:rules
.
main.tf... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.default, ] } # Release the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = google_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } }
- قم بإنشاء مجموعة قواعد لقواعد أمان Firebase من ملف
-
terraform apply
لتوفير قاعدة بيانات Firestore ونشر قواعد الأمان الخاصة بها. - تحقق من توفير قاعدة البيانات ونشر قواعد الأمان الخاصة بها:
- في وحدة تحكم Firebase ، حدد موقع قسم البناء في اللوحة اليمنى.
- انتقل إلى قسم قاعدة بيانات Firestore ، ثم انقر فوق علامة التبويب "القواعد" .
8. قم بإعداد مجموعة التخزين السحابي وقواعد الأمان الخاصة بها
بالنسبة لتطبيق الويب الخاص ببرنامج Codelab هذا، ستقوم بتخزين الصور المشتركة بين المستخدمين النهائيين في مجموعة التخزين السحابي.
- لتمكين واجهات برمجة التطبيقات المطلوبة وتوفير مجموعة Cloud Storage الافتراضية، قم بإلحاق ملف
main.tf
بكتل الموارد التالية.
لاحظ أنه يتم توفير مجموعة التخزين السحابي الافتراضية لمشروعك عبر Google App Engine ويجب أن يكون لها نفس موقع قاعدة بيانات Firestore الخاصة بك. راجع مواقع محرك التطبيقات لمزيد من المعلومات.
إذا كنت تريد مجموعات متعددة في مشروعك، فقم بتوفيرها باستخدام موردgoogle_storage_bucket
(غير موضح في هذا الدرس التطبيقي حول الترميز).
main.tf... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "<NAME_OF_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket" { provider = google-beta project = google_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket }
- يجب حماية كل حاوية تخزين سحابية يمكن الوصول إليها بواسطة Firebase بواسطة قواعد أمان Firebase .
يوفر نموذج التعليمة البرمجية الخاصة ببرنامج Codelab مجموعة من قواعد Firestore الآمنة في ملفstorage.rules
، والتي يمكنك العثور عليها في جذر دليلweb
. - قم بإلحاق ملف
main.tf
الخاص بك بكتل الموارد التالية للقيام بما يلي:- قم بإنشاء مجموعة قواعد لقواعد أمان Firebase من الملف المحلي.
- حرر مجموعة القواعد الخاصة بحاوية التخزين.
firebase deploy --only storage
.
main.tf... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the default Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_storage_bucket.default-bucket, ] } # Release the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default.default_bucket}" ruleset_name = "projects/${google_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } }
-
terraform apply
على توفير مجموعة Cloud Storage الافتراضية ونشر قواعد الأمان الخاصة بها. - تحقق من توفير المجموعة ونشر قواعد الأمان الخاصة بها:
- في وحدة تحكم Firebase ، حدد موقع قسم البناء في اللوحة اليمنى.
- انتقل إلى قسم التخزين ، ثم انقر فوق علامة التبويب القواعد .
9. قم بتشغيل تطبيقك محليًا
أنت الآن جاهز لتشغيل تطبيق الويب الخاص بك للمرة الأولى! ستستخدم محاكي Firebase Hosting لخدمة تطبيقك محليًا.
- افتح نافذة طرفية جديدة، ومن دليل
web
، قم بتشغيل أمر Firebase CLI التالي لبدء المحاكي:firebase emulators:start --project=<PROJECT_ID>
- في متصفحك، افتح تطبيق الويب الخاص بك على عنوان URL المحلي الذي يعرضه سطر الأوامر (عادةً
http://localhost:5000
).
من المفترض أن تشاهد واجهة المستخدم الخاصة بتطبيق FriendlyChat، والتي لا تعمل (حتى الآن!). لم يتم ربط التطبيق بـ Firebase بعد، ولكن من خلال إكمال الخطوات التالية من هذا الدرس التطبيقي حول التعليمات البرمجية، سيتم ربطه!
لاحظ أنه عندما تقوم بإجراء تغييرات على تطبيق الويب الخاص بك (كما ستفعل في الخطوات التالية من هذا الدرس التطبيقي حول التعليمات البرمجية)، قم بتحديث متصفحك لتحديث عنوان URL المحلي بهذه التغييرات.
10. تثبيت Firebase وتكوينه وتهيئته
للحصول على تطبيق يعمل مع Firebase، يحتاج تطبيقك إلى Firebase SDK وتكوين Firebase لمشروع Firebase الخاص بك.
يعد نموذج التعليمات البرمجية الخاص ببرنامج تدريب التعليمات البرمجية هذا بالفعل تطبيقًا عاملاً يحتوي على جميع التبعيات والوظائف المطلوبة لاستخدام منتجات Firebase المتنوعة في التطبيق. يمكنك البحث في web/package.json
و web/src/index.js
إذا كنت ترغب في رؤية ما تم إنجازه بالفعل.
على الرغم من أن نموذج التعليمات البرمجية مكتمل في الغالب، إلا أنك لا تزال بحاجة إلى القيام ببعض الأشياء لتشغيل تطبيقك، بما في ذلك: تثبيت Firebase SDK، وبدء البناء، وإضافة تكوين Firebase إلى تطبيقك، وأخيرًا تهيئة Firebase.
قم بتثبيت Firebase SDK وابدأ في إنشاء حزمة الويب الخاصة بك
تحتاج إلى تشغيل بعض الأوامر لبدء إنشاء تطبيقك.
- افتح نافذة طرفية جديدة.
- تأكد من أنك في جذر دليل
web
. - قم بتشغيل
npm install
لتنزيل Firebase SDK. - قم بتشغيل
npm update
لتحديث أي تبعيات. - قم بتشغيل
npm run start
لبدء تشغيل حزمة الويب.
بالنسبة لبقية الدرس التطبيقي حول التعليمات البرمجية، ستعمل حزمة الويب الآن على إعادة بناء التعليمات البرمجية المصدر بشكل مستمر.
أضف تكوين Firebase إلى تطبيقك
تحتاج أيضًا إلى إضافة تكوين Firebase إلى تطبيقك حتى تعرف مجموعات Firebase SDK مشروع Firebase الذي تريد أن تستخدمه.
في هذا الدرس التطبيقي حول التعليمات البرمجية، لديك خياران مختلفان للحصول على تهيئة Firebase:
- الخيار 1 : احصل على تكوين Firebase الخاص بك من وحدة تحكم Firebase.
- الخيار 2 : احصل على تكوين Firebase الخاص بك عبر Terraform.
الخيار 1: احصل على التكوين من وحدة تحكم Firebase وأضفه إلى قاعدة التعليمات البرمجية الخاصة بك
- في وحدة تحكم Firebase، انتقل إلى إعدادات المشروع .
- قم بالتمرير لأسفل إلى بطاقة تطبيقاتك ، ثم حدد تطبيق الويب الخاص بك.
- حدد Config من جزء مقتطف Firebase SDK، ثم انسخ مقتطف التكوين.
- الصق التكوين الخاص بك في ملف
web/src/firebase-config.js
الخاص بتطبيقك، كما يلي:
firebase-config.js... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
الخيار 2: الحصول على التكوين عبر Terraform وإضافته إلى قاعدة التعليمات البرمجية الخاصة بك
وبدلاً من ذلك، يمكنك الحصول على تكوين Firebase عبر Terraform كقيمة مخرجات في واجهة سطر الأوامر (CLI).
- في ملف
main.tf
، ابحث عن كتلة المواردgoogle_firebase_web_app
(الكتلة التي سجلت تطبيق ويب في مشروعك). - مباشرة بعد تلك الكتلة، قم بإضافة الكتل التالية:
main.tf... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ...
- نظرًا لأن كتلة
data
وكتلةoutput
ليسا مخصصين لتعديل البنية الأساسية بأي شكل من الأشكال، فأنت تحتاج فقط إلى تشغيل الأوامر التالية.- لتحميل تكوين Firebase لتطبيق الويب الخاص بك إلى حالة Terraform لدليلك، قم بتشغيل هذا الأمر:
terraform refresh
- لطباعة قيم تكوين Firebase، قم بتشغيل هذا الأمر:
terraform output –json
فيما يلي مثال لإخراج التكوين. سوف تحتوي مخرجاتك المطبوعة على قيم مشروعك وتطبيقك.{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- لتحميل تكوين Firebase لتطبيق الويب الخاص بك إلى حالة Terraform لدليلك، قم بتشغيل هذا الأمر:
- انسخ القيم من داخل خريطة
value
. - الصق هذه القيم (الإعدادات الخاصة بك) في ملف
web/src/firebase-config.js
الخاص بتطبيقك، كما يلي:
firebase-config.js... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
قم بتهيئة Firebase في تطبيقك
أخيرًا، لتهيئة Firebase، قم بإلحاق ملف web/src/index.js
الخاص بتطبيقك بما يلي:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
جرب التطبيق الخاص بك
الآن بعد أن تمت تهيئة كل شيء لـ Firebase، يمكنك تجربة تطبيق الويب الوظيفي الخاص بك.
- قم بتحديث المتصفح الذي يخدم تطبيقك.
- من المفترض أن تكون قادرًا الآن على تسجيل الدخول باستخدام Google والبدء في نشر الرسائل في الدردشة. إذا كان لديك ملفات صور، يمكنك حتى تحميلها!
11. قم بتكرار التكوين الخاص بك عبر البيئات
تتفوق Terraform في إدارة العديد من البنية التحتية التي تم تكوينها بشكل مشابه (على سبيل المثال، إعداد مشروع Firebase المرحلي المشابه لمشروع إنتاجي).
في هذا الدرس التطبيقي حول التعليمات البرمجية، ستنشئ مشروع Firebase ثانيًا ليكون بمثابة بيئة مرحلية.
لنسخ تكوين موجود لإنشاء هذا المشروع المرحلي، لديك خياران:
- الخيار 1 : عمل نسخة من تكوين Terraform.
يوفر هذا الخيار المرونة القصوى لمدى اختلاف المشروع المنسوخ عن المشروع المصدر. - الخيار 2 : إعادة استخدام التكوينات مع
for_each
.
يوفر هذا الخيار المزيد من إعادة استخدام التعليمات البرمجية إذا كان من المفترض ألا يختلف كل مشروع بطرق مهمة وتريد نشر التغييرات على جميع المشاريع مرة واحدة.
الخيار 1: عمل نسخة من تكوين Terraform
يوفر هذا الخيار أقصى قدر من المرونة فيما يتعلق بمدى اختلاف المشروع المنسوخ عن المشروع المصدر، مثل وجود تطبيقات بأسماء عرض مختلفة وعمليات طرح مرحلية.
- في جذر دليل
web
الخاص بك، قم بإنشاء ملف تكوين Terraform جديد يسمىmain_staging.tf
. - انسخ كافة كتل الموارد من ملف
main.tf
الخاص بك (باستثناء كتلterraform
provider
)، ثم قم بلصقها في ملفmain_staging.tf
الخاص بك. - ستحتاج بعد ذلك إلى تعديل كل كتلة من كتل الموارد المنسوخة في
main_staging.tf
لكي تعمل مع مشروع التدريج الخاص بك:- تسميات الموارد: استخدم اسمًا جديدًا لتجنب التعارض. على سبيل المثال، أعد تسمية
resource "google_project" "default"
إلىresource "google_project" "staging"
. - مراجع الموارد: قم بتحديث كل منها. على سبيل المثال، قم بتحديث
google_firebase_project.default.project
إلىgoogle_firebase_project.staging.project
.
main_staging.tf
في مستودع GitHub الخاص ببرنامج Codelab:
web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf
إذا كنت تريد استخدام هذا التكوين، فتأكد من القيام بما يلي:- انسخ التكوين من
main_staging-copypaste.tf
، ثم الصقه في ملفmain_staging.tf
. - في ملف
main_staging.tf
، قم بما يلي:- في كتلة موارد
google_project
، قم بتحديث سمةname
، وسمةproject-id
، و(إذا قمت بإعداد المصادقة عبر Terraform) سمةbilling_account
بقيمك الخاصة. - في كتلة موارد
google_firebase_web_app
، قم بتحديث سمةdisplay_name
بالقيمة الخاصة بك. - في كتل موارد
google_firestore_database
وgoogle_app_engine_application
، قم بتحديث سماتlocation_id
بالقيمة الخاصة بك.
- في كتلة موارد
# Create a new Google Cloud project. resource "google_project" "staging" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_STAGING_PROJECT>" project_id = "<PROJECT_ID_OF_STAGING_PROJECT" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enable the required underlying Service Usage API. resource "google_project_service" "staging_serviceusage" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "staging_firebase" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for the new project created above. resource "google_firebase_project" "staging" { provider = google-beta project = google_project.staging.project_id # Wait until the required APIs are enabled. depends_on = [ google_project_service.staging_serviceusage, google_project_service.staging_firebase, ] } # Create a Firebase Web App in the new project created above. resource "google_firebase_web_app" "staging" { provider = google-beta project = google_firebase_project.staging.project display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" }
- تسميات الموارد: استخدم اسمًا جديدًا لتجنب التعارض. على سبيل المثال، أعد تسمية
-
terraform apply
على توفير مشروع Firebase "المرحلي" الجديد وجميع موارده وتمكين خدماته. - تحقق من توفير كل شيء وتمكينه كما هو متوقع عن طريق التحقق منه في وحدة تحكم Firebase كما كان من قبل.
الخيار 2: إعادة استخدام التكوينات مع for_each
يوفر هذا الخيار المزيد من إعادة استخدام التعليمات البرمجية إذا كان من المفترض ألا يختلف كل مشروع بطرق مهمة وتريد نشر التغييرات على جميع المشاريع مرة واحدة. يستخدم الوسيطة التعريفية for_each
في لغة Terraform.
- افتح ملف
main.tf
الخاص بك. - في كل كتلة مورد تريد نسخها، أضف وسيطة تعريفية
for_each
، كما يلي:
main.tf
يمكنك العثور على التكوين الكامل لملف# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.
main.tf
الذي يستخدم الوسيطة الوصفيةfor_each
في مستودع GitHub الخاص بالبرنامج التدريبي هذا:
web/terraform-checkpoints/replicate-config/main-foreach.tf
إذا كنت تريد استخدام هذا التكوين، فتأكد من القيام بما يلي:- انسخ التكوين من
main-foreach.tf
، ثم قم بلصقه في ملفmain.tf
الخاص بك. - في ملف
main.tf
الخاص بك، قم بما يلي:- في كتلة موارد
google_project
، قم بتحديث سمةname
، وسمةproject-id
، و (إذا قمت بإعداد المصادقة عبر terraform) سمةbilling_account
مع القيم الخاصة بك. - في كتلة موارد
google_firebase_web_app
، قم بتحديث سمةdisplay_name
بقيمة خاصة بك. - في
google_firestore_database
وgoogle_app_engine_application
كتل الموارد ، قم بتحديث سماتlocation_id
بقيمة خاصة بك.
- في كتلة موارد
- انسخ التكوين من
- بدلاً من تطبيق هذا التكوين على الفور ، من المهم فهم وإصلاح بعض الأشياء حول كيفية قيام Terraform بتفسير هذا التكوين مقارنة بالبنية التحتية الحالية.
- في الوقت الحالي ، إذا قمت بتطبيق هذا التكوين الذي يستخدم
for_each
، فإن عناوين الموارد ستبدو ما يلي:
ومع ذلك ، فإن المشروع الحالي الذي أنشأته في الجزء الأول من هذا codelab معروف بأنه ما يلي:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]
google_project.default google_firebase_project.default google_firebase_android_app.default
- قم بتشغيل
terraform plan
لمعرفة الإجراءات التي سيتخذها Terraform بالنظر إلى الحالة الحالية.
يجب أن يوضح الإخراج أن Terraform ستحذف المشروع الذي أنشأته في الجزء الأول من هذا codelab وإنشاء مشروعين جديدين. وذلك لأن Terraform لا يعرف أن المشروع الموجود في العنوانgoogle_project.default
قد تم نقله إلى العنوان الجديدgoogle_project.default["prod"]
. - لإصلاح ذلك ، قم بتشغيل أمر
terraform state mv
:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- وبالمثل ، لإصلاح جميع كتل الموارد الأخرى ، قم بتشغيل
terraform state mv
لـgoogle_firebase_project
وgoogle_firebase_web_app
، وجميع كتل الموارد الأخرى في ملفmain.tf
الخاص بك. - الآن ، إذا قمت بتشغيل
terraform plan
مرة أخرى ، فلا ينبغي أن تظهر أن Terraform ستحذف المشروع الذي أنشأته في الجزء الأول من هذا codelab.
- في الوقت الحالي ، إذا قمت بتطبيق هذا التكوين الذي يستخدم
-
terraform apply
على توفير مشروع Firebase الجديد الخاص بك وجميع موارده وتمكين خدماته. - تحقق من أن كل شيء تم توفيره وتمكينه كما هو متوقع من خلال التحقق منها في وحدة التحكم في Firebase كما كان من قبل.
12. خطوة المكافأة: نشر تطبيقات التدريج والمنتج
- في قاعدة بيانات التطبيق الخاصة بك ، قم بتغيير
firebase-config.js
لاستخدام تكوين Firebase من مشروع التدريج بدلاً من ذلك.
لتذكير نفسك بكيفية الحصول على تكوين Firebase الخاص بك وإضافته إلى تطبيقك ، راجع الخطوة السابقة من هذا Codelab ، أضف تكوين Firebase الخاص بك إلى تطبيقك. - في جذر دليل
web
الخاص بك ، قم بتشغيل الأمر التالي لنشر تطبيقك على مشروع Firebase التدريجي.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
- افتح تطبيق التدريج الخاص بك في المتصفح عبر عنوان URL الذي تم طباعته في ناتج
firebase deploy
. حاول تسجيل الدخول وإرسال الرسائل وتحميل الصور.
عند نشر تطبيق على مشروع Firebase ، فإنه يستخدم موارد Firebase الحقيقية ، وليس الموارد المحاكاة. بينما تتفاعل مع تطبيق التدريج الخاص بك ، يجب أن ترى البيانات والصور تظهر في مشروع التدريج الخاص بك في وحدة التحكم في Firebase. - بعد اختبار تطبيقك في التدريج ، قم بتغيير
firebase-config.js
مرة أخرى لاستخدام تكوين Firebase الخاص بمشروع Prod (أول مشروع قمت بإنشائه في هذا Codelab). - في جذر دليل
web
الخاص بك ، قم بتشغيل الأمر التالي لنشر تطبيقك على مشروع Firebase للإنتاج.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- افتح تطبيق الإنتاج الخاص بك في المتصفح عبر عنوان URL المطبوع في ناتج
firebase deploy
. حاول تسجيل الدخول وإرسال الرسائل وتحميل الصور.
يجب أن ترى البيانات والصور تظهر في مشروع الإنتاج الخاص بك في وحدة التحكم في Firebase. - عندما تنتهي من التفاعل مع التطبيقين لهذا Codelab ، يمكنك منع Firebase من تقديمها. قم بتشغيل الأمر التالي لكل مشروع من مشاريعك:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. تهانينا!
لقد استخدمت Terraform لتكوين تطبيق ويب الدردشة في الوقت الفعلي! وقد اتبعت أفضل الممارسات لبيئات التنمية من خلال إنشاء مشاريع منفصلة Firebase للتدريج والمنتج.
ما قمنا بتغطيته
- باستخدام Terraform CLI لإدارة الموارد السحابية
- باستخدام Terraform لتكوين منتجات Firebase (المصادقة ، Firestore ، تخزين السحابة ، وقواعد الأمان)
- تشغيل واختبار تطبيق ويب محليًا باستخدام مجموعة المحاكي المحلي Firebase
- استيراد Firebase إلى تطبيق ويب
- باستخدام terraform لتكرار التكوين عبر بيئات متعددة
لمزيد من المعلومات حول Firebase و Terraform ، تفضل بزيارة وثائقنا . يمكنك العثور على قائمة بجميع منتجات Firebase بدعم من Terraform ، وتجربة تكوينات terraform لحالات الاستخدام الشائعة ، واستكشاف الأخطاء وإصلاحها مفيدة.