Firebase Terraform সমর্থন করতে শুরু করেছে। আপনি যদি এমন একটি দলে থাকেন যা নির্দিষ্ট সংস্থান এবং পরিষেবাগুলি সক্ষম করে Firebase প্রকল্পগুলিকে স্বয়ংক্রিয় এবং মানসম্মত করতে চায়, তাহলে Firebase-এর সাথে Terraform ব্যবহার করা আপনার জন্য উপযুক্ত হতে পারে।
Firebase-এর সাথে Terraform ব্যবহার করার জন্য মৌলিক কর্মপ্রবাহের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
একটি Terraform কনফিগারেশন ফাইল (একটি
.tf
ফাইল) তৈরি এবং কাস্টমাইজ করা যা আপনি যে পরিকাঠামোর ব্যবস্থা করতে চান তা নির্দিষ্ট করে (অর্থাৎ, আপনি যে সংস্থানগুলি সরবরাহ করতে চান এবং যে পরিষেবাগুলি আপনি সক্ষম করতে চান)।gcloud CLI কমান্ডগুলি ব্যবহার করে যা Terraform-এর সাথে ইন্টারফেস করে
.tf
ফাইলে নির্দিষ্ট পরিকাঠামোর ব্যবস্থা করতে।
আপনি Terraform এবং Firebase দিয়ে কি করতে পারেন?
এই নির্দেশিকায় সাধারণীকৃত কর্মপ্রবাহের উদাহরণ হল একটি Android অ্যাপ সহ একটি নতুন ফায়ারবেস প্রকল্প তৈরি করা। কিন্তু আপনি Terraform এর সাথে আরও অনেক কিছু করতে পারেন, যেমন:
টেরাফর্ম ব্যবহার করে বিদ্যমান পরিকাঠামো মুছুন এবং সংশোধন করুন।
টেরাফর্ম ব্যবহার করে পণ্য-নির্দিষ্ট কনফিগারেশন এবং কাজগুলি পরিচালনা করুন, যেমন:
- Firebase Authentication সাইন-ইন প্রদানকারী সক্রিয় করা হচ্ছে।
- Cloud Storage বালতি বা ডাটাবেস দৃষ্টান্ত তৈরি করা এবং তাদের জন্য Firebase Security Rules স্থাপন করা।
আপনি এই সমস্ত কাজগুলি সম্পন্ন করতে স্ট্যান্ডার্ড Terraform কনফিগারেশন ফাইল এবং কমান্ড ব্যবহার করতে পারেন। এবং এটিতে আপনাকে সাহায্য করার জন্য, আমরা বেশ কয়েকটি সাধারণ ব্যবহারের ক্ষেত্রে নমুনা Terraform কনফিগারেশন ফাইল সরবরাহ করেছি।
Firebase এর সাথে Terraform ব্যবহার করার জন্য সাধারণ কর্মপ্রবাহ
পূর্বশর্ত
এই নির্দেশিকাটি Firebase-এর সাথে Terraform ব্যবহার করার একটি ভূমিকা, তাই এটি Terraform-এর সাথে মৌলিক দক্ষতা অনুমান করে। এই ওয়ার্কফ্লো শুরু করার আগে আপনি নিম্নলিখিত পূর্বশর্তগুলি সম্পূর্ণ করেছেন তা নিশ্চিত করুন৷
Terraform ইনস্টল করুন এবং তাদের অফিসিয়াল টিউটোরিয়াল ব্যবহার করে Terraform এর সাথে নিজেকে পরিচিত করুন।
Google Cloud CLI ( gcloud CLI ) ইনস্টল করুন। একটি ব্যবহারকারী অ্যাকাউন্ট বা একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে লগইন করুন৷
- ব্যবহারকারীর অ্যাকাউন্ট ব্যবহার করলে, আপনি অবশ্যই Firebase পরিষেবার শর্তাবলী (Firebase ToS) স্বীকার করেছেন। আপনি Firebase ToS স্বীকার করেছেন যদি আপনি Firebase কনসোলে একটি Firebase প্রকল্প দেখতে পারেন
- টেরাফর্মের জন্য নির্দিষ্ট কিছু পদক্ষেপ নেওয়ার জন্য (উদাহরণস্বরূপ, প্রকল্পগুলি তৈরি করুন), নিম্নলিখিতগুলি অবশ্যই সত্য হতে হবে:
- ব্যবহারকারী বা পরিষেবা অ্যাকাউন্টের অবশ্যই সেই ক্রিয়াগুলির জন্য প্রযোজ্য IAM অ্যাক্সেস থাকতে হবে।
- যদি ব্যবহারকারী বা পরিষেবার অ্যাকাউন্ট Google Cloud সংস্থার অংশ হয়, তাহলে সংস্থার নীতিগুলি অ্যাকাউন্টটিকে সেই পদক্ষেপগুলি নেওয়ার অনুমতি দিতে হবে৷
ধাপ 1: একটি Terraform কনফিগারেশন ফাইল তৈরি এবং কাস্টমাইজ করুন
একটি Terraform কনফিগারেশন ফাইলের দুটি প্রধান বিভাগ প্রয়োজন (যা নীচে বিশদে বর্ণনা করা হয়েছে):
- একটি
provider
সেটআপ বিভাগ যা নির্দেশ করে যে কোন Terraform সংস্থানগুলি অ্যাক্সেস করা যেতে পারে - পৃথক
resource
ব্লকের একটি বিভাগ যা নির্দিষ্ট করে দেয় কোন পরিকাঠামো তৈরি করতে হবে
আপনার provider
সেট আপ করুন
Firebase পণ্য বা পরিষেবাগুলি যেই জড়িত থাকুক না কেন একটি provider
সেটআপ প্রয়োজন৷
আপনার স্থানীয় ডিরেক্টরিতে একটি Terraform কনফিগার ফাইল (যেমন
main.tf
ফাইল) তৈরি করুন।এই নির্দেশিকায়, আপনি এই কনফিগারেশন ফাইলটি উভয়
provider
সেটআপ এবং সমস্ত অবকাঠামো নির্দিষ্ট করতে ব্যবহার করবেন যা আপনি Terraform তৈরি করতে চান। নোট করুন, যদিও, আপনার কাছে কীভাবে প্রদানকারী সেটআপ অন্তর্ভুক্ত করবেন তার বিকল্প রয়েছে।আপনার Terraform কনফিগারেশনের বাকি অংশে একটি
provider
সেটআপ কীভাবে অন্তর্ভুক্ত করবেন তার জন্য আপনার কাছে নিম্নলিখিত বিকল্প রয়েছে:বিকল্প 1: এটিকে একটি একক Terraform
.tf
কনফিগারেশন ফাইলের শীর্ষে অন্তর্ভুক্ত করুন (যেমন এই নির্দেশিকায় দেখানো হয়েছে)।- এই বিকল্পটি ব্যবহার করুন যদি আপনি সবেমাত্র Terraform দিয়ে শুরু করছেন বা Firebase-এর সাথে Terraform ব্যবহার করে দেখুন।
বিকল্প 2: এটিকে একটি পৃথক
.tf
ফাইলে অন্তর্ভুক্ত করুন (যেমন একটিprovider.tf
ফাইল),.tf
ফাইলটি ছাড়াও যেখানে আপনি তৈরি করার জন্য পরিকাঠামো নির্দিষ্ট করেছেন (যেমন একটিmain.tf
ফাইল)।- এই বিকল্পটি ব্যবহার করুন যদি আপনি একটি বড় দলের অংশ হন যার সেটআপকে মানসম্মত করতে হবে।
- Terraform কমান্ড চালানোর সময়,
provider.tf
ফাইল এবংmain.tf
ফাইল উভয়ই একই ডিরেক্টরিতে থাকতে হবে।
main.tf
ফাইলের শীর্ষে নিম্নলিখিতprovider
সেটআপটি অন্তর্ভুক্ত করুন।আপনাকে অবশ্যই
google-beta
প্রদানকারী ব্যবহার করতে হবে কারণ এটি Terraform এর সাথে Firebase ব্যবহার করার একটি বিটা রিলিজ। উত্পাদনে ব্যবহার করার সময় সতর্কতা অবলম্বন করুন।# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 5.0" } } } # Configures the provider to use the resource block's specified project for quota checks. provider "google-beta" { user_project_override = true } # Configures the provider to not use the resource block's specified project for quota checks. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false }
Firebase-এর সাথে Terraform ব্যবহার করার সময় বিভিন্ন ধরনের প্রকল্প-সম্পর্কিত বৈশিষ্ট্য (এই নির্দেশিকাটিকে "কোটা-চেক প্রকল্প" বলা হয়) সহ) সম্পর্কে আরও জানুন।
আপনার কনফিগার ফাইলটি সম্পূর্ণ করতে পরবর্তী বিভাগে চালিয়ে যান এবং কোন পরিকাঠামো তৈরি করতে হবে তা নির্দিষ্ট করুন।
resource
ব্লক ব্যবহার করে কোন পরিকাঠামো তৈরি করতে হবে তা উল্লেখ করুন
আপনার Terraform কনফিগারেশন ফাইলে (এই নির্দেশিকাটির জন্য, আপনার main.tf
ফাইল), আপনাকে টেরাফর্ম তৈরি করতে চান এমন সমস্ত অবকাঠামো নির্দিষ্ট করতে হবে (অর্থাৎ আপনি যে সমস্ত সংস্থানগুলি সরবরাহ করতে চান এবং আপনি যে সমস্ত পরিষেবা সক্ষম করতে চান)। এই নির্দেশিকাটিতে, সমস্ত Firebase সংস্থানগুলির একটি সম্পূর্ণ তালিকা খুঁজুন যা Terraform সমর্থন করে ।
আপনার
main.tf
ফাইল খুলুন।provider
সেটআপের অধীনে,resource
ব্লকের নিম্নলিখিত কনফিগারেশন অন্তর্ভুক্ত করুন।এই মৌলিক উদাহরণটি একটি নতুন Firebase প্রকল্প তৈরি করে এবং তারপর সেই প্রকল্পের মধ্যে একটি Firebase Android অ্যাপ তৈরি করে।
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "Project Display Name" project_id = "project-id-for-new-project" # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "default" { provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "default" { provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" package_name = "awesome.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
আপনি যদি সম্পদ হিসাবে প্রকল্প এবং অ্যাপ্লিকেশনগুলির পরিকাঠামোর সাথে পরিচিত না হন তবে নিম্নলিখিত ডকুমেন্টেশনগুলি পর্যালোচনা করুন:
- ফায়ারবেস প্রকল্পগুলি বুঝুন
- ফায়ারবেস প্রকল্প পরিচালনার জন্য রেফারেন্স ডকুমেন্টেশন
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { # Use the provider that enables the setup of quota checks for a new project provider = google-beta.no_user_project_override name = "Project Display Name" // learn more about the project name project_id = "project-id-for-new-project" // learn more about the project ID # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" // learn more about the Firebase-enabled label } } # Enables required APIs. resource "google_project_service" "default" { # Use the provider without quota checks for enabling APIS provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. # This action essentially "creates a Firebase project" and allows the project to use # Firebase services (like Firebase Authentication) and # Firebase tooling (like the Firebase console). # Learn more about the relationship between Firebase projects and Google Cloud. resource "google_firebase_project" "default" { # Use the provider that performs quota checks from now on provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. # Learn more about the relationship between Firebase Apps and Firebase projects. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" # learn more about an app's display name package_name = "awesome.package.name" # learn more about an app's package name # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
ধাপ 2: নির্দিষ্ট পরিকাঠামো তৈরি করতে Terraform কমান্ড চালান
সম্পদের ব্যবস্থা করতে এবং আপনার main.tf
ফাইলে নির্দিষ্ট করা পরিষেবাগুলি সক্রিয় করতে, আপনার main.tf
ফাইলের মতো একই ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডগুলি চালান। এই কমান্ড সম্পর্কে বিস্তারিত তথ্যের জন্য, Terraform ডকুমেন্টেশন দেখুন।
যদি এই প্রথমবার হয় যে আপনি ডিরেক্টরিতে Terraform কমান্ডগুলি চালাচ্ছেন, তাহলে আপনাকে কনফিগারেশন ডিরেক্টরি শুরু করতে হবে এবং Google Terraform প্রদানকারী ইনস্টল করতে হবে। নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে এটি করুন:
terraform init
নিম্নলিখিত কমান্ডটি চালিয়ে আপনার
main.tf
ফাইলে নির্দিষ্ট পরিকাঠামো তৈরি করুন:terraform apply
নিশ্চিত করুন যে সবকিছু প্রত্যাশিত হিসাবে প্রবিধান বা সক্ষম করা হয়েছে:
বিকল্প 1: নিম্নলিখিত কমান্ডটি চালিয়ে আপনার টার্মিনালে মুদ্রিত কনফিগারেশন দেখুন:
terraform show
বিকল্প 2: Firebase কনসোলে আপনার Firebase প্রকল্প দেখুন।
Terraform সমর্থন সহ Firebase সম্পদ
নিম্নলিখিত ফায়ারবেস এবং Google সংস্থানগুলিতে Terraform সমর্থন রয়েছে৷ এবং আমরা সব সময় আরো সম্পদ যোগ করছি! সুতরাং আপনি যদি Terraform এর সাথে যে সংস্থানটি পরিচালনা করতে চান তা দেখতে না পান, তাহলে এটি উপলব্ধ কিনা তা দেখতে শীঘ্রই ফিরে দেখুন বা GitHub রেপোতে একটি সমস্যা ফাইল করে এটির অনুরোধ করুন।
ফায়ারবেস প্রকল্প এবং অ্যাপ পরিচালনা
google_firebase_project
— একটি বিদ্যমান Google Cloud প্রকল্পে Firebase পরিষেবাগুলি সক্ষম করুন৷ফায়ারবেস অ্যাপস
-
google_firebase_apple_app
— একটি Firebase Apple প্ল্যাটফর্ম অ্যাপ তৈরি বা পরিচালনা করুন -
google_firebase_android_app
— একটি Firebase Android অ্যাপ তৈরি বা পরিচালনা করুন -
google_firebase_web_app
— একটি Firebase ওয়েব অ্যাপ তৈরি বা পরিচালনা করুন
-
Firebase Authentication
google_identity_platform_config
— Google Cloud Identity Platform (GCIP) সক্ষম করুন (যা Firebase Authentication জন্য ব্যাকএন্ড) এবং প্রকল্প-স্তরের প্রমাণীকরণ সেটিংস প্রদান করেTerraform এর মাধ্যমে Firebase Authentication কনফিগার করার জন্য GCIP সক্ষম করা প্রয়োজন। কিভাবে Firebase Authentication সেট আপ করতে হয় তার জন্য নমুনা
.tf
ফাইলটি পর্যালোচনা করতে ভুলবেন না।যে প্রজেক্টে Terraform GCIP এবং/অথবা Firebase Authentication সক্ষম করবে তা অবশ্যই Blaze প্রাইসিং প্ল্যানে থাকতে হবে (অর্থাৎ, প্রজেক্টের একটি সংশ্লিষ্ট Cloud Billing অ্যাকাউন্ট থাকতে হবে)। আপনি
google_project
রিসোর্সেbilling_account
অ্যাট্রিবিউট সেট করে প্রোগ্রাম্যাটিকভাবে এটি করতে পারেন।এই সংস্থানটি আরও কনফিগারেশন সক্ষম করে, যেমন স্থানীয় সাইন-ইন পদ্ধতি, যেমন বেনামী, ইমেল/পাসওয়ার্ড এবং ফোন প্রমাণীকরণ, সেইসাথে ব্লকিং ফাংশন এবং অনুমোদিত ডোমেন।
google_identity_platform_default_supported_idp_config
— Google, Facebook বা Apple এর মত সাধারণ ফেডারেটেড আইডেন্টিটি প্রোভাইডার কনফিগার করুনidentity_platform_oauth_idp_config
— নির্বিচারে OAuth আইডেন্টিটি প্রোভাইডার (আইডিপি) উত্স কনফিগার করুনgoogle_identity_platform_inbound_saml_config
— SAML ইন্টিগ্রেশন কনফিগার করুন
এখনও সমর্থিত নয়:
- Terraform এর মাধ্যমে মাল্টি-ফ্যাক্টর প্রমাণীকরণ (MFA) কনফিগার করা হচ্ছে
Firebase Realtime Database
-
google_firebase_database_instance
— একটি Realtime Database ইনস্ট্যান্স তৈরি করুন
এখনও সমর্থিত নয়:
- টেরাফর্মের মাধ্যমে Firebase Realtime Database Security Rules স্থাপন করা (প্রোগ্রাম্যাটিক বিকল্পগুলি সহ অন্যান্য টুলিং ব্যবহার করে এই Rules কীভাবে স্থাপন করতে হয় তা শিখুন)
Cloud Firestore
google_firestore_database
— একটি Cloud Firestore ইনস্ট্যান্স তৈরি করুনgoogle_firestore_index
— Cloud Firestore জন্য দক্ষ কোয়েরি সক্ষম করুনgoogle_firestore_document
— একটি সংগ্রহে একটি নির্দিষ্ট নথির সাথে একটি Cloud Firestore উদাহরণ তৈরি করুনগুরুত্বপূর্ণ: এই বীজ নথিতে প্রকৃত ব্যবহারকারী বা উৎপাদন ডেটা ব্যবহার করবেন না।
Cloud Storage for Firebase
google_firebase_storage_bucket
— একটি বিদ্যমান Cloud Storage বালতি ফায়ারবেস SDK, প্রমাণীকরণ এবং Firebase Security Rules জন্য অ্যাক্সেসযোগ্য করুন- একটি Firebase প্রকল্পের জন্য একটি ডিফল্ট Cloud Storage বালতি সেট আপ করার জন্য প্রথমে
google_app_engine_application
ব্যবস্থা করা প্রয়োজন। Cloud Storage বালতি কীভাবে প্রভিশন করতে হয় তার জন্য নমুনা.tf
ফাইলটি পর্যালোচনা করতে ভুলবেন না।
- একটি Firebase প্রকল্পের জন্য একটি ডিফল্ট Cloud Storage বালতি সেট আপ করার জন্য প্রথমে
google_storage_bucket_object
— একটি Cloud Storage বালতিতে একটি বস্তু যোগ করুনগুরুত্বপূর্ণ: এই ফাইলে প্রকৃত ব্যবহারকারী বা উৎপাদন ডেটা ব্যবহার করবেন না।
Firebase Security Rules ( Cloud Firestore এবং Cloud Storage জন্য)
মনে রাখবেন যে Firebase Realtime Database তার Firebase Security Rules জন্য একটি ভিন্ন বিধান ব্যবস্থা ব্যবহার করে।
google_firebaserules_ruleset
— Firebase Security Rules সংজ্ঞায়িত করুন যা একটি Cloud Firestore ইনস্ট্যান্স বা একটি Cloud Storage বালতিতে প্রযোজ্যgoogle_firebaserules_release
— একটি Cloud Firestore ইনস্ট্যান্স বা একটি Cloud Storage বালতিতে নির্দিষ্ট নিয়ম সেটগুলি স্থাপন করুন
Firebase App Check
-
google_firebase_app_check_service_config
— একটি পরিষেবার জন্য App Check এনফোর্সমেন্ট সক্ষম করুন -
google_firebase_app_check_app_attest_config
— অ্যাপ অ্যাটেস্ট প্রদানকারীর সাথে একটি Apple প্ল্যাটফর্ম অ্যাপ নিবন্ধন করুন -
google_firebase_app_check_device_check_config
— DeviceCheck প্রদানকারীর সাথে একটি Apple প্ল্যাটফর্ম অ্যাপ নিবন্ধন করুন -
google_firebase_app_check_play_integrity_config
— Play Integrity প্রদানকারীর সাথে একটি Android অ্যাপ নিবন্ধন করুন -
google_firebase_app_check_recaptcha_enterprise_config
— reCAPTCHA এন্টারপ্রাইজ প্রদানকারীর সাথে একটি ওয়েব অ্যাপ নিবন্ধন করুন -
google_firebase_app_check_recaptcha_v3_config
— reCAPTCHA v3 প্রদানকারীর সাথে একটি ওয়েব অ্যাপ নিবন্ধন করুন -
google_firebase_app_check_debug_token
— পরীক্ষার জন্য ডিবাগ টোকেন ব্যবহার করুন
Firebase Extensions
-
google_firebase_extensions_instance
— Firebase Extension একটি ইন্সট্যান্স ইনস্টল বা আপডেট করুন
সাধারণ ব্যবহারের ক্ষেত্রে নমুনা Terraform কনফিগারেশন ফাইল
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, একটি Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটিকে সংযুক্ত করে (GCIP এর সাথে Firebase Authentication জন্য Blaze মূল্য পরিকল্পনা প্রয়োজন), প্রকল্পের জন্য Firebase পরিষেবাগুলি সক্ষম করে, GCIP এর সাথে Firebase Authentication সেট আপ করে এবং তিনটি ভিন্ন অ্যাপ নিবন্ধন করে প্রকল্পের সাথে প্রকার।
মনে রাখবেন যে টেরাফর্মের মাধ্যমে Firebase Authentication সেট আপ করতে GCIP সক্ষম করা প্রয়োজন।
# Creates a new Google Cloud project. resource "google_project" "auth" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "auth" { provider = google-beta.no_user_project_override project = google_project.auth.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "identitytoolkit.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "auth" { provider = google-beta project = google_project.auth.project_id depends_on = [ google_project_service.auth, ] } # Creates an Identity Platform config. # Also enables Firebase Authentication with Identity Platform in the project if not. resource "google_identity_platform_config" "auth" { provider = google-beta project = google_project.auth.project_id # Auto-deletes anonymous users autodelete_anonymous_users = true # Configures local sign-in methods, like anonymous, email/password, and phone authentication. sign_in { allow_duplicate_emails = true anonymous { enabled = true } email { enabled = true password_required = false } phone_number { enabled = true test_phone_numbers = { "+11231231234" = "000000" } } } # Sets an SMS region policy. sms_region_config { allowlist_only { allowed_regions = [ "US", "CA", ] } } # Configures blocking functions. blocking_functions { triggers { event_type = "beforeSignIn" function_uri = "https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in" } forward_inbound_credentials { refresh_token = true access_token = true id_token = true } } # Configures a temporary quota for new signups for anonymous, email/password, and phone number. quota { sign_up_quota_config { quota = 1000 start_time = "" quota_duration = "7200s" } } # Configures authorized domains. authorized_domains = [ "localhost", "${google_project.auth.project_id}.firebaseapp.com", "${google_project.auth.project_id}.web.app", ] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলিকে সক্ষম করে, প্রকল্পের ডিফল্ট Realtime Database উদাহরণের বিধান করে এবং প্রকল্পের সাথে তিনটি ভিন্ন ধরনের অ্যাপ নিবন্ধন করে৷
# Creates a new Google Cloud project. resource "google_project" "rtdb" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb" { provider = google-beta.no_user_project_override project = google_project.rtdb.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb" { provider = google-beta project = google_project.rtdb.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database" { provider = google-beta project = google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, একটি Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটিকে সংযুক্ত করে (একাধিক Realtime Database দৃষ্টান্তের জন্য ব্লেজ মূল্য পরিকল্পনা প্রয়োজন), প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, একাধিক Realtime Database উদাহরণের (প্রজেক্টের ডিফল্ট Realtime Database সহ) ব্যবস্থা করে উদাহরণ), এবং প্রকল্পের সাথে তিনটি ভিন্ন অ্যাপের প্রকার নিবন্ধন করে।
# Creates a new Google Cloud project. resource "google_project" "rtdb-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb-multi" { provider = google-beta.no_user_project_override project = google_project.rtdb-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database-default" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb-multi.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Provisions an additional Realtime Database instance. resource "google_firebase_database_instance" "database-additional" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance. region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "name-of-additional-database-instance" type = "USER_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, প্রকল্পের ডিফল্ট Cloud Firestore দৃষ্টান্তের বিধান করে এবং প্রকল্পের সাথে তিনটি ভিন্ন অ্যাপের প্রকার নিবন্ধন করে৷
এটি ডিফল্ট Cloud Firestore দৃষ্টান্তের জন্য Firebase Security Rules বিধান করে, একটি Cloud Firestore সূচক তৈরি করে এবং বীজ ডেটা সহ একটি Cloud Firestore নথি যোগ করে।
# Creates a new Google Cloud project. resource "google_project" "firestore" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "firestore" { provider = google-beta.no_user_project_override project = google_project.firestore.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "firestore" { provider = google-beta project = google_project.firestore.project_id } # Provisions the Firestore database instance. resource "google_firestore_database" "firestore" { provider = google-beta project = google_project.firestore.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.firestore, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_project.firestore.project_id 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.firestore, ] } # Releases 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_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore index. resource "google_firestore_index" "indexes" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" query_scope = "COLLECTION" fields { field_path = "question" order = "ASCENDING" } fields { field_path = "answer" order = "ASCENDING" } # Wait for Firestore to be provisioned before adding this index. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore document with seed data. # Don't use real end-user or production data in this seed document. resource "google_firestore_document" "doc" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" document_id = "question-1" fields = "{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document. depends_on = [ google_firestore_database.firestore, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] }
এটি হল Cloud Firestore Security Rules নিয়ম যা firestore.rules
নামে একটি স্থানীয় ফাইলে থাকা উচিত।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, প্রকল্পের ডিফল্ট Cloud Storage বাকেটের বিধান করে এবং প্রকল্পের সাথে তিনটি ভিন্ন ধরনের অ্যাপ নিবন্ধন করে৷
এটি Cloud Storage বাকেটের জন্য Firebase Security Rules ব্যবস্থা করে এবং বালতিতে একটি ফাইল আপলোড করে।
# Creates a new Google Cloud project. resource "google_project" "storage" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage" { provider = google-beta.no_user_project_override project = google_project.storage.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage" { provider = google-beta project = google_project.storage.project_id } # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_project.storage.project_id # 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-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Makes 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_project.storage.project_id bucket_id = google_app_engine_application.default.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_project.storage.project_id 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_project.storage, ] } # Releases 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_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_project.storage.project_id } # Uploads a new file to the default Storage bucket. # Don't use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] }
এটি হল Cloud Storage Security Rules রুলসেট যা storage.rules
নামে একটি স্থানীয় ফাইলে থাকা উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, একটি Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটিকে সংযুক্ত করে (একাধিক বালতির জন্য ব্লেজ মূল্য পরিকল্পনা প্রয়োজন), প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, একাধিক Cloud Storage বালতি (প্রকল্পের ডিফল্ট Cloud Storage বালতি সহ) বিধান করে , এবং প্রকল্পের সাথে তিনটি ভিন্ন ধরনের অ্যাপ নিবন্ধন করে।
এটি Cloud Storage বালতিগুলির জন্য Firebase Security Rules সরবরাহ করে এবং ডিফল্ট Cloud Storage বালতিতে একটি ফাইল আপলোড করে৷
# Creates a new Google Cloud project. resource "google_project" "storage-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage-multi" { provider = google-beta.no_user_project_override project = google_project.storage-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id } # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-multi" { provider = google-beta project = google_project.storage-multi.project_id # 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-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Provisions an additional Cloud Storage bucket. # Additional Cloud Storage buckets are not provisioned via App Engine. resource "google_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id name = "name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the default Storage bucket. location = "name-of-region-for-additional-bucket" } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_app_engine_application.default-multi.default_bucket } # Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_storage_bucket.bucket-multi.name } # Creates a ruleset of Firebase Security Rules from a local file. resource "google_firebaserules_ruleset" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id 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 Storage buckets to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.storage-multi, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-multi" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-multi.default_bucket}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Releases the ruleset to the additional Storage bucket. resource "google_firebaserules_release" "bucket-multi" { provider = google-beta name = "firebase.storage/${google_storage_bucket.bucket-multi.name}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Uploads a new file to the default Storage bucket. # Do not use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture-multi" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default-multi.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] }
এটি হল Cloud Storage Security Rules রুলসেট যা storage.rules
নামে একটি স্থানীয় ফাইলে থাকা উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য Firebase পরিষেবাগুলিকে সক্ষম করে, ডিফল্ট Cloud Firestore দৃষ্টান্তের বিধান করে এবং তারপরে ডিফল্ট Cloud Storage বাকেটের ব্যবস্থা করে৷
এটি ডিফল্ট Cloud Firestore ইনস্ট্যান্স এবং ডিফল্ট Cloud Storage বাকেটের জন্য Firebase Security Rules ব্যবস্থা করে।
# Creates a new Google Cloud project. resource "google_project" "fs" { # fs = Firestore + Storage provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "fs" { provider = google-beta.no_user_project_override project = google_project.fs.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "firebasestorage.googleapis.com", "storage.googleapis.com", "firestore.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "fs" { provider = google-beta project = google_project.fs.project_id } #### Set up Firestore before default Cloud Storage bucket #### # Provisions the Firestore database instance. resource "google_firestore_database" "firestore-fs" { provider = google-beta project = google_project.fs.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.fs, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore-fs" { provider = google-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started name = "firestore.rules" content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.firestore-fs ] } # Releases the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore-fs" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore-fs.name project = google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore-fs, ] } #### Set up default Cloud Storage default bucket after Firestore #### # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id # 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-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase). depends_on = [ google_firestore_database.firestore-fs, ] } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id bucket_id = google_app_engine_application.default-bucket-fs.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id 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 Cloud Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.fs, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-fs" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}" ruleset_name = "projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}" project = google_project.fs.project_id }
এটি হল Cloud Firestore Security Rules নিয়ম যা firestore.rules
নামে একটি স্থানীয় ফাইলে থাকা উচিত।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
এটি হল Cloud Storage Security Rules রুলসেট যা storage.rules
নামে একটি স্থানীয় ফাইলে থাকা উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য Firebase পরিষেবাগুলিকে সক্ষম করে এবং Cloud Firestore জন্য Firebase App Check প্রয়োগ সেট আপ এবং সক্ষম করে যাতে এটি শুধুমাত্র আপনার Android অ্যাপ থেকে অ্যাক্সেস করা যায়৷
# Creates a new Google Cloud project. resource "google_project" "appcheck" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "services" { provider = google-beta.no_user_project_override project = google_project.appcheck.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", "firebaseappcheck.googleapis.com", "firestore.googleapis.com", "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created earlier. resource "google_firebase_project" "appcheck" { provider = google-beta project = google_project.appcheck.project_id depends_on = [google_project_service.services] } # Provisions the Firestore database instance. resource "google_firestore_database" "database" { provider = google-beta project = google_firebase_project.appcheck.project name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.appcheck, ] } # Creates a Firebase Android App in the new project created earlier. resource "google_firebase_android_app" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project display_name = "Play Integrity app" package_name = "package.name.playintegrity" sha256_hashes = [ # TODO: insert your Android app's SHA256 certificate ] } # It takes a while for App Check to recognize the new app # If your app already exists, you don't have to wait 30 seconds. resource "time_sleep" "wait_30s" { depends_on = [google_firebase_android_app.appcheck] create_duration = "30s" } # Register the Android app with the Play Integrity provider resource "google_firebase_app_check_play_integrity_config" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project app_id = google_firebase_android_app.appcheck.app_id depends_on = [time_sleep.wait_30s, google_firestore_database.database] lifecycle { precondition { condition = length(google_firebase_android_app.appcheck.sha256_hashes) > 0 error_message = "Provide a SHA-256 certificate on the Android App to use App Check" } } } # Enable enforcement of App Check for Firestore resource "google_firebase_app_check_service_config" "firestore" { provider = google-beta project = google_firebase_project.appcheck.project service_id = "firestore.googleapis.com" depends_on = [google_project_service.services] }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য Firebase পরিষেবাগুলি সক্ষম করে এবং প্রকল্পে একটি Firebase Extension একটি নতুন উদাহরণ ইনস্টল করে৷ দৃষ্টান্তটি ইতিমধ্যেই বিদ্যমান থাকলে, কনফিগারে প্রদত্ত মানগুলির উপর ভিত্তি করে এর পরামিতিগুলি আপডেট করা হয়।
# Creates a new Google Cloud project. resource "google_project" "extensions" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "extensions" { provider = google-beta.no_user_project_override project = google_project.extensions.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "firebase.googleapis.com", "firebaseextensions.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "extensions" { provider = google-beta project = google_project.extensions.project_id depends_on = [ google_project_service.extensions, ] } # Installs an instance of the "Translate Text in Firestore" extension. # Or updates the extension if the specified instance already exists. resource "google_firebase_extensions_instance" "translation" { provider = google-beta project = google_project.extensions.project_id instance_id = "translate-text-in-firestore" config { extension_ref = "firebase/firestore-translate-text" params = { COLLECTION_PATH = "posts/comments/translations" DO_BACKFILL = true LANGUAGES = "ar,en,es,de,fr" INPUT_FIELD_NAME = "input" LANGUAGES_FIELD_NAME = "languages" OUTPUT_FIELD_NAME = "translated" } system_params = { "firebaseextensions.v1beta.function/location" = "us-central1" "firebaseextensions.v1beta.function/memory" = "256" "firebaseextensions.v1beta.function/minInstances" = "0" "firebaseextensions.v1beta.function/vpcConnectorEgressSettings" = "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED" } } }
সমস্যা সমাধান এবং FAQ
এই নির্দেশিকাটি "প্রকল্প" এর সাথে কাজ করার সময় নিম্নলিখিত Terraform বৈশিষ্ট্যগুলি ব্যবহার করে।
- একটি
resource
ব্লকের মধ্যেproject
প্রস্তাবিত: যখনই সম্ভব, প্রতিটি
resource
ব্লকের মধ্যেproject
বৈশিষ্ট্য অন্তর্ভুক্ত করুনএকটি প্রকল্প বৈশিষ্ট্য অন্তর্ভুক্ত করে, Terraform নির্দিষ্ট প্রকল্পের মধ্যে রিসোর্স ব্লকে নির্দিষ্ট পরিকাঠামো তৈরি করবে। এই গাইড এবং আমাদের নমুনা কনফিগার ফাইলগুলি এই অনুশীলনটি ব্যবহার করে।
project
সম্পর্কে অফিসিয়াল Terraform ডকুমেন্টেশন দেখুন.-
provider
ব্লকের মধ্যেuser_project_override
বেশিরভাগ সম্পদের ব্যবস্থা করার জন্য, আপনাকে
user_project_override = true
ব্যবহার করতে হবে, যার অর্থ আপনার নিজের ফায়ারবেস প্রকল্পের বিপরীতে কোটা পরীক্ষা করা। যাইহোক, আপনার নতুন প্রকল্প সেট আপ করতে যাতে এটি কোটা চেক গ্রহণ করতে পারে, আপনাকে প্রথমেuser_project_override = false
ব্যবহার করতে হবে।user_project_override
সম্পর্কে অফিসিয়াল Terraform ডকুমেন্টেশন দেখুন।
নিশ্চিত করুন যে আপনি যে ব্যবহারকারীর অ্যাকাউন্টটি gcloud CLI কমান্ডগুলি চালানোর জন্য ব্যবহার করছেন সেটি Firebase পরিষেবার শর্তাবলী (Firebase ToS) স্বীকার করেছে৷
আপনি ব্যবহারকারীর অ্যাকাউন্টে সাইন ইন করা একটি ব্রাউজার ব্যবহার করে এবং Firebase কনসোলে একটি বিদ্যমান Firebase প্রকল্প দেখার চেষ্টা করে এই পরীক্ষাটি করতে পারেন। আপনি যদি একটি বিদ্যমান Firebase প্রকল্প দেখতে পারেন, তাহলে ব্যবহারকারীর অ্যাকাউন্ট Firebase ToS স্বীকার করেছে।
আপনি যদি কোনো বিদ্যমান ফায়ারবেস প্রজেক্ট দেখতে না পান, তাহলে ব্যবহারকারীর অ্যাকাউন্ট সম্ভবত Firebase ToS স্বীকার করেনি। এটি ঠিক করতে, Firebase কনসোলের মাধ্যমে একটি নতুন Firebase প্রকল্প তৈরি করুন এবং প্রকল্প তৈরির অংশ হিসাবে Firebase ToS গ্রহণ করুন৷ আপনি কনসোলে প্রজেক্ট সেটিংসের মাধ্যমে অবিলম্বে এই প্রকল্পটি মুছে ফেলতে পারেন।
কয়েক মিনিট অপেক্ষা করুন, এবং তারপর আবার terraform apply
করার চেষ্টা করুন।
এটি বিভিন্ন সিস্টেমে প্রচার বিলম্বের কারণে হতে পারে। terraform import
চালানোর মাধ্যমে টেরাফর্ম স্টেটে সম্পদ আমদানি করে এই সমস্যাটি সমাধান করার চেষ্টা করুন। তারপর আবার terraform apply
চালানোর চেষ্টা করুন।
আপনি শিখতে পারেন কিভাবে প্রতিটি সম্পদ আমদানি করতে হয় তার Terraform ডকুমেন্টেশনের "আমদানি" বিভাগে (উদাহরণস্বরূপ, Cloud Firestore জন্য "আমদানি" ডকুমেন্টেশন )।
ত্রুটির পরামর্শ অনুসারে, Terraform একাধিক সূচকের ব্যবস্থা করার চেষ্টা করতে পারে এবং/অথবা একই সময়ে একটি নথি তৈরি করতে পারে এবং একটি সমবর্তী ত্রুটির মধ্যে পড়ে। terraform apply
।
এই ত্রুটির অর্থ হল যে কোন প্রকল্পের বিপরীতে কোটা পরীক্ষা করতে হবে তা Terraform জানে না। সমস্যা সমাধানের জন্য, resource
ব্লকে নিম্নলিখিত চেক করুন:
- আপনি
project
অ্যাট্রিবিউটের জন্য একটি মান নির্দিষ্ট করেছেন তা নিশ্চিত করুন। - নিশ্চিত করুন যে আপনি
user_project_override = true
(কোনও উপনাম নেই) সহ প্রদানকারী ব্যবহার করছেন, যেটি Firebase নমুনাগুলিতেgoogle-beta
।
প্রকল্প আইডি ইতিমধ্যেই বিদ্যমান থাকতে পারে এমন সম্ভাব্য কারণগুলি এখানে রয়েছে:
সেই আইডির সাথে যুক্ত প্রকল্পটি অন্য কারো।
- সমাধান করতে: অন্য প্রকল্প আইডি চয়ন করুন।
সেই আইডির সাথে যুক্ত প্রকল্পটি সম্প্রতি মুছে ফেলা হয়েছে (সফট-ডিলিট অবস্থায়)।
- সমাধান করতে: আপনি যদি মনে করেন যে আইডির সাথে যুক্ত প্রকল্পটি আপনারই, তাহলে
projects.get
REST API ব্যবহার করে প্রকল্পের অবস্থা পরীক্ষা করুন।
- সমাধান করতে: আপনি যদি মনে করেন যে আইডির সাথে যুক্ত প্রকল্পটি আপনারই, তাহলে
সেই আইডির সাথে যুক্ত প্রকল্পটি বর্তমান ব্যবহারকারীর অধীনে সঠিকভাবে বিদ্যমান। ত্রুটির একটি সম্ভাব্য কারণ হতে পারে যে একটি পূর্ববর্তী
terraform apply
বাধাগ্রস্ত হয়েছে।- সমাধান করতে: নিম্নলিখিত কমান্ডগুলি চালান:
terraform import google_project.default PROJECT_ID
এবং তারপর
terraform import google_firebase_project.default PROJECT_ID
- সমাধান করতে: নিম্নলিখিত কমান্ডগুলি চালান:
যাইহোক, আপনি যদি 30 অক্টোবর, 2024 এর আগে ডিফল্ট Cloud Storage বাকেটের ব্যবস্থা করে থাকেন, তাহলে নিম্নলিখিতগুলি নোট করুন:
- আপনি যদি Cloud Firestore ব্যবহার করেন, তাহলে Cloud Storage for Firebase আগে ডিফল্ট Cloud Firestore দৃষ্টান্তের ব্যবস্থা করা নিশ্চিত করুন।
- আপনি যদি ডিফল্ট Cloud Storage ইন্সট্যান্সের পরে ডিফল্ট Cloud Firestore ইনস্ট্যান্সের ব্যবস্থা করেন, তাহলে আপনার ডিফল্ট Cloud Firestore ইনস্ট্যান্স ডেটাস্টোর মোডে থাকবে (অধিকাংশ ফায়ারবেস-ব্যবহারকারীদের জন্য একটি অবাঞ্ছিত মোড)। Cloud Firestore এবং Cloud Storage প্রভিশনিংয়ের নমুনা
.tf
ফাইলটি দেখুন কিভাবে প্রভিশনিং অর্ডার নিশ্চিত করা যায় তা শিখতে হবে। বিশেষ করে,google_app_engine_application
ব্লকেরdepends_on
তালিকায় সংশ্লিষ্টgoogle_firestore_database
অন্তর্ভুক্ত করুন।
একটি App Engine অ্যাপ্লিকেশনের জন্য একটি Cloud Firestore দৃষ্টান্ত প্রয়োজন, তবে আপনি প্রতি প্রকল্পে শুধুমাত্র একটি Cloud Firestore দৃষ্টান্ত রাখতে পারেন। সুতরাং, ত্রুটি বার্তাটি পরামর্শ দেয়, আপনি যদি ইতিমধ্যেই একটি স্থানে প্রকল্পের Cloud Firestore দৃষ্টান্তের ব্যবস্থা করে থাকেন, আপনি যদি অন্য স্থানে একটি Cloud Firestore দৃষ্টান্ত প্রদান করার চেষ্টা করেন তবে App Engine ত্রুটি করবে৷ App Engine মনে করে যে আপনি ইতিমধ্যে বিদ্যমান Cloud Firestore উদাহরণটিকে "পুনরায় বিধান" করার চেষ্টা করছেন৷
এই ত্রুটিটি সমাধান করতে, Cloud Firestore এবং App Engine অ্যাপ্লিকেশন উভয়ের জন্য একই অবস্থান ব্যবহার করুন৷ আপনার যদি Cloud Firestore থেকে আলাদা জায়গায় একটি Cloud Storage বাকেটের প্রয়োজন হয়, আপনি অতিরিক্ত বালতি সরবরাহ করতে পারেন ( একাধিক Cloud Storage বালতি তৈরির জন্য নমুনা কনফিগারেশন দেখুন)।
আপনি যখন একটি প্রজেক্টের ডিফল্ট Cloud Storage বাকেট ( google_app_engine_application
এর মাধ্যমে) প্রভিশন করেন এবং প্রোজেক্টে এখনও Cloud Firestore ইনস্ট্যান্স থাকে না, তখন google_app_engine_application
স্বয়ংক্রিয়ভাবে প্রোজেক্টের Cloud Firestore ইনস্ট্যান্সের ব্যবস্থা করে।
সুতরাং, যদি আপনার প্রজেক্টের Cloud Firestore দৃষ্টান্ত ইতিমধ্যেই প্রভিশন করা থাকে, তাহলে google_firestore_database
ত্রুটি করবে যদি আপনি Cloud Firestore দৃষ্টান্তের সুস্পষ্টভাবে ব্যবস্থা করার চেষ্টা করেন।
একবার প্রজেক্টের Cloud Firestore দৃষ্টান্তের ব্যবস্থা করা হলে, আপনি এটিকে "পুনরায় বিধান" করতে বা এর অবস্থান পরিবর্তন করতে পারবেন না। ত্রুটিটি ঘটতে বাধা দিতে, আপনার কনফিগার ফাইল থেকে google_firestore_database
রিসোর্স ব্লকটি সরান। মনে রাখবেন, যদিও, আমরা প্রজেক্টের ডিফল্ট Cloud Storage বাকেটের আগে Cloud Firestore ব্যবস্থা করার পরামর্শ দিই (কেনের জন্য নীচের অংশটি দেখুন)।
Firebase Terraform সমর্থন করতে শুরু করেছে। আপনি যদি এমন একটি দলে থাকেন যা নির্দিষ্ট সংস্থান এবং পরিষেবাগুলি সক্ষম করে Firebase প্রকল্পগুলিকে স্বয়ংক্রিয় এবং মানসম্মত করতে চায়, তাহলে Firebase-এর সাথে Terraform ব্যবহার করা আপনার জন্য উপযুক্ত হতে পারে।
Firebase-এর সাথে Terraform ব্যবহার করার জন্য মৌলিক কর্মপ্রবাহের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
একটি Terraform কনফিগারেশন ফাইল (একটি
.tf
ফাইল) তৈরি এবং কাস্টমাইজ করা যা আপনি যে পরিকাঠামোর ব্যবস্থা করতে চান তা নির্দিষ্ট করে (অর্থাৎ, আপনি যে সংস্থানগুলি সরবরাহ করতে চান এবং যে পরিষেবাগুলি আপনি সক্ষম করতে চান)।gcloud CLI কমান্ডগুলি ব্যবহার করে যা Terraform-এর সাথে ইন্টারফেস করে
.tf
ফাইলে নির্দিষ্ট পরিকাঠামোর ব্যবস্থা করতে।
আপনি Terraform এবং Firebase দিয়ে কি করতে পারেন?
এই নির্দেশিকায় সাধারণীকৃত কর্মপ্রবাহের উদাহরণ হল একটি Android অ্যাপ সহ একটি নতুন ফায়ারবেস প্রকল্প তৈরি করা। কিন্তু আপনি Terraform এর সাথে আরও অনেক কিছু করতে পারেন, যেমন:
টেরাফর্ম ব্যবহার করে বিদ্যমান পরিকাঠামো মুছুন এবং সংশোধন করুন।
টেরাফর্ম ব্যবহার করে পণ্য-নির্দিষ্ট কনফিগারেশন এবং কাজগুলি পরিচালনা করুন, যেমন:
- Firebase Authentication সাইন-ইন প্রদানকারী সক্রিয় করা হচ্ছে।
- Cloud Storage বালতি বা ডাটাবেস দৃষ্টান্ত তৈরি করা এবং তাদের জন্য Firebase Security Rules স্থাপন করা।
আপনি এই সমস্ত কাজগুলি সম্পন্ন করতে স্ট্যান্ডার্ড Terraform কনফিগারেশন ফাইল এবং কমান্ড ব্যবহার করতে পারেন। এবং এটিতে আপনাকে সাহায্য করার জন্য, আমরা বেশ কয়েকটি সাধারণ ব্যবহারের ক্ষেত্রে নমুনা Terraform কনফিগারেশন ফাইল সরবরাহ করেছি।
Firebase এর সাথে Terraform ব্যবহার করার জন্য সাধারণ কর্মপ্রবাহ
পূর্বশর্ত
এই নির্দেশিকাটি Firebase-এর সাথে Terraform ব্যবহার করার একটি ভূমিকা, তাই এটি Terraform-এর সাথে মৌলিক দক্ষতা অনুমান করে। এই ওয়ার্কফ্লো শুরু করার আগে আপনি নিম্নলিখিত পূর্বশর্তগুলি সম্পূর্ণ করেছেন তা নিশ্চিত করুন৷
Terraform ইনস্টল করুন এবং তাদের অফিসিয়াল টিউটোরিয়াল ব্যবহার করে Terraform এর সাথে নিজেকে পরিচিত করুন।
Google Cloud CLI ( gcloud CLI ) ইনস্টল করুন। একটি ব্যবহারকারী অ্যাকাউন্ট বা একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে লগইন করুন৷
- ব্যবহারকারীর অ্যাকাউন্ট ব্যবহার করলে, আপনি অবশ্যই Firebase পরিষেবার শর্তাবলী (Firebase ToS) স্বীকার করেছেন। আপনি Firebase ToS স্বীকার করেছেন যদি আপনি Firebase কনসোলে একটি Firebase প্রকল্প দেখতে পারেন
- টেরাফর্মের জন্য নির্দিষ্ট কিছু পদক্ষেপ নেওয়ার জন্য (উদাহরণস্বরূপ, প্রকল্পগুলি তৈরি করুন), নিম্নলিখিতগুলি অবশ্যই সত্য হতে হবে:
- ব্যবহারকারী বা পরিষেবা অ্যাকাউন্টের অবশ্যই সেই ক্রিয়াগুলির জন্য প্রযোজ্য IAM অ্যাক্সেস থাকতে হবে।
- যদি ব্যবহারকারী বা পরিষেবার অ্যাকাউন্ট Google Cloud সংস্থার অংশ হয়, তাহলে সংস্থার নীতিগুলি অ্যাকাউন্টটিকে সেই পদক্ষেপগুলি নেওয়ার অনুমতি দিতে হবে৷
ধাপ 1: একটি Terraform কনফিগারেশন ফাইল তৈরি এবং কাস্টমাইজ করুন
একটি Terraform কনফিগারেশন ফাইলের দুটি প্রধান বিভাগ প্রয়োজন (যা নীচে বিশদে বর্ণনা করা হয়েছে):
- একটি
provider
সেটআপ বিভাগ যা নির্দেশ করে যে কোন Terraform সংস্থানগুলি অ্যাক্সেস করা যেতে পারে - পৃথক
resource
ব্লকের একটি বিভাগ যা নির্দিষ্ট করে দেয় কোন পরিকাঠামো তৈরি করতে হবে
আপনার provider
সেট আপ করুন
Firebase পণ্য বা পরিষেবাগুলি যেই জড়িত থাকুক না কেন একটি provider
সেটআপ প্রয়োজন৷
আপনার স্থানীয় ডিরেক্টরিতে একটি Terraform কনফিগার ফাইল (যেমন
main.tf
ফাইল) তৈরি করুন।এই নির্দেশিকায়, আপনি এই কনফিগারেশন ফাইলটি উভয়
provider
সেটআপ এবং সমস্ত অবকাঠামো নির্দিষ্ট করতে ব্যবহার করবেন যা আপনি Terraform তৈরি করতে চান। নোট করুন, যদিও, আপনার কাছে কীভাবে প্রদানকারী সেটআপ অন্তর্ভুক্ত করবেন তার বিকল্প রয়েছে।আপনার টেরাফর্ম কনফিগারেশনের বাকী অংশগুলিতে কীভাবে
provider
সেটআপ অন্তর্ভুক্ত করবেন তার জন্য আপনার নিম্নলিখিত বিকল্পগুলি রয়েছে:বিকল্প 1: এটি একটি একক টেরাফর্ম
.tf
কনফিগারেশন ফাইলের শীর্ষে অন্তর্ভুক্ত করুন (এই গাইডে দেখানো হয়েছে)।- আপনি যদি কেবল টেরফর্ম দিয়ে শুরু করছেন বা কেবল ফায়ারবেস দিয়ে টেরফর্মটি ব্যবহার করে দেখছেন তবে এই বিকল্পটি ব্যবহার করুন।
বিকল্প 2: এটি একটি পৃথক
.tf
ফাইলে (যেমন একটিprovider.tf
ফাইলের মতো) অন্তর্ভুক্ত করুন,.tf
ফাইলটি বাদে যেখানে আপনি তৈরি করতে অবকাঠামো নির্দিষ্ট করেছেন (একটিmain.tf
ফাইলের মতো)।- আপনি যদি এমন কোনও বৃহত্তর দলের অংশ হন তবে এই বিকল্পটি ব্যবহার করুন যা সেটআপকে মানক করতে হবে।
- টেরফর্ম কমান্ডগুলি চালানোর সময়, উভয়ই
provider.tf
ফাইল এবংmain.tf
ফাইল অবশ্যই একই ডিরেক্টরিতে থাকতে হবে।
main.tf
ফাইলের শীর্ষে নিম্নলিখিতprovider
সেটআপ অন্তর্ভুক্ত করুন।আপনাকে অবশ্যই
google-beta
সরবরাহকারী ব্যবহার করতে হবে কারণ এটি টেরাফর্মের সাথে ফায়ারবেস ব্যবহারের একটি বিটা রিলিজ। উত্পাদন ব্যবহার করার সময় সাবধানতা অবলম্বন করুন।# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 5.0" } } } # Configures the provider to use the resource block's specified project for quota checks. provider "google-beta" { user_project_override = true } # Configures the provider to not use the resource block's specified project for quota checks. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false }
ফায়ারবেস সহ টেরাফর্ম ব্যবহার করার সময় বিভিন্ন ধরণের প্রকল্প-সম্পর্কিত বৈশিষ্ট্য (এই গাইডকে "কোটা-চেক প্রকল্প" বলে) সম্পর্কে আরও জানুন।
আপনার কনফিগারেশন ফাইলটি সম্পূর্ণ করতে পরবর্তী বিভাগে চালিয়ে যান এবং কী অবকাঠামো তৈরি করতে হবে তা নির্দিষ্ট করুন।
resource
ব্লকগুলি ব্যবহার করে কী অবকাঠামো তৈরি করতে হবে তা নির্দিষ্ট করুন
আপনার টেরাফর্ম কনফিগারেশন ফাইলটিতে (এই গাইডের জন্য, আপনার main.tf
ফাইলের জন্য), আপনি টেরফর্মটি তৈরি করতে চান এমন সমস্ত অবকাঠামো নির্দিষ্ট করতে হবে (যার অর্থ আপনি যে সমস্ত সংস্থান সরবরাহ করতে চান এবং আপনি সক্ষম করতে চান এমন সমস্ত পরিষেবা)। এই গাইডে, টেরফর্মকে সমর্থন করে এমন সমস্ত ফায়ারবেস সংস্থানগুলির একটি সম্পূর্ণ তালিকা সন্ধান করুন।
আপনার
main.tf
ফাইলটি খুলুন।provider
সেটআপের অধীনে,resource
ব্লকের নিম্নলিখিত কনফিগারেশন অন্তর্ভুক্ত করুন।এই প্রাথমিক উদাহরণটি একটি নতুন ফায়ারবেস প্রকল্প তৈরি করে এবং তারপরে সেই প্রকল্পের মধ্যে একটি ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করে।
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "Project Display Name" project_id = "project-id-for-new-project" # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "default" { provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "default" { provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" package_name = "awesome.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
আপনি যদি প্রকল্প এবং অ্যাপ্লিকেশনগুলির অবকাঠামোগত সংস্থান হিসাবে পরিচিত না হন তবে নিম্নলিখিত ডকুমেন্টেশনগুলি পর্যালোচনা করুন:
- ফায়ারবেস প্রকল্পগুলি বুঝুন
- ফায়ারবেস প্রকল্প পরিচালনার জন্য রেফারেন্স ডকুমেন্টেশন
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { # Use the provider that enables the setup of quota checks for a new project provider = google-beta.no_user_project_override name = "Project Display Name" // learn more about the project name project_id = "project-id-for-new-project" // learn more about the project ID # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" // learn more about the Firebase-enabled label } } # Enables required APIs. resource "google_project_service" "default" { # Use the provider without quota checks for enabling APIS provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. # This action essentially "creates a Firebase project" and allows the project to use # Firebase services (like Firebase Authentication) and # Firebase tooling (like the Firebase console). # Learn more about the relationship between Firebase projects and Google Cloud. resource "google_firebase_project" "default" { # Use the provider that performs quota checks from now on provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. # Learn more about the relationship between Firebase Apps and Firebase projects. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" # learn more about an app's display name package_name = "awesome.package.name" # learn more about an app's package name # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
পদক্ষেপ 2: নির্দিষ্ট অবকাঠামো তৈরি করতে টেরাফর্ম কমান্ডগুলি চালান
সংস্থানগুলি সরবরাহ করতে এবং আপনার main.tf
ফাইলে নির্দিষ্ট করা পরিষেবাগুলি সক্ষম করতে, আপনার main.tf
ফাইলের মতো একই ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডগুলি চালান। এই কমান্ডগুলি সম্পর্কে বিস্তারিত তথ্যের জন্য, টেরফর্ম ডকুমেন্টেশন দেখুন।
আপনি যদি প্রথমবারের মতো ডিরেক্টরিতে টেরফর্ম কমান্ডগুলি চালাচ্ছেন তবে আপনাকে কনফিগারেশন ডিরেক্টরিটি আরম্ভ করতে হবে এবং গুগল টেরাফর্ম সরবরাহকারী ইনস্টল করতে হবে। নিম্নলিখিত কমান্ডটি চালিয়ে এটি করুন:
terraform init
নিম্নলিখিত কমান্ডটি চালিয়ে আপনার
main.tf
ফাইলে নির্দিষ্ট করা অবকাঠামো তৈরি করুন:terraform apply
নিশ্চিত করুন যে সমস্ত কিছু প্রত্যাশার মতো বিধান বা সক্ষম করা হয়েছিল:
বিকল্প 1: নিম্নলিখিত কমান্ডটি চালিয়ে আপনার টার্মিনালে মুদ্রিত কনফিগারেশনটি দেখুন:
terraform show
বিকল্প 2: Firebase কনসোলে আপনার ফায়ারবেস প্রকল্পটি দেখুন।
টেরফর্ম সমর্থন সহ ফায়ারবেস রিসোর্স
নিম্নলিখিত ফায়ারবেস এবং গুগল রিসোর্সের টেরফর্ম সমর্থন রয়েছে। এবং আমরা সর্বদা আরও সংস্থান যুক্ত করছি! সুতরাং আপনি যদি টেরফর্মের সাথে যে সংস্থানটি পরিচালনা করতে চান তা যদি আপনি না দেখেন তবে এটি উপলব্ধ কিনা তা দেখতে শীঘ্রই আবার পরীক্ষা করুন বা গিটহাব রেপোতে কোনও সমস্যা দায়ের করে অনুরোধ করুন।
ফায়ারবেস প্রকল্প এবং অ্যাপ্লিকেশন পরিচালনা
google_firebase_project
- একটি বিদ্যমান Google Cloud প্রকল্পে ফায়ারবেস পরিষেবাগুলি সক্ষম করুনফায়ারবেস অ্যাপস
-
google_firebase_apple_app
- একটি ফায়ারবেস অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশন তৈরি বা পরিচালনা করুন -
google_firebase_android_app
- একটি ফায়ারবেস অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি বা পরিচালনা করুন -
google_firebase_web_app
- একটি ফায়ারবেস ওয়েব অ্যাপ্লিকেশন তৈরি বা পরিচালনা করুন
-
Firebase Authentication
google_identity_platform_config
- Google Cloud Identity Platform (জিসিআইপি) সক্ষম করুন (যা Firebase Authentication ব্যাকএন্ড) এবং প্রকল্প-স্তরের প্রমাণীকরণ সেটিংস সরবরাহ করুনটেরাফর্মের মাধ্যমে Firebase Authentication কনফিগার করার জন্য জিসিআইপি সক্ষম করা প্রয়োজন। কীভাবে Firebase Authentication সেট আপ করবেন তার জন্য নমুনা
.tf
ফাইলটি পর্যালোচনা করার বিষয়টি নিশ্চিত করুন।যে প্রকল্পে টেরাফর্ম জিসিআইপি সক্ষম করবে এবং/অথবা Firebase Authentication ব্লেজ প্রাইসিং প্ল্যানে থাকতে হবে (এটি হ'ল প্রকল্পটির অবশ্যই একটি Cloud Billing অ্যাকাউন্ট থাকতে হবে)।
google_project
রিসোর্সেbilling_account
বৈশিষ্ট্যটি সেট করে আপনি এটি প্রোগ্রামগতভাবে করতে পারেন।এই সংস্থানটি স্থানীয় সাইন-ইন পদ্ধতিগুলি যেমন বেনামে, ইমেল/পাসওয়ার্ড এবং ফোন প্রমাণীকরণ, পাশাপাশি ফাংশন এবং অনুমোদিত ডোমেনগুলি ব্লকিং করার মতো আরও কনফিগারেশনগুলি সক্ষম করে।
google_identity_platform_default_supported_idp_config
- গুগল, ফেসবুক বা অ্যাপলের মতো সাধারণ ফেডারেটেড পরিচয় সরবরাহকারীদের কনফিগার করুনidentity_platform_oauth_idp_config
- স্বেচ্ছাসেবী ওআউথ আইডেন্টিটি সরবরাহকারী (আইডিপি) উত্সগুলি কনফিগার করুনgoogle_identity_platform_inbound_saml_config
- এসএএমএল সংহতকরণ কনফিগার করুন
এখনও সমর্থিত নয়:
- টেরাফর্মের মাধ্যমে মাল্টি-ফ্যাক্টর প্রমাণীকরণ (এমএফএ) কনফিগার করা
Firebase Realtime Database
-
google_firebase_database_instance
- একটি Realtime Database উদাহরণ তৈরি করুন
এখনও সমর্থিত নয়:
- টেরাফর্মের মাধ্যমে Firebase Realtime Database Security Rules মোতায়েন করা (প্রোগ্রাম্যাটিক বিকল্পগুলি সহ অন্যান্য সরঞ্জামাদি ব্যবহার করে এই Rules কীভাবে স্থাপন করবেন তা শিখুন)
Cloud Firestore
google_firestore_database
- একটি Cloud Firestore উদাহরণ তৈরি করুনgoogle_firestore_index
- Cloud Firestore জন্য দক্ষ প্রশ্নগুলি সক্ষম করুনgoogle_firestore_document
- একটি সংগ্রহে একটি নির্দিষ্ট নথি সহ একটি Cloud Firestore উদাহরণ বীজগুরুত্বপূর্ণ: এই বীজ নথিতে আসল শেষ ব্যবহারকারী বা উত্পাদন ডেটা ব্যবহার করবেন না।
Cloud Storage for Firebase
google_firebase_storage_bucket
- ফায়ারবেস এসডিকে, প্রমাণীকরণ এবং Firebase Security Rules জন্য একটি বিদ্যমান Cloud Storage বালতি অ্যাক্সেসযোগ্য করুন- ফায়ারবেস প্রকল্পের জন্য একটি ডিফল্ট Cloud Storage বালতি স্থাপনের জন্য প্রথমে
google_app_engine_application
সরবরাহের প্রয়োজন। Cloud Storage বালতিগুলি কীভাবে সরবরাহ করতে হয় তার জন্য নমুনা.tf
ফাইলটি পর্যালোচনা করার বিষয়টি নিশ্চিত করুন।
- ফায়ারবেস প্রকল্পের জন্য একটি ডিফল্ট Cloud Storage বালতি স্থাপনের জন্য প্রথমে
google_storage_bucket_object
- একটি Cloud Storage বালতিতে একটি বস্তু যুক্ত করুনগুরুত্বপূর্ণ: এই ফাইলটিতে আসল শেষ ব্যবহারকারী বা উত্পাদন ডেটা ব্যবহার করবেন না।
Firebase Security Rules ( Cloud Firestore এবং Cloud Storage জন্য)
নোট করুন যে Firebase Realtime Database তার Firebase Security Rules জন্য একটি পৃথক বিধান ব্যবস্থা ব্যবহার করে।
google_firebaserules_ruleset
- Firebase Security Rules সংজ্ঞায়িত করুন যা Cloud Firestore উদাহরণ বা Cloud Storage বালতিতে প্রযোজ্যgoogle_firebaserules_release
- Cloud Firestore উদাহরণ বা Cloud Storage বালতিতে নির্দিষ্ট বিধিগুলি স্থাপন করুন
Firebase App Check
-
google_firebase_app_check_service_config
- কোনও পরিষেবার জন্য App Check প্রয়োগকারী সক্ষম করুন -
google_firebase_app_check_app_attest_config
- অ্যাপটি সরবরাহকারী সরবরাহকারীর সাথে একটি অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশন নিবন্ধন করুন -
google_firebase_app_check_device_check_config
- ডিভাইসেক সরবরাহকারীর সাথে একটি অ্যাপল প্ল্যাটফর্ম অ্যাপ্লিকেশন নিবন্ধ করুন -
google_firebase_app_check_play_integrity_config
- প্লে ইন্টিগ্রিটি প্রোভাইডার সহ একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন নিবন্ধন করুন -
google_firebase_app_check_recaptcha_enterprise_config
- রেকাপ্টকা এন্টারপ্রাইজ সরবরাহকারীর সাথে একটি ওয়েব অ্যাপ্লিকেশন নিবন্ধন করুন -
google_firebase_app_check_recaptcha_v3_config
রিকাপ্টকা_ভি 3_কনফিগ - রেকাপ্টচা ভি 3 সরবরাহকারীর সাথে একটি ওয়েব অ্যাপ্লিকেশন নিবন্ধন করুন -
google_firebase_app_check_debug_token
- পরীক্ষার জন্য ডিবাগ টোকেন ব্যবহার করুন
Firebase Extensions
-
google_firebase_extensions_instance
- Firebase Extension উদাহরণ ইনস্টল করুন বা আপডেট করুন
সাধারণ ব্যবহারের ক্ষেত্রে নমুনা টেরাফর্ম কনফিগারেশন ফাইলগুলি
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটি যুক্ত করে (জিসিআইপি সহ Firebase Authentication জন্য ব্লেজ প্রাইসিং প্ল্যান প্রয়োজন), প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, জিসিআইপি দিয়ে Firebase Authentication সেট করে এবং তিনটি পৃথক অ্যাপ্লিকেশন নিবন্ধন করে প্রকল্পের সাথে প্রকারগুলি।
নোট করুন যে জিসিআইপি সক্ষম করার জন্য টেরাফর্মের মাধ্যমে Firebase Authentication সেট আপ করতে হবে।
# Creates a new Google Cloud project. resource "google_project" "auth" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "auth" { provider = google-beta.no_user_project_override project = google_project.auth.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "identitytoolkit.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "auth" { provider = google-beta project = google_project.auth.project_id depends_on = [ google_project_service.auth, ] } # Creates an Identity Platform config. # Also enables Firebase Authentication with Identity Platform in the project if not. resource "google_identity_platform_config" "auth" { provider = google-beta project = google_project.auth.project_id # Auto-deletes anonymous users autodelete_anonymous_users = true # Configures local sign-in methods, like anonymous, email/password, and phone authentication. sign_in { allow_duplicate_emails = true anonymous { enabled = true } email { enabled = true password_required = false } phone_number { enabled = true test_phone_numbers = { "+11231231234" = "000000" } } } # Sets an SMS region policy. sms_region_config { allowlist_only { allowed_regions = [ "US", "CA", ] } } # Configures blocking functions. blocking_functions { triggers { event_type = "beforeSignIn" function_uri = "https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in" } forward_inbound_credentials { refresh_token = true access_token = true id_token = true } } # Configures a temporary quota for new signups for anonymous, email/password, and phone number. quota { sign_up_quota_config { quota = 1000 start_time = "" quota_duration = "7200s" } } # Configures authorized domains. authorized_domains = [ "localhost", "${google_project.auth.project_id}.firebaseapp.com", "${google_project.auth.project_id}.web.app", ] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "auth" { provider = google-beta project = google_project.auth.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.auth, ] }
এই কনফিগারেশনটি একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, প্রকল্পের ডিফল্ট Realtime Database উদাহরণকে বিধান করে এবং প্রকল্পের সাথে তিনটি পৃথক অ্যাপ প্রকার নিবন্ধন করে।
# Creates a new Google Cloud project. resource "google_project" "rtdb" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb" { provider = google-beta.no_user_project_override project = google_project.rtdb.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb" { provider = google-beta project = google_project.rtdb.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database" { provider = google-beta project = google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb" { provider = google-beta project = google_project.rtdb.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb, ] }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, একটি Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটি সংযুক্ত করে (একাধিক Realtime Database দৃষ্টান্তের জন্য ব্লেজ প্রাইসিং প্ল্যান প্রয়োজন), প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, একাধিক Realtime Database উদাহরণগুলি (প্রকল্পের ডিফল্ট Realtime Database সহ বিধান করে ( উদাহরণ), এবং প্রকল্পের সাথে তিনটি পৃথক অ্যাপ্লিকেশন প্রকারের নিবন্ধন করে।
# Creates a new Google Cloud project. resource "google_project" "rtdb-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "rtdb-multi" { provider = google-beta.no_user_project_override project = google_project.rtdb-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebasedatabase.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database-default" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "${google_project.rtdb-multi.project_id}-default-rtdb" type = "DEFAULT_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Provisions an additional Realtime Database instance. resource "google_firebase_database_instance" "database-additional" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance. region = "name-of-region" # This value will become the first segment of the database's URL. instance_id = "name-of-additional-database-instance" type = "USER_DATABASE" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "rtdb-multi" { provider = google-beta project = google_project.rtdb-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.rtdb-multi, ] }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, প্রকল্পের ডিফল্ট Cloud Firestore উদাহরণকে বিধান করে এবং প্রকল্পের সাথে তিনটি পৃথক অ্যাপ্লিকেশন প্রকারের নিবন্ধন করে।
এটি ডিফল্ট Cloud Firestore উদাহরণের জন্য Firebase Security Rules বিধান করে, একটি Cloud Firestore সূচক তৈরি করে এবং বীজ ডেটা সহ একটি Cloud Firestore ডকুমেন্ট যুক্ত করে।
# Creates a new Google Cloud project. resource "google_project" "firestore" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "firestore" { provider = google-beta.no_user_project_override project = google_project.firestore.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "firestore" { provider = google-beta project = google_project.firestore.project_id } # Provisions the Firestore database instance. resource "google_firestore_database" "firestore" { provider = google-beta project = google_project.firestore.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.firestore, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_project.firestore.project_id 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.firestore, ] } # Releases 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_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore index. resource "google_firestore_index" "indexes" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" query_scope = "COLLECTION" fields { field_path = "question" order = "ASCENDING" } fields { field_path = "answer" order = "ASCENDING" } # Wait for Firestore to be provisioned before adding this index. depends_on = [ google_firestore_database.firestore, ] } # Adds a new Firestore document with seed data. # Don't use real end-user or production data in this seed document. resource "google_firestore_document" "doc" { provider = google-beta project = google_project.firestore.project_id collection = "quiz" document_id = "question-1" fields = "{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document. depends_on = [ google_firestore_database.firestore, ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "firestore" { provider = google-beta project = google_project.firestore.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.firestore, ] }
এটি Cloud Firestore Security Rules রুলসেট যা firestore.rules
নামে একটি স্থানীয় ফাইলে হওয়া উচিত।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, প্রকল্পের ডিফল্ট Cloud Storage বালতি বিধান করে এবং প্রকল্পের সাথে তিনটি পৃথক অ্যাপ্লিকেশন প্রকারের নিবন্ধন করে।
এটি Cloud Storage বালতি জন্য Firebase Security Rules বিধান করে এবং বালতিতে একটি ফাইল আপলোড করে।
# Creates a new Google Cloud project. resource "google_project" "storage" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage" { provider = google-beta.no_user_project_override project = google_project.storage.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage" { provider = google-beta project = google_project.storage.project_id } # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_project.storage.project_id # 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-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Makes 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_project.storage.project_id bucket_id = google_app_engine_application.default.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_project.storage.project_id 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_project.storage, ] } # Releases 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_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_project.storage.project_id } # Uploads a new file to the default Storage bucket. # Don't use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage" { provider = google-beta project = google_project.storage.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage, ] }
এটি Cloud Storage Security Rules রুলসেট যা storage.rules
নামের একটি স্থানীয় ফাইলে হওয়া উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, Cloud Billing অ্যাকাউন্টের সাথে প্রকল্পটিকে সংযুক্ত করে (একাধিক বালতিগুলির জন্য ব্লেজ প্রাইসিং প্ল্যান প্রয়োজন), প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, একাধিক Cloud Storage বালতি (প্রকল্পের ডিফল্ট Cloud Storage বালতি সহ) বিধান করে) , এবং প্রকল্পের সাথে তিনটি পৃথক অ্যাপ্লিকেশন প্রকারের নিবন্ধন করে।
এটি Cloud Storage বালতিগুলির জন্য Firebase Security Rules বিধান করে এবং ডিফল্ট Cloud Storage বালতিতে একটি ফাইল আপলোড করে।
# Creates a new Google Cloud project. resource "google_project" "storage-multi" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "storage-multi" { provider = google-beta.no_user_project_override project = google_project.storage-multi.project_id for_each = toset([ "cloudbilling.googleapis.com", "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "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 } # Enables Firebase services for the new project created above. resource "google_firebase_project" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id } # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-multi" { provider = google-beta project = google_project.storage-multi.project_id # 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-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ] } # Provisions an additional Cloud Storage bucket. # Additional Cloud Storage buckets are not provisioned via App Engine. resource "google_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id name = "name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the default Storage bucket. location = "name-of-region-for-additional-bucket" } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_app_engine_application.default-multi.default_bucket } # Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "bucket-multi" { provider = google-beta project = google_project.storage-multi.project_id bucket_id = google_storage_bucket.bucket-multi.name } # Creates a ruleset of Firebase Security Rules from a local file. resource "google_firebaserules_ruleset" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id 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 Storage buckets to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.storage-multi, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-multi" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-multi.default_bucket}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Releases the ruleset to the additional Storage bucket. resource "google_firebaserules_release" "bucket-multi" { provider = google-beta name = "firebase.storage/${google_storage_bucket.bucket-multi.name}" ruleset_name = "projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}" project = google_project.storage-multi.project_id } # Uploads a new file to the default Storage bucket. # Do not use real end-user or production data in this file. resource "google_storage_bucket_object" "cat-picture-multi" { provider = google-beta name = "cat.png" source = "path/to/cat.png" bucket = google_app_engine_application.default-multi.default_bucket } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Android app" package_name = "android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Apple-platforms App in the new project created above. resource "google_firebase_apple_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Apple app" bundle_id = "apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] } # Creates a Firebase Web App in the new project created above. resource "google_firebase_web_app" "storage-multi" { provider = google-beta project = google_project.storage-multi.project_id display_name = "My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility. deletion_policy = "DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.storage-multi, ] }
এটি Cloud Storage Security Rules রুলসেট যা storage.rules
নামের একটি স্থানীয় ফাইলে হওয়া উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে, ডিফল্ট Cloud Firestore উদাহরণকে বিধান করে এবং তারপরে ডিফল্ট Cloud Storage বালতি বিধান করে।
এটি ডিফল্ট Cloud Firestore উদাহরণ এবং ডিফল্ট Cloud Storage বালতিটির জন্য Firebase Security Rules বিধান করে।
# Creates a new Google Cloud project. resource "google_project" "fs" { # fs = Firestore + Storage provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "fs" { provider = google-beta.no_user_project_override project = google_project.fs.project_id for_each = toset([ "serviceusage.googleapis.com", "cloudresourcemanager.googleapis.com", "firebaserules.googleapis.com", "firebasestorage.googleapis.com", "storage.googleapis.com", "firestore.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "fs" { provider = google-beta project = google_project.fs.project_id } #### Set up Firestore before default Cloud Storage bucket #### # Provisions the Firestore database instance. resource "google_firestore_database" "firestore-fs" { provider = google-beta project = google_project.fs.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.fs, ] } # Creates a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore-fs" { provider = google-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started name = "firestore.rules" content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.firestore-fs ] } # Releases the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore-fs" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore-fs.name project = google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.firestore-fs, ] } #### Set up default Cloud Storage default bucket after Firestore #### # STARTING OCTOBER 30 2024, YOU CAN NO LONGER PROVISION A DEFAULT STORAGE BUCKET # VIA GOOGLE APP ENGINE. # See https://firebase.google.com/docs/storage/faqs-storage-changes-announced-sept-2024#terraform-changes # Provisions the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id # 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-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase). depends_on = [ google_firestore_database.firestore-fs, ] } # Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id bucket_id = google_app_engine_application.default-bucket-fs.default_bucket } # Creates a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "default-bucket-fs" { provider = google-beta project = google_project.fs.project_id 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 Cloud Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_project.fs, ] } # Releases the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket-fs" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}" ruleset_name = "projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}" project = google_project.fs.project_id }
এটি Cloud Firestore Security Rules রুলসেট যা firestore.rules
নামে একটি স্থানীয় ফাইলে হওয়া উচিত।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
এটি Cloud Storage Security Rules রুলসেট যা storage.rules
নামের একটি স্থানীয় ফাইলে হওয়া উচিত।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে এবং Cloud Firestore জন্য Firebase App Check প্রয়োগ করে সেট আপ করে এবং সক্ষম করে যাতে এটি কেবল আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে অ্যাক্সেস করা যায়।
# Creates a new Google Cloud project. resource "google_project" "appcheck" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "services" { provider = google-beta.no_user_project_override project = google_project.appcheck.project_id for_each = toset([ "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", "firebaseappcheck.googleapis.com", "firestore.googleapis.com", "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created earlier. resource "google_firebase_project" "appcheck" { provider = google-beta project = google_project.appcheck.project_id depends_on = [google_project_service.services] } # Provisions the Firestore database instance. resource "google_firestore_database" "database" { provider = google-beta project = google_firebase_project.appcheck.project name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_id = "name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore. depends_on = [ google_firebase_project.appcheck, ] } # Creates a Firebase Android App in the new project created earlier. resource "google_firebase_android_app" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project display_name = "Play Integrity app" package_name = "package.name.playintegrity" sha256_hashes = [ # TODO: insert your Android app's SHA256 certificate ] } # It takes a while for App Check to recognize the new app # If your app already exists, you don't have to wait 30 seconds. resource "time_sleep" "wait_30s" { depends_on = [google_firebase_android_app.appcheck] create_duration = "30s" } # Register the Android app with the Play Integrity provider resource "google_firebase_app_check_play_integrity_config" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project app_id = google_firebase_android_app.appcheck.app_id depends_on = [time_sleep.wait_30s, google_firestore_database.database] lifecycle { precondition { condition = length(google_firebase_android_app.appcheck.sha256_hashes) > 0 error_message = "Provide a SHA-256 certificate on the Android App to use App Check" } } } # Enable enforcement of App Check for Firestore resource "google_firebase_app_check_service_config" "firestore" { provider = google-beta project = google_firebase_project.appcheck.project service_id = "firestore.googleapis.com" depends_on = [google_project_service.services] }
এই কনফিগারেশন একটি নতুন Google Cloud প্রকল্প তৈরি করে, প্রকল্পের জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম করে এবং প্রকল্পে Firebase Extension একটি নতুন উদাহরণ ইনস্টল করে। যদি উদাহরণটি ইতিমধ্যে বিদ্যমান থাকে তবে এর পরামিতিগুলি কনফিগারেশনে প্রদত্ত মানগুলির উপর ভিত্তি করে আপডেট করা হয়।
# Creates a new Google Cloud project. resource "google_project" "extensions" { provider = google-beta.no_user_project_override folder_id = "folder-id-for-new-project" name = "Project Display Name" project_id = "project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions). billing_account = "000000-000000-000000" # Required for the project to display in a list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "extensions" { provider = google-beta.no_user_project_override project = google_project.extensions.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "serviceusage.googleapis.com", "firebase.googleapis.com", "firebaseextensions.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "extensions" { provider = google-beta project = google_project.extensions.project_id depends_on = [ google_project_service.extensions, ] } # Installs an instance of the "Translate Text in Firestore" extension. # Or updates the extension if the specified instance already exists. resource "google_firebase_extensions_instance" "translation" { provider = google-beta project = google_project.extensions.project_id instance_id = "translate-text-in-firestore" config { extension_ref = "firebase/firestore-translate-text" params = { COLLECTION_PATH = "posts/comments/translations" DO_BACKFILL = true LANGUAGES = "ar,en,es,de,fr" INPUT_FIELD_NAME = "input" LANGUAGES_FIELD_NAME = "languages" OUTPUT_FIELD_NAME = "translated" } system_params = { "firebaseextensions.v1beta.function/location" = "us-central1" "firebaseextensions.v1beta.function/memory" = "256" "firebaseextensions.v1beta.function/minInstances" = "0" "firebaseextensions.v1beta.function/vpcConnectorEgressSettings" = "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED" } } }
সমস্যা সমাধান এবং FAQ
এই গাইডটি "প্রকল্পগুলি" নিয়ে কাজ করার সময় নিম্নলিখিত টেরফর্ম বৈশিষ্ট্যগুলি ব্যবহার করে।
- একটি
resource
ব্লকের মধ্যেproject
প্রস্তাবিত: যখনই সম্ভব, প্রতিটি
resource
ব্লকের মধ্যেproject
বৈশিষ্ট্যটি অন্তর্ভুক্ত করুনএকটি প্রকল্পের বৈশিষ্ট্য অন্তর্ভুক্ত করে, টেরাফর্ম নির্দিষ্ট প্রকল্পের মধ্যে রিসোর্স ব্লকে নির্দিষ্ট করা অবকাঠামো তৈরি করবে। এই গাইড এবং আমাদের নমুনা কনফিগার ফাইলগুলি সমস্ত এই অনুশীলন ব্যবহার করে।
project
সম্পর্কে অফিসিয়াল টেরাফর্ম ডকুমেন্টেশন দেখুন।-
provider
ব্লকের মধ্যেuser_project_override
বেশিরভাগ সংস্থান সরবরাহের জন্য, আপনার
user_project_override = true
ব্যবহার করা উচিত, যার অর্থ আপনার নিজের ফায়ারবেস প্রকল্পের বিরুদ্ধে কোটা পরীক্ষা করা। তবে, আপনার নতুন প্রকল্পটি সেট আপ করার জন্য যাতে এটি কোটা চেকগুলি গ্রহণ করতে পারে, আপনাকে প্রথমেuser_project_override = false
ব্যবহার করতে হবে।user_project_override
সম্পর্কে অফিসিয়াল টেরাফর্ম ডকুমেন্টেশন দেখুন।
নিশ্চিত হয়ে নিন যে আপনি gcloud CLI কমান্ডগুলি চালানোর জন্য যে ব্যবহারকারী অ্যাকাউন্টটি ব্যবহার করছেন তা ফায়ারবেস পরিষেবার শর্তাদি (ফায়ারবেস টিওএস) গ্রহণ করেছে।
আপনি ব্যবহারকারী অ্যাকাউন্টে স্বাক্ষরিত একটি ব্রাউজার ব্যবহার করে এবং Firebase কনসোলে একটি বিদ্যমান ফায়ারবেস প্রকল্প দেখার চেষ্টা করে এই চেকটি করতে পারেন। আপনি যদি কোনও বিদ্যমান ফায়ারবেস প্রকল্প দেখতে পারেন তবে ব্যবহারকারী অ্যাকাউন্টটি ফায়ারবেস টিওএস গ্রহণ করেছে।
আপনি যদি কোনও বিদ্যমান ফায়ারবেস প্রকল্প দেখতে না পারেন তবে ব্যবহারকারী অ্যাকাউন্ট সম্ভবত ফায়ারবেস টিওগুলি গ্রহণ করেনি। এটি ঠিক করতে, Firebase কনসোলের মাধ্যমে একটি নতুন ফায়ারবেস প্রকল্প তৈরি করুন এবং প্রকল্প তৈরির অংশ হিসাবে ফায়ারবেস টিওএসকে গ্রহণ করুন। আপনি কনসোলে প্রকল্প সেটিংসের মাধ্যমে অবিলম্বে এই প্রকল্পটি মুছতে পারেন।
কয়েক মিনিট অপেক্ষা করুন, এবং তারপরে আবার terraform apply
চালানোর চেষ্টা করুন।
এটি বিভিন্ন সিস্টেমে প্রচারের বিলম্বের কারণে হতে পারে। terraform import
চালিয়ে টেরফর্ম রাজ্যে সংস্থানটি আমদানি করে এই সমস্যাটি সমাধান করার চেষ্টা করুন। তারপরে আবার terraform apply
চালানোর চেষ্টা করুন।
আপনি কীভাবে প্রতিটি সংস্থানকে তার টেরফর্ম ডকুমেন্টেশনের "আমদানি" বিভাগে আমদানি করবেন তা শিখতে পারেন (উদাহরণস্বরূপ, Cloud Firestore জন্য "আমদানি" ডকুমেন্টেশন )।
ত্রুটিটি যেমন পরামর্শ দেয়, টেরফর্ম একাধিক সূচক এবং/অথবা একই সাথে একটি নথি তৈরি করার চেষ্টা করতে পারে এবং একটি সম্মতি ত্রুটির দিকে চলে যায়। আবার terraform apply
চালানোর চেষ্টা করুন।
এই ত্রুটির অর্থ হ'ল টেরফর্ম কোন প্রকল্পের বিরুদ্ধে কোটা পরীক্ষা করতে হবে তা জানে না। সমস্যা সমাধানের জন্য, resource
ব্লকে নিম্নলিখিতগুলি দেখুন:
- আপনি
project
বৈশিষ্ট্যের জন্য একটি মান নির্দিষ্ট করেছেন তা নিশ্চিত করুন। - নিশ্চিত হয়ে নিন যে আপনি
user_project_override = true
(কোনও উপনাম) সহ সরবরাহকারী ব্যবহার করছেন, যা ফায়ারবেস নমুনাগুলিতেgoogle-beta
।
প্রকল্পের আইডি ইতিমধ্যে বিদ্যমান থাকতে পারে এমন সম্ভাব্য কারণগুলি এখানে:
সেই আইডির সাথে সম্পর্কিত প্রকল্পটি অন্য কারও অন্তর্গত।
- সমাধান করতে: অন্য একটি প্রকল্প আইডি চয়ন করুন।
সেই আইডির সাথে যুক্ত প্রকল্পটি সম্প্রতি মুছে ফেলা হয়েছিল (নরম-ডিলিট অবস্থায়)।
- সমাধানের জন্য: আপনি যদি মনে করেন যে আইডিটির সাথে সম্পর্কিত প্রকল্পটি আপনার অন্তর্ভুক্ত, তবে
projects.get
ব্যবহার করে প্রকল্পের অবস্থাটি পরীক্ষা করুন REST REST API ।
- সমাধানের জন্য: আপনি যদি মনে করেন যে আইডিটির সাথে সম্পর্কিত প্রকল্পটি আপনার অন্তর্ভুক্ত, তবে
সেই আইডির সাথে সম্পর্কিত প্রকল্পটি বর্তমান ব্যবহারকারীর অধীনে সঠিকভাবে বিদ্যমান। ত্রুটির একটি সম্ভাব্য কারণ হতে পারে যে পূর্ববর্তী
terraform apply
বাধা পেয়েছে।- সমাধান করতে: নিম্নলিখিত কমান্ডগুলি চালান:
terraform import google_project.default PROJECT_ID
এবং তারপর
terraform import google_firebase_project.default PROJECT_ID
- সমাধান করতে: নিম্নলিখিত কমান্ডগুলি চালান:
তবে, আপনি যদি 30 অক্টোবর, 2024 এর আগে ডিফল্ট Cloud Storage বালতিটি সরবরাহ করছেন তবে নিম্নলিখিতটি নোট করুন:
- আপনি যদি Cloud Firestore ব্যবহার করেন তবে Cloud Storage for Firebase আগে ডিফল্ট Cloud Firestore উদাহরণটি সরবরাহ করার বিষয়টি নিশ্চিত করুন।
- আপনি যদি ডিফল্ট Cloud Firestore উদাহরণটি ডিফল্ট Cloud Storage উদাহরণের পরে সরবরাহ করেন তবে আপনার ডিফল্ট Cloud Firestore উদাহরণটি ডেটাস্টোর মোডে থাকবে (বেশিরভাগ ফায়ারবেস-ব্যবহারকারীদের জন্য একটি অযাচিত মোড)। বিধানের ক্রমটি কীভাবে নিশ্চিত করতে হয় তা শিখতে Cloud Firestore এবং Cloud Storage প্রভিশনিংয়ের জন্য নমুনা
.tf
ফাইলটি দেখুন। বিশেষত,google_app_engine_application
ব্লকেরdepends_on
তালিকায় সংশ্লিষ্টgoogle_firestore_database
অন্তর্ভুক্ত করুন।
একটি App Engine অ্যাপ্লিকেশনটির জন্য Cloud Firestore উদাহরণ প্রয়োজন, তবে আপনার কাছে কেবল প্রকল্পের জন্য একটি Cloud Firestore উদাহরণ থাকতে পারে। সুতরাং, ত্রুটি বার্তাটি যেমন পরামর্শ দেয়, আপনি যদি ইতিমধ্যে একটি স্থানে প্রকল্পের Cloud Firestore উদাহরণটি সরবরাহ করে থাকেন তবে App Engine ত্রুটি করবে যদি আপনি কোনও অন্য জায়গায় Cloud Firestore উদাহরণ সরবরাহ করার চেষ্টা করেন। App Engine মনে করে যে আপনি ইতিমধ্যে বিদ্যমান Cloud Firestore উদাহরণটি "পুনরায় সরবরাহ" করার চেষ্টা করছেন।
এই ত্রুটিটি সমাধান করতে, Cloud Firestore এবং App Engine অ্যাপ্লিকেশন উভয়ের জন্য একই অবস্থান ব্যবহার করুন। আপনার যদি Cloud Firestore থেকে আলাদা জায়গায় Cloud Storage বালতি প্রয়োজন হয় তবে আপনি অতিরিক্ত বালতি সরবরাহ করতে পারেন ( একাধিক Cloud Storage বালতি তৈরির জন্য নমুনা কনফিগারটি দেখুন)।
আপনি যখন কোনও প্রকল্পের ডিফল্ট Cloud Storage বালতি সরবরাহ করেন ( google_app_engine_application
মাধ্যমে) এবং প্রকল্পটির এখনও Cloud Firestore উদাহরণ নেই, তখন google_app_engine_application
স্বয়ংক্রিয়ভাবে প্রকল্পের Cloud Firestore উদাহরণকে বিধান করে।
সুতরাং, যদি আপনার প্রকল্পের Cloud Firestore উদাহরণটি ইতিমধ্যে সরবরাহ করা হয় তবে আপনি যদি স্পষ্টভাবে Cloud Firestore উদাহরণটি সরবরাহ করার চেষ্টা করেন তবে google_firestore_database
ত্রুটি করবে।
প্রকল্পের Cloud Firestore উদাহরণটি একবার সরবরাহ করা হলে আপনি এটি "পুনরায় সরবরাহ" করতে পারবেন না বা এর অবস্থান পরিবর্তন করতে পারবেন না। ত্রুটিটি ঘটতে বাধা দিতে, আপনার কনফিগার ফাইল থেকে google_firestore_database
রিসোর্স ব্লকটি সরান। দ্রষ্টব্য, যদিও, আমরা প্রকল্পের ডিফল্ট Cloud Storage বালতির আগে Cloud Firestore ব্যবস্থা করার পরামর্শ দিই (কেন তার জন্য নীচের অংশটি দেখুন)।