Terraform ও Firebase-এর ব্যবহার শুরু করা
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
Firebase এখন
Terraform-এর সাথে কাজ করা শুরু করছে।
আপনি যদি এমন কোনও টিমে থাকেন যারা নির্দিষ্ট রিসোর্স ও পরিষেবা সহ Firebase প্রোজেক্ট
তৈরি করার প্রসেস অটোমেট ও স্ট্যান্ডার্ডাইজ করতে চান, তাহলে Firebase-এর সাথে
Terraform ব্যবহার করা আপনার জন্য উপযুক্ত হতে পারে।
Firebase-এর সাথে Terraform ব্যবহার করার প্রাথমিক ওয়ার্কফ্লোতে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত থাকে:
Terraform কনফিগারেশন ফাইল (একটি .tf ফাইল) তৈরি ও কাস্টমাইজ করা, যা
আপনি যে ইনফ্রাস্ট্রাকচার প্রোভিশন করতে চান (অর্থাৎ, আপনি যে রিসোর্স
প্রোভিশন করতে চান এবং যে পরিষেবা চালু করতে চান) তা নির্দিষ্ট করে।
gcloud CLI কমান্ড ব্যবহার করে যা Terraform-এর সাথে ইন্টারফেস করে
.tf ফাইলে উল্লেখ করা ইনফ্রাস্ট্রাকচার প্রোভিশন করে।
Terraform ও Firebase-এর সাহায্যে আপনি কী করতে পারবেন?
এই গাইডে দেওয়া সাধারণ ওয়ার্কফ্লোর উদাহরণ
Android অ্যাপের মাধ্যমে নতুন Firebase প্রোজেক্ট তৈরি করছে। তবে, Terraform-এর মাধ্যমে আপনি আরও অনেক কিছু
করতে পারবেন, যেমন:
Terraform ব্যবহার করে আগে থেকে থাকা ইনফ্রাস্ট্রাকচার মুছে দিন ও পরিবর্তন করুন।
Terraform ব্যবহার করে প্রোডাক্ট-নির্দিষ্ট কনফিগারেশন ও টাস্ক ম্যানেজ করা, যেমন:
Firebase Authentication সাইন-ইন পরিষেবা প্রদানকারী চালু করা হচ্ছে।
Cloud Storage বাকেট বা ডেটাবেস ইনস্ট্যান্স তৈরি করা এবং সেগুলির জন্য
Firebase Security Rules ডিপ্লয় করা।
Firebase App Hosting ব্যাকএন্ড, বিল্ড ও অন্যান্য
সম্পর্কিত রিসোর্স তৈরি করা হচ্ছে।
এইসব টাস্ক সম্পূর্ণ করতে আপনি স্ট্যান্ডার্ড Terraform কনফিগারেশন ফাইল ও কমান্ড ব্যবহার করতে
পারেন। এবং এই ব্যাপারে আপনাকে সাহায্য করার জন্য, আমরা বেশ কিছু সাধারণ ব্যবহারের ক্ষেত্রে
স্যাম্পেল Terraform কনফিগ ফাইল প্রদান করেছি।
Firebase-এর সাথে Terraform ব্যবহার করার জন্য সাধারণ ওয়ার্কফ্লো
পূর্বশর্ত
এই নির্দেশিকাটি Firebase-এর সাথে Terraform ব্যবহার করার একটি ভূমিকা, তাই এটি Terraform-এর সাথে প্রাথমিক দক্ষতার অনুমান করে। এই ওয়ার্কফ্লো শুরু করার আগে আপনি নিম্নলিখিত পূর্বশর্তগুলি
সম্পূর্ণ করেছেন কিনা তা নিশ্চিত করুন।
ব্যবহারকারীর অ্যাকাউন্ট ও পরিষেবা অ্যাকাউন্টের জন্য প্রয়োজনীয়তা দেখুন
ব্যবহারকারীর অ্যাকাউন্ট ব্যবহার করলে, আপনাকে Firebase পরিষেবার শর্তাবলীতে (Firebase ToS) সম্মতি জানাতে হবে। আপনি Firebase পরিষেবার শর্তাবলী গ্রহণ করেছেন যদি আপনি
Firebase কনসোলে
একটি Firebase প্রোজেক্ট দেখতে পান
Terraform-এর নির্দিষ্ট কিছু অ্যাকশন (যেমন, প্রোজেক্ট তৈরি করা) নেওয়ার জন্য,
নিম্নলিখিত শর্তগুলি পূরণ করতে হবে:
ব্যবহারকারী বা পরিষেবা অ্যাকাউন্টের কাছে সেইসব অ্যাকশনের জন্য প্রযোজ্য IAM অ্যাক্সেস
থাকতে হবে।
ব্যবহারকারী বা পরিষেবা অ্যাকাউন্ট Google Cloud সংস্থার অংশ হলে,
সংস্থার নীতি অনুযায়ী অ্যাকাউন্টকে অবশ্যই সেইসব অ্যাকশন নেওয়ার অনুমতি দিতে হবে।
ধাপ ১: Terraform কনফিগারেশন ফাইল তৈরি ও কাস্টমাইজ করা
Terraform কনফিগারেশন ফাইলের দুটি প্রধান বিভাগ প্রয়োজন (যা বিস্তারিতভাবে বর্ণনা করা হয়েছে
নিচে):
এই গাইডে, আপনি এই কনফিগারেশন ফাইলটি ব্যবহার করে provider
সেটআপ এবং Terraform-এর মাধ্যমে তৈরি করতে চান এমন সমস্ত ইনফ্রাস্ট্রাকচার নির্দিষ্ট করবেন। তবে,
মনে রাখবেন যে পরিষেবা প্রদানকারীর সেট-আপ কীভাবে অন্তর্ভুক্ত করবেন সেই সংক্রান্ত বিকল্প আপনার কাছে আছে।
কীভাবে provider সেট-আপ
অন্তর্ভুক্ত করবেন তার বিকল্প দেখুন
আপনার Terraform কনফিগারেশনের বাকি অংশে কীভাবে provider সেট-আপ অন্তর্ভুক্ত করবেন তার জন্য আপনার কাছে নিম্নলিখিত বিকল্পগুলি রয়েছে:
বিকল্প ১: একটি Terraform .tf কনফিগারেশন ফাইলের একেবারে উপরে এটি যোগ করুন (এই গাইডে যেমন দেখানো হয়েছে)।
আপনি Terraform ব্যবহার করা শুরু করলে বা Firebase-এর সাথে Terraform ব্যবহার করে দেখতে চাইলে
এই বিকল্পটি ব্যবহার করুন।
বিকল্প ২: এটি একটি আলাদা .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="~> 6.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 ব্লক ব্যবহার করে কী ধরনের ইনফ্রাস্ট্রাকচার তৈরি করতে হবে তা উল্লেখ করুন
আপনার Terraform কনফিগারেশন ফাইলে (এই গাইডের জন্য, আপনার main.tf ফাইল), আপনাকে
Terraform-এর মাধ্যমে তৈরি করতে চান এমন সমস্ত ইনফ্রাস্ট্রাকচার উল্লেখ করতে হবে (অর্থাৎ, আপনি যে সমস্ত
রিসোর্স প্রোভিশন করতে চান এবং যে সমস্ত পরিষেবা চালু করতে চান)। এই
গাইডে, Terraform-এ কাজ করে এমন সব Firebase রিসোর্সের
সম্পূর্ণ তালিকা দেখুন।
আপনার 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_overridename="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_overrideproject=google_project.default.project_idfor_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-betaproject=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-betaproject=google_project.default.project_iddisplay_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 projectprovider=google-beta.no_user_project_overridename="Project Display Name" // learn more about the project nameproject_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 APISprovider=google-beta.no_user_project_overrideproject=google_project.default.project_idfor_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 onprovider=google-betaproject=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-betaproject=google_project.default.project_iddisplay_name="My Awesome Android app" # learn more about an app's display namepackage_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,]}
ধাপ ২: নির্দিষ্ট ইনফ্রাস্ট্রাকচার তৈরি করতে Terraform কমান্ড রান করুন
রিসোর্স প্রোভিশন করতে এবং আপনার main.tf ফাইলে উল্লেখ করা পরিষেবা চালু করতে, আপনার main.tf ফাইলের মতো একই ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডগুলি রান করুন।
এইসব কমান্ড সম্পর্কে বিস্তারিত তথ্যের জন্য,
Terraform ডকুমেন্টেশন দেখুন।
আপনি যদি ডিরেক্টরিতে প্রথমবার Terraform কমান্ড রান করেন, তাহলে আপনাকে কনফিগারেশন ডিরেক্টরি শুরু করতে হবে এবং Google Terraform প্রোভাইডার ইনস্টল করতে হবে। এই কমান্ড রান করে এটি করুন:
terraform init
নিম্নলিখিত কমান্ড রান করে আপনার main.tf ফাইলে উল্লেখ করা ইনফ্রাস্ট্রাকচার তৈরি করুন:
terraform apply
সবকিছু প্রত্যাশা অনুযায়ী প্রভিশন বা চালু করা হয়েছে কিনা তা কনফার্ম করুন:
বিকল্প ১: নিম্নলিখিত কমান্ড রান করে আপনার টার্মিনালে প্রিন্ট করা কনফিগারেশন
দেখুন:
নিম্নলিখিত Firebase ও Google রিসোর্সে Terraform কাজ করে। আর আমরা
সব সময় আরও রিসোর্স যোগ করছি! তাই, Terraform-এর মাধ্যমে ম্যানেজ করতে চান এমন রিসোর্স দেখতে না পেলে,
সেটি উপলভ্য আছে কিনা তা শীঘ্রই আবার চেক করুন অথবা
GitHub রেপোতে সমস্যাটি ফাইল করে
অনুরোধ করুন।
google_identity_platform_config —
Google Cloud Identity Platform (GCIP) (যা Firebase Authentication-এর ব্যাকএন্ড) চালু করুন
এবং প্রোজেক্ট-লেভেল যাচাইকরণ সেটিংস প্রদান করুন
যে প্রোজেক্টে Terraform, GCIP এবং/অথবা Firebase Authentication চালু করবে,
সেটি Blaze প্রাইসিং প্ল্যানে থাকতে হবে (অর্থাৎ, প্রোজেক্টের সাথে
একটি Cloud Billing অ্যাকাউন্ট যুক্ত থাকতে হবে)। আপনি google_project রিসোর্সে
billing_account
অ্যাট্রিবিউট সেট করে
প্রোগ্রাম্যাটিক্যালি এটি করতে পারেন।
এই রিসোর্স আরও কনফিগারেশন চালু করে, যেমন স্থানীয় সাইন-ইন পদ্ধতি,
যেমন পরিচয় গোপন রেখে, ইমেল/পাসওয়ার্ড এবং ফোন যাচাইকরণ, এর পাশাপাশি
ব্লকিং ফাংশন এবং অনুমোদিত ডোমেন।
Terraform-এর মাধ্যমে বহু-স্তরীয় যাচাইকরণ (MFA) কনফিগার করা
Firebase App Hosting
google_firebase_app_hosting_backend
— Firebase App Hosting ব্যাকএন্ড তৈরি ও ম্যানেজ করা, যার মধ্যে রয়েছে GitHub
রিপোজিটরি কানেকশন এবং ক্রমাগত ডিপ্লয়মেন্টের জন্য লাইভ ব্রাঞ্চ।
Terraform-এর মাধ্যমে Firebase Realtime Database Security Rules ডেপ্লয় করা (প্রোগ্রাম্যাটিক বিকল্প সহ অন্যান্য টুলিং ব্যবহার করে
এই Security Rules কীভাবে ডেপ্লয় করবেন
তা জানুন)
সাধারণ ব্যবহারের ক্ষেত্রে Terraform কনফিগারেশন ফাইলের নমুনা
GCIP-এর সাথে
Firebase Authentication সেট-আপ করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টটিকে একটি Cloud Billing অ্যাকাউন্টের সাথে যুক্ত করে (GCIP সহ Firebase Authentication-এর জন্য
Blaze প্রাইসিং প্ল্যান প্রয়োজন),
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে,
GCIP সহ Firebase Authentication সেট-আপ করে,
এবং প্রোজেক্টের সাথে তিনটি ভিন্ন অ্যাপের ধরন রেজিস্টার করে।
মনে রাখবেন, Terraform-এর মাধ্যমে Firebase Authentication সেট-আপ করতে GCIP চালু করতে হবে।
# Creates a new Google Cloud project.resource"google_project""auth"{provider=google-beta.no_user_project_overridefolder_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"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_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-betaproject=google_project.auth.project_iddepends_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-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_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=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
Firebase SQL Connect
পরিষেবা প্রভিশন করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে এবং
একটি SQL Connect পরিষেবা প্রদান করে।
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_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 Data Connect).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""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.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""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে,
প্রোজেক্টের ডিফল্ট Realtime Database ইনস্ট্যান্সের ব্যবস্থা করে
এবং প্রোজেক্টের সাথে তিনটি ভিন্ন অ্যাপের ধরন রেজিস্টার করে।
# Creates a new Google Cloud project.resource"google_project""rtdb"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_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-betaproject=google_project.rtdb.project_iddepends_on=[google_project_service.rtdb]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_firebase_project.rtdb.project # See available locations: https://firebase.google.com/docs/database/locationsregion="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"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Web app"}
একাধিক Firebase Realtime Database ইনস্ট্যান্স
প্রভিশন করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টটিকে একটি Cloud Billing অ্যাকাউন্টের সাথে যুক্ত করে (একাধিক Realtime Database ইনস্ট্যান্সের জন্য
Blaze প্রাইসিং প্ল্যান প্রয়োজন),
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে,
একাধিক Realtime Database ইনস্ট্যান্সের ব্যবস্থা করে
(প্রোজেক্টের ডিফল্ট Realtime Database ইনস্ট্যান্স সহ),
এবং প্রোজেক্টের সাথে তিনটি ভিন্ন ধরনের অ্যাপ রেজিস্টার করে।
# Creates a new Google Cloud project.resource"google_project""rtdb-multi"{provider=google-beta.no_user_project_overridefolder_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"}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_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-betaproject=google_project.rtdb-multi.project_iddepends_on=[google_project_service.rtdb-multi]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/database/locationsregion="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"}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # 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"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Web app"}
ডিফল্ট
Cloud Firestore ইনস্ট্যান্সের ব্যবস্থা করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে,
প্রোজেক্টের ডিফল্ট 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_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_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-betaproject=google_project.firestore.project_iddepends_on=[google_project_service.firestore]}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectname="(default)" # See available locations: https://firebase.google.com/docs/firestore/locationslocation_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"}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_firestore_database.firestore.projectsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}}}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_firestore_database.firestore.project}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"}}# 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-betaproject=google_firestore_database.firestore.projectcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Web app"}
এটি হল Cloud Firestore Security Rules-এর রুলসেট যা firestore.rules নামের লোকাল ফাইলে
থাকতে হবে।
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
ডিফল্ট Cloud Storage বাকেট
প্রভিশন করুন
অতিরিক্ত Cloud Storageটি বাকেট
প্রভিশন করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টটিকে একটি Cloud Billing অ্যাকাউন্টের সাথে যুক্ত করে (অতিরিক্ত বাকেটের জন্য
Blaze প্রাইসিং প্ল্যান প্রয়োজন),
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে,
অতিরিক্ত, ডিফল্ট নয় এমন 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_overridefolder_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"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_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-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="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 existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
এটি হল Cloud Storage Security Rules-এর রুলসেট যা storage.rules নামের লোকাল ফাইলে
থাকতে হবে।
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Firebase App Check-এর মাধ্যমে
API রিসোর্স সুরক্ষিত করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে এবং
Firebase App Check-এর জন্য Cloud Firestore এনফোর্সমেন্ট সেট-আপ ও চালু করে
যাতে এটি শুধুমাত্র আপনার Android অ্যাপ থেকে অ্যাক্সেস করা যায়।
# Creates a new Google Cloud project.resource"google_project""appcheck"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_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-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_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"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
Firebase Extension-এর
ইনস্ট্যান্স ইনস্টল করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে এবং
প্রোজেক্টে Firebase Extension-এর একটি নতুন ইনস্ট্যান্স
ইনস্টল করে। ইনস্ট্যান্স আগে থেকেই থাকলে,
কনফিগে দেওয়া ভ্যালুর ভিত্তিতে এর প্যারামিটার আপডেট করা হয়।
# Creates a new Google Cloud project.resource"google_project""extensions"{provider=google-beta.no_user_project_overridefolder_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"}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_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-betaproject=google_project.extensions.project_iddepends_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-betaproject=google_firebase_project.extensions.projectinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="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"}}}
Firebase AI Logic চালু ও সুরক্ষিত করুন
এই কনফিগারেশন একটি নতুন Google Cloud প্রোজেক্ট তৈরি করে,
Firebase AI Logic সহ প্রোজেক্টের জন্য Firebase পরিষেবা চালু করে এবং
Firebase AI Logic-এর জন্য Firebase App Check-এর এনফোর্সমেন্ট সেট-আপ ও চালু করে
যাতে এটি শুধুমাত্র আপনার অ্যাপ থেকে অ্যাক্সেস করা যায়।
# Creates a new Google Cloud project.resource"google_project""vertex"{provider=google-beta.no_user_project_overridefolder_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 Vertex AI in Firebase).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.vertex.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","serviceusage.googleapis.com", # Required APIs for Vertex AI in Firebase"aiplatform.googleapis.com","firebasevertexai.googleapis.com", # App Check is recommended to protect Vertex AI in Firebase from abuse"firebaseappcheck.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""vertex"{provider=google-betaproject=google_project.vertex.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Web App"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Android App"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Creates a Firebase Apple App in the new project created earlier.resource"google_firebase_apple_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Apple App"bundle_id="bundle.id"team_id="1234567890"}### Protects Vertex AI in Firebase with App Check.# Turns on enforcement for Vertex AI in Firebaseresource"google_firebase_app_check_service_config""vertex"{provider=google-betaproject=google_firebase_project.vertex.projectservice_id="firebaseml.googleapis.com"enforcement_mode="ENFORCED"}# Enables the reCAPTCHA Enterprise APIresource"google_project_service""recaptcha_enterprise"{provider=google-betaproject=google_firebase_project.vertex.projectservice="recaptchaenterprise.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables the Play Integrity APIresource"google_project_service""play_integrity"{provider=google-betaproject=google_firebase_project.vertex.projectservice="playintegrity.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Allows the web app to use reCAPTCHA Enterprise with App Checkresource"google_firebase_app_check_recaptcha_enterprise_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_web_app.app.app_idsite_key="your site key"token_ttl="7200s" # Optionaldepends_on=[google_project_service.recaptcha_enterprise]}# Registers the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_android_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=length(google_firebase_android_app.app.sha256_hashes) > 0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}depends_on=[google_project_service.play_integrity]}# Registers the Apple app with the AppAttest providerresource"google_firebase_app_check_app_attest_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_apple_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=google_firebase_apple_app.app.team_id!=""error_message="Provide a Team ID on the Apple App to use App Check"}}}
ম্যানুয়ালি App Hosting ব্যাকএন্ডের ব্যবস্থা করা
এই কনফিগারেশন দেখায় যে Terraform ব্যবহার করে কীভাবে ম্যানুয়ালি App Hosting
ব্যাকএন্ড প্রোভিশন করতে হয়। এই পদ্ধতিতে আপনি তৈরি করা রিসোর্সের উপর আরও ভালভাবে নিয়ন্ত্রণ করতে পারবেন, তবে আপনাকে প্রতিটি রিসোর্স আলাদাভাবে সংজ্ঞায়িত করতে হবে। ডিফল্ট বিকল্পের বাইরে ব্যাকএন্ড কাস্টমাইজ করার প্রয়োজন হলে এটি
উপযোগী।
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_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 App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.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""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}# Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.email}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Creates a Buildresource"google_firebase_app_hosting_build""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idbuild_id="my-build"source{container{ # TODO: use your own imageimage="us-docker.pkg.dev/cloudrun/container/hello"}}}# Rolls out the Buildresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idtarget{splits{build=google_firebase_app_hosting_build.example.namepercent=100}}}
GitHub ব্যবহার করে
App Hosting ব্যাকএন্ডের ব্যবস্থা করুন
এই কনফিগারেশন দেখায় যে GitHub রিপোজিটরিতে স্টোর করা অ্যাপ্লিকেশন কোড ব্যবহার করে
কীভাবে App Hosting ব্যাকএন্ড প্রোভিশন করতে হয়। এই পদ্ধতি আপনাকে
GitHub পুল রিকোয়েস্ট এবং CI/CD পাইপলাইনের মাধ্যমে আপনার ইনফ্রাস্ট্রাকচার ম্যানেজ ও আপডেট করতে দেয়, যা App Hosting ডিপ্লয়মেন্টের সাধারণ মডেল অনুযায়ী কাজ করে।
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_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 App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.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""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
সমস্যার সমাধান ও প্রায়শই জিজ্ঞাসিত প্রশ্ন
আপনি
প্রজেক্ট-সম্পর্কিত সব অ্যাট্রিবিউট (যেমন
project এবং user_project_override) সম্পর্কে আরও জানতে চান
"প্রজেক্ট" নিয়ে কাজ করার সময় এই নির্দেশিকা নিম্নলিখিত Terraform অ্যাট্রিবিউট ব্যবহার করে।
resource ব্লকের মধ্যে project
সাজেস্ট করা হয়েছে: যখনই সম্ভব, প্রতিটি resource ব্লকের মধ্যে project অ্যাট্রিবিউট অন্তর্ভুক্ত করুন
প্রোজেক্ট অ্যাট্রিবিউট অন্তর্ভুক্ত করার মাধ্যমে, Terraform নির্দিষ্ট প্রোজেক্টের মধ্যে রিসোর্স ব্লকে
উল্লেখ করা ইনফ্রাস্ট্রাকচার তৈরি করবে। এই গাইড এবং
আমাদের স্যাম্পেল কনফিগারেশন ফাইল, সবই এই পদ্ধতি ব্যবহার করে।
project সম্পর্কে
অফিসিয়াল Terraform ডকুমেন্টেশন দেখুন।
provider ব্লকের মধ্যে user_project_override
বেশিরভাগ রিসোর্স প্রোভিশন করার জন্য, আপনাকে
user_project_override = true ব্যবহার করতে হবে, যার অর্থ হল আপনার নিজের
Firebase প্রোজেক্টের কোটা চেক করা। তবে, আপনার নতুন প্রোজেক্ট সেট-আপ করতে, যাতে এটি কোটা চেক গ্রহণ করতে পারে,
আপনাকে প্রথমে user_project_override = false ব্যবহার করতে হবে।
আপনি এই সমস্যা দেখতে পান:
generic::permission_denied: Firebase Tos Not Accepted.
gcloud CLI কমান্ড চালানোর জন্য আপনি যে ব্যবহারকারীর অ্যাকাউন্ট ব্যবহার করছেন, সেটি Firebase পরিষেবার শর্তাবলীতে (Firebase ToS) সম্মতি জানিয়েছে কিনা তা নিশ্চিত করুন।
ব্যবহারকারীর অ্যাকাউন্টে সাইন-ইন করা ব্রাউজার ব্যবহার করে এবং
Firebase কনসোলে আগে থেকে থাকা Firebase প্রোজেক্ট দেখার চেষ্টা করে
আপনি এই চেক করতে পারবেন। আপনি যদি আগে থেকে আছে এমন কোনও Firebase প্রোজেক্ট দেখতে পান, তাহলে বুঝতে হবে যে ব্যবহারকারীর অ্যাকাউন্ট
Firebase পরিষেবার শর্তাবলী মেনে নিয়েছে।
আপনি যদি আগে থেকে থাকা কোনও Firebase প্রোজেক্ট দেখতে না পান, তাহলে ব্যবহারকারীর অ্যাকাউন্ট
সম্ভবত Firebase পরিষেবার শর্তাবলী গ্রহণ করেনি। এই সমস্যার সমাধান করতে,
Firebase কনসোল-এর মাধ্যমে নতুন Firebase প্রোজেক্ট তৈরি করুন এবং
প্রোজেক্ট তৈরির অংশ হিসেবে Firebase পরিষেবার শর্তাবলীতে সম্মতি দিন। আপনি কনসোলের প্রোজেক্ট সেটিংস থেকে
এই প্রোজেক্টটি অবিলম্বে মুছে ফেলতে পারবেন।
terraform apply রান করার পরে,
আপনি এই সমস্যা দেখতে পাবেন:
generic::permission_denied: IAM authority does not have the
permission.
কয়েক মিনিট অপেক্ষা করে terraform apply আবার রান করার চেষ্টা করুন।
রিসোর্স
তৈরি করা যায়নি, তবে আপনি terraform apply
আবার রান করলে, এটি ALREADY_EXISTS বলে।
বিভিন্ন সিস্টেমে প্রোপাগেশন সংক্রান্ত বিলম্বের কারণে এটি হতে পারে। terraform import রান করে
Terraform স্টেটে রিসোর্স ইমপোর্ট করার মাধ্যমে এই সমস্যার
সমাধান করার চেষ্টা করুন। তারপর আবার terraform apply রান করার চেষ্টা করুন।
Cloud Firestore-এর সাথে কাজ করার সময়
আপনি এই সমস্যা দেখতে পান: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
সমস্যাটি থেকে বোঝা যাচ্ছে যে, Terraform একই সময়ে একাধিক ইন্ডেক্স প্রভিশন করার
এবং/অথবা ডকুমেন্ট তৈরি করার চেষ্টা করছে এবং কনকারেন্সি সংক্রান্ত সমস্যা হয়েছে।
terraform apply আবার রান করে দেখুন।
আপনি এই
সমস্যা দেখতে পাবেন:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
এই সমস্যার অর্থ হল, Terraform জানে না যে কোন প্রোজেক্টের কোটা চেক করতে
হবে। সমস্যার সমাধান করতে, resource ব্লকে নিম্নলিখিত বিষয়গুলি চেক করুন:
project অ্যাট্রিবিউটের জন্য আপনি কোনও ভ্যালু উল্লেখ করেছেন কিনা তা ভাল করে দেখে নিন।
আপনি user_project_override = true-এর সাথে (কোনও উপনাম নয়) পরিষেবা প্রদানকারী ব্যবহার করছেন কিনা তা নিশ্চিত করুন, যা Firebase স্যাম্পেলে google-beta।
নতুন Google Cloud প্রোজেক্ট
তৈরি করার সময়, আপনি এই সমস্যার সম্মুখীন হন যে নতুন প্রোজেক্টের জন্য নির্দিষ্ট করা প্রোজেক্ট আইডি
আগে থেকেই আছে।
প্রোজেক্ট আইডি আগে থেকেই থাকার সম্ভাব্য কারণগুলি এখানে দেওয়া হল:
এই আইডির সাথে যুক্ত প্রোজেক্টটি অন্য কারও।
সমাধান করতে: অন্য প্রোজেক্ট আইডি বেছে নিন।
সেই আইডির সাথে যুক্ত প্রোজেক্টটি সম্প্রতি মুছে ফেলা হয়েছে (সফ্ট-ডিলিট
অবস্থায়)।
সমাধান করতে: আপনি যদি মনে করেন যে আইডির সাথে যুক্ত প্রোজেক্টটি আপনার, তাহলে projects.get REST API ব্যবহার করে প্রোজেক্টের স্ট্যাটাস
চেক করুন।
বর্তমান ব্যবহারকারীর অধীনে সেই আইডির সাথে সংশ্লিষ্ট প্রোজেক্ট সঠিকভাবে আছে। সমস্যার
সম্ভাব্য কারণ হতে পারে যে আগের terraform apply
বাধাগ্রস্ত হয়েছে।
সমাধান করতে: এই কমান্ডগুলি রান করুন: terraform import google_project.default PROJECT_ID
এবং তারপর terraform import google_firebase_project.default PROJECT_ID
ডিফল্ট Cloud Storage বাকেট
তৈরি করার আগে ডিফল্ট Cloud Firestore ইনস্ট্যান্স
কেন তৈরি করতে হবে?
আপনি যদি ডিফল্ট Cloud Firestore ইনস্ট্যান্স প্রভিশন করার চেষ্টা করার
আগে ডিফল্ট Cloud Storage বাকেট (google_app_engine_application-এর মাধ্যমে)
প্রভিশন করে থাকেন, তাহলে দেখতে পাবেন যে আপনার
ডিফল্ট Cloud Firestore ইনস্ট্যান্স আগে থেকেই প্রভিশন করা আছে। মনে রাখবেন যে
প্রভিশন করা ডেটাবেস ইনস্ট্যান্স Datastore মোডে আছে, যার অর্থ হল এটি Firebase SDK, যাচাইকরণ বা Firebase Security Rules-এর জন্য অ্যাক্সেসযোগ্য নয়। আপনি যদি এইসব Firebase পরিষেবার সাথে
Cloud Firestore ব্যবহার করতে চান, তাহলে আপনাকে ডেটাবেস খালি করতে হবে এবং তারপর
Google Cloud কনসোল থেকে এর ডেটাবেসের ধরন পরিবর্তন করতে হবে।
Cloud Storage (google_app_engine_application-এর
মাধ্যমে) এবং তারপর আপনার ডিফল্ট
Cloud Firestore ইনস্ট্যান্স প্রোভিশন করার চেষ্টা করার সময়, আপনি এই সমস্যা দেখতে পান:
Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
আপনি যখন কোনও প্রোজেক্টের ডিফল্ট Cloud Storage বাকেট (google_app_engine_application-এর মাধ্যমে)
প্রভিশন করেন এবং প্রোজেক্টে এখনও ডিফল্ট
Cloud Firestore ইনস্ট্যান্স না থাকে, তখন google_app_engine_application অটোমেটিক
প্রোজেক্টের ডিফল্ট Cloud Firestore ইনস্ট্যান্স প্রভিশন করে।
তাই, আপনার প্রোজেক্টের ডিফল্ট Cloud Firestore ইনস্ট্যান্স আগে থেকেই
প্রভিশন করা আছে, আপনি যদি আবার সেই ডিফল্ট ইনস্ট্যান্স স্পষ্টভাবে
প্রভিশন করার চেষ্টা করেন, তাহলে google_firestore_database-এ সমস্যা হবে।
প্রোজেক্টের ডিফল্ট Cloud Firestore ইনস্ট্যান্স প্রোভিশন করা হয়ে গেলে, আপনি এটি
"আবার প্রোভিশন" করতে বা এর লোকেশন পরিবর্তন করতে পারবেন না। মনে রাখবেন যে প্রভিশন করা ডেটাবেস
ইনস্ট্যান্স Datastore মোডে আছে, যার অর্থ হল এটি Firebase SDK, যাচাইকরণ বা Firebase Security Rules-এর জন্য অ্যাক্সেসযোগ্য নয়। আপনি যদি এইসব Firebase পরিষেবার সাথে Cloud Firestore
ব্যবহার করতে চান, তাহলে আপনাকে ডেটাবেস খালি করতে হবে এবং তারপরে
Google Cloud কনসোল থেকে
এর ডেটাবেসের ধরন পরিবর্তন করতে হবে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2026-11-10 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]