1. ভূমিকা
লক্ষ্য
আপনি Firebase প্রকল্প সেট আপ এবং পরিচালনা করতে Terraform ব্যবহার করতে পারেন, যার মধ্যে অবকাঠামো এবং Firebase পণ্যের প্রোগ্রাম্যাটিক কনফিগারেশন অন্তর্ভুক্ত রয়েছে।
এই কোডল্যাবটি প্রথমে বর্ণনা করে কিভাবে একটি নতুন ফায়ারবেস প্রকল্প তৈরি করার জন্য একটি টেরাফর্ম কনফিগারেশন ফাইল তৈরি করতে হয়, তারপরে সেই প্রকল্পে আপনি যে অ্যাপ এবং ফায়ারবেস পণ্যগুলি ব্যবহার করতে চান তা কীভাবে কনফিগার করতে হয়। আমরা টেরাফর্ম কমান্ড লাইনের মূল বিষয়গুলিও কভার করি, যেমন পরিবর্তনগুলি পূর্বরূপ দেখা এবং তারপরে সেগুলি বাস্তবায়ন করা।
আপনি যদি Terraform দিয়ে Firebase প্রকল্প এবং পণ্য সেট আপ এবং পরিচালনা করতে শিখতে চান, তাহলে এই কোডল্যাবটি আপনার জন্য!
তুমি কি শিখবে
- কিভাবে একটি টেরাফর্ম কনফিগারেশন ফাইল (
*.tf) তৈরি করবেন - আপনার অবকাঠামো পরিচালনা করার জন্য টেরাফর্ম সিএলআই কমান্ড কীভাবে ব্যবহার করবেন
- আপনার রিসোর্স এবং পরিষেবা আপডেট করার জন্য আপনার কনফিগারেশন কীভাবে পরিবর্তন করবেন
- একটি বাস্তব ওয়েব অ্যাপে (যাকে বলা হয় Friendly Chat ) আপনার কনফিগারেশন কীভাবে প্রয়োগ করবেন
- বিভিন্ন পরিবেশে (উৎপাদন, স্টেজিং, ইত্যাদি) সমান্তরাল (এবং ইন-সিঙ্ক) কনফিগারেশন কীভাবে সংজ্ঞায়িত করবেন
তোমার যা লাগবে
- একটি টার্মিনাল/কনসোল
- আপনার পছন্দের IDE/টেক্সট এডিটর, যেমন WebStorm , Atom , Sublime , অথবা VS Code
- আপনার পছন্দের ব্রাউজার, যেমন Chrome
- গুগল ক্লাউড সিএলআই (জিক্লাউড সিএলআই) - এই সিএলআইটি ইনস্টল করুন এবং একটি ব্যবহারকারী অ্যাকাউন্ট বা একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে লগ ইন করুন।
এই কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য, আপনার টেরাফর্ম এবং এর পরিভাষা সম্পর্কে প্রাথমিক দক্ষতা থাকা প্রয়োজন, যার মধ্যে নিম্নলিখিত পূর্বশর্তগুলি অন্তর্ভুক্ত রয়েছে:
- টেরাফর্ম ইনস্টল করুন এবং তাদের অফিসিয়াল টিউটোরিয়াল ব্যবহার করে টেরাফর্মের সাথে পরিচিত হন।
এই কোডল্যাবটি একটি বাস্তব নমুনা অ্যাপ প্রদান করে যাতে আপনি Terraform এর মাধ্যমে যা সরবরাহ করেন তা পরীক্ষা করতে এবং ইন্টারঅ্যাক্ট করতে পারেন। এটি করার জন্য, আপনার নিম্নলিখিতগুলির প্রয়োজন হবে:
- একটি ওয়েব অ্যাপের নমুনা কোড - কোডল্যাবের পরবর্তী ধাপে এই কোডটি ডাউনলোড করুন
- প্যাকেজ ম্যানেজার npm (যা সাধারণত Node.js এর সাথে আসে) - এই টুলগুলি ইনস্টল করুন
- ফায়ারবেস সিএলআই - এই সিএলআই ইনস্টল করুন এবং লগ ইন করুন
2. শুরুর কোডটি পান
এই কোডল্যাবে, আপনি একটি বাস্তব ওয়েব অ্যাপের মাধ্যমে Terraform-এর মাধ্যমে কী সরবরাহ করেন তা পরীক্ষা করে দেখতে পারেন। আমরা এটি করার পরামর্শ দিচ্ছি যাতে আপনি Terraform-প্রবিধানিত সংস্থানগুলি ব্যবহারের জন্য প্রয়োজনীয় সমস্ত পদক্ষেপগুলি বুঝতে পারেন।
কমান্ড লাইন থেকে কোডল্যাবের গিটহাব রিপোজিটরি ক্লোন করুন:
git clone https://github.com/firebase/codelab-friendlychat-web
বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, তাহলে আপনি রিপোজিটরিটি একটি জিপ ফাইল হিসেবে ডাউনলোড করতে পারেন।
৩. একটি টেরাফর্ম কনফিগারেশন তৈরি করুন
টেরাফর্ম সেট আপ করা হচ্ছে
- ডাউনলোড করা নমুনা অ্যাপের কোডবেসে,
webডিরেক্টরির রুটে নেভিগেট করুন। - সেই ডিরেক্টরির মূলে, নিম্নলিখিত প্রাথমিক সেটআপ সহ
main.tfনামক একটি Terraform কনফিগারেশন ফাইল তৈরি করুন:
প্রধান.টিএফ# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
প্রতিটি google-beta প্রোভাইডারে user_project_override নামে একটি অ্যাট্রিবিউট থাকে যা নির্ধারণ করে যে Terraform থেকে কীভাবে অপারেশনগুলি কোটা চেক করা হবে। বেশিরভাগ রিসোর্স সরবরাহ করার জন্য, আপনার user_project_override = true ব্যবহার করা উচিত, যার অর্থ আপনার নিজস্ব Firebase প্রোজেক্টের সাথে কোটা চেক করা। তবে, আপনার নতুন প্রোজেক্ট সেট আপ করার জন্য যাতে এটি কোটা চেক গ্রহণ করতে পারে, আপনাকে প্রথমে user_project_override=false ব্যবহার করতে হবে। Terraform alias সিনট্যাক্স আপনাকে এই কোডল্যাবের পরবর্তী ধাপগুলিতে দুটি প্রোভাইডার সেটআপের মধ্যে পার্থক্য করতে দেয়।
ডিরেক্টরিতে Terraform আরম্ভ করুন
প্রথমবারের জন্য একটি নতুন কনফিগারেশন তৈরি করতে কনফিগারেশনে উল্লেখিত সরবরাহকারী ডাউনলোড করতে হবে।
এই ইনিশিয়ালাইজেশনটি করার জন্য, আপনার main.tf কনফিগারেশন ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান:
terraform init
৪. টেরাফর্মের মাধ্যমে একটি ফায়ারবেস প্রকল্প তৈরি করুন
"একটি ফায়ারবেস প্রকল্প তৈরি করার" জন্য, এটি মনে রাখা গুরুত্বপূর্ণ যে প্রতিটি ফায়ারবেস প্রকল্প আসলে একটি গুগল ক্লাউড প্রকল্প, কেবলমাত্র এর জন্য ফায়ারবেস পরিষেবাগুলি সক্ষম থাকলে।
অন্তর্নিহিত গুগল ক্লাউড প্রকল্প এবং API গুলির জন্য ব্লক যোগ করুন
- প্রথমে, অন্তর্নিহিত গুগল ক্লাউড প্রকল্পের ব্যবস্থা করুন।
আপনারmain.tfকনফিগারেশন ফাইলে, নিম্নলিখিত রিসোর্স ব্লকটি যোগ করুন।
আপনাকে আপনার নিজস্ব প্রোজেক্টের নাম (যেমন"Terraform FriendlyChat Codelab") এবং আপনার নিজস্ব প্রোজেক্ট আইডি (যেমন"terraform-codelab-your-initials") উল্লেখ করতে হবে। মনে রাখবেন যেnameমানটি শুধুমাত্র Firebase ইন্টারফেসের মধ্যেই ব্যবহৃত হয় এবং শেষ ব্যবহারকারীদের কাছে দৃশ্যমান নয়। যদিওproject_idমানটি Google-এর কাছে আপনার প্রোজেক্টকে অনন্যভাবে শনাক্ত করে, তাই নিশ্চিত করুন যে আপনি একটি অনন্য মান উল্লেখ করেছেন। প্রধান.টিএফ... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } - এরপর, আপনাকে প্রয়োজনীয় অন্তর্নিহিত API গুলি সক্ষম করতে হবে: পরিষেবা ব্যবহার API এবং ফায়ারবেস ম্যানেজমেন্ট API।
ফায়ারবেস প্রজেক্ট তৈরি করার জন্য ফায়ারবেস কনসোল ব্যবহার করার সময় সাধারণত এই API সক্ষমকরণটি পর্দার আড়ালে পরিচালিত হয়, তবে টেরাফর্মকে এই সক্ষমকরণটি করার জন্য স্পষ্টভাবে বলা প্রয়োজন।
আপনারmain.tfকনফিগারেশন ফাইলে (নতুন ক্লাউড প্রজেক্ট তৈরি করে এমন ব্লকের ঠিক নীচে), নিম্নলিখিত রিসোর্স ব্লকটি যোগ করুন:
প্রধান.টিএফ পরিষেবা ব্যবহারের API সক্ষম করার মাধ্যমে, আপনার নতুন প্রকল্প কোটা চেক গ্রহণ করতে সক্ষম হবে! সুতরাং, পরবর্তী সমস্ত রিসোর্স প্রভিশনিং এবং পরিষেবা সক্ষম করার জন্য, আপনার... # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false }user_project_overrideসহ সরবরাহকারী ব্যবহার করা উচিত (কোনও উপনামের প্রয়োজন নেই)।
Firebase পরিষেবা সক্রিয় করতে একটি ব্লক যোগ করুন
"একটি ফায়ারবেস প্রকল্প তৈরি" করার জন্য যে সর্বশেষ জিনিসটি প্রয়োজন তা হল প্রকল্পে ফায়ারবেস পরিষেবাগুলি সক্ষম করা।
আপনার main.tf কনফিগারেশন ফাইলে চালিয়ে যাওয়ার পর, নিম্নলিখিত রিসোর্স ব্লকটি যোগ করুন।
উপরে যেমন উল্লেখ করা হয়েছে, মনে রাখবেন যে এই রিসোর্স ব্লকটি user_project_override সহ প্রোভাইডার ব্যবহার করছে (কোন উপনামের প্রয়োজন নেই)।
প্রধান.টিএফ
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
উপরের রিসোর্স ব্লকে, আপনি হয়তো depends_on ধারাটি লক্ষ্য করতে পারেন, যা Terraform কে অন্তর্নিহিত API গুলি সক্রিয় হওয়ার জন্য অপেক্ষা করতে বলে। এই ধারাটি ছাড়া, Terraform নির্ভরতা সম্পর্কে জানে না এবং সমান্তরালভাবে সংস্থান সরবরাহ করার সময় ত্রুটির সম্মুখীন হতে পারে।
কনফিগারেশন প্রয়োগ করুন
- নতুন রিসোর্স সরবরাহ করতে এবং আপনার কনফিগ ফাইলে নির্দিষ্ট API গুলি সক্রিয় করতে, আপনার
main.tfফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান (যাwebহওয়া উচিত):terraform apply
- টার্মিনালে, টেরাফর্ম তার সম্পাদিত কর্মের একটি পরিকল্পনা প্রিন্ট করে।
যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলেyesলিখে ক্রিয়াগুলি অনুমোদন করুন।
প্রধান.টিএফTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
মনে রাখবেন, যদি আপনার পরিবর্তনগুলি প্রয়োগ না করেই কেবল পূর্বরূপ দেখতে হয়, তাহলে আপনি terraform plan কমান্ডটি ব্যবহার করতে পারেন।
পরিবর্তনগুলি যাচাই করুন
টেরাফর্ম চালানো শেষ হওয়ার পর, আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সমস্ত টেরাফর্ম প্রভিশনড রিসোর্স এবং পরিষেবার অবস্থা পরীক্ষা করতে পারেন:
terraform show
আপনার কী মুদ্রিত দেখা উচিত তার একটি উদাহরণ এখানে দেওয়া হল। আপনার রাজ্যে আপনার প্রকল্পের জন্য নির্দিষ্ট মান থাকবে।
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
বিকল্পভাবে, আপনি Firebase কনসোলে এটি দেখে প্রকল্পটি তৈরি হয়েছে কিনা তা যাচাই করতে পারেন।

৫. Terraform এর মাধ্যমে আপনার Firebase অ্যাপটি নিবন্ধন করুন।
Firebase ব্যবহার করার জন্য, আপনার Firebase প্রকল্পে আপনার অ্যাপের প্রতিটি প্ল্যাটফর্ম-ভেরিয়েন্ট নিবন্ধন করতে হবে। এই কোডল্যাবে, আপনি Terraform এর মাধ্যমে যা সরবরাহ করেন তা পরীক্ষা এবং ইন্টারঅ্যাক্ট করার জন্য একটি আসল অ্যাপ ব্যবহার করবেন। এই অ্যাপটি একটি ওয়েব অ্যাপ, তাই আপনাকে Terraform কে আপনার নতুন তৈরি Firebase প্রকল্পে একটি Firebase ওয়েব অ্যাপ নিবন্ধন করতে বলতে হবে।
ওয়েব অ্যাপ নিবন্ধন করতে একটি ব্লক যোগ করুন
আপনার Firebase প্রকল্পে আপনার ওয়েব অ্যাপ নিবন্ধন করতে, নিম্নলিখিত রিসোর্স ব্লকের সাথে আপনার main.tf ফাইলটি যুক্ত করুন।
আপনার ওয়েব অ্যাপের জন্য আপনার নিজস্ব display_name নির্দিষ্ট করতে হবে। মনে রাখবেন যে এই নামটি শুধুমাত্র Firebase ইন্টারফেসের মধ্যেই ব্যবহৃত হয় এবং শেষ ব্যবহারকারীদের কাছে দৃশ্যমান নয়।
প্রধান.টিএফ
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
কনফিগারেশন প্রয়োগ করুন
- নতুন রিসোর্স তৈরি করতে, আপনার
main.tfফাইলের (যাwebহওয়া উচিত) একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান। মনে রাখবেন যে এই কমান্ডটি কোনও নতুন Google ক্লাউড প্রকল্প পুনরায় তৈরি করবে না। Terraform সনাক্ত করবে যে নির্দিষ্ট প্রকল্প আইডি সহ একটি প্রকল্প ইতিমধ্যেই বিদ্যমান এবং প্রকল্পের বর্তমান অবস্থাterraform apply
.tfফাইলে যা আছে তার সাথে তুলনা করবে এবং এটি যে কোনও পরিবর্তন আনবে। - মুদ্রিত কর্ম পরিকল্পনা পর্যালোচনা করুন। যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলে
yesটাইপ করুন এবং কর্ম অনুমোদনের জন্য এন্টার টিপুন।
পরিবর্তনগুলি যাচাই করুন
আপনি নিম্নলিখিত কমান্ডটি চালিয়ে নতুন প্রভিশন করা রিসোর্সের অবস্থা পরীক্ষা করতে পারেন:
terraform show
বিকল্পভাবে, আপনি Firebase কনসোলে অ্যাপটি দেখে আপনার প্রোজেক্টে সফলভাবে নিবন্ধিত হয়েছে কিনা তা যাচাই করতে পারেন। Project settings এ যান, এবং তারপর Your apps বিভাগে স্ক্রোল করুন।
৬. ফায়ারবেস প্রমাণীকরণ সেট আপ করুন
যেকোনো অ্যাপের ক্ষেত্রে প্রমাণীকরণ একটি গুরুত্বপূর্ণ অংশ। ব্যবহারকারীদের তাদের Google অ্যাকাউন্ট ব্যবহার করে আপনার ওয়েব অ্যাপে সাইন ইন করার অনুমতি দিতে, আপনি Firebase প্রমাণীকরণ সক্ষম করতে পারেন এবং Google পদ্ধতিতে সাইন-ইন সেট আপ করতে পারেন।
মনে রাখবেন যে এই কোডল্যাবে, আমরা Firebase প্রমাণীকরণ সেট আপ করার জন্য দুটি ভিন্ন বিকল্প প্রদান করি:
- বিকল্প ১ (প্রস্তাবিত) : কনসোলে Firebase প্রমাণীকরণ সেট আপ করুন, যার জন্য GCIP প্রয়োজন হয় না।
- এই বিকল্পটি ব্যবহার করার অর্থ হল আপনাকে আপনার নতুন প্রকল্পটিকে ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে না ।
- বিকল্প ২ : গুগল ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে টেরাফর্মের মাধ্যমে ফায়ারবেস প্রমাণীকরণ সেট আপ করুন।
- এই বিকল্পটি ব্যবহার করার অর্থ হল আপনাকে আপনার নতুন প্রকল্পটিকে একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে কারণ GCIP-এর জন্য প্রকল্পটি ব্লেজ মূল্য পরিকল্পনায় থাকা প্রয়োজন।
বিকল্প ১: Firebase কনসোল ব্যবহার করে প্রমাণীকরণ সেট আপ করুন
Firebase কনসোল ব্যবহার করে Firebase প্রমাণীকরণ সেট আপ করতে, আপনার প্রকল্পটি Blaze মূল্য পরিকল্পনায় থাকা প্রয়োজন নয়।
Firebase Authentication সেট আপ করার এবং Google-এ সাইন-ইন করার পদ্ধতি এখানে দেওয়া হল:
- ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- Authentication এ ক্লিক করুন, Get started এ ক্লিক করুন, এবং তারপর Sign-in method ট্যাবে ক্লিক করুন (অথবা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
- নতুন প্রদানকারী যোগ করুন -এ ক্লিক করুন এবং অতিরিক্ত প্রদানকারী বিভাগ থেকে, Google নির্বাচন করুন।
- সক্রিয় করুন টগল।
- আপনার অ্যাপের পাবলিক-ফেসিং নামটি
FriendlyChatএর মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - ড্রপডাউন মেনু থেকে একটি প্রকল্প সহায়তা ইমেল নির্বাচন করুন, এবং তারপর সংরক্ষণ করুন এ ক্লিক করুন।

- আপনার গুগলকে একটি সক্রিয় সাইন-ইন প্রদানকারী হিসেবে দেখা উচিত।

বিকল্প ২: গুগল ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে টেরাফর্মের মাধ্যমে প্রমাণীকরণ সেট আপ করুন
Terraform এর মাধ্যমে Firebase Authentication সেট আপ করতে, আপনাকে GCIP API ব্যবহার করতে হবে, যার অর্থ প্রকল্পটি Blaze মূল্য পরিকল্পনায় থাকা আবশ্যক। আপনি প্রকল্পের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট সংযুক্ত করে Blaze পরিকল্পনা ব্যবহার করার জন্য আপনার Firebase প্রকল্প আপগ্রেড করতে পারেন।
Terraform এর মাধ্যমে বিলিং সক্ষম করুন
- যদি আপনার ইতিমধ্যেই ক্লাউড বিলিং অ্যাকাউন্ট না থাকে, তাহলে প্রথম ধাপ হল গুগল ক্লাউড কনসোলে একটি নতুন অ্যাকাউন্ট তৈরি করা। যখন আপনি এটি করবেন, তখন এর বিলিং অ্যাকাউন্ট আইডিটি নোট করুন। বিলিং অ্যাকাউন্ট আইডিটি আপনার প্রকল্পের সাথে সম্পর্কিত বিলিং অ্যাকাউন্ট আইডিতে বিলিং পৃষ্ঠায় অবস্থিত হতে পারে।

- Terraform এর মাধ্যমে আপনার প্রকল্পে বিলিং সক্ষম করতে, আপনার
main.tfফাইলে বিদ্যমানgoogle_projectরিসোর্সে একটিbilling_accountঅ্যাট্রিবিউট যোগ করুন:
প্রধান.টিএফ... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
Firebase প্রমাণীকরণ সক্ষম করুন এবং Terraform এর মাধ্যমে Google-এ সাইন-ইন করুন
- GCIP-এর মাধ্যমে Firebase Authentication প্রদান করতে, আপনার
main.tfফাইলে নিম্নলিখিত রিসোর্স ব্লক যুক্ত করুন:
প্রধান.টিএফ... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] } - গুগলের সাথে সাইন-ইন সক্ষম করার জন্য আপনার একটি OAuth ক্লায়েন্ট থাকা প্রয়োজন। এই সেটআপটি করতে গুগল ক্লাউড কনসোলের API এবং পরিষেবা বিভাগে যান।
- যেহেতু আপনি এই প্রকল্পের জন্য প্রথমবারের মতো ক্লায়েন্ট আইডি তৈরি করছেন, তাই আপনাকে আপনার OAuth সম্মতি স্ক্রিনটি কনফিগার করতে হবে।
- OAuth সম্মতি স্ক্রিন পৃষ্ঠাটি খুলুন, এবং তারপরে আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন।
- ব্যবহারকারীর ধরণটি বহিরাগত তে সেট করুন, এবং তারপর তৈরি করুন এ ক্লিক করুন।
- পরবর্তী স্ক্রিনে, নিম্নলিখিতটি সম্পূর্ণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
- আপনার অ্যাপের পাবলিক-ফেসিং অ্যাপের নাম
FriendlyChatএর মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - ড্রপডাউন মেনু থেকে একটি ব্যবহারকারী সহায়তা ইমেল নির্বাচন করুন।
- ডেভেলপারের যোগাযোগের তথ্যের জন্য একটি ইমেল ঠিকানা লিখুন।
- আপনার অ্যাপের পাবলিক-ফেসিং অ্যাপের নাম
- পরবর্তী স্ক্রিনগুলিতে, নিম্নলিখিতগুলি সম্পূর্ণ করুন:
- স্কোপ পৃষ্ঠায় ডিফল্টগুলি গ্রহণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
- টেস্ট ব্যবহারকারী পৃষ্ঠায় ডিফল্টগুলি গ্রহণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
- সারাংশটি পর্যালোচনা করুন, এবং তারপর ড্যাশবোর্ডে ফিরে যান ক্লিক করুন।

- নিম্নলিখিতগুলি করে শংসাপত্র পৃষ্ঠায় একটি OAuth ক্লায়েন্ট সেট আপ করুন:
- ক্রেডেনশিয়াল তৈরি করুন ক্লিক করুন এবং OAuth ক্লায়েন্ট আইডি নির্বাচন করুন।
- অ্যাপ্লিকেশন টাইপ ড্রপ-ডাউন থেকে, ওয়েব অ্যাপ্লিকেশন নির্বাচন করুন।
- নাম ক্ষেত্রে, আপনার অ্যাপের নাম লিখুন, উদাহরণস্বরূপ
FriendlyChat(এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - নিম্নলিখিত সেট করে আপনার অ্যাপের URL-কে এই OAuth ক্লায়েন্ট ব্যবহার করার অনুমতি দিন:
- Authorized JavaScript origins এর অধীনে, Add URI এ ক্লিক করুন এবং লিখুন
https://<PROJECT_ID>.firebaseapp.com, যেখানে<PROJECT_ID>হলmain.tfএ আপনার সেট করা প্রকল্প আইডি। - Authorized redirect URIs এর অধীনে, Add URI এ ক্লিক করুন এবং লিখুন
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler, যেখানে<PROJECT_ID>হলmain.tfএ সেট করা আপনার প্রজেক্ট আইডি।
- Authorized JavaScript origins এর অধীনে, Add URI এ ক্লিক করুন এবং লিখুন
- সংরক্ষণ করুন ক্লিক করুন।

- আপনার OAuth ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট ব্যবহার করে Google-এ সাইন-ইন সক্ষম করতে, আপনার
main.tfফাইলে নিম্নলিখিত ব্লকটি যুক্ত করুন:
প্রধান.টিএফ... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
কনফিগারেশন প্রয়োগ করুন
- আপনার কনফিগারেশন অনুসারে Authentication সেট আপ করতে, আপনার
main.tfফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডগুলি চালান (যাwebহওয়া উচিত):export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
মনে রাখবেন যেterraform apply
terraform applyচালানোর ফলে নতুন কোনও Google Cloud প্রকল্প পুনরায় তৈরি হবে না। Terraform সনাক্ত করবে যে নির্দিষ্ট প্রকল্প আইডি সহ একটি প্রকল্প ইতিমধ্যেই বিদ্যমান এবং প্রকল্পের বর্তমান অবস্থা.tfফাইলে যা আছে তার সাথে তুলনা করবে। তারপরে এটি যেকোনো পরিবর্তন খুঁজে পাবে। - মুদ্রিত কর্ম পরিকল্পনা পর্যালোচনা করুন। যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলে
yesটাইপ করুন এবং কর্ম অনুমোদনের জন্য এন্টার টিপুন।
পরিবর্তনগুলি যাচাই করুন
- ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- Authentication এ ক্লিক করুন, এবং তারপর Sign-in method ট্যাবে ক্লিক করুন (অথবা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
- আপনার গুগলকে একটি সক্রিয় সাইন-ইন প্রদানকারী হিসেবে দেখা উচিত।

৭. একটি ফায়ারস্টোর ডাটাবেস এবং এর নিরাপত্তা নিয়ম সেট আপ করুন
এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি একটি ফায়ারস্টোর ডাটাবেসে শেষ ব্যবহারকারীদের মধ্যে বার্তা সংরক্ষণ করবেন।
- প্রয়োজনীয় API গুলি সক্রিয় করতে এবং ডাটাবেস ইনস্ট্যান্স সরবরাহ করতে, আপনার
main.tfফাইলটি নিম্নলিখিত রিসোর্স ব্লক দিয়ে যুক্ত করুন:
প্রধান.টিএফ... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firestore.googleapis.com", "firebaserules.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] } -
<NAME_OF_DESIRED_REGION>কে সেই অঞ্চলে পরিবর্তন করুন যেখানে আপনি ডাটাবেস রাখতে চান।
একটি প্রোডাকশন অ্যাপ তৈরি করার সময়, আপনি চাইবেন এটি এমন একটি অঞ্চলে হোক যেখানে বেশিরভাগ ব্যবহারকারীর কাছাকাছি এবং অন্যান্য ফায়ারবেস পরিষেবা, যেমন ক্লাউড ফাংশন, এর সাথে মিল রয়েছে। এই কোডল্যাবের জন্য, আপনিus-east1(দক্ষিণ ক্যারোলিনা) ব্যবহার করতে পারেন অথবা আপনার নিকটতম অঞ্চলটি ব্যবহার করতে পারেন ( ক্লাউড ফায়ারস্টোরের অবস্থান দেখুন)। - Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি Firestore ডাটাবেস ইনস্ট্যান্স Firebase Security Rules দ্বারা সুরক্ষিত থাকতে হবে।
এই কোডল্যাবের নমুনা কোডটিfirestore.rulesফাইলে নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনিwebডিরেক্টরির মূলে খুঁজে পেতে পারেন। - নিম্নলিখিত কাজগুলি করার জন্য আপনার
main.tfফাইলটি নিম্নলিখিত রিসোর্স ব্লকগুলির সাথে যুক্ত করুন:- স্থানীয়
firestore.rulesফাইল থেকে Firebase নিরাপত্তা নিয়মের একটি নিয়ম সেট তৈরি করুন। - ফায়ারস্টোর ইনস্ট্যান্সের জন্য নিয়ম সেটটি প্রকাশ করুন।
firebase deploy --only firestore:rulesচালানোর সমতুল্য কাজ সম্পাদন করে।
প্রধান.টিএফ... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.default, ] } # Release the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = google_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } } - স্থানীয়
- ফায়ারস্টোর ডাটাবেস সরবরাহ করতে এবং এর সুরক্ষা নিয়ম স্থাপন করতে
terraform applyচালান। - ডাটাবেসটি প্রভিশন করা আছে কিনা এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করা হয়েছে কিনা তা যাচাই করুন:
- ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- ফায়ারস্টোর ডাটাবেস বিভাগে যান, এবং তারপর নিয়ম ট্যাবে ক্লিক করুন।

৮. একটি ক্লাউড স্টোরেজ বাকেট এবং এর নিরাপত্তা নিয়ম সেট আপ করুন
এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি শেষ ব্যবহারকারীদের মধ্যে ভাগ করা ছবিগুলি একটি ক্লাউড স্টোরেজ বাকেটে সংরক্ষণ করবেন।
- প্রয়োজনীয় API গুলি সক্ষম করতে এবং আপনার ক্লাউড স্টোরেজ ডিফল্ট বাকেটটি সরবরাহ করতে, নিম্নলিখিত রিসোর্স ব্লকগুলির সাথে আপনার
main.tfফাইলটি যুক্ত করুন।
মনে রাখবেন যে আপনার প্রকল্পের জন্য ডিফল্ট ক্লাউড স্টোরেজ বাকেটটি Google App Engine এর মাধ্যমে সরবরাহ করা হয়েছে এবং আপনার Firestore ডাটাবেসের মতো একই অবস্থানে থাকতে হবে। আরও তথ্যের জন্য App Engine অবস্থানগুলি দেখুন।
যদি আপনার প্রোজেক্টে একাধিক বাকেট চান, তাহলেgoogle_storage_bucketরিসোর্স ব্যবহার করে সেগুলি সরবরাহ করুন (এই কোডল্যাবে দেখানো হয়নি)।
প্রধান.টিএফ... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "<NAME_OF_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket" { provider = google-beta project = google_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket } - Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি ক্লাউড স্টোরেজ বাকেট অবশ্যই Firebase নিরাপত্তা নিয়ম দ্বারা সুরক্ষিত থাকতে হবে।
এই কোডল্যাবের নমুনা কোডটিstorage.rulesফাইলে নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনিwebডিরেক্টরির মূলে খুঁজে পেতে পারেন। - নিম্নলিখিত কাজগুলি করার জন্য আপনার
main.tfফাইলটি নিম্নলিখিত রিসোর্স ব্লকগুলির সাথে যুক্ত করুন:- স্থানীয় ফাইল থেকে ফায়ারবেস সিকিউরিটি রুলসের একটি রুলসেট তৈরি করুন।
- স্টোরেজ বাকেটের জন্য নিয়ম সেটটি ছেড়ে দিন।
firebase deploy --only storageচালানোর সমতুল্য কাজ সম্পাদন করে।
প্রধান.টিএফ... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the default Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_storage_bucket.default-bucket, ] } # Release the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default.default_bucket}" ruleset_name = "projects/${google_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } } - ডিফল্ট ক্লাউড স্টোরেজ বাকেট সরবরাহ করতে
terraform applyচালান এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করুন। - বাকেটটি প্রস্তুত আছে কিনা এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করা হয়েছে কিনা তা যাচাই করুন:
- ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- স্টোরেজ বিভাগে যান, এবং তারপর নিয়ম ট্যাবে ক্লিক করুন।

৯. আপনার অ্যাপটি স্থানীয়ভাবে চালান
আপনি এখন প্রথমবারের মতো আপনার ওয়েব অ্যাপ চালানোর জন্য প্রস্তুত! আপনি স্থানীয়ভাবে আপনার অ্যাপটি পরিবেশন করার জন্য Firebase Hosting এমুলেটর ব্যবহার করবেন।
- একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং
webডিরেক্টরি থেকে, এমুলেটরটি শুরু করতে নিম্নলিখিত Firebase CLI কমান্ডটি চালান:firebase emulators:start --project=<PROJECT_ID>
- আপনার ব্রাউজারে, CLI দ্বারা প্রদত্ত স্থানীয় URL (সাধারণত
http://localhost:5000) এ আপনার ওয়েব অ্যাপটি খুলুন।
তোমার FriendlyChat অ্যাপের UI দেখতে পাওয়া উচিত, যা (এখনও!) কাজ করছে না। অ্যাপটি এখনও Firebase-এর সাথে সংযুক্ত নয়, তবে এই কোডল্যাবের পরবর্তী ধাপগুলি সম্পন্ন করার মাধ্যমে, এটি হবে!
মনে রাখবেন যে যখনই আপনি আপনার ওয়েব অ্যাপে পরিবর্তন করবেন (যেমন আপনি এই কোডল্যাবের পরবর্তী ধাপগুলিতে করবেন), তখন আপনার ব্রাউজারটি রিফ্রেশ করুন যাতে স্থানীয় URL টি সেই পরিবর্তনগুলি সহ আপডেট করা যায়।
১০. ফায়ারবেস ইনস্টল, কনফিগার এবং আরম্ভ করুন
Firebase-এর সাথে কাজ করে এমন একটি অ্যাপ পেতে, আপনার অ্যাপের Firebase SDK এবং আপনার Firebase প্রকল্পের জন্য Firebase কনফিগারেশন প্রয়োজন।
এই কোডল্যাবের নমুনা কোডটি ইতিমধ্যেই একটি কার্যকরী অ্যাপ, যাতে বিভিন্ন Firebase পণ্য ব্যবহারের জন্য সমস্ত নির্ভরতা এবং প্রয়োজনীয় ফাংশন রয়েছে। ইতিমধ্যে কী করা হয়েছে তা দেখতে চাইলে আপনি web/package.json এবং web/src/index.js দেখতে পারেন।
যদিও নমুনা কোডটি বেশিরভাগই সম্পূর্ণ, তবুও আপনার অ্যাপটি চালু করার জন্য আপনাকে কিছু জিনিস করতে হবে, যার মধ্যে রয়েছে: Firebase SDK ইনস্টল করুন, আপনার বিল্ড শুরু করুন, আপনার অ্যাপে Firebase কনফিগারেশন যোগ করুন এবং অবশেষে Firebase চালু করুন।
Firebase SDK ইনস্টল করুন এবং আপনার ওয়েবপ্যাক বিল্ড শুরু করুন
আপনার অ্যাপ তৈরি শুরু করার জন্য আপনাকে কয়েকটি কমান্ড চালাতে হবে।
- একটি নতুন টার্মিনাল উইন্ডো খুলুন।
- নিশ্চিত করুন যে আপনি
webডিরেক্টরির মূলে আছেন। - Firebase SDK ডাউনলোড করতে
npm installচালান। - যেকোনো নির্ভরতা আপডেট করতে
npm updateচালান। - ওয়েবপ্যাক শুরু করতে
npm run startরান করুন।
কোডল্যাবের বাকি অংশের জন্য, ওয়েবপ্যাক এখন ক্রমাগত আপনার সোর্স কোড পুনর্নির্মাণ করবে।
আপনার অ্যাপে আপনার Firebase কনফিগারেশন যোগ করুন
আপনার অ্যাপে আপনার Firebase কনফিগারেশনও যোগ করতে হবে যাতে Firebase SDK গুলি জানতে পারে যে আপনি কোন Firebase প্রকল্পটি ব্যবহার করতে চান।
এই কোডল্যাবের জন্য, আপনার Firebase কনফিগারেশন পেতে দুটি ভিন্ন বিকল্প রয়েছে:
- বিকল্প ১ : Firebase কনসোল থেকে আপনার Firebase কনফিগারেশনটি পান।
- বিকল্প ২ : Terraform এর মাধ্যমে আপনার Firebase কনফিগারেশনটি পান।
বিকল্প ১: ফায়ারবেস কনসোল থেকে কনফিগারেশনটি পান এবং এটি আপনার কোডবেসে যুক্ত করুন।
- Firebase কনসোলে, আপনার Project সেটিংসে যান।
- আপনার অ্যাপস কার্ডে স্ক্রোল করুন এবং তারপরে আপনার ওয়েব অ্যাপ নির্বাচন করুন।
- Firebase SDK স্নিপেট প্যান থেকে Config নির্বাচন করুন, এবং তারপর কনফিগ স্নিপেটটি কপি করুন।
- আপনার অ্যাপের
web/src/firebase-config.jsফাইলে আপনার কনফিগারেশনটি পেস্ট করুন, যেমন:
ফায়ারবেস-কনফিগ.জেএস... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
বিকল্প ২: টেরাফর্মের মাধ্যমে কনফিগারেশনটি পান এবং এটি আপনার কোডবেসে যুক্ত করুন।
বিকল্পভাবে, আপনি CLI-তে আউটপুট মান হিসেবে Terraform-এর মাধ্যমে আপনার Firebase কনফিগারেশন পেতে পারেন।
- আপনার
main.tfফাইলে, আপনারgoogle_firebase_web_appরিসোর্স ব্লকটি খুঁজুন (যে ব্লকটি আপনার প্রকল্পের সাথে একটি ওয়েব অ্যাপ নিবন্ধিত করেছে)। - সেই ব্লকের ঠিক পরে, নিম্নলিখিত ব্লকগুলি যোগ করুন:
প্রধান.টিএফ... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ... - যেহেতু
dataব্লক এবংoutputব্লক কোনওভাবেই পরিকাঠামো পরিবর্তন করার উদ্দেশ্যে নয়, তাই আপনাকে কেবল নিম্নলিখিত কমান্ডগুলি চালাতে হবে।- আপনার ওয়েব অ্যাপের Firebase কনফিগারেশনটি আপনার ডিরেক্টরির Terraform অবস্থায় লোড করতে, এই কমান্ডটি চালান:
terraform refresh
- Firebase কনফিগারেশন মান প্রিন্ট করতে, এই কমান্ডটি চালান:
নিচে একটি কনফিগারেশনের আউটপুটের উদাহরণ দেওয়া হল। আপনার প্রিন্ট করা আউটপুটে আপনার প্রোজেক্ট এবং অ্যাপের মান থাকবে।terraform output –json
{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- আপনার ওয়েব অ্যাপের Firebase কনফিগারেশনটি আপনার ডিরেক্টরির Terraform অবস্থায় লোড করতে, এই কমান্ডটি চালান:
-
valueমানচিত্রের মধ্যে থেকে মানগুলি অনুলিপি করুন। - এই মানগুলি (আপনার কনফিগারেশন) আপনার অ্যাপের
web/src/firebase-config.jsফাইলে পেস্ট করুন, যেমন:
ফায়ারবেস-কনফিগ.জেএস... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
আপনার অ্যাপে Firebase আরম্ভ করুন
অবশেষে, Firebase আরম্ভ করার জন্য, আপনার অ্যাপের web/src/index.js ফাইলে নিম্নলিখিতটি যুক্ত করুন:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
আপনার অ্যাপটি ব্যবহার করে দেখুন
এখন যেহেতু সবকিছু Firebase-এর জন্য কনফিগার করা হয়েছে, আপনি আপনার কার্যকরী ওয়েব অ্যাপটি ব্যবহার করে দেখতে পারেন।
- আপনার অ্যাপটি পরিবেশনকারী ব্রাউজারটি রিফ্রেশ করুন।
- এখন তুমি গুগলে সাইন ইন করতে পারবে এবং চ্যাটে বার্তা পোস্ট করতে পারবে। যদি তোমার কাছে ছবির ফাইল থাকে, তাহলে তুমি সেগুলো আপলোডও করতে পারো!
১১. পরিবেশ জুড়ে আপনার কনফিগারেশনের প্রতিলিপি তৈরি করুন
একই রকম কনফিগার করা একাধিক অবকাঠামো পরিচালনা করার ক্ষেত্রে টেরাফর্ম অসাধারণ (উদাহরণস্বরূপ, একটি স্টেজিং ফায়ারবেস প্রকল্প স্থাপন করা যা একটি প্রোড প্রকল্পের অনুরূপ)।
এই কোডল্যাবে, আপনি স্টেজিং পরিবেশ হিসেবে দ্বিতীয় একটি ফায়ারবেস প্রকল্প তৈরি করবেন।
এই স্টেজিং প্রকল্পটি তৈরি করার জন্য একটি বিদ্যমান কনফিগারেশনের প্রতিলিপি তৈরি করতে, আপনার কাছে দুটি বিকল্প রয়েছে:
- বিকল্প ১ : টেরাফর্ম কনফিগারেশনের একটি কপি তৈরি করুন।
এই বিকল্পটি উৎস প্রকল্প থেকে প্রতিলিপিকৃত প্রকল্পটি কতটা আলাদা হতে পারে তার জন্য সর্বাধিক নমনীয়তা প্রদান করে। - বিকল্প ২ :
for_eachদিয়ে কনফিগারেশন পুনঃব্যবহার করুন।
যদি প্রতিটি প্রকল্প উল্লেখযোগ্যভাবে ভিন্ন না হয় এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান তবে এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয়।
বিকল্প ১: টেরাফর্ম কনফিগারেশনের একটি কপি তৈরি করুন
এই বিকল্পটি উৎস প্রকল্প থেকে প্রতিলিপিকৃত প্রকল্প কতটা আলাদা হতে পারে তার জন্য সর্বাধিক নমনীয়তা প্রদান করে, যেমন বিভিন্ন ডিসপ্লে নামের অ্যাপ থাকা এবং পর্যায়ক্রমে রোলআউট করা।
- আপনার
webডিরেক্টরির মূলে,main_staging.tfনামে একটি নতুন Terraform কনফিগারেশন ফাইল তৈরি করুন। - আপনার
main.tfফাইল থেকে সমস্ত রিসোর্স ব্লক কপি করুন (terraformএবংproviderব্লক ব্যতীত), এবং তারপর সেগুলি আপনারmain_staging.tfফাইলে পেস্ট করুন। - তারপর আপনাকে
main_staging.tfএ আপনার প্রতিটি প্রতিলিপিকৃত রিসোর্স ব্লক পরিবর্তন করতে হবে যাতে তারা আপনার স্টেজিং প্রকল্পের সাথে কাজ করতে পারে:- রিসোর্স লেবেল: দ্বন্দ্ব এড়াতে একটি নতুন নাম ব্যবহার করুন। উদাহরণস্বরূপ,
resource "google_project" "default"এর নাম পরিবর্তন করেresource "google_project" "staging"। - রিসোর্স রেফারেন্স: প্রতিটি আপডেট করুন। উদাহরণস্বরূপ,
google_firebase_project.default.projectকেgoogle_firebase_project.staging.projectএ আপডেট করুন।
main_staging.tfফাইলের সম্পূর্ণ কনফিগারেশন খুঁজে পেতে পারেন:
web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf
আপনি যদি এই কনফিগারেশনটি ব্যবহার করতে চান, তাহলে নিম্নলিখিতগুলি করুন:-
main_staging-copypaste.tfথেকে কনফিগারেশনটি কপি করুন, এবং তারপর এটি আপনারmain_staging.tfফাইলে পেস্ট করুন। - আপনার
main_staging.tfফাইলে, নিম্নলিখিতগুলি করুন:-
google_projectরিসোর্স ব্লকে,nameঅ্যাট্রিবিউট,project-idঅ্যাট্রিবিউট এবং (যদি আপনি Terraform এর মাধ্যমে Authentication সেট আপ করেন)billing_accountঅ্যাট্রিবিউটটি আপনার নিজস্ব মান দিয়ে আপডেট করুন। -
google_firebase_web_appরিসোর্স ব্লকে,display_nameঅ্যাট্রিবিউটটি আপনার নিজস্ব মান দিয়ে আপডেট করুন। -
google_firestore_databaseএবংgoogle_app_engine_applicationরিসোর্স ব্লকগুলিতে,location_idঅ্যাট্রিবিউটগুলিকে আপনার নিজস্ব মান দিয়ে আপডেট করুন।
-
# Create a new Google Cloud project. resource "google_project" "staging" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_STAGING_PROJECT>" project_id = "<PROJECT_ID_OF_STAGING_PROJECT" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enable the required underlying Service Usage API. resource "google_project_service" "staging_serviceusage" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "staging_firebase" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for the new project created above. resource "google_firebase_project" "staging" { provider = google-beta project = google_project.staging.project_id # Wait until the required APIs are enabled. depends_on = [ google_project_service.staging_serviceusage, google_project_service.staging_firebase, ] } # Create a Firebase Web App in the new project created above. resource "google_firebase_web_app" "staging" { provider = google-beta project = google_firebase_project.staging.project display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } - রিসোর্স লেবেল: দ্বন্দ্ব এড়াতে একটি নতুন নাম ব্যবহার করুন। উদাহরণস্বরূপ,
- আপনার নতুন "স্টেজিং" ফায়ারবেস প্রকল্প এবং এর সমস্ত সংস্থান সরবরাহ করতে এবং এর পরিষেবাগুলি সক্ষম করতে
terraform applyচালান। - আগের মতোই Firebase কনসোলে চেক করে যাচাই করুন যে সবকিছু প্রত্যাশা অনুযায়ী প্রভিশন করা এবং সক্রিয় করা হয়েছে।
বিকল্প ২: for_each দিয়ে কনফিগারেশন পুনঃব্যবহার করুন
যদি প্রতিটি প্রকল্পে উল্লেখযোগ্যভাবে ভিন্নতা না থাকে এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান তবে এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয়। এটি টেরাফর্ম ভাষায় for_each মেটা-আর্গুমেন্ট ব্যবহার করে।
- আপনার
main.tfফাইলটি খুলুন। - প্রতিটি রিসোর্স ব্লকে যা আপনি প্রতিলিপি করতে চান, একটি
for_eachমেটা-আর্গুমেন্ট যোগ করুন, যেমন:
প্রধান.টিএফ আপনি এই কোডল্যাবের GitHub রিপোজিটরিতে# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.for_eachমেটা-আর্গুমেন্ট ব্যবহার করে এমন একটিmain.tfফাইলের সম্পূর্ণ কনফিগারেশন খুঁজে পেতে পারেন:
web/terraform-checkpoints/replicate-config/main-foreach.tf
আপনি যদি এই কনফিগারেশনটি ব্যবহার করতে চান, তাহলে নিম্নলিখিতগুলি করুন:-
main-foreach.tfথেকে কনফিগারেশনটি কপি করুন, এবং তারপর এটি আপনারmain.tfফাইলে পেস্ট করুন। - আপনার
main.tfফাইলে, নিম্নলিখিতগুলি করুন:-
google_projectরিসোর্স ব্লকে,nameঅ্যাট্রিবিউট,project-idঅ্যাট্রিবিউট এবং (যদি আপনি Terraform এর মাধ্যমে Authentication সেট আপ করেন)billing_accountঅ্যাট্রিবিউটটি আপনার নিজস্ব মান দিয়ে আপডেট করুন। - In the
google_firebase_web_appresource block, update thedisplay_nameattribute with your own value. - In the
google_firestore_databaseandgoogle_app_engine_applicationresource blocks, update thelocation_idattributes with your own value.
-
-
- Instead of applying this config right away, it's important to understand and fix a few things about how Terraform interprets this config compared to the existing infrastructure.
- Right now, if you applied this config that uses
for_each, the resource addresses would look like the following: However, the existing project you created in the first part of this codelab is known to Terraform as the following:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]google_project.default google_firebase_project.default google_firebase_android_app.default - Run
terraform planto see what actions Terraform would take given the current state.
The output should show that Terraform would delete the project you created in the first part of this codelab and create two new projects. This is because Terraform doesn't know that the project at the addressgoogle_project.defaulthas been moved to the new addressgoogle_project.default["prod"]. - To fix this, run the
terraform state mvcommand:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- Similarly, to fix all the other resource blocks, run
terraform state mvforgoogle_firebase_project,google_firebase_web_app, and all the other resource blocks in yourmain.tffile. - Now, if you run
terraform planagain, it shouldn't show that Terraform would delete the project you created in the first part of this codelab.
- Right now, if you applied this config that uses
- Run
terraform applyto provision your new "staging" Firebase project and all its resources and enable its services. - Verify that everything was provisioned and enabled as expected by checking them in the Firebase console as before.
12. Bonus step: Deploy your staging and prod apps
- In your app's codebase, change the
firebase-config.jsto use the Firebase config from your staging project instead.
To remind yourself how to get your Firebase config and add it to your app, see the earlier step of this codelab, Add your Firebase configuration to your app. - At the root of your
webdirectory, run the following command to deploy your app to your staging Firebase project.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
- Open your staging app in the browser via the URL that's printed in the output of
firebase deploy. Try signing in, sending messages, and uploading images.
When you deploy an app to a Firebase project, it uses real Firebase resources, not emulated resources. As you interact with your staging app, you should see data and images appear in your staging project in the Firebase console. - After testing your app in staging, change the
firebase-config.jsback to using the prod project's Firebase config (the first project that you created in this codelab). - At the root of your
webdirectory, run the following command to deploy your app to your production Firebase project.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- Open your production app in the browser via the URL that's printed in the output of
firebase deploy. Try signing in, sending messages, and uploading images.
You should see data and images appear in your production project in the Firebase console. - When you're finished interacting with the two apps for this codelab, you can stop Firebase from serving them. Run the following command for each of your projects:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
১৩. অভিনন্দন!
You've used Terraform to configure a real-time chat web application! And you've followed best practices for development environments by creating separate Firebase projects for staging and prod.
আমরা যা কভার করেছি
- Using the Terraform CLI to manage cloud resources
- Using Terraform to configure Firebase products (Authentication, Firestore, Cloud Storage, and Security Rules)
- Running and testing a web app locally using the Firebase Local Emulator Suite
- Importing Firebase into a web app
- Using Terraform to replicate a configuration across multiple environments
For more information about Firebase and Terraform, visit our documentation . You can find a list of all Firebase products with Terraform support, sample Terraform configurations for common use cases, and helpful troubleshooting and FAQ.