1. ভূমিকা
গোল
অবকাঠামো এবং ফায়ারবেস পণ্যগুলির প্রোগ্রাম্যাটিক কনফিগারেশন সহ একটি Firebase প্রকল্প সেট আপ এবং পরিচালনা করতে আপনি Terraform ব্যবহার করতে পারেন।
এই কোডল্যাবটি প্রথমে বর্ণনা করে যে কীভাবে একটি নতুন ফায়ারবেস প্রজেক্ট তৈরি করতে একটি টেরাফর্ম কনফিগারেশন ফাইল তৈরি করতে হয়, তারপরে আপনি সেই প্রজেক্টে ব্যবহার করতে চান এমন অ্যাপ এবং ফায়ারবেস পণ্যগুলিকে কীভাবে কনফিগার করতে হয়। আমরা Terraform কমান্ড লাইনের মূল বিষয়গুলিও কভার করি, যেমন পরিবর্তনগুলি পূর্বরূপ দেখা এবং তারপরে সেগুলি বাস্তবায়ন করা৷
আপনি যদি টেরাফর্মের সাথে ফায়ারবেস প্রকল্প এবং পণ্যগুলি সেট আপ এবং পরিচালনা করতে শিখতে চান তবে এই কোডল্যাবটি আপনার জন্য!
আপনি কি শিখবেন
- কিভাবে একটি Terraform কনফিগার ফাইল তৈরি করবেন (
*.tf
) - আপনার অবকাঠামো পরিচালনা করতে Terraform CLI কমান্ডগুলি কীভাবে ব্যবহার করবেন
- আপনার সংস্থান এবং পরিষেবাগুলি আপডেট করতে আপনার কনফিগারেশন কীভাবে পরিবর্তন করবেন
- একটি বাস্তব ওয়েব অ্যাপে কীভাবে আপনার কনফিগারেশন প্রয়োগ করবেন (যাকে বলা হয় বন্ধুত্বপূর্ণ চ্যাট )
- বিভিন্ন পরিবেশে সমান্তরাল (এবং ইন-সিঙ্ক) কনফিগারেশনগুলি কীভাবে সংজ্ঞায়িত করবেন (উৎপাদন, স্টেজিং, ইত্যাদি)
আপনি কি প্রয়োজন হবে
- একটি টার্মিনাল/কনসোল
- আপনার পছন্দের IDE/টেক্সট এডিটর, যেমন WebStorm , Atom , Sublime , বা VS Code
- আপনার পছন্দের ব্রাউজার, যেমন ক্রোম
- গুগল ক্লাউড সিএলআই (জিক্লাউড সিএলআই) - এই সিএলআই ইনস্টল করুন এবং একটি ব্যবহারকারী অ্যাকাউন্ট বা একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করে লগ ইন করুন
এই কোডল্যাবের সাথে সফল হওয়ার জন্য, আপনার টেরাফর্ম এবং এর পরিভাষাগুলির সাথে নিম্নলিখিত পূর্বশর্তগুলি সহ মৌলিক দক্ষতা প্রয়োজন:
- Terraform ইনস্টল করুন এবং তাদের অফিসিয়াল টিউটোরিয়াল ব্যবহার করে Terraform এর সাথে নিজেকে পরিচিত করুন
এই কোডল্যাবটি একটি বাস্তব নমুনা অ্যাপ্লিকেশন সরবরাহ করে যাতে আপনি Terraform এর মাধ্যমে আপনি যা বিধান করেন তা পরীক্ষা করতে এবং ইন্টারঅ্যাক্ট করতে পারেন। এটি করার জন্য, আপনার নিম্নলিখিতগুলির প্রয়োজন হবে:
- একটি ওয়েব অ্যাপের নমুনা কোড - কোডল্যাবের পরবর্তী ধাপে এই কোডটি ডাউনলোড করুন
- প্যাকেজ ম্যানেজার npm (যা সাধারণত Node.js এর সাথে আসে) - এই টুলগুলি ইনস্টল করুন
- Firebase CLI - এই CLI ইনস্টল করুন এবং লগ ইন করুন
2. প্রারম্ভিক কোড পান
এই কোডল্যাবে, আপনি একটি বাস্তব ওয়েব অ্যাপের মাধ্যমে Terraform-এর মাধ্যমে আপনি কী বিধান করেছেন তা পরীক্ষা করতে পারেন। আমরা এটি করার পরামর্শ দিই যাতে আপনি Terraform-প্রণোদিত সংস্থানগুলি ব্যবহার করার জন্য প্রয়োজনীয় সমস্ত পদক্ষেপগুলি বুঝতে পারেন৷
কমান্ড লাইন থেকে কোডল্যাবের গিটহাব সংগ্রহস্থল ক্লোন করুন:
git clone https://github.com/firebase/codelab-friendlychat-web
বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, আপনি একটি ZIP ফাইল হিসাবে সংগ্রহস্থল ডাউনলোড করতে পারেন।
3. একটি টেরাফর্ম কনফিগারেশন তৈরি করুন
টেরাফর্ম সেট আপ
- ডাউনলোড করা নমুনা অ্যাপের কোডবেসে,
web
ডিরেক্টরির রুটে নেভিগেট করুন। - সেই ডিরেক্টরির মূলে, নিম্নলিখিত প্রাথমিক সেটআপ সহ
main.tf
নামে একটি Terraform কনফিগার ফাইল তৈরি করুন:
main.tf# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
প্রতিটি google-beta
প্রদানকারীর user_project_override
নামে একটি বৈশিষ্ট্য রয়েছে যা নির্ধারণ করে কিভাবে Terraform থেকে ক্রিয়াকলাপগুলি কোটা চেক করা হবে৷ বেশিরভাগ সম্পদের ব্যবস্থা করার জন্য, আপনাকে user_project_override = true
ব্যবহার করতে হবে, যার অর্থ আপনার নিজের ফায়ারবেস প্রকল্পের বিপরীতে কোটা পরীক্ষা করা। যাইহোক, আপনার নতুন প্রকল্প সেট আপ করতে যাতে এটি কোটা চেক গ্রহণ করতে পারে, আপনাকে প্রথমে user_project_override=false
ব্যবহার করতে হবে। Terraform alias
সিনট্যাক্স আপনাকে এই কোডল্যাবের পরবর্তী ধাপে দুটি প্রদানকারী সেটআপের মধ্যে পার্থক্য করতে দেয়।
ডিরেক্টরিতে Terraform শুরু করুন
প্রথমবারের জন্য একটি নতুন কনফিগারেশন তৈরি করার জন্য কনফিগারেশনে উল্লেখ করা প্রদানকারী ডাউনলোড করতে হবে।
এই আরম্ভ করার জন্য, আপনার main.tf
কনফিগার ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান:
terraform init
4. Terraform এর মাধ্যমে একটি ফায়ারবেস প্রকল্প তৈরি করুন
"একটি ফায়ারবেস প্রজেক্ট তৈরি করতে", এটা মনে রাখা গুরুত্বপূর্ণ যে প্রতিটি ফায়ারবেস প্রজেক্ট আসলে একটি Google ক্লাউড প্রজেক্ট, শুধুমাত্র এর জন্য ফায়ারবেস পরিষেবা চালু করা আছে।
অন্তর্নিহিত Google ক্লাউড প্রকল্প এবং API-এর জন্য ব্লক যোগ করুন
- প্রথমত, অন্তর্নিহিত Google ক্লাউড প্রকল্পের ব্যবস্থা করুন।
আপনারmain.tf
কনফিগারেশন ফাইলে, নিম্নলিখিত রিসোর্স ব্লক যোগ করুন।
আপনাকে আপনার নিজের প্রজেক্টের নাম (যেমন"Terraform FriendlyChat Codelab"
) এবং আপনার নিজের প্রোজেক্ট আইডি (যেমন"terraform-codelab-your-initials"
) উল্লেখ করতে হবে। মনে রাখবেনname
মানটি শুধুমাত্র Firebase ইন্টারফেসের মধ্যে ব্যবহার করা হয় এবং শেষ ব্যবহারকারীদের কাছে দৃশ্যমান নয়।project_id
মান, যদিও, Google-এর কাছে আপনার প্রোজেক্টকে অনন্যভাবে চিহ্নিত করে, তাই নিশ্চিত করুন যে আপনি একটি অনন্য মান উল্লেখ করেছেন। main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } }
- এর পরে, আপনাকে প্রয়োজনীয় অন্তর্নিহিত APIগুলি সক্ষম করতে হবে: পরিষেবা ব্যবহার API এবং Firebase ব্যবস্থাপনা API।
আপনি যখন ফায়ারবেস প্রজেক্ট তৈরি করতে ফায়ারবেস কনসোল ব্যবহার করেন তখন এই এপিআই সক্ষমতাটি সাধারণত পর্দার আড়ালে পরিচালনা করা হয়, তবে এই সক্ষমতাটি করতে Terraform কে স্পষ্টভাবে বলা দরকার।
আপনারmain.tf
কনফিগারেশন ফাইলে (শুধুমাত্র ব্লকের অধীনে যা নতুন ক্লাউড প্রকল্প তৈরি করে), নিম্নলিখিত রিসোর্স ব্লক যোগ করুন:
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
সহ প্রদানকারী ব্যবহার করছে (কোনও উপনামের প্রয়োজন নেই)।
main.tf
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
উপরের রিসোর্স ব্লকে, আপনি depends_on
ক্লজ লক্ষ্য করতে পারেন, যা টেরাফর্মকে অন্তর্নিহিত API গুলি সক্ষম হওয়ার জন্য অপেক্ষা করতে বলে। এই ধারাটি ছাড়া, টেরাফর্ম নির্ভরতা সম্পর্কে জানে না এবং সমান্তরালভাবে সংস্থানগুলি সরবরাহ করার সময় ত্রুটি হতে পারে।
কনফিগারেশন প্রয়োগ করুন
- নতুন রিসোর্স প্রভিশন করতে এবং আপনার কনফিগারেশন ফাইলে নির্দিষ্ট করা API গুলি সক্রিয় করতে, আপনার
main.tf
ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান (যাweb
হওয়া উচিত):terraform apply
- টার্মিনালে, টেরাফর্ম এটি সম্পাদন করবে এমন কর্মের একটি পরিকল্পনা প্রিন্ট করে।
যদি সবকিছু প্রত্যাশিত মনে হয়,yes
প্রবেশ করে ক্রিয়াগুলি অনুমোদন করুন৷
main.tfTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
মনে রাখবেন যে আপনি যদি শুধুমাত্র আবেদন না করেই পরিবর্তনগুলির পূর্বরূপ দেখতে চান, তাহলে আপনি পরিবর্তে terraform plan
কমান্ড ব্যবহার করতে পারেন।
পরিবর্তনগুলি যাচাই করুন
টেরাফর্ম চালানো শেষ হওয়ার পরে, আপনি নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে সক্ষম করা সমস্ত Terraform প্রভিশন করা সংস্থান এবং পরিষেবাগুলির অবস্থা পরিদর্শন করতে পারেন:
terraform show
এখানে আপনি মুদ্রিত দেখতে হবে একটি উদাহরণ. আপনার রাজ্যে আপনার প্রকল্পের জন্য নির্দিষ্ট মান থাকবে।
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
বিকল্পভাবে, আপনি যাচাই করতে পারেন যে প্রকল্পটি Firebase কনসোলে দেখে তৈরি হয়েছে।
5. Terraform এর মাধ্যমে আপনার Firebase অ্যাপ নিবন্ধন করুন৷
Firebase ব্যবহার করতে, আপনাকে আপনার Firebase প্রকল্পে আপনার অ্যাপের প্রতিটি প্ল্যাটফর্ম-ভেরিয়েন্ট নিবন্ধন করতে হবে। এই কোডল্যাবে, টেরাফর্মের মাধ্যমে আপনি যা বিধান করেন তা পরীক্ষা করতে এবং ইন্টারঅ্যাক্ট করতে আপনি একটি বাস্তব অ্যাপ ব্যবহার করবেন। এই অ্যাপটি একটি ওয়েব অ্যাপ, তাই আপনার সদ্য তৈরি ফায়ারবেস প্রোজেক্টে একটি Firebase ওয়েব অ্যাপ নিবন্ধন করতে Terraform কে বলতে হবে।
ওয়েব অ্যাপ নিবন্ধন করতে একটি ব্লক যোগ করুন
আপনার Firebase প্রোজেক্টে আপনার ওয়েব অ্যাপ রেজিস্টার করতে, নিম্নলিখিত রিসোর্স ব্লকের সাথে আপনার main.tf
ফাইল যোগ করুন।
আপনার ওয়েব অ্যাপের জন্য আপনাকে আপনার নিজস্ব display_name
নির্দিষ্ট করতে হবে। মনে রাখবেন যে এই নামটি শুধুমাত্র Firebase ইন্টারফেসের মধ্যে ব্যবহার করা হয় এবং শেষ ব্যবহারকারীদের কাছে দৃশ্যমান নয়।
main.tf
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
কনফিগারেশন প্রয়োগ করুন
- নতুন সংস্থান সরবরাহ করতে, আপনার
main.tf
ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান (যাweb
হওয়া উচিত)।terraform apply
মনে রাখবেন যে এই কমান্ডটি একটি নতুন Google ক্লাউড প্রকল্প পুনরায় তৈরি করবে না। Terraform শনাক্ত করবে যে নির্দিষ্ট প্রজেক্ট আইডি সহ একটি প্রজেক্ট ইতিমধ্যেই বিদ্যমান আছে এবং.tf
ফাইলে যা আছে তার সাথে প্রজেক্টের বর্তমান অবস্থার তুলনা করবে এবং এটি খুঁজে পাওয়া যেকোনো পরিবর্তন করবে। - কর্মের মুদ্রিত পরিকল্পনা পর্যালোচনা করুন. যদি সবকিছু প্রত্যাশিত দেখায়,
yes
টাইপ করুন এবং ক্রিয়াগুলি অনুমোদন করতে এন্টার টিপুন।
পরিবর্তনগুলি যাচাই করুন
আপনি নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে নতুন বিধানকৃত সংস্থানের অবস্থা পরিদর্শন করতে পারেন:
terraform show
বিকল্পভাবে, আপনি Firebase কনসোলে অ্যাপটি দেখে আপনার প্রকল্পে সফলভাবে নিবন্ধিত হয়েছে কিনা তা যাচাই করতে পারেন। প্রকল্প সেটিংসে যান এবং তারপর আপনার অ্যাপস বিভাগে স্ক্রোল করুন।
6. ফায়ারবেস প্রমাণীকরণ সেট আপ করুন৷
প্রমাণীকরণ যে কোনো অ্যাপের একটি গুরুত্বপূর্ণ অংশ। শেষ-ব্যবহারকারীদের তাদের Google অ্যাকাউন্ট দিয়ে আপনার ওয়েব অ্যাপে সাইন ইন করার অনুমতি দেওয়ার জন্য, আপনি Firebase প্রমাণীকরণ সক্ষম করতে পারেন এবং Google পদ্ধতিতে সাইন-ইন সেট আপ করতে পারেন।
মনে রাখবেন যে এই কোডল্যাবে, আমরা ফায়ারবেস প্রমাণীকরণ সেট আপ করার জন্য দুটি ভিন্ন বিকল্প প্রদান করি:
- বিকল্প 1 (প্রস্তাবিত) : কনসোলে ফায়ারবেস প্রমাণীকরণ সেট আপ করুন, যার জন্য GCIP এর প্রয়োজন নেই৷
- এই বিকল্পটি ব্যবহার করার অর্থ হল যে আপনাকে আপনার নতুন প্রকল্পটিকে একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে না ৷
- বিকল্প 2 : Google ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে Terraform এর মাধ্যমে Firebase প্রমাণীকরণ সেট আপ করুন।
- এই বিকল্পটি ব্যবহার করার অর্থ হল যে আপনাকে আপনার নতুন প্রকল্পটিকে একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে যেহেতু GCIP-এর জন্য প্রকল্পটি Blaze মূল্য পরিকল্পনায় থাকা প্রয়োজন৷
বিকল্প 1: Firebase কনসোল ব্যবহার করে প্রমাণীকরণ সেট আপ করুন
Firebase কনসোল ব্যবহার করে Firebase প্রমাণীকরণ সেট আপ করতে, আপনার প্রকল্পের Blaze মূল্য পরিকল্পনার প্রয়োজন নেই।
এখানে কিভাবে Firebase প্রমাণীকরণ সেট আপ করবেন এবং Google এর সাথে সাইন-ইন করবেন:
- Firebase কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- প্রমাণীকরণে ক্লিক করুন, শুরু করুন ক্লিক করুন এবং তারপর সাইন-ইন পদ্ধতি ট্যাবে ক্লিক করুন (বা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
- নতুন প্রদানকারী যোগ করুন ক্লিক করুন এবং অতিরিক্ত প্রদানকারী বিভাগ থেকে, Google নির্বাচন করুন।
- সক্রিয় টগল সক্রিয় করুন.
- আপনার অ্যাপের সর্বজনীন-মুখী নামটি
FriendlyChat
মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - ড্রপডাউন মেনু থেকে একটি প্রকল্প সমর্থন ইমেল চয়ন করুন, এবং তারপর সংরক্ষণ করুন ক্লিক করুন।
- আপনি একটি সক্রিয় সাইন-ইন প্রদানকারী হিসাবে Google দেখতে হবে.
বিকল্প 2: Google ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে Terraform এর মাধ্যমে প্রমাণীকরণ সেট আপ করুন
Terraform এর মাধ্যমে Firebase প্রমাণীকরণ সেট আপ করতে, আপনাকে অবশ্যই GCIP API ব্যবহার করতে হবে, যার অর্থ প্রকল্পটি অবশ্যই ব্লেজ মূল্য পরিকল্পনায় থাকতে হবে। আপনি প্রজেক্টের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট যুক্ত করে ব্লেজ প্ল্যান ব্যবহার করার জন্য আপনার ফায়ারবেস প্রোজেক্ট আপগ্রেড করেন।
Terraform এর মাধ্যমে বিলিং সক্ষম করুন
- আপনার যদি ইতিমধ্যে একটি ক্লাউড বিলিং অ্যাকাউন্ট না থাকে, প্রথম ধাপ হল Google ক্লাউড কনসোলে একটি নতুন অ্যাকাউন্ট তৈরি করা। আপনি যখন এটি করবেন, তার বিলিং অ্যাকাউন্ট আইডি নোট করুন। বিলিং অ্যাকাউন্ট আইডি আপনার প্রকল্পের সাথে যুক্ত বিলিং অ্যাকাউন্ট আইডিতে বিলিং পৃষ্ঠায় অবস্থিত হতে পারে।
- Terraform এর মাধ্যমে আপনার প্রকল্পে বিলিং সক্ষম করতে, আপনার
main.tf
ফাইলে বিদ্যমানgoogle_project
রিসোর্সে একটিbilling_account
বৈশিষ্ট্য যোগ করুন:
main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
Firebase প্রমাণীকরণ সক্ষম করুন এবং Terraform এর মাধ্যমে Google এর সাথে সাইন-ইন করুন৷
- GCIP এর সাথে ফায়ারবেস প্রমাণীকরণের ব্যবস্থা করতে, নিম্নলিখিত রিসোর্স ব্লকের সাথে আপনার
main.tf
ফাইল যুক্ত করুন:
main.tf... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] }
- Google এর সাথে সাইন-ইন সক্ষম করার জন্য আপনার একটি OAuth ক্লায়েন্ট থাকা প্রয়োজন৷ এই সেটআপটি করতে Google ক্লাউড কনসোলের APIs এবং পরিষেবা বিভাগে যান৷
- যেহেতু এই প্রকল্পের জন্য আপনি প্রথমবার একটি ক্লায়েন্ট আইডি তৈরি করছেন, তাই আপনাকে আপনার OAuth সম্মতি স্ক্রীন কনফিগার করতে হবে।
- OAuth সম্মতি স্ক্রীন পৃষ্ঠাটি খুলুন এবং তারপরে আপনি যে প্রকল্পটি তৈরি করেছেন সেটি নির্বাচন করুন।
- ইউজার টাইপটিকে এক্সটার্নাল এ সেট করুন এবং তারপর তৈরি করুন এ ক্লিক করুন।
- পরবর্তী স্ক্রিনে, নিম্নলিখিতটি সম্পূর্ণ করুন এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান এ ক্লিক করুন।
- আপনার অ্যাপের সর্বজনীন-মুখী অ্যাপ নামটিকে
FriendlyChat
মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - ড্রপডাউন মেনু থেকে একটি ব্যবহারকারী সমর্থন ইমেল চয়ন করুন.
- বিকাশকারীর যোগাযোগের তথ্যের জন্য একটি ইমেল লিখুন৷
- আপনার অ্যাপের সর্বজনীন-মুখী অ্যাপ নামটিকে
- পরবর্তী স্ক্রীনগুলিতে, নিম্নলিখিতগুলি সম্পূর্ণ করুন:
- স্কোপ পৃষ্ঠায় ডিফল্টগুলি গ্রহণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
- টেস্ট ব্যবহারকারী পৃষ্ঠায় ডিফল্টগুলি স্বীকার করুন এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান এ ক্লিক করুন।
- সারাংশ পর্যালোচনা করুন, এবং তারপর ড্যাশবোর্ডে ফিরে যান ক্লিক করুন।
- নিম্নলিখিতগুলি করে শংসাপত্র পৃষ্ঠায় একটি OAuth ক্লায়েন্ট সেট আপ করুন:
- ক্রেডেনশিয়াল তৈরি করুন ক্লিক করুন এবং OAuth ক্লায়েন্ট আইডি নির্বাচন করুন।
- অ্যাপ্লিকেশন টাইপ ড্রপ-ডাউন থেকে, ওয়েব অ্যাপ্লিকেশন নির্বাচন করুন।
- নাম ক্ষেত্রে, আপনার অ্যাপের নাম লিখুন, উদাহরণস্বরূপ
FriendlyChat
(এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)। - নিম্নলিখিত সেট করে আপনার অ্যাপের URL কে এই OAuth ক্লায়েন্ট ব্যবহার করার অনুমতি দিন:
- অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন এর অধীনে, URI যোগ করুন ক্লিক করুন এবং প্রবেশ করুন
https://<PROJECT_ID>.firebaseapp.com
, যেখানে<PROJECT_ID>
হল প্রজেক্ট আইডি যা আপনিmain.tf
এ সেট করেছেন। - অনুমোদিত রিডাইরেক্ট ইউআরআই-এর অধীনে, ইউআরআই যোগ করুন ক্লিক করুন এবং প্রবেশ করুন
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
, যেখানে<PROJECT_ID>
হল প্রজেক্ট আইডি যা আপনিmain.tf
এ সেট করেছেন।
- অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন এর অধীনে, URI যোগ করুন ক্লিক করুন এবং প্রবেশ করুন
- Save এ ক্লিক করুন।
- আপনার OAuth ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট ব্যবহার করে Google এর সাথে সাইন-ইন সক্ষম করতে, নিম্নলিখিত ব্লকের সাথে আপনার
main.tf
ফাইলটি যুক্ত করুন:
main.tf... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
কনফিগারেশন প্রয়োগ করুন
- আপনার কনফিগারেশন অনুযায়ী প্রমাণীকরণ সেট আপ করতে, আপনার
main.tf
ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডগুলি চালান (যাweb
হওয়া উচিত):export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
terraform apply
মনে রাখবেন যে চলমানterraform apply
একটি নতুন Google ক্লাউড প্রকল্প পুনরায় তৈরি করবে না। Terraform শনাক্ত করবে যে নির্দিষ্ট প্রজেক্ট আইডি সহ একটি প্রজেক্ট ইতিমধ্যেই বিদ্যমান এবং.tf
ফাইলে যা আছে তার সাথে প্রজেক্টের বর্তমান অবস্থার তুলনা করবে। তারপরে এটি খুঁজে পাওয়া যে কোনও পরিবর্তন করবে। - কর্মের মুদ্রিত পরিকল্পনা পর্যালোচনা করুন. সবকিছু প্রত্যাশিত দেখায়,
yes
টাইপ করুন এবং ক্রিয়াগুলি অনুমোদন করতে এন্টার টিপুন।
পরিবর্তনগুলি যাচাই করুন
- Firebase কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- প্রমাণীকরণ ক্লিক করুন, এবং তারপর সাইন-ইন পদ্ধতি ট্যাবে ক্লিক করুন (বা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
- আপনি একটি সক্রিয় সাইন-ইন প্রদানকারী হিসাবে Google দেখতে হবে.
7. একটি ফায়ারস্টোর ডাটাবেস এবং এর নিরাপত্তা নিয়ম সেট আপ করুন
এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি ফায়ারস্টোর ডাটাবেসে শেষ-ব্যবহারকারীদের মধ্যে বার্তা সংরক্ষণ করবেন।
- প্রয়োজনীয় API গুলি সক্ষম করতে এবং ডাটাবেস উদাহরণের ব্যবস্থা করতে, নিম্নলিখিত সংস্থান ব্লকগুলির সাথে আপনার
main.tf
ফাইলটি যুক্ত করুন:
main.tf... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firestore.googleapis.com", "firebaserules.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] }
-
<NAME_OF_DESIRED_REGION>
সেই অঞ্চলে পরিবর্তন করুন যেখানে আপনি ডাটাবেসটি থাকতে চান।
একটি প্রোডাকশন অ্যাপ ডেভেলপ করার সময়, আপনি এটি চাইবেন যে এটি বেশিরভাগ ব্যবহারকারীর কাছাকাছি এবং ক্লাউড ফাংশনের মতো অন্যান্য ফায়ারবেস পরিষেবাগুলির সাথে মিলিত হোক। এই কোডল্যাবের জন্য, আপনিus-east1
(দক্ষিণ ক্যারোলিনা) ব্যবহার করতে পারেন বা আপনার নিকটতম অঞ্চলটি ব্যবহার করতে পারেন ( ক্লাউড ফায়ারস্টোর অবস্থানগুলি দেখুন)৷ - Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি Firestore ডাটাবেস উদাহরণ অবশ্যই Firebase নিরাপত্তা নিয়ম দ্বারা সুরক্ষিত থাকতে হবে।
এই কোডল্যাবের নমুনা কোডfirestore.rules
ফাইলে নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনিweb
ডিরেক্টরির রুটে খুঁজে পেতে পারেন। - নিম্নলিখিতগুলি করতে নিম্নলিখিত সংস্থান ব্লকগুলির সাথে আপনার
main.tf
ফাইলটি যুক্ত করুন:- স্থানীয়
firestore.rules
ফাইল থেকে ফায়ারবেস নিরাপত্তা নিয়মের একটি নিয়ম সেট তৈরি করুন। - Firestore উদাহরণের জন্য রুলসেট প্রকাশ করুন।
firebase deploy --only firestore:rules
চালানোর সমতুল্য কাজ করে।
main.tf... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.default, ] } # Release the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = google_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } }
- স্থানীয়
- ফায়ারস্টোর ডাটাবেসের ব্যবস্থা করতে এবং এর নিরাপত্তা বিধি স্থাপন করতে
terraform apply
চালান। - যাচাই করুন যে ডাটাবেসটি প্রবিধান করা হয়েছে এবং এর নিরাপত্তা বিধিগুলি স্থাপন করা হয়েছে:
- Firebase কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- ফায়ারস্টোর ডেটাবেস বিভাগে যান এবং তারপরে নিয়ম ট্যাবে ক্লিক করুন।
8. একটি ক্লাউড স্টোরেজ বালতি এবং এর নিরাপত্তা নিয়ম সেট আপ করুন৷
এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি একটি ক্লাউড স্টোরেজ বালতিতে শেষ-ব্যবহারকারীদের মধ্যে ভাগ করা ছবি সংরক্ষণ করবেন।
- প্রয়োজনীয় APIগুলি সক্ষম করতে এবং আপনার ক্লাউড স্টোরেজ ডিফল্ট বালতি সরবরাহ করতে, নিম্নলিখিত সংস্থান ব্লকগুলির সাথে আপনার
main.tf
ফাইলটি যুক্ত করুন৷
মনে রাখবেন যে আপনার প্রকল্পের জন্য ডিফল্ট ক্লাউড স্টোরেজ বালতি Google অ্যাপ ইঞ্জিনের মাধ্যমে প্রবিধান করা হয়েছে এবং আপনার Firestore ডাটাবেসের মতো একই অবস্থান থাকতে হবে। আরও তথ্যের জন্য অ্যাপ ইঞ্জিন অবস্থান দেখুন।
আপনি যদি আপনার প্রকল্পে একাধিক বালতি চান,google_storage_bucket
রিসোর্স (এই কোডল্যাবে দেখানো হয়নি) ব্যবহার করে তাদের ব্যবস্থা করুন ।
main.tf... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "<NAME_OF_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket" { provider = google-beta project = google_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket }
- Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি ক্লাউড স্টোরেজ বালতি অবশ্যই Firebase নিরাপত্তা নিয়ম দ্বারা সুরক্ষিত থাকতে হবে।
এই কোডল্যাবের নমুনা কোড ফাইলstorage.rules
এ নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনিweb
ডিরেক্টরির মূলে খুঁজে পেতে পারেন। - নিম্নলিখিতগুলি করতে নিম্নলিখিত সংস্থান ব্লকগুলির সাথে আপনার
main.tf
ফাইলটি যুক্ত করুন:- স্থানীয় ফাইল থেকে ফায়ারবেস নিরাপত্তা নিয়মের একটি নিয়ম সেট তৈরি করুন।
- স্টোরেজ বালতি জন্য নিয়ম সেট মুক্তি.
firebase deploy --only storage
চালানোর সমতুল্য কাজ করে।
main.tf... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the default Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_storage_bucket.default-bucket, ] } # Release the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default.default_bucket}" ruleset_name = "projects/${google_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } }
-
terraform apply
। - যাচাই করুন যে বালতিটি প্রবিধান করা হয়েছে এবং এটির নিরাপত্তা বিধি মোতায়েন করা হয়েছে:
- Firebase কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
- স্টোরেজ বিভাগে যান এবং তারপরে নিয়ম ট্যাবে ক্লিক করুন।
9. স্থানীয়ভাবে আপনার অ্যাপ চালান
আপনি এখন প্রথমবার আপনার ওয়েব অ্যাপ চালানোর জন্য প্রস্তুত! আপনি স্থানীয়ভাবে আপনার অ্যাপ পরিবেশন করতে Firebase হোস্টিং এমুলেটর ব্যবহার করবেন।
- একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং,
web
ডিরেক্টরি থেকে, এমুলেটর শুরু করতে নিম্নলিখিত Firebase CLI কমান্ডটি চালান:firebase emulators:start --project=<PROJECT_ID>
- আপনার ব্রাউজারে, CLI (সাধারণত
http://localhost:5000
) দ্বারা প্রত্যাবর্তিত স্থানীয় URL-এ আপনার ওয়েব অ্যাপ খুলুন।
আপনি আপনার FriendlyChat অ্যাপের UI দেখতে পাবেন, যা (এখনও!) কাজ করছে না। অ্যাপটি এখনও ফায়ারবেসের সাথে সংযুক্ত নয়, কিন্তু এই কোডল্যাবের পরবর্তী ধাপগুলি সম্পূর্ণ করার মাধ্যমে, এটি হয়ে যাবে!
মনে রাখবেন যে যখনই আপনি আপনার ওয়েব অ্যাপে পরিবর্তন করবেন (যেমন আপনি এই কোডল্যাবের নিম্নলিখিত ধাপগুলিতে করবেন), সেই পরিবর্তনগুলির সাথে স্থানীয় URL আপডেট করতে আপনার ব্রাউজার রিফ্রেশ করুন৷
10. Firebase ইনস্টল, কনফিগার এবং আরম্ভ করুন
Firebase-এর সাথে কাজ করা একটি অ্যাপ পেতে, আপনার অ্যাপের Firebase SDK এবং 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 প্রকল্পটি ব্যবহার করতে চান৷
এই কোডল্যাবের জন্য, আপনার ফায়ারবেস কনফিগারেশন পেতে আপনার কাছে দুটি ভিন্ন বিকল্প রয়েছে:
- বিকল্প 1 : Firebase কনসোল থেকে আপনার Firebase কনফিগারেশন পান।
- বিকল্প 2 : Terraform এর মাধ্যমে আপনার Firebase কনফিগারেশন পান।
বিকল্প 1: Firebase কনসোল থেকে কনফিগারেশন প্রাপ্ত করুন এবং এটি আপনার কোডবেসে যোগ করুন
- Firebase কনসোলে, আপনার প্রকল্প সেটিংসে যান।
- আপনার অ্যাপস কার্ডে নিচে স্ক্রোল করুন এবং তারপরে আপনার ওয়েব অ্যাপ নির্বাচন করুন।
- Firebase SDK স্নিপেট ফলক থেকে Config নির্বাচন করুন এবং তারপর কনফিগার স্নিপেট অনুলিপি করুন।
- আপনার অ্যাপের
web/src/firebase-config.js
ফাইলে আপনার কনফিগারেশন পেস্ট করুন, যেমন:
firebase-config.js... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
বিকল্প 2: Terraform এর মাধ্যমে কনফিগারেশনটি পান এবং এটি আপনার কোডবেসে যোগ করুন
বিকল্পভাবে, আপনি CLI-তে আউটপুট মান হিসাবে Terraform-এর মাধ্যমে আপনার Firebase কনফিগারেশন পেতে পারেন।
- আপনার
main.tf
ফাইলে, আপনারgoogle_firebase_web_app
রিসোর্স ব্লক খুঁজুন (যে ব্লকটি আপনার প্রোজেক্টের সাথে একটি ওয়েব অ্যাপ নিবন্ধিত করেছে)। - সেই ব্লকের পরপরই, নিম্নলিখিত ব্লকগুলি যোগ করুন:
main.tf... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ...
- যেহেতু
data
ব্লক এবংoutput
ব্লক কোনোভাবেই পরিকাঠামো পরিবর্তন করার উদ্দেশ্যে নয়, আপনাকে শুধুমাত্র নিম্নলিখিত কমান্ডগুলি চালাতে হবে।- আপনার ওয়েব অ্যাপের Firebase কনফিগারেশন আপনার ডিরেক্টরির Terraform অবস্থায় লোড করতে, এই কমান্ডটি চালান:
terraform refresh
- Firebase কনফিগার মান প্রিন্ট করতে, এই কমান্ডটি চালান:
terraform output –json
নিম্নলিখিত একটি কনফিগারেশনের একটি উদাহরণ আউটপুট. আপনার মুদ্রিত আউটপুটে আপনার প্রকল্প এবং অ্যাপের মান থাকবে।{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- আপনার ওয়েব অ্যাপের Firebase কনফিগারেশন আপনার ডিরেক্টরির Terraform অবস্থায় লোড করতে, এই কমান্ডটি চালান:
-
value
মানচিত্রের মধ্যে থেকে মান অনুলিপি. - এই মানগুলি (আপনার কনফিগারেশন) আপনার অ্যাপের
web/src/firebase-config.js
ফাইলে পেস্ট করুন, যেমন:
firebase-config.js... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
আপনার অ্যাপে Firebase চালু করুন
অবশেষে, Firebase আরম্ভ করার জন্য, নিম্নলিখিতগুলির সাথে আপনার অ্যাপের web/src/index.js
ফাইল যুক্ত করুন:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
আপনার অ্যাপ্লিকেশন চেষ্টা করে দেখুন
এখন যেহেতু সবকিছু Firebase-এর জন্য কনফিগার করা হয়েছে, আপনি আপনার কার্যকরী ওয়েব অ্যাপ ব্যবহার করে দেখতে পারেন।
- আপনার অ্যাপ পরিবেশনকারী ব্রাউজারটি রিফ্রেশ করুন।
- আপনি এখন Google এর সাথে সাইন ইন করতে এবং চ্যাটে বার্তা পোস্ট করা শুরু করতে সক্ষম হবেন৷ আপনার যদি ইমেজ ফাইল থাকে তবে আপনি সেগুলি আপলোডও করতে পারেন!
11. পরিবেশ জুড়ে আপনার কনফিগারেশন প্রতিলিপি করুন
টেরাফর্ম একাধিক একইভাবে কনফিগার করা অবকাঠামো পরিচালনা করতে পারদর্শী (উদাহরণস্বরূপ, একটি স্টেজিং ফায়ারবেস প্রকল্প সেট আপ করা যা একটি প্রোড প্রকল্পের মতো)।
এই কোডল্যাবে, আপনি স্টেজিং এনভায়রনমেন্ট হতে একটি দ্বিতীয় ফায়ারবেস প্রকল্প তৈরি করবেন।
এই স্টেজিং প্রকল্প তৈরি করতে একটি বিদ্যমান কনফিগারেশন প্রতিলিপি করতে, আপনার দুটি বিকল্প আছে:
- বিকল্প 1 : Terraform কনফিগারেশনের একটি অনুলিপি তৈরি করুন।
এই বিকল্পটি উত্স প্রকল্প থেকে প্রতিলিপিকৃত প্রকল্পটি কতটা আলাদা হতে পারে তার জন্য সবচেয়ে নমনীয়তা প্রদান করে। - বিকল্প 2 :
for_each
এর সাথে কনফিগারেশন পুনরায় ব্যবহার করুন।
এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয় যদি প্রতিটি প্রকল্পের উল্লেখযোগ্য উপায়ে পার্থক্য না হয় এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান।
বিকল্প 1: Terraform কনফিগারেশনের একটি অনুলিপি তৈরি করুন
এই বিকল্পটি উৎস প্রকল্পের থেকে প্রতিলিপিকৃত প্রকল্প কতটা আলাদা হতে পারে তার জন্য সবচেয়ে নমনীয়তা প্রদান করে, যেমন বিভিন্ন প্রদর্শন নাম এবং পর্যায়ভুক্ত রোলআউট সহ অ্যাপ থাকা।
- আপনার
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 এর মাধ্যমে প্রমাণীকরণ সেট আপ করেন) আপনার নিজস্ব মান সহ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 কনসোলে চেক করে প্রত্যাশিতভাবে প্রভিশন এবং সক্ষম করা হয়েছে কিনা যাচাই করুন।
বিকল্প 2: for_each
এর সাথে কনফিগারেশন পুনরায় ব্যবহার করুন
এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয় যদি প্রতিটি প্রকল্পের উল্লেখযোগ্য উপায়ে পার্থক্য না হয় এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান। এটি Terraform ভাষায় for_each
মেটা-আর্গুমেন্ট ব্যবহার করে।
- আপনার
main.tf
ফাইল খুলুন। - প্রতিটি রিসোর্স ব্লকের মধ্যে যা আপনি প্রতিলিপি করতে চান, একটি
for_each
মেটা-আর্গুমেন্ট যোগ করুন, যেমন:
main.tf
আপনি একটি# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.
main.tf
ফাইলের সম্পূর্ণ কনফিগারেশন খুঁজে পেতে পারেন যা এই কোডল্যাবের গিটহাব সংগ্রহস্থলেfor_each
মেটা-আর্গুমেন্ট ব্যবহার করে:
web/terraform-checkpoints/replicate-config/main-foreach.tf
আপনি যদি এই কনফিগারেশনটি ব্যবহার করতে চান তবে নিশ্চিত করুন যে আপনি নিম্নলিখিতগুলি করেছেন:-
main-foreach.tf
থেকে কনফিগারেশন কপি করুন এবং তারপর আপনারmain.tf
ফাইলে পেস্ট করুন। - আপনার
main.tf
ফাইলে, নিম্নলিখিতগুলি করুন:-
google_project
রিসোর্স ব্লকে,name
অ্যাট্রিবিউট,project-id
অ্যাট্রিবিউট এবং (যদি আপনি Terraform এর মাধ্যমে প্রমাণীকরণ সেট আপ করেন) আপনার নিজস্ব মান সহbilling_account
অ্যাট্রিবিউট আপডেট করুন। -
google_firebase_web_app
রিসোর্স ব্লকে, আপনার নিজের মান দিয়েdisplay_name
বৈশিষ্ট্য আপডেট করুন। -
google_firestore_database
এবংgoogle_app_engine_application
রিসোর্স ব্লকে, আপনার নিজস্ব মান দিয়েlocation_id
বৈশিষ্ট্য আপডেট করুন।
-
-
- এখনই এই কনফিগারেশনটি প্রয়োগ করার পরিবর্তে, বিদ্যমান অবকাঠামোর সাথে তুলনা করে কীভাবে টেরাফর্ম এই কনফিগারেশনের ব্যাখ্যা করে সে সম্পর্কে কয়েকটি বিষয় বোঝা এবং ঠিক করা গুরুত্বপূর্ণ।
- এই মুহুর্তে, আপনি যদি এই কনফিগারেশনটি প্রয়োগ করেন যা
for_each
ব্যবহার করে তবে সংস্থান ঠিকানাগুলি নিম্নলিখিতগুলির মতো দেখাবে:
যাইহোক, আপনি এই কোডল্যাবের প্রথম অংশে তৈরি করা বিদ্যমান প্রকল্পটি নিম্নলিখিত হিসাবে টেরফর্ম হিসাবে পরিচিত:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]
google_project.default google_firebase_project.default google_firebase_android_app.default
- বর্তমান অবস্থার ভিত্তিতে টেরফর্ম কী পদক্ষেপ নেবে তা দেখার জন্য
terraform plan
চালান।
আউটপুটটি দেখানো উচিত যে টেরাফর্মটি আপনি এই কোডল্যাবের প্রথম অংশে তৈরি করা প্রকল্পটি মুছে ফেলবেন এবং দুটি নতুন প্রকল্প তৈরি করবেন। এটি কারণ টেরফর্ম জানে না যেgoogle_project.default
ঠিকানার ঠিকানায় প্রকল্পটিgoogle_project.default["prod"]
নতুন ঠিকানায় স্থানান্তরিত হয়েছে। - এটি ঠিক করতে,
terraform state mv
কমান্ডটি চালান:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- একইভাবে, অন্যান্য সমস্ত রিসোর্স ব্লকগুলি ঠিক করার জন্য,
google_firebase_project
,google_firebase_web_app
এবং আপনারmain.tf
ফাইলের অন্যান্য সমস্ত সংস্থান ব্লকগুলির জন্যterraform state mv
চালান। - এখন, আপনি যদি আবার
terraform plan
চালান তবে এটি দেখানো উচিত নয় যে টেরফর্মটি এই কোডল্যাবের প্রথম অংশে আপনি যে প্রকল্পটি তৈরি করেছেন তা মুছে ফেলবে।
- এই মুহুর্তে, আপনি যদি এই কনফিগারেশনটি প্রয়োগ করেন যা
- রান
terraform apply
এবং এর পরিষেবাগুলি সক্ষম করুন। - যাচাই করুন যে সমস্ত কিছু পূর্বের মতো ফায়ারবেস কনসোলে চেক করে প্রত্যাশার মতো প্রমাণিত এবং সক্ষম করা হয়েছিল।
12। বোনাস পদক্ষেপ: আপনার মঞ্চ এবং প্রোড অ্যাপ্লিকেশনগুলি স্থাপন করুন
- আপনার অ্যাপ্লিকেশনটির কোডবেসে, পরিবর্তে আপনার স্টেজিং প্রকল্প থেকে ফায়ারবেস কনফিগারেশনটি ব্যবহার করতে
firebase-config.js
পরিবর্তন করুন।
কীভাবে আপনার ফায়ারবেস কনফিগারেশন পাবেন এবং এটি আপনার অ্যাপ্লিকেশনটিতে যুক্ত করবেন তা নিজেকে স্মরণ করিয়ে দেওয়ার জন্য, এই কোডল্যাবের পূর্ববর্তী পদক্ষেপটি দেখুন, আপনার অ্যাপ্লিকেশনটিতে আপনার ফায়ারবেস কনফিগারেশন যুক্ত করুন। - আপনার
web
ডিরেক্টরিটির মূলে, আপনার অ্যাপ্লিকেশনটি আপনার স্টেজিং ফায়ারবেস প্রকল্পে স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান।firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
-
firebase deploy
আউটপুটে মুদ্রিত ইউআরএল এর মাধ্যমে ব্রাউজারে আপনার স্টেজিং অ্যাপটি খুলুন। সাইন ইন, বার্তা প্রেরণ এবং চিত্র আপলোড করার চেষ্টা করুন।
আপনি যখন কোনও ফায়ারবেস প্রকল্পে কোনও অ্যাপ্লিকেশন স্থাপন করেন, তখন এটি বাস্তব ফায়ারবেস সংস্থানগুলি ব্যবহার করে, অনুকরণীয় সংস্থানগুলি ব্যবহার করে। আপনি যখন আপনার স্টেজিং অ্যাপের সাথে ইন্টারঅ্যাক্ট করেন, আপনার ফায়ারবেস কনসোলে আপনার স্টেজিং প্রকল্পে ডেটা এবং চিত্রগুলি উপস্থিত হওয়া উচিত। - মঞ্চে আপনার অ্যাপ্লিকেশনটি পরীক্ষা করার পরে, প্রোড প্রকল্পের ফায়ারবেস কনফিগারেশন (আপনি এই কোডল্যাবটিতে তৈরি করা প্রথম প্রকল্প) ব্যবহার করে
firebase-config.js
আবার পরিবর্তন করুন। - আপনার
web
ডিরেক্টরিটির মূলে, আপনার অ্যাপ্লিকেশনটি আপনার প্রোডাকশন ফায়ারবেস প্রকল্পে স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান।firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
-
firebase deploy
আউটপুটে মুদ্রিত ইউআরএল এর মাধ্যমে ব্রাউজারে আপনার উত্পাদন অ্যাপ্লিকেশনটি খুলুন। সাইন ইন, বার্তা প্রেরণ এবং চিত্র আপলোড করার চেষ্টা করুন।
আপনার ফায়ারবেস কনসোলে আপনার উত্পাদন প্রকল্পে ডেটা এবং চিত্রগুলি উপস্থিত হওয়া উচিত। - আপনি যখন এই কোডল্যাবের জন্য দুটি অ্যাপের সাথে কথোপকথন শেষ করেছেন, আপনি ফায়ারবেসগুলি সেগুলি পরিবেশন করা থেকে বিরত রাখতে পারেন। আপনার প্রতিটি প্রকল্পের জন্য নিম্নলিখিত কমান্ডটি চালান:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. অভিনন্দন!
আপনি একটি রিয়েল-টাইম চ্যাট ওয়েব অ্যাপ্লিকেশন কনফিগার করতে টেরফর্ম ব্যবহার করেছেন! এবং আপনি মঞ্চ এবং প্রোডের জন্য পৃথক ফায়ারবেস প্রকল্প তৈরি করে উন্নয়নের পরিবেশের জন্য সেরা অনুশীলনগুলি অনুসরণ করেছেন।
আমরা কভার করেছি কি
- মেঘের সংস্থানগুলি পরিচালনা করতে টেরাফর্ম সিএলআই ব্যবহার করে
- ফায়ারবেস পণ্যগুলি কনফিগার করতে টেরফর্ম ব্যবহার করে (প্রমাণীকরণ, ফায়ারস্টোর, ক্লাউড স্টোরেজ এবং সুরক্ষা বিধি)
- ফায়ারবেস স্থানীয় এমুলেটর স্যুট ব্যবহার করে স্থানীয়ভাবে একটি ওয়েব অ্যাপ্লিকেশন চালানো এবং পরীক্ষা করা
- একটি ওয়েব অ্যাপে ফায়ারবেস আমদানি করা হচ্ছে
- একাধিক পরিবেশ জুড়ে একটি কনফিগারেশন প্রতিলিপি করতে টেরফর্ম ব্যবহার করে
ফায়ারবেস এবং টেরফর্ম সম্পর্কে আরও তথ্যের জন্য, আমাদের ডকুমেন্টেশন দেখুন। আপনি টেরফর্ম সমর্থন, সাধারণ ব্যবহারের ক্ষেত্রে নমুনা টেরফর্ম কনফিগারেশন এবং সহায়ক সমস্যা সমাধান এবং এফএকিউ সহ সমস্ত ফায়ারবেস পণ্যগুলির একটি তালিকা খুঁজে পেতে পারেন।