1. مقدمه
اهداف
میتوانید از Terraform برای راهاندازی و مدیریت یک پروژه Firebase، از جمله پیکربندی برنامهای زیرساختها و محصولات Firebase استفاده کنید.
این کد لبه ابتدا نحوه ساخت یک فایل پیکربندی Terraform برای ایجاد یک پروژه Firebase جدید را توضیح می دهد و سپس نحوه پیکربندی برنامه ها و محصولات Firebase را که می خواهید در آن پروژه استفاده کنید، توضیح می دهد. ما همچنین اصول خط فرمان Terraform را پوشش میدهیم، مانند پیشنمایش تغییراتی که باید ایجاد شوند و سپس پیادهسازی آنها.
اگر میخواستید نحوه راهاندازی و مدیریت پروژهها و محصولات Firebase با Terraform را بیاموزید، این کد لبه برای شما مناسب است!
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک فایل پیکربندی Terraform (
*.tf
) - چگونه از دستورات Terraform CLI برای مدیریت زیرساخت خود استفاده کنید
- چگونه پیکربندی خود را برای به روز رسانی منابع و خدمات خود تغییر دهید
- نحوه اعمال پیکربندی خود در یک برنامه وب واقعی (به نام چت دوستانه )
- نحوه تعریف پیکربندی های موازی (و همزمان) در محیط های مختلف (تولید، صحنه سازی و غیره)
آنچه شما نیاز دارید
- یک ترمینال/کنسول
- ویرایشگر IDE/متن انتخابی شما، مانند WebStorm ، Atom ، Sublime یا VS Code
- مرورگر مورد نظر شما، مانند کروم
- Google Cloud CLI (gcloud CLI) - این CLI را نصب کنید و با استفاده از یک حساب کاربری یا یک حساب سرویس وارد شوید
برای موفقیت با این کد لبه، به تسلط اولیه با Terraform و اصطلاحات آن، از جمله پیش نیازهای زیر نیاز دارید:
- Terraform را نصب کنید و با استفاده از آموزش های رسمی Terraform با Terraform آشنا شوید
این Codelab یک برنامه نمونه واقعی را ارائه می دهد تا بتوانید آنچه را که از طریق Terraform ارائه می دهید آزمایش کنید و با آن تعامل داشته باشید. برای انجام این کار، به موارد زیر نیاز دارید:
- نمونه کد یک برنامه وب - این کد را در مرحله بعد از برنامه کد دانلود کنید
- مدیر بسته npm (که معمولاً با Node.js ارائه می شود) - این ابزارها را نصب کنید
- Firebase CLI - این CLI را نصب کرده و وارد شوید
2. کد شروع را دریافت کنید
در این نرم افزار کد، می توانید آنچه را که از طریق Terraform ارائه می دهید با یک برنامه وب واقعی آزمایش کنید. توصیه می کنیم این کار را انجام دهید تا تمام مراحل لازم برای استفاده از منابع ارائه شده توسط Terraform را درک کنید.
مخزن GitHub کد لبه را از خط فرمان کلون کنید:
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 و APIهای زیربنایی اضافه کنید
- ابتدا، پروژه زیربنایی 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" } }
- در مرحله بعد، باید APIهای زیربنایی مورد نیاز را فعال کنید: API Usage Service و Firebase Management API.
وقتی از کنسول Firebase برای ایجاد پروژه Firebase استفاده میکنید، معمولاً این فعالسازی API در پشت صحنه انجام میشود، اما به Terraform باید صریحاً گفته شود که این فعالسازی را انجام دهد.
به فایل پیکربندیmain.tf
خود (درست زیر بلوکی که پروژه جدید Cloud را ایجاد می کند)، بلوک منبع زیر را اضافه کنید:
main.tf
با فعال کردن سرویس Usage API، پروژه جدید شما میتواند چکهای سهمیه را بپذیرد! بنابراین، برای تمام فراهم کردن منابع بعدی و فعال کردن خدمات، باید از ارائه دهنده با... # 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 میگوید منتظر فعال شدن APIهای زیربنایی باشد. بدون این بند، Terraform از وابستگی اطلاعی ندارد و ممکن است هنگام تهیه منابع به صورت موازی با خطا مواجه شود.
تنظیمات را اعمال کنید
- برای تهیه منابع جدید و فعال کردن API های مشخص شده در فایل کانفیگ خود، دستور زیر را از ریشه همان دایرکتوری فایل
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 را در پروژه 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 Authentication ارائه می دهیم:
- گزینه 1 (توصیه می شود) : احراز هویت Firebase را در کنسول تنظیم کنید، که به GCIP نیاز ندارد.
- استفاده از این گزینه به این معنی است که شما مجبور نیستید پروژه جدید خود را با حساب Cloud Billing مرتبط کنید.
- گزینه 2 : احراز هویت Firebase را از طریق Terraform با استفاده از APIهای Google Cloud Identity Platform (GCIP) تنظیم کنید.
- استفاده از این گزینه به این معنی است که باید پروژه جدید خود را با یک حساب Cloud Billing مرتبط کنید زیرا GCIP نیاز دارد که پروژه در طرح قیمت گذاری Blaze باشد.
گزینه 1: احراز هویت را با استفاده از کنسول Firebase تنظیم کنید
برای راه اندازی Firebase Authentication با استفاده از کنسول Firebase، نیازی نیست که پروژه شما در طرح قیمت گذاری Blaze باشد.
نحوه تنظیم Firebase Authentication و ورود به سیستم با Google در اینجا آمده است:
- در کنسول Firebase ، بخش Build را در پانل سمت چپ قرار دهید.
- روی تأیید هویت کلیک کنید، روی شروع کلیک کنید، و سپس روی برگه روش ورود به سیستم کلیک کنید (یا اینجا را کلیک کنید تا مستقیماً به آنجا بروید).
- روی افزودن ارائهدهنده جدید کلیک کنید و از بخش ارائهدهندگان اضافی ، Google را انتخاب کنید.
- کلید Enable را فعال کنید.
- نام عمومی برنامه خود را روی چیزی مانند
FriendlyChat
تنظیم کنید (نیازی نیست که این نام در سطح جهانی منحصر به فرد باشد). - یک ایمیل پشتیبانی پروژه را از منوی کشویی انتخاب کنید و سپس روی ذخیره کلیک کنید.
- شما باید Google را به عنوان یک ارائه دهنده ورود به سیستم فعال ببینید.
گزینه 2: تنظیم احراز هویت از طریق Terraform با استفاده از APIهای Google Cloud Identity Platform (GCIP)
برای راه اندازی Firebase Authentication از طریق Terraform، باید از GCIP API استفاده کنید، به این معنی که پروژه باید در طرح قیمت گذاری 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 است. برای انجام این تنظیمات، به بخش APIs & Services در Google Cloud Console بروید.
- از آنجایی که اولین بار است که یک شناسه مشتری برای این پروژه ایجاد می کنید، باید صفحه رضایت OAuth خود را پیکربندی کنید.
- صفحه نمایش رضایت OAuth را باز کنید و سپس پروژه ای را که ایجاد کرده اید انتخاب کنید.
- User Type را روی External تنظیم کنید و سپس روی Create کلیک کنید.
- در صفحه بعد، موارد زیر را تکمیل کنید و سپس روی ذخیره کلیک کنید و ادامه دهید .
- نام برنامه عمومی برنامه خود را روی چیزی مانند
FriendlyChat
تنظیم کنید (نیازی نیست این نام در سطح جهانی منحصر به فرد باشد). - ایمیل پشتیبانی کاربر را از منوی کشویی انتخاب کنید.
- یک ایمیل برای اطلاعات تماس برنامهنویس وارد کنید.
- نام برنامه عمومی برنامه خود را روی چیزی مانند
- در صفحه های بعدی موارد زیر را کامل کنید:
- پیش فرض ها را در صفحه Scopes بپذیرید و سپس روی Save and Continue کلیک کنید.
- پیش فرض ها را در صفحه کاربران تست بپذیرید و سپس روی ذخیره و ادامه کلیک کنید.
- خلاصه را مرور کنید و سپس روی بازگشت به داشبورد کلیک کنید.
- با انجام موارد زیر یک سرویس گیرنده OAuth را در صفحه اعتبارنامه ها راه اندازی کنید:
- روی ایجاد اعتبارنامه کلیک کنید و شناسه مشتری OAuth را انتخاب کنید.
- از منوی کشویی Application type ، Web application را انتخاب کنید.
- در قسمت Name ، نام برنامه خود را وارد کنید، به عنوان مثال
FriendlyChat
(نیازی نیست که این برنامه منحصر به فرد جهانی باشد). - با تنظیم موارد زیر به URL برنامه خود اجازه دهید از این سرویس گیرنده OAuth استفاده کند:
- در زیر مبداهای مجاز جاوا اسکریپت ، روی افزودن URI کلیک کرده و وارد کنید
https://<PROJECT_ID>.firebaseapp.com
، که در آن<PROJECT_ID>
شناسه پروژه ای است که درmain.tf
تنظیم کرده اید. - در قسمت URIهای تغییر مسیر مجاز ، روی افزودن URI کلیک کرده و وارد کنید
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
، که در آن<PROJECT_ID>
شناسه پروژه ای است که درmain.tf
تنظیم کرده اید.
- در زیر مبداهای مجاز جاوا اسکریپت ، روی افزودن 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 ] }
تنظیمات را اعمال کنید
- برای تنظیم Authentication بر اساس پیکربندی خود، دستورات زیر را از ریشه همان پوشه فایل
main.tf
خود (که بایدweb
باشد) اجرا کنید:export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
terraform apply
توجه داشته باشید که اجرایterraform apply
باعث ایجاد مجدد پروژه Google Cloud جدید نمی شود. Terraform تشخیص می دهد که پروژه ای با شناسه پروژه مشخص شده از قبل وجود دارد و وضعیت فعلی پروژه را با آنچه در فایل.tf
مقایسه می کند. سپس هر تغییری را که پیدا کند ایجاد می کند. - برنامه اقدامات چاپ شده را مرور کنید. اگر همه چیز مطابق انتظار به نظر می رسد،
yes
تایپ کرده و Enter را فشار دهید تا اقدامات تأیید شود.
تغییرات را تایید کنید
- در کنسول Firebase ، بخش Build را در پانل سمت چپ قرار دهید.
- روی احراز هویت کلیک کنید و سپس روی برگه روش ورود به سیستم کلیک کنید (یا اینجا را کلیک کنید تا مستقیماً به آنجا بروید).
- شما باید Google را به عنوان یک ارائه دهنده ورود به سیستم فعال ببینید.
7. پایگاه داده Firestore و قوانین امنیتی آن را تنظیم کنید
برای برنامه وب این Codelab، پیامها را بین کاربران نهایی در پایگاه داده Firestore ذخیره خواهید کرد.
- برای فعال کردن API های مورد نیاز و ارائه نمونه پایگاه داده، فایل
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 از فایل
- برای ارائه پایگاه داده Firestore و استقرار قوانین امنیتی آن،
terraform apply
اجرا کنید. - بررسی کنید که پایگاه داده آماده شده است و قوانین امنیتی آن مستقر هستند:
- در کنسول Firebase ، بخش Build را در پانل سمت چپ قرار دهید.
- به بخش Firestore Database بروید و سپس روی زبانه Rules کلیک کنید.
8. یک سطل Cloud Storage و قوانین امنیتی آن را تنظیم کنید
برای برنامه وب این کد لبه، تصاویر به اشتراک گذاشته شده بین کاربران نهایی را در یک سطل Cloud Storage ذخیره خواهید کرد.
- برای فعال کردن APIهای مورد نیاز و ارائه سطل پیشفرض Cloud Storage، فایل
main.tf
خود را با بلوکهای منبع زیر اضافه کنید.
توجه داشته باشید که سطل پیشفرض Cloud Storage برای پروژه شما از طریق Google App Engine ارائه میشود و باید همان مکان پایگاه داده Firestore شما باشد. برای اطلاعات بیشتر به مکانهای App Engine مراجعه کنید.
اگر می خواهید چندین سطل در پروژه خود داشته باشید، آنها را با استفاده از منبع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 }
- هر سطل Cloud Storage که برای 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 ] } }
- برای ارائه سطل پیشفرض Cloud Storage و استقرار قوانین امنیتی آن
terraform apply
اجرا کنید. - بررسی کنید که سطل آماده است و قوانین امنیتی آن مستقر هستند:
- در کنسول Firebase ، بخش Build را در پانل سمت چپ قرار دهید.
- به بخش Storage رفته و سپس روی تب Rules کلیک کنید.
9. برنامه خود را به صورت محلی اجرا کنید
اکنون برای اولین بار آماده اجرای برنامه وب خود هستید! شما از شبیه ساز میزبانی Firebase برای ارائه برنامه خود به صورت محلی استفاده خواهید کرد.
- یک پنجره ترمینال جدید باز کنید و از فهرست
web
، دستور Firebase CLI زیر را برای راه اندازی شبیه ساز اجرا کنید:firebase emulators:start --project=<PROJECT_ID>
- در مرورگر خود، برنامه وب خود را در URL محلی بازگردانده شده توسط CLI (معمولاً
http://localhost:5000
) باز کنید.
باید رابط کاربری برنامه FriendlyChat خود را ببینید که (هنوز!) کار نمی کند. این برنامه هنوز به Firebase متصل نشده است، اما با انجام مراحل بعدی این کد لبه، متصل خواهد شد!
توجه داشته باشید که هر زمان که در برنامه وب خود تغییراتی ایجاد می کنید (مانند مراحل زیر در این لبه کد)، مرورگر خود را به روز کنید تا URL محلی را با این تغییرات به روز کنید.
10. Firebase را نصب، پیکربندی و مقداردهی اولیه کنید
برای اینکه یک برنامه با Firebase کار کند، برنامه شما به Firebase SDK و پیکربندی Firebase برای پروژه Firebase شما نیاز دارد.
کد نمونه برای این Codelab در حال حاضر یک برنامه کاربردی با تمام وابستگی ها و عملکردهای مورد نیاز برای استفاده از محصولات مختلف Firebase در برنامه است. اگر میخواهید ببینید قبلاً چه کاری انجام شده است، میتوانید به web/package.json
و web/src/index.js
نگاه کنید.
حتی اگر کد نمونه اکثراً کامل است، هنوز باید چند کار را برای اجرای برنامه خود انجام دهید، از جمله: نصب Firebase SDK، شروع ساخت، اضافه کردن پیکربندی Firebase به برنامه خود و در نهایت مقداردهی اولیه Firebase.
Firebase SDK را نصب کنید و ساخت بسته وب خود را شروع کنید
برای شروع ساخت برنامه خود باید چند دستور را اجرا کنید.
- یک پنجره ترمینال جدید باز کنید.
- مطمئن شوید که در ریشه دایرکتوری
web
هستید. - برای دانلود Firebase SDK
npm install
اجرا کنید. -
npm update
برای به روز رسانی وابستگی ها اجرا کنید. -
npm run start
برای راه اندازی وب پک اجرا کنید.
برای بقیه بخش کد، webpack اکنون به طور مداوم کد منبع شما را بازسازی می کند.
پیکربندی Firebase خود را به برنامه خود اضافه کنید
همچنین باید پیکربندی Firebase خود را به برنامه خود اضافه کنید تا SDK های Firebase بدانند از کدام پروژه Firebase می خواهید استفاده کنند.
برای این کد لبه، شما دو گزینه مختلف برای دریافت پیکربندی Firebase دارید:
- گزینه 1 : پیکربندی Firebase خود را از کنسول Firebase دریافت کنید.
- گزینه 2 : پیکربندی Firebase خود را از طریق Terraform دریافت کنید.
گزینه 1: پیکربندی را از کنسول Firebase دریافت کرده و به پایگاه کد خود اضافه کنید
- در کنسول Firebase، به تنظیمات پروژه خود بروید.
- به سمت پایین به کارت برنامه های شما بروید و سپس برنامه وب خود را انتخاب کنید.
- Config را از پنجره snippet 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 این کد لبه پیدا کنید:
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 جدید "Staging" و تمام منابع آن و فعال کردن خدمات آن. - با بررسی آنها در کنسول 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 ایجاد کرده اید ، به عنوان زیر به Terraform شناخته شده است: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 مانند گذشته ، همه چیز تهیه و فعال شده است.
12. مرحله جایزه: برنامه های مرحله بندی و تولید خود را مستقر کنید
- در قسمت کد برنامه خود ،
firebase-config.js
را تغییر دهید تا به جای آن از پیکربندی Firebase از پروژه مرحله بندی خود استفاده کنید.
برای یادآوری اینکه چگونه می توانید پیکربندی Firebase خود را دریافت کرده و آن را به برنامه خود اضافه کنید ، مرحله اولیه این CodeLab را ببینید ، پیکربندی Firebase خود را به برنامه خود اضافه کنید. - در ریشه دایرکتوری
web
خود ، دستور زیر را اجرا کنید تا برنامه خود را در پروژه Firebase Staging خود مستقر کنید.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
- برنامه مرحله بندی خود را در مرورگر از طریق URL که در خروجی
firebase deploy
چاپ شده است ، باز کنید. وارد سیستم شوید ، پیام ارسال کنید و تصاویر را بارگذاری کنید.
هنگامی که یک برنامه را به یک پروژه Firebase مستقر می کنید ، از منابع واقعی Firebase استفاده می کند ، نه منابع شبیه سازی شده. همانطور که با برنامه مرحله بندی خود تعامل دارید ، باید داده ها را ببینید و تصاویر در پروژه مرحله بندی خود در کنسول Firebase ظاهر می شوند. - پس از آزمایش برنامه خود در مرحله بندی ،
firebase-config.js
به استفاده از پیکربندی Firebase Prod Project (اولین پروژه ای که در این CodeLab ایجاد کرده اید) تغییر دهید. - در ریشه دایرکتوری
web
خود ، دستور زیر را اجرا کنید تا برنامه خود را به پروژه Firebase تولید خود مستقر کنید.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- برنامه تولید خود را در مرورگر از طریق URL که در خروجی
firebase deploy
چاپ شده است ، باز کنید. وارد سیستم شوید ، پیام ارسال کنید و تصاویر را بارگذاری کنید.
باید داده ها را ببینید و تصاویر در پروژه تولید خود در کنسول Firebase ظاهر می شوند. - پس از اتمام تعامل با دو برنامه برای این CodeLab ، می توانید از خدمت به آنها جلوگیری کنید. دستور زیر را برای هر یک از پروژه های خود اجرا کنید:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. تبریک می گویم!
شما از Terraform برای پیکربندی یک برنامه وب چت در زمان واقعی استفاده کرده اید! و شما با ایجاد پروژه های جداگانه Firebase برای مرحله بندی و تولید ، بهترین شیوه ها را برای محیط های توسعه دنبال کرده اید.
آنچه ما پوشش داده ایم
- با استفاده از Terraform CLI برای مدیریت منابع ابری
- استفاده از Terraform برای پیکربندی محصولات Firebase (احراز هویت ، آتش نشانی ، ذخیره ابری و قوانین امنیتی)
- در حال اجرا و آزمایش یک برنامه وب به صورت محلی با استفاده از مجموعه شبیه ساز محلی Firebase
- وارد کردن Firebase به یک برنامه وب
- با استفاده از Terraform برای تکرار پیکربندی در چندین محیط
برای کسب اطلاعات بیشتر در مورد Firebase و Terraform ، به اسناد ما مراجعه کنید. می توانید لیستی از کلیه محصولات Firebase را با پشتیبانی Terraform ، نمونه تنظیمات Terraform برای موارد استفاده مشترک و عیب یابی مفید و سؤالات متداول پیدا کنید.