۱. مقدمه
اهداف
شما میتوانید از Terraform برای راهاندازی و مدیریت یک پروژه Firebase، از جمله پیکربندی برنامهنویسی زیرساخت و محصولات Firebase، استفاده کنید.
این آزمایشگاه کد ابتدا نحوه ساخت یک فایل پیکربندی Terraform برای ایجاد یک پروژه جدید Firebase را شرح میدهد و پس از آن نحوه پیکربندی برنامهها و محصولات Firebase که میخواهید در آن پروژه استفاده کنید را شرح میدهد. ما همچنین اصول اولیه خط فرمان Terraform، مانند پیشنمایش تغییرات ایجاد شده و سپس پیادهسازی آنها را پوشش میدهیم.
اگر میخواستید یاد بگیرید که چگونه پروژهها و محصولات Firebase را با Terraform راهاندازی و مدیریت کنید، این codelab برای شما مناسب است!
آنچه یاد خواهید گرفت
- نحوه ایجاد فایل پیکربندی Terraform (
*.tf) - نحوه استفاده از دستورات رابط خط فرمان Terraform برای مدیریت زیرساخت شما
- نحوه تغییر پیکربندی برای بهروزرسانی منابع و خدمات
- نحوه اعمال پیکربندی خود در یک برنامه وب واقعی (به نام چت دوستانه )
- نحوه تعریف پیکربندیهای موازی (و همگامسازی) در محیطهای مختلف (تولید، مرحلهبندی و غیره)
آنچه نیاز دارید
- یک ترمینال/کنسول
- IDE/ویرایشگر متن مورد نظر شما، مانند WebStorm ، Atom ، Sublime یا VS Code
- مرورگر مورد نظر شما، مانند کروم
- رابط خط فرمان گوگل کلود (gcloud CLI) - این رابط خط فرمان را نصب کنید و با استفاده از یک حساب کاربری یا یک حساب سرویس وارد شوید
برای موفقیت در این آزمایشگاه کد، به مهارت اولیه با Terraform و اصطلاحات آن، از جمله پیشنیازهای زیر، نیاز دارید:
- Terraform را نصب کنید و با استفاده از آموزشهای رسمی آنها، با Terraform آشنا شوید.
این codelab یک برنامه نمونه واقعی ارائه میدهد تا بتوانید آنچه را که از طریق Terraform ارائه میدهید، آزمایش و با آن تعامل داشته باشید. برای انجام این کار، به موارد زیر نیاز دارید:
- کد نمونه برای یک برنامه وب - این کد را در مرحله بعدی codelab دانلود کنید
- مدیر بسته npm (که معمولاً با Node.js همراه است) - این ابزارها را نصب کنید
- رابط خط فرمان فایربیس - این رابط خط فرمان را نصب کنید و وارد شوید
۲. کد شروع را دریافت کنید
در این آزمایشگاه کد، میتوانید آنچه را که از طریق Terraform ارائه میدهید، با یک برنامه وب واقعی آزمایش کنید. توصیه میکنیم این کار را انجام دهید تا تمام مراحل مورد نیاز برای استفاده از منابع ارائه شده توسط Terraform را درک کنید.
مخزن گیتهاب codelab را از خط فرمان کلون کنید:
git clone https://github.com/firebase/codelab-friendlychat-web
از طرف دیگر، اگر git را نصب ندارید، میتوانید مخزن را به صورت یک فایل ZIP دانلود کنید .
۳. ایجاد پیکربندی Terraform
راهاندازی Terraform
- در کدبیس برنامه نمونه دانلود شده، به ریشه دایرکتوری
webبروید. - در ریشه آن دایرکتوری، یک فایل پیکربندی Terraform به نام
main.tfبا تنظیمات اولیه زیر ایجاد کنید:
اصلی.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 به شما امکان میدهد در مراحل بعدی این codelab بین دو تنظیم ارائهدهنده تمایز قائل شوید.
مقداردهی اولیه Terraform در دایرکتوری
ایجاد یک پیکربندی جدید برای اولین بار نیاز به دانلود ارائه دهنده مشخص شده در پیکربندی دارد.
برای انجام این مقداردهی اولیه، دستور زیر را از ریشه همان دایرکتوری که فایل پیکربندی main.tf شما در آن قرار دارد، اجرا کنید:
terraform init
۴. ایجاد یک پروژه 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، پروژه شما را به طور منحصر به فرد برای گوگل مشخص میکند، بنابراین مطمئن شوید که یک مقدار منحصر به فرد مشخص میکنید. اصلی.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 مربوط به استفاده از سرویس (Service Usage API) و API مربوط به مدیریت فایربیس (Firebase Management API).
این فعالسازی API معمولاً هنگام استفاده از کنسول Firebase برای ایجاد یک پروژه Firebase در پشت صحنه انجام میشود، اما Terraform باید صریحاً برای انجام این فعالسازی مطلع شود.
به فایل پیکربندیmain.tfخود (درست زیر بلوکی که پروژه جدید Cloud را ایجاد میکند)، بلوک منبع زیر را اضافه کنید:
اصلی.tf با فعال کردن 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 استفاده میکند (نیازی به نام مستعار نیست).
اصلی.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اقدامات را تأیید کنید.
اصلی.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 ، از ایجاد آن اطمینان حاصل کنید.

۵. برنامه Firebase خود را از طریق Terraform ثبت کنید
برای استفاده از Firebase، باید هر نوع پلتفرم از برنامه خود را در پروژه Firebase خود ثبت کنید. در این آزمایشگاه کد، از یک برنامه واقعی برای آزمایش و تعامل با آنچه از طریق Terraform ارائه میدهید، استفاده خواهید کرد. این برنامه یک برنامه وب است، بنابراین باید به Terraform بگویید که یک برنامه وب Firebase را در پروژه Firebase تازه ایجاد شده شما ثبت کند.
یک بلوک برای ثبت برنامه وب اضافه کنید
برای ثبت برنامه وب خود در پروژه Firebase، فایل main.tf خود را با بلوک منبع زیر پیوست کنید.
شما باید display_name خودتان را برای برنامه وب خود مشخص کنید. توجه داشته باشید که این نام فقط در رابطهای Firebase استفاده میشود و برای کاربران نهایی قابل مشاهده نیست.
اصلی.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باشد) قرار دارد، اجرا کنید. توجه داشته باشید که این دستور یک پروژه جدید Google Cloud را دوباره ایجاد نمیکند. Terraform تشخیص میدهد که پروژهای با شناسه پروژه مشخص شده از قبل وجود دارد و وضعیت فعلی پروژه را با آنچه در فایلterraform apply
.tfاست مقایسه میکند و هرگونه تغییری را که پیدا کند اعمال میکند. - طرح چاپشدهی اقدامات را بررسی کنید. اگر همه چیز مطابق انتظار به نظر میرسد،
yesرا تایپ کنید و برای تأیید اقدامات، Enter را فشار دهید.
تغییرات را اعتبارسنجی کنید
شما میتوانید با اجرای دستور زیر، وضعیت منبع تازه ایجاد شده را بررسی کنید:
terraform show
از طرف دیگر، میتوانید با مشاهده برنامه در کنسول Firebase، تأیید کنید که با موفقیت در پروژه شما ثبت شده است. به تنظیمات پروژه بروید و سپس به بخش برنامههای خود بروید.
۶. تنظیم احراز هویت فایربیس
احراز هویت بخش مهمی از هر برنامهای است. برای اینکه کاربران نهایی بتوانند با حسابهای گوگل خود وارد برنامه وب شما شوند، میتوانید احراز هویت Firebase را فعال کرده و روش ورود به سیستم با گوگل را تنظیم کنید.
توجه داشته باشید که در این آزمایشگاه کد، ما دو گزینه مختلف برای تنظیم احراز هویت Firebase ارائه میدهیم:
- گزینه ۱ (توصیه شده) : تنظیم احراز هویت Firebase در کنسول، که نیازی به GCIP ندارد.
- استفاده از این گزینه به این معنی است که لازم نیست پروژه جدید خود را با یک حساب Cloud Billing مرتبط کنید.
- گزینه ۲ : راهاندازی احراز هویت Firebase از طریق Terraform با استفاده از APIهای پلتفرم هویت ابری گوگل (GCIP).
- استفاده از این گزینه به این معنی است که شما باید پروژه جدید خود را با یک حساب Cloud Billing مرتبط کنید زیرا GCIP مستلزم آن است که پروژه در طرح قیمتگذاری Blaze باشد.
گزینه ۱: تنظیم احراز هویت با استفاده از کنسول Firebase
برای راهاندازی احراز هویت فایربیس با استفاده از کنسول فایربیس، نیازی نیست پروژه شما جزو طرح قیمتگذاری Blaze باشد.
در اینجا نحوه تنظیم احراز هویت Firebase و ورود به سیستم با Google آورده شده است:
- در کنسول Firebase ، بخش Build را در پنل سمت چپ پیدا کنید.
- روی تأیید اعتبار (Authentication) کلیک کنید، روی شروع (Get started ) کلیک کنید و سپس روی برگه روش ورود (Sign-in method ) کلیک کنید (یا برای رفتن مستقیم به آنجا اینجا کلیک کنید ).
- روی «افزودن ارائهدهنده جدید» کلیک کنید و از بخش «ارائهدهندگان اضافی »، گوگل را انتخاب کنید.
- ضامن فعال کردن را فعال کنید.
- نام عمومی برنامه خود را چیزی مانند
FriendlyChatتنظیم کنید (نیازی نیست که این نام به صورت سراسری منحصر به فرد باشد). - از منوی کشویی، یک ایمیل پشتیبانی پروژه انتخاب کنید و سپس روی ذخیره کلیک کنید.

- شما باید گوگل را به عنوان یک ارائه دهنده ورود فعال ببینید.

گزینه ۲: راهاندازی احراز هویت از طریق Terraform با استفاده از APIهای پلتفرم هویت ابری گوگل (GCIP)
برای راهاندازی احراز هویت فایربیس از طریق Terraform، باید از APIهای GCIP استفاده کنید، به این معنی که پروژه باید در طرح قیمتگذاری Blaze باشد. شما با مرتبط کردن یک حساب Cloud Billing با پروژه، پروژه فایربیس خود را برای استفاده از طرح Blaze ارتقا میدهید.
فعال کردن پرداخت از طریق Terraform
- اگر از قبل حساب Cloud Billing ندارید، اولین قدم ایجاد یک حساب جدید در کنسول Google Cloud است. هنگام انجام این کار، شناسه حساب Billing آن را یادداشت کنید. شناسه حساب Billing را میتوانید در صفحه Billing در شناسه حساب Billing مرتبط با پروژه خود پیدا کنید.

- برای فعال کردن پرداخت صورتحساب در پروژه خود از طریق Terraform، یک ویژگی
billing_accountبه منبعgoogle_projectموجود در فایلmain.tfخود اضافه کنید:
اصلی.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" } } ...
فعال کردن احراز هویت فایربیس و ورود به سیستم با گوگل از طریق Terraform
- برای ارائه احراز هویت فایربیس با GCIP، فایل
main.tfخود را با بلوکهای منبع زیر پیوست کنید:
اصلی.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, ] } - فعال کردن ورود با گوگل مستلزم داشتن یک کلاینت OAuth است. برای انجام این تنظیمات به بخش APIها و خدمات کنسول ابری گوگل بروید.
- از آنجایی که این اولین باری است که برای این پروژه یک شناسه کلاینت ایجاد میکنید، باید صفحه رضایت OAuth خود را پیکربندی کنید.
- صفحهی رضایتنامهی OAuth را باز کنید و سپس پروژهای را که ایجاد کردهاید انتخاب کنید.
- نوع کاربر را روی خارجی تنظیم کنید و سپس روی ایجاد کلیک کنید.
- در صفحه بعد، موارد زیر را تکمیل کنید و سپس روی ذخیره و ادامه کلیک کنید.
- نام برنامه عمومی خود را چیزی مانند
FriendlyChatتنظیم کنید (نیازی نیست که این نام به صورت سراسری منحصر به فرد باشد). - از منوی کشویی، یک ایمیل پشتیبانی کاربر انتخاب کنید.
- برای اطلاعات تماس توسعهدهنده، یک ایمیل وارد کنید.
- نام برنامه عمومی خود را چیزی مانند
- در صفحات بعدی، موارد زیر را تکمیل کنید:
- در صفحه Scopes ، مقادیر پیشفرض را بپذیرید و سپس روی ذخیره و ادامه کلیک کنید.
- در صفحه کاربران آزمایشی ، پیشفرضها را بپذیرید و سپس روی ذخیره و ادامه کلیک کنید.
- خلاصه را مرور کنید و سپس روی «بازگشت به داشبورد» کلیک کنید.

- با انجام موارد زیر، یک کلاینت OAuth را در صفحه Credentials راهاندازی کنید:
- روی ایجاد اعتبارنامه کلیک کنید و شناسه کلاینت OAuth را انتخاب کنید.
- از منوی کشویی نوع برنامه ، برنامه وب را انتخاب کنید.
- در فیلد نام ، نام برنامه خود را وارد کنید، برای مثال
FriendlyChat(نیازی نیست که این نام به صورت سراسری منحصر به فرد باشد). - با تنظیم موارد زیر، به URL برنامه خود اجازه دهید از این کلاینت OAuth استفاده کند:
- در زیر Authorized JavaScript origins ، روی Add URI کلیک کنید و وارد کنید
https://<PROJECT_ID>.firebaseapp.com، که در آن<PROJECT_ID>شناسه پروژهای است که درmain.tfتنظیم کردهاید. - در زیر Authorized redirect URIs ، روی Add URI کلیک کنید و وارد کنید
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler، که در آن<PROJECT_ID>شناسه پروژهای است که درmain.tfتنظیم کردهاید.
- در زیر Authorized JavaScript origins ، روی Add URI کلیک کنید و وارد کنید
- روی ذخیره کلیک کنید.

- برای فعال کردن ورود به سیستم با استفاده از شناسه کلاینت OAuth و رمز کلاینت، فایل
main.tfخود را با بلوک زیر پیوست کنید:
اصلی.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یک پروژه جدید Google Cloud را دوباره ایجاد نمیکند. Terraform تشخیص میدهد که پروژهای با شناسه پروژه مشخص شده از قبل وجود دارد و وضعیت فعلی پروژه را با آنچه در فایل.tfاست مقایسه میکند. سپس هر تغییری را که پیدا کند اعمال میکند. - طرح چاپشدهی اقدامات را بررسی کنید. اگر همه چیز مطابق انتظار به نظر میرسد،
yesرا تایپ کنید و برای تأیید اقدامات، Enter را فشار دهید.
تغییرات را اعتبارسنجی کنید
- در کنسول Firebase ، بخش Build را در پنل سمت چپ پیدا کنید.
- روی تأیید هویت کلیک کنید و سپس روی برگه روش ورود کلیک کنید (یا برای رفتن مستقیم به آنجا اینجا کلیک کنید ).
- شما باید گوگل را به عنوان یک ارائه دهنده ورود فعال ببینید.

۷. یک پایگاه داده Firestore و قوانین امنیتی آن را تنظیم کنید
برای برنامه وب این codelab، پیامهای بین کاربران نهایی را در یک پایگاه داده Firestore ذخیره خواهید کرد.
- برای فعال کردن API های مورد نیاز و آماده سازی نمونه پایگاه داده، فایل
main.tfخود را با بلوک های منبع زیر پیوست کنید:
اصلی.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، باشد. برای این codelab، میتوانیدus-east1(کارولینای جنوبی) استفاده کنید یا از منطقهای که به شما نزدیکتر است استفاده کنید (به مکانهای Cloud Firestore مراجعه کنید). - هر نمونه پایگاه داده Firestore که برای Firebase قابل دسترسی است، باید توسط قوانین امنیتی Firebase محافظت شود.
کد نمونه این codelab مجموعهای از قوانین امن Firestore را در فایلfirestore.rulesارائه میدهد که میتوانید آن را در ریشه دایرکتوریwebپیدا کنید. - فایل
main.tfخود را با بلوکهای منبع زیر پیوست کنید تا موارد زیر را انجام دهید:- یک مجموعه قوانین از قوانین امنیتی Firebase را از فایل محلی
firestore.rulesایجاد کنید. - مجموعه قوانین مربوط به نمونه Firestore را منتشر کنید.
firebase deploy --only firestore:rulesانجام میدهند.
اصلی.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 ، بخش Build را در پنل سمت چپ پیدا کنید.
- به بخش پایگاه داده Firestore بروید و سپس روی برگه قوانین کلیک کنید.

۸. یک فضای ذخیرهسازی ابری و قوانین امنیتی آن را تنظیم کنید
برای برنامه وب این codelab، تصاویر به اشتراک گذاشته شده بین کاربران نهایی را در یک فضای ذخیرهسازی ابری ذخیره خواهید کرد.
- برای فعال کردن API های مورد نیاز و ارائه باکت پیشفرض Cloud Storage خود، فایل
main.tfخود را با بلوکهای منبع زیر پیوست کنید.
توجه داشته باشید که فضای ذخیرهسازی ابری پیشفرض برای پروژه شما از طریق Google App Engine تأمین میشود و باید همان مکان پایگاه داده Firestore شما را داشته باشد. برای اطلاعات بیشتر به مکانهای App Engine مراجعه کنید.
اگر میخواهید چندین سطل در پروژه خود داشته باشید، آنها را با استفاده از منبعgoogle_storage_bucket(که در این codelab نشان داده نشده است) فراهم کنید .
اصلی.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 } - هر مخزن ذخیرهسازی ابری که برای فایربیس قابل دسترسی است، باید توسط قوانین امنیتی فایربیس محافظت شود.
کد نمونه این codelab مجموعهای از قوانین امن Firestore را در فایلstorage.rulesارائه میدهد که میتوانید آن را در ریشه دایرکتوریwebپیدا کنید. - فایل
main.tfخود را با بلوکهای منبع زیر پیوست کنید تا موارد زیر را انجام دهید:- یک مجموعه قوانین از قوانین امنیتی Firebase را از فایل محلی ایجاد کنید.
- مجموعه قوانین مربوط به مخزن ذخیرهسازی را منتشر کنید.
firebase deploy --only storageانجام میدهند.
اصلی.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اجرا کنید تا فضای ذخیرهسازی ابری پیشفرض آماده شود و قوانین امنیتی آن اعمال گردد. - تأیید کنید که سطل تأمین شده و قوانین امنیتی آن مستقر شده است:
- در کنسول Firebase ، بخش Build را در پنل سمت چپ پیدا کنید.
- به بخش Storage بروید و سپس روی تب Rules کلیک کنید.

۹. برنامه خود را به صورت محلی اجرا کنید
اکنون آمادهاید تا برای اولین بار برنامه وب خود را اجرا کنید! از شبیهساز Firebase Hosting برای ارائه برنامه خود به صورت محلی استفاده خواهید کرد.
- یک پنجره ترمینال جدید باز کنید و از دایرکتوری
web، دستور Firebase CLI زیر را برای شروع شبیهساز اجرا کنید:firebase emulators:start --project=<PROJECT_ID>
- در مرورگر خود، برنامه وب خود را با آدرس محلی که توسط CLI برگردانده میشود (معمولاً
http://localhost:5000) باز کنید.
شما باید رابط کاربری برنامه FriendlyChat خود را ببینید، که (هنوز!) کار نمیکند. این برنامه هنوز به Firebase متصل نشده است، اما با تکمیل مراحل بعدی این آزمایشگاه کد، متصل خواهد شد!
توجه داشته باشید که هر زمان که تغییراتی در برنامه وب خود ایجاد میکنید (مانند مراحل بعدی این آزمایشگاه کد)، مرورگر خود را رفرش کنید تا URL محلی با آن تغییرات بهروزرسانی شود.
۱۰. نصب، پیکربندی و مقداردهی اولیه فایربیس
برای اینکه یک برنامه با 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اجرا کنید.
برای بقیهی بخش codelab، webpack اکنون به طور مداوم کد منبع شما را بازسازی میکند.
پیکربندی Firebase خود را به برنامه خود اضافه کنید
همچنین باید پیکربندی Firebase خود را به برنامه خود اضافه کنید تا SDK های Firebase بدانند که از کدام پروژه Firebase میخواهید استفاده کنند.
برای این codelab، شما دو گزینه مختلف برای دریافت پیکربندی Firebase خود دارید:
- گزینه ۱ : پیکربندی فایربیس خود را از کنسول فایربیس دریافت کنید.
- گزینه 2 : پیکربندی Firebase خود را از طریق Terraform دریافت کنید.
گزینه ۱: پیکربندی را از کنسول Firebase دریافت کنید و آن را به پایگاه کد خود اضافه کنید
- در کنسول فایربیس، به تنظیمات پروژه خود بروید.
- به پایین اسکرول کنید تا به کارت «برنامههای شما» برسید، و سپس برنامه وب خود را انتخاب کنید.
- از قسمت قطعه کد Firebase SDK، گزینه Config را انتخاب کنید و سپس قطعه کد config را کپی کنید.
- پیکربندی خود را مانند زیر در فایل
web/src/firebase-config.jsبرنامه خود قرار دهید:
پیکربندی فایربیس.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>", }; ...
گزینه ۲: پیکربندی را از طریق Terraform دریافت کنید و آن را به کدبیس خود اضافه کنید
از طرف دیگر، میتوانید پیکربندی Firebase خود را از طریق Terraform به عنوان یک مقدار خروجی در CLI دریافت کنید.
- در فایل
main.tfخود، بلوک منبعgoogle_firebase_web_app(بلوک ثبت یک برنامه وب در پروژه شما) را پیدا کنید. - بلافاصله پس از آن بلوک، بلوکهای زیر را اضافه کنید:
اصلی.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برنامه خود، مانند زیر، جایگذاری کنید:
پیکربندی فایربیس.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، فایل web/src/index.js برنامه خود را با موارد زیر پیوست کنید:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
برنامه خود را امتحان کنید
اکنون که همه چیز برای Firebase پیکربندی شده است، میتوانید برنامه وب کاربردی خود را امتحان کنید.
- مرورگری که برنامه شما را اجرا میکند، رفرش کنید.
- اکنون باید بتوانید با گوگل وارد شوید و شروع به ارسال پیام در چت کنید. اگر فایلهای تصویری دارید، حتی میتوانید آنها را آپلود کنید!
۱۱. پیکربندی خود را در محیطهای مختلف تکرار کنید
Terraform در مدیریت چندین زیرساخت با پیکربندی مشابه (برای مثال، راهاندازی یک پروژه Firebase مرحلهای که مشابه یک پروژه prod است) عالی عمل میکند.
در این آزمایشگاه کد، شما یک پروژه Firebase دوم ایجاد خواهید کرد تا یک محیط مرحلهبندی باشد.
برای تکرار پیکربندی موجود برای ایجاد این پروژه مرحلهبندی، دو گزینه دارید:
- گزینه ۱ : یک کپی از پیکربندی Terraform تهیه کنید.
این گزینه بیشترین انعطافپذیری را در مورد میزان تفاوت پروژه تکثیر شده با پروژه منبع ارائه میدهد. - گزینه ۲ : استفاده مجدد از پیکربندیها با
for_each.
اگر قرار نباشد هر پروژه تفاوت قابل توجهی داشته باشد و بخواهید تغییرات را به طور همزمان در همه پروژهها اعمال کنید، این گزینه امکان استفاده مجدد از کد بیشتری را فراهم میکند.
گزینه ۱: یک کپی از پیکربندی 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را در مخزن گیتهاب این 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 مانند قبل، تأیید کنید که همه چیز طبق انتظار فراهم و فعال شده است.
گزینه ۲: استفاده مجدد از پیکربندیها با for_each
اگر قرار نباشد هر پروژه تفاوت قابل توجهی داشته باشد و بخواهید تغییرات را به طور همزمان در همه پروژهها اعمال کنید، این گزینه امکان استفاده مجدد از کد بیشتری را فراهم میکند. این گزینه از فراآرگومان for_each در زبان Terraform استفاده میکند.
- فایل
main.tfخود را باز کنید. - به هر بلوک منبعی که میخواهید تکثیر کنید، یک متا-آرگومان
for_eachاضافه کنید، مانند این:
اصلی.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استفاده میکند را در مخزن گیتهاب این codelab پیدا کنید:
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را با مقدار دلخواه خود بهروزرسانی کنید. - In the
google_firestore_databaseandgoogle_app_engine_applicationresource blocks, update thelocation_idattributes with your own value.
- در بلوک منبع
- پیکربندی را از
- Instead of applying this config right away, it's important to understand and fix a few things about how Terraform interprets this config compared to the existing infrastructure.
- Right now, if you applied this config that uses
for_each, the resource addresses would look like the following: However, the existing project you created in the first part of this codelab is known to Terraform as the following: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 - Run
terraform planto see what actions Terraform would take given the current state.
The output should show that Terraform would delete the project you created in the first part of this codelab and create two new projects. This is because Terraform doesn't know that the project at the addressgoogle_project.defaulthas been moved to the new addressgoogle_project.default["prod"]. - To fix this, run the
terraform state mvcommand:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- Similarly, to fix all the other resource blocks, run
terraform state mvforgoogle_firebase_project,google_firebase_web_app, and all the other resource blocks in yourmain.tffile. - Now, if you run
terraform planagain, it shouldn't show that Terraform would delete the project you created in the first part of this codelab.
- Right now, if you applied this config that uses
- Run
terraform applyto provision your new "staging" Firebase project and all its resources and enable its services. - Verify that everything was provisioned and enabled as expected by checking them in the Firebase console as before.
12. Bonus step: Deploy your staging and prod apps
- In your app's codebase, change the
firebase-config.jsto use the Firebase config from your staging project instead.
To remind yourself how to get your Firebase config and add it to your app, see the earlier step of this codelab, Add your Firebase configuration to your app. - At the root of your
webdirectory, run the following command to deploy your app to your staging Firebase project.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
- Open your staging app in the browser via the URL that's printed in the output of
firebase deploy. Try signing in, sending messages, and uploading images.
When you deploy an app to a Firebase project, it uses real Firebase resources, not emulated resources. As you interact with your staging app, you should see data and images appear in your staging project in the Firebase console. - After testing your app in staging, change the
firebase-config.jsback to using the prod project's Firebase config (the first project that you created in this codelab). - At the root of your
webdirectory, run the following command to deploy your app to your production Firebase project.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- Open your production app in the browser via the URL that's printed in the output of
firebase deploy. Try signing in, sending messages, and uploading images.
You should see data and images appear in your production project in the Firebase console. - When you're finished interacting with the two apps for this codelab, you can stop Firebase from serving them. Run the following command for each of your projects:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
۱۳. تبریک میگویم!
You've used Terraform to configure a real-time chat web application! And you've followed best practices for development environments by creating separate Firebase projects for staging and prod.
آنچه ما پوشش دادهایم
- Using the Terraform CLI to manage cloud resources
- Using Terraform to configure Firebase products (Authentication, Firestore, Cloud Storage, and Security Rules)
- Running and testing a web app locally using the Firebase Local Emulator Suite
- Importing Firebase into a web app
- Using Terraform to replicate a configuration across multiple environments
For more information about Firebase and Terraform, visit our documentation . You can find a list of all Firebase products with Terraform support, sample Terraform configurations for common use cases, and helpful troubleshooting and FAQ.