Terraform এর মাধ্যমে Firebase প্রকল্প এবং পণ্য সেট আপ এবং পরিচালনা করুন

1. ভূমিকা

লক্ষ্য

আপনি Firebase প্রকল্প সেট আপ এবং পরিচালনা করতে Terraform ব্যবহার করতে পারেন, যার মধ্যে অবকাঠামো এবং Firebase পণ্যের প্রোগ্রাম্যাটিক কনফিগারেশন অন্তর্ভুক্ত রয়েছে।

এই কোডল্যাবটি প্রথমে বর্ণনা করে কিভাবে একটি নতুন ফায়ারবেস প্রকল্প তৈরি করার জন্য একটি টেরাফর্ম কনফিগারেশন ফাইল তৈরি করতে হয়, তারপরে সেই প্রকল্পে আপনি যে অ্যাপ এবং ফায়ারবেস পণ্যগুলি ব্যবহার করতে চান তা কীভাবে কনফিগার করতে হয়। আমরা টেরাফর্ম কমান্ড লাইনের মূল বিষয়গুলিও কভার করি, যেমন পরিবর্তনগুলি পূর্বরূপ দেখা এবং তারপরে সেগুলি বাস্তবায়ন করা।

আপনি যদি Terraform দিয়ে Firebase প্রকল্প এবং পণ্য সেট আপ এবং পরিচালনা করতে শিখতে চান, তাহলে এই কোডল্যাবটি আপনার জন্য!

তুমি কি শিখবে

  • কিভাবে একটি টেরাফর্ম কনফিগারেশন ফাইল ( *.tf ) তৈরি করবেন
  • আপনার অবকাঠামো পরিচালনা করার জন্য টেরাফর্ম সিএলআই কমান্ড কীভাবে ব্যবহার করবেন
  • আপনার রিসোর্স এবং পরিষেবা আপডেট করার জন্য আপনার কনফিগারেশন কীভাবে পরিবর্তন করবেন
  • একটি বাস্তব ওয়েব অ্যাপে (যাকে বলা হয় Friendly Chat ) আপনার কনফিগারেশন কীভাবে প্রয়োগ করবেন
  • বিভিন্ন পরিবেশে (উৎপাদন, স্টেজিং, ইত্যাদি) সমান্তরাল (এবং ইন-সিঙ্ক) কনফিগারেশন কীভাবে সংজ্ঞায়িত করবেন

তোমার যা লাগবে

এই কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য, আপনার টেরাফর্ম এবং এর পরিভাষা সম্পর্কে প্রাথমিক দক্ষতা থাকা প্রয়োজন, যার মধ্যে নিম্নলিখিত পূর্বশর্তগুলি অন্তর্ভুক্ত রয়েছে:

এই কোডল্যাবটি একটি বাস্তব নমুনা অ্যাপ প্রদান করে যাতে আপনি Terraform এর মাধ্যমে যা সরবরাহ করেন তা পরীক্ষা করতে এবং ইন্টারঅ্যাক্ট করতে পারেন। এটি করার জন্য, আপনার নিম্নলিখিতগুলির প্রয়োজন হবে:

  • একটি ওয়েব অ্যাপের নমুনা কোড - কোডল্যাবের পরবর্তী ধাপে এই কোডটি ডাউনলোড করুন
  • প্যাকেজ ম্যানেজার npm (যা সাধারণত Node.js এর সাথে আসে) - এই টুলগুলি ইনস্টল করুন
  • ফায়ারবেস সিএলআই - এই সিএলআই ইনস্টল করুন এবং লগ ইন করুন

2. শুরুর কোডটি পান

এই কোডল্যাবে, আপনি একটি বাস্তব ওয়েব অ্যাপের মাধ্যমে Terraform-এর মাধ্যমে কী সরবরাহ করেন তা পরীক্ষা করে দেখতে পারেন। আমরা এটি করার পরামর্শ দিচ্ছি যাতে আপনি Terraform-প্রবিধানিত সংস্থানগুলি ব্যবহারের জন্য প্রয়োজনীয় সমস্ত পদক্ষেপগুলি বুঝতে পারেন।

কমান্ড লাইন থেকে কোডল্যাবের গিটহাব রিপোজিটরি ক্লোন করুন:

git clone https://github.com/firebase/codelab-friendlychat-web

বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, তাহলে আপনি রিপোজিটরিটি একটি জিপ ফাইল হিসেবে ডাউনলোড করতে পারেন।

৩. একটি টেরাফর্ম কনফিগারেশন তৈরি করুন

টেরাফর্ম সেট আপ করা হচ্ছে

  1. ডাউনলোড করা নমুনা অ্যাপের কোডবেসে, web ডিরেক্টরির রুটে নেভিগেট করুন।
  2. সেই ডিরেক্টরির মূলে, নিম্নলিখিত প্রাথমিক সেটআপ সহ 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 গুলির জন্য ব্লক যোগ করুন

  1. প্রথমে, অন্তর্নিহিত গুগল ক্লাউড প্রকল্পের ব্যবস্থা করুন।

    আপনার 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"
      }
    }
    
  2. এরপর, আপনাকে প্রয়োজনীয় অন্তর্নিহিত API গুলি সক্ষম করতে হবে: পরিষেবা ব্যবহার API এবং ফায়ারবেস ম্যানেজমেন্ট API।

    ফায়ারবেস প্রজেক্ট তৈরি করার জন্য ফায়ারবেস কনসোল ব্যবহার করার সময় সাধারণত এই API সক্ষমকরণটি পর্দার আড়ালে পরিচালিত হয়, তবে টেরাফর্মকে এই সক্ষমকরণটি করার জন্য স্পষ্টভাবে বলা প্রয়োজন।

    আপনার main.tf কনফিগারেশন ফাইলে (নতুন ক্লাউড প্রজেক্ট তৈরি করে এমন ব্লকের ঠিক নীচে), নিম্নলিখিত রিসোর্স ব্লকটি যোগ করুন:

    প্রধান.টিএফ
    ...
    
    # 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
    }
    
    পরিষেবা ব্যবহারের API সক্ষম করার মাধ্যমে, আপনার নতুন প্রকল্প কোটা চেক গ্রহণ করতে সক্ষম হবে! সুতরাং, পরবর্তী সমস্ত রিসোর্স প্রভিশনিং এবং পরিষেবা সক্ষম করার জন্য, আপনার 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 নির্ভরতা সম্পর্কে জানে না এবং সমান্তরালভাবে সংস্থান সরবরাহ করার সময় ত্রুটির সম্মুখীন হতে পারে।

কনফিগারেশন প্রয়োগ করুন

  1. নতুন রিসোর্স সরবরাহ করতে এবং আপনার কনফিগ ফাইলে নির্দিষ্ট API গুলি সক্রিয় করতে, আপনার main.tf ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান (যা web হওয়া উচিত):
    terraform apply
    
  2. টার্মিনালে, টেরাফর্ম তার সম্পাদিত কর্মের একটি পরিকল্পনা প্রিন্ট করে।

    যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলে 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 কনসোলে এটি দেখে প্রকল্পটি তৈরি হয়েছে কিনা তা যাচাই করতে পারেন।

The Terraform FriendlyChat Codelab project selected on the Firebase console

৫. 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"
}

কনফিগারেশন প্রয়োগ করুন

  1. নতুন রিসোর্স তৈরি করতে, আপনার main.tf ফাইলের (যা web হওয়া উচিত) একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান।
    terraform apply
    
    মনে রাখবেন যে এই কমান্ডটি কোনও নতুন Google ক্লাউড প্রকল্প পুনরায় তৈরি করবে না। Terraform সনাক্ত করবে যে নির্দিষ্ট প্রকল্প আইডি সহ একটি প্রকল্প ইতিমধ্যেই বিদ্যমান এবং প্রকল্পের বর্তমান অবস্থা .tf ফাইলে যা আছে তার সাথে তুলনা করবে এবং এটি যে কোনও পরিবর্তন আনবে।
  2. মুদ্রিত কর্ম পরিকল্পনা পর্যালোচনা করুন। যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলে yes টাইপ করুন এবং কর্ম অনুমোদনের জন্য এন্টার টিপুন।

পরিবর্তনগুলি যাচাই করুন

আপনি নিম্নলিখিত কমান্ডটি চালিয়ে নতুন প্রভিশন করা রিসোর্সের অবস্থা পরীক্ষা করতে পারেন:

terraform show

বিকল্পভাবে, আপনি Firebase কনসোলে অ্যাপটি দেখে আপনার প্রোজেক্টে সফলভাবে নিবন্ধিত হয়েছে কিনা তা যাচাই করতে পারেন। Project settings এ যান, এবং তারপর Your apps বিভাগে স্ক্রোল করুন।

৬. ফায়ারবেস প্রমাণীকরণ সেট আপ করুন

যেকোনো অ্যাপের ক্ষেত্রে প্রমাণীকরণ একটি গুরুত্বপূর্ণ অংশ। ব্যবহারকারীদের তাদের Google অ্যাকাউন্ট ব্যবহার করে আপনার ওয়েব অ্যাপে সাইন ইন করার অনুমতি দিতে, আপনি Firebase প্রমাণীকরণ সক্ষম করতে পারেন এবং Google পদ্ধতিতে সাইন-ইন সেট আপ করতে পারেন।

মনে রাখবেন যে এই কোডল্যাবে, আমরা Firebase প্রমাণীকরণ সেট আপ করার জন্য দুটি ভিন্ন বিকল্প প্রদান করি:

  • বিকল্প ১ (প্রস্তাবিত) : কনসোলে Firebase প্রমাণীকরণ সেট আপ করুন, যার জন্য GCIP প্রয়োজন হয় না।
    • এই বিকল্পটি ব্যবহার করার অর্থ হল আপনাকে আপনার নতুন প্রকল্পটিকে ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে না
  • বিকল্প ২ : গুগল ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে টেরাফর্মের মাধ্যমে ফায়ারবেস প্রমাণীকরণ সেট আপ করুন।
    • এই বিকল্পটি ব্যবহার করার অর্থ হল আপনাকে আপনার নতুন প্রকল্পটিকে একটি ক্লাউড বিলিং অ্যাকাউন্টের সাথে সংযুক্ত করতে হবে কারণ GCIP-এর জন্য প্রকল্পটি ব্লেজ মূল্য পরিকল্পনায় থাকা প্রয়োজন।

বিকল্প ১: Firebase কনসোল ব্যবহার করে প্রমাণীকরণ সেট আপ করুন

Firebase কনসোল ব্যবহার করে Firebase প্রমাণীকরণ সেট আপ করতে, আপনার প্রকল্পটি Blaze মূল্য পরিকল্পনায় থাকা প্রয়োজন নয়।

Firebase Authentication সেট আপ করার এবং Google-এ সাইন-ইন করার পদ্ধতি এখানে দেওয়া হল:

  1. ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
  2. Authentication এ ক্লিক করুন, Get started এ ক্লিক করুন, এবং তারপর Sign-in method ট্যাবে ক্লিক করুন (অথবা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
  3. নতুন প্রদানকারী যোগ করুন -এ ক্লিক করুন এবং অতিরিক্ত প্রদানকারী বিভাগ থেকে, Google নির্বাচন করুন।
  4. সক্রিয় করুন টগল।
  5. আপনার অ্যাপের পাবলিক-ফেসিং নামটি FriendlyChat এর মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)।
  6. ড্রপডাউন মেনু থেকে একটি প্রকল্প সহায়তা ইমেল নির্বাচন করুন, এবং তারপর সংরক্ষণ করুন এ ক্লিক করুন। Configuring Firebase Auth on the Firebase console
  7. আপনার গুগলকে একটি সক্রিয় সাইন-ইন প্রদানকারী হিসেবে দেখা উচিত। Firebase console Authentication page: Google sign-in enabled

বিকল্প ২: গুগল ক্লাউড আইডেন্টিটি প্ল্যাটফর্ম (GCIP) API ব্যবহার করে টেরাফর্মের মাধ্যমে প্রমাণীকরণ সেট আপ করুন

Terraform এর মাধ্যমে Firebase Authentication সেট আপ করতে, আপনাকে GCIP API ব্যবহার করতে হবে, যার অর্থ প্রকল্পটি Blaze মূল্য পরিকল্পনায় থাকা আবশ্যক। আপনি প্রকল্পের সাথে একটি ক্লাউড বিলিং অ্যাকাউন্ট সংযুক্ত করে Blaze পরিকল্পনা ব্যবহার করার জন্য আপনার Firebase প্রকল্প আপগ্রেড করতে পারেন।

Terraform এর মাধ্যমে বিলিং সক্ষম করুন

  1. যদি আপনার ইতিমধ্যেই ক্লাউড বিলিং অ্যাকাউন্ট না থাকে, তাহলে প্রথম ধাপ হল গুগল ক্লাউড কনসোলে একটি নতুন অ্যাকাউন্ট তৈরি করা। যখন আপনি এটি করবেন, তখন এর বিলিং অ্যাকাউন্ট আইডিটি নোট করুন। বিলিং অ্যাকাউন্ট আইডিটি আপনার প্রকল্পের সাথে সম্পর্কিত বিলিং অ্যাকাউন্ট আইডিতে বিলিং পৃষ্ঠায় অবস্থিত হতে পারে। Enabling a billing account using the Google Cloud console
  2. 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-এ সাইন-ইন করুন

  1. 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,
      ]
    }
    
  2. গুগলের সাথে সাইন-ইন সক্ষম করার জন্য আপনার একটি OAuth ক্লায়েন্ট থাকা প্রয়োজন। এই সেটআপটি করতে গুগল ক্লাউড কনসোলের API এবং পরিষেবা বিভাগে যান।
  3. যেহেতু আপনি এই প্রকল্পের জন্য প্রথমবারের মতো ক্লায়েন্ট আইডি তৈরি করছেন, তাই আপনাকে আপনার OAuth সম্মতি স্ক্রিনটি কনফিগার করতে হবে।
    1. OAuth সম্মতি স্ক্রিন পৃষ্ঠাটি খুলুন, এবং তারপরে আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন।
    2. ব্যবহারকারীর ধরণটি বহিরাগত তে সেট করুন, এবং তারপর তৈরি করুন এ ক্লিক করুন।
    3. পরবর্তী স্ক্রিনে, নিম্নলিখিতটি সম্পূর্ণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
      • আপনার অ্যাপের পাবলিক-ফেসিং অ্যাপের নাম FriendlyChat এর মতো কিছুতে সেট করুন (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)।
      • ড্রপডাউন মেনু থেকে একটি ব্যবহারকারী সহায়তা ইমেল নির্বাচন করুন।
      • ডেভেলপারের যোগাযোগের তথ্যের জন্য একটি ইমেল ঠিকানা লিখুন।
    4. পরবর্তী স্ক্রিনগুলিতে, নিম্নলিখিতগুলি সম্পূর্ণ করুন:
      • স্কোপ পৃষ্ঠায় ডিফল্টগুলি গ্রহণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
      • টেস্ট ব্যবহারকারী পৃষ্ঠায় ডিফল্টগুলি গ্রহণ করুন, এবং তারপর সংরক্ষণ করুন এবং চালিয়ে যান ক্লিক করুন।
      • সারাংশটি পর্যালোচনা করুন, এবং তারপর ড্যাশবোর্ডে ফিরে যান ক্লিক করুন।
      Configuring an OAuth2 client using the Google Cloud console
  4. নিম্নলিখিতগুলি করে শংসাপত্র পৃষ্ঠায় একটি OAuth ক্লায়েন্ট সেট আপ করুন:
    1. ক্রেডেনশিয়াল তৈরি করুন ক্লিক করুন এবং OAuth ক্লায়েন্ট আইডি নির্বাচন করুন।
    2. অ্যাপ্লিকেশন টাইপ ড্রপ-ডাউন থেকে, ওয়েব অ্যাপ্লিকেশন নির্বাচন করুন।
    3. নাম ক্ষেত্রে, আপনার অ্যাপের নাম লিখুন, উদাহরণস্বরূপ FriendlyChat (এটি বিশ্বব্যাপী অনন্য হওয়ার প্রয়োজন নেই)।
    4. নিম্নলিখিত সেট করে আপনার অ্যাপের 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 এ সেট করা আপনার প্রজেক্ট আইডি।
    5. সংরক্ষণ করুন ক্লিক করুন।
    Obtaining the OAuth2 Client ID and secret from the Google Cloud console Credentials page
  5. আপনার 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
      ]
    }
    

কনফিগারেশন প্রয়োগ করুন

  1. আপনার কনফিগারেশন অনুসারে Authentication সেট আপ করতে, আপনার main.tf ফাইলের মতো একই ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডগুলি চালান (যা web হওয়া উচিত):
    export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
    
    terraform apply
    
    মনে রাখবেন যে terraform apply চালানোর ফলে নতুন কোনও Google Cloud প্রকল্প পুনরায় তৈরি হবে না। Terraform সনাক্ত করবে যে নির্দিষ্ট প্রকল্প আইডি সহ একটি প্রকল্প ইতিমধ্যেই বিদ্যমান এবং প্রকল্পের বর্তমান অবস্থা .tf ফাইলে যা আছে তার সাথে তুলনা করবে। তারপরে এটি যেকোনো পরিবর্তন খুঁজে পাবে।
  2. মুদ্রিত কর্ম পরিকল্পনা পর্যালোচনা করুন। যদি সবকিছু প্রত্যাশা অনুযায়ী দেখায়, তাহলে yes টাইপ করুন এবং কর্ম অনুমোদনের জন্য এন্টার টিপুন।

পরিবর্তনগুলি যাচাই করুন

  1. ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
  2. Authentication এ ক্লিক করুন, এবং তারপর Sign-in method ট্যাবে ক্লিক করুন (অথবা সরাসরি সেখানে যেতে এখানে ক্লিক করুন )।
  3. আপনার গুগলকে একটি সক্রিয় সাইন-ইন প্রদানকারী হিসেবে দেখা উচিত। Firebase console Authentication page: Google sign-in enabled

৭. একটি ফায়ারস্টোর ডাটাবেস এবং এর নিরাপত্তা নিয়ম সেট আপ করুন

এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি একটি ফায়ারস্টোর ডাটাবেসে শেষ ব্যবহারকারীদের মধ্যে বার্তা সংরক্ষণ করবেন।

  1. প্রয়োজনীয় 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
      ]
    }
    
  2. <NAME_OF_DESIRED_REGION> কে সেই অঞ্চলে পরিবর্তন করুন যেখানে আপনি ডাটাবেস রাখতে চান।

    একটি প্রোডাকশন অ্যাপ তৈরি করার সময়, আপনি চাইবেন এটি এমন একটি অঞ্চলে হোক যেখানে বেশিরভাগ ব্যবহারকারীর কাছাকাছি এবং অন্যান্য ফায়ারবেস পরিষেবা, যেমন ক্লাউড ফাংশন, এর সাথে মিল রয়েছে। এই কোডল্যাবের জন্য, আপনি us-east1 (দক্ষিণ ক্যারোলিনা) ব্যবহার করতে পারেন অথবা আপনার নিকটতম অঞ্চলটি ব্যবহার করতে পারেন ( ক্লাউড ফায়ারস্টোরের অবস্থান দেখুন)।
  3. Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি Firestore ডাটাবেস ইনস্ট্যান্স Firebase Security Rules দ্বারা সুরক্ষিত থাকতে হবে।

    এই কোডল্যাবের নমুনা কোডটি firestore.rules ফাইলে নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনি web ডিরেক্টরির মূলে খুঁজে পেতে পারেন।
  4. নিম্নলিখিত কাজগুলি করার জন্য আপনার main.tf ফাইলটি নিম্নলিখিত রিসোর্স ব্লকগুলির সাথে যুক্ত করুন:
    • স্থানীয় firestore.rules ফাইল থেকে Firebase নিরাপত্তা নিয়মের একটি নিয়ম সেট তৈরি করুন।
    • ফায়ারস্টোর ইনস্ট্যান্সের জন্য নিয়ম সেটটি প্রকাশ করুন।
    মনে রাখবেন যে এই রিসোর্স ব্লকগুলি Firebase কনসোলে Publish বোতামে ক্লিক করার অথবা 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
        ]
      }
    }
    
  5. ফায়ারস্টোর ডাটাবেস সরবরাহ করতে এবং এর সুরক্ষা নিয়ম স্থাপন করতে terraform apply চালান।
  6. ডাটাবেসটি প্রভিশন করা আছে কিনা এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করা হয়েছে কিনা তা যাচাই করুন:
    1. ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
    2. ফায়ারস্টোর ডাটাবেস বিভাগে যান, এবং তারপর নিয়ম ট্যাবে ক্লিক করুন।
    Verifying Cloud Firestore rules using the Firebase console

৮. একটি ক্লাউড স্টোরেজ বাকেট এবং এর নিরাপত্তা নিয়ম সেট আপ করুন

এই কোডল্যাবের ওয়েব অ্যাপের জন্য, আপনি শেষ ব্যবহারকারীদের মধ্যে ভাগ করা ছবিগুলি একটি ক্লাউড স্টোরেজ বাকেটে সংরক্ষণ করবেন।

  1. প্রয়োজনীয় 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
    }
    
  2. Firebase-এ অ্যাক্সেসযোগ্য প্রতিটি ক্লাউড স্টোরেজ বাকেট অবশ্যই Firebase নিরাপত্তা নিয়ম দ্বারা সুরক্ষিত থাকতে হবে।

    এই কোডল্যাবের নমুনা কোডটি storage.rules ফাইলে নিরাপদ Firestore নিয়মের একটি সেট প্রদান করে, যা আপনি web ডিরেক্টরির মূলে খুঁজে পেতে পারেন।
  3. নিম্নলিখিত কাজগুলি করার জন্য আপনার main.tf ফাইলটি নিম্নলিখিত রিসোর্স ব্লকগুলির সাথে যুক্ত করুন:
    • স্থানীয় ফাইল থেকে ফায়ারবেস সিকিউরিটি রুলসের একটি রুলসেট তৈরি করুন।
    • স্টোরেজ বাকেটের জন্য নিয়ম সেটটি ছেড়ে দিন।
    মনে রাখবেন যে এই রিসোর্স ব্লকগুলি Firebase কনসোলে Publish বোতামে ক্লিক করার অথবা 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
        ]
      }
    }
    
  4. ডিফল্ট ক্লাউড স্টোরেজ বাকেট সরবরাহ করতে terraform apply চালান এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করুন।
  5. বাকেটটি প্রস্তুত আছে কিনা এবং এর নিরাপত্তা নিয়মগুলি স্থাপন করা হয়েছে কিনা তা যাচাই করুন:
    1. ফায়ারবেস কনসোলে , বাম প্যানেলে বিল্ড বিভাগটি সনাক্ত করুন।
    2. স্টোরেজ বিভাগে যান, এবং তারপর নিয়ম ট্যাবে ক্লিক করুন।
    Verifying security rules using the Firebase console

৯. আপনার অ্যাপটি স্থানীয়ভাবে চালান

আপনি এখন প্রথমবারের মতো আপনার ওয়েব অ্যাপ চালানোর জন্য প্রস্তুত! আপনি স্থানীয়ভাবে আপনার অ্যাপটি পরিবেশন করার জন্য Firebase Hosting এমুলেটর ব্যবহার করবেন।

  1. একটি নতুন টার্মিনাল উইন্ডো খুলুন এবং web ডিরেক্টরি থেকে, এমুলেটরটি শুরু করতে নিম্নলিখিত Firebase CLI কমান্ডটি চালান:
    firebase emulators:start --project=<PROJECT_ID>
    
  2. আপনার ব্রাউজারে, 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 ইনস্টল করুন এবং আপনার ওয়েবপ্যাক বিল্ড শুরু করুন

আপনার অ্যাপ তৈরি শুরু করার জন্য আপনাকে কয়েকটি কমান্ড চালাতে হবে।

  1. একটি নতুন টার্মিনাল উইন্ডো খুলুন।
  2. নিশ্চিত করুন যে আপনি web ডিরেক্টরির মূলে আছেন।
  3. Firebase SDK ডাউনলোড করতে npm install চালান।
  4. যেকোনো নির্ভরতা আপডেট করতে npm update চালান।
  5. ওয়েবপ্যাক শুরু করতে npm run start রান করুন।

কোডল্যাবের বাকি অংশের জন্য, ওয়েবপ্যাক এখন ক্রমাগত আপনার সোর্স কোড পুনর্নির্মাণ করবে।

আপনার অ্যাপে আপনার Firebase কনফিগারেশন যোগ করুন

আপনার অ্যাপে আপনার Firebase কনফিগারেশনও যোগ করতে হবে যাতে Firebase SDK গুলি জানতে পারে যে আপনি কোন Firebase প্রকল্পটি ব্যবহার করতে চান।

এই কোডল্যাবের জন্য, আপনার Firebase কনফিগারেশন পেতে দুটি ভিন্ন বিকল্প রয়েছে:

  • বিকল্প ১ : Firebase কনসোল থেকে আপনার Firebase কনফিগারেশনটি পান।
  • বিকল্প ২ : Terraform এর মাধ্যমে আপনার Firebase কনফিগারেশনটি পান।

বিকল্প ১: ফায়ারবেস কনসোল থেকে কনফিগারেশনটি পান এবং এটি আপনার কোডবেসে যুক্ত করুন।

  1. Firebase কনসোলে, আপনার Project সেটিংসে যান।
  2. আপনার অ্যাপস কার্ডে স্ক্রোল করুন এবং তারপরে আপনার ওয়েব অ্যাপ নির্বাচন করুন।
  3. Firebase SDK স্নিপেট প্যান থেকে Config নির্বাচন করুন, এবং তারপর কনফিগ স্নিপেটটি কপি করুন।
  4. আপনার অ্যাপের 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 কনফিগারেশন পেতে পারেন।

  1. আপনার main.tf ফাইলে, আপনার google_firebase_web_app রিসোর্স ব্লকটি খুঁজুন (যে ব্লকটি আপনার প্রকল্পের সাথে একটি ওয়েব অ্যাপ নিবন্ধিত করেছে)।
  2. সেই ব্লকের ঠিক পরে, নিম্নলিখিত ব্লকগুলি যোগ করুন:

    প্রধান.টিএফ
    ...
    
    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", "")
      }
    }
    
    ...
    
  3. যেহেতু data ব্লক এবং output ব্লক কোনওভাবেই পরিকাঠামো পরিবর্তন করার উদ্দেশ্যে নয়, তাই আপনাকে কেবল নিম্নলিখিত কমান্ডগুলি চালাতে হবে।
    1. আপনার ওয়েব অ্যাপের Firebase কনফিগারেশনটি আপনার ডিরেক্টরির Terraform অবস্থায় লোড করতে, এই কমান্ডটি চালান:
      terraform refresh
      
    2. 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"
          }
        }
      }
      
  4. value মানচিত্রের মধ্যে থেকে মানগুলি অনুলিপি করুন।
  5. এই মানগুলি (আপনার কনফিগারেশন) আপনার অ্যাপের 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-এর জন্য কনফিগার করা হয়েছে, আপনি আপনার কার্যকরী ওয়েব অ্যাপটি ব্যবহার করে দেখতে পারেন।

  1. আপনার অ্যাপটি পরিবেশনকারী ব্রাউজারটি রিফ্রেশ করুন।
  2. এখন তুমি গুগলে সাইন ইন করতে পারবে এবং চ্যাটে বার্তা পোস্ট করতে পারবে। যদি তোমার কাছে ছবির ফাইল থাকে, তাহলে তুমি সেগুলো আপলোডও করতে পারো!

১১. পরিবেশ জুড়ে আপনার কনফিগারেশনের প্রতিলিপি তৈরি করুন

একই রকম কনফিগার করা একাধিক অবকাঠামো পরিচালনা করার ক্ষেত্রে টেরাফর্ম অসাধারণ (উদাহরণস্বরূপ, একটি স্টেজিং ফায়ারবেস প্রকল্প স্থাপন করা যা একটি প্রোড প্রকল্পের অনুরূপ)।

এই কোডল্যাবে, আপনি স্টেজিং পরিবেশ হিসেবে দ্বিতীয় একটি ফায়ারবেস প্রকল্প তৈরি করবেন।

এই স্টেজিং প্রকল্পটি তৈরি করার জন্য একটি বিদ্যমান কনফিগারেশনের প্রতিলিপি তৈরি করতে, আপনার কাছে দুটি বিকল্প রয়েছে:

  • বিকল্প ১ : টেরাফর্ম কনফিগারেশনের একটি কপি তৈরি করুন।
    এই বিকল্পটি উৎস প্রকল্প থেকে প্রতিলিপিকৃত প্রকল্পটি কতটা আলাদা হতে পারে তার জন্য সর্বাধিক নমনীয়তা প্রদান করে।
  • বিকল্প ২ : for_each দিয়ে কনফিগারেশন পুনঃব্যবহার করুন।
    যদি প্রতিটি প্রকল্প উল্লেখযোগ্যভাবে ভিন্ন না হয় এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান তবে এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয়।

বিকল্প ১: টেরাফর্ম কনফিগারেশনের একটি কপি তৈরি করুন

এই বিকল্পটি উৎস প্রকল্প থেকে প্রতিলিপিকৃত প্রকল্প কতটা আলাদা হতে পারে তার জন্য সর্বাধিক নমনীয়তা প্রদান করে, যেমন বিভিন্ন ডিসপ্লে নামের অ্যাপ থাকা এবং পর্যায়ক্রমে রোলআউট করা।

  1. আপনার web ডিরেক্টরির মূলে, main_staging.tf নামে একটি নতুন Terraform কনফিগারেশন ফাইল তৈরি করুন।
  2. আপনার main.tf ফাইল থেকে সমস্ত রিসোর্স ব্লক কপি করুন ( terraform এবং provider ব্লক ব্যতীত), এবং তারপর সেগুলি আপনার main_staging.tf ফাইলে পেস্ট করুন।
  3. তারপর আপনাকে main_staging.tf এ আপনার প্রতিটি প্রতিলিপিকৃত রিসোর্স ব্লক পরিবর্তন করতে হবে যাতে তারা আপনার স্টেজিং প্রকল্পের সাথে কাজ করতে পারে:
    • রিসোর্স লেবেল: দ্বন্দ্ব এড়াতে একটি নতুন নাম ব্যবহার করুন। উদাহরণস্বরূপ, resource "google_project" "default" এর নাম পরিবর্তন করে resource "google_project" "staging"
    • রিসোর্স রেফারেন্স: প্রতিটি আপডেট করুন। উদাহরণস্বরূপ, google_firebase_project.default.project কে google_firebase_project.staging.project এ আপডেট করুন।
    আপনি এই কোডল্যাবের GitHub সংগ্রহস্থলে একটি main_staging.tf ফাইলের সম্পূর্ণ কনফিগারেশন খুঁজে পেতে পারেন:

    web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf

    আপনি যদি এই কনফিগারেশনটি ব্যবহার করতে চান, তাহলে নিম্নলিখিতগুলি করুন:
    1. main_staging-copypaste.tf থেকে কনফিগারেশনটি কপি করুন, এবং তারপর এটি আপনার main_staging.tf ফাইলে পেস্ট করুন।
    2. আপনার 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 অ্যাট্রিবিউটগুলিকে আপনার নিজস্ব মান দিয়ে আপডেট করুন।
    main_staging.tf সম্পর্কে
    # 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"
    }
    
  4. আপনার নতুন "স্টেজিং" ফায়ারবেস প্রকল্প এবং এর সমস্ত সংস্থান সরবরাহ করতে এবং এর পরিষেবাগুলি সক্ষম করতে terraform apply চালান।
  5. আগের মতোই Firebase কনসোলে চেক করে যাচাই করুন যে সবকিছু প্রত্যাশা অনুযায়ী প্রভিশন করা এবং সক্রিয় করা হয়েছে।

বিকল্প ২: for_each দিয়ে কনফিগারেশন পুনঃব্যবহার করুন

যদি প্রতিটি প্রকল্পে উল্লেখযোগ্যভাবে ভিন্নতা না থাকে এবং আপনি একবারে সমস্ত প্রকল্পে পরিবর্তনগুলি প্রচার করতে চান তবে এই বিকল্পটি আরও কোড-পুনঃব্যবহারের প্রস্তাব দেয়। এটি টেরাফর্ম ভাষায় for_each মেটা-আর্গুমেন্ট ব্যবহার করে।

  1. আপনার main.tf ফাইলটি খুলুন।
  2. প্রতিটি রিসোর্স ব্লকে যা আপনি প্রতিলিপি করতে চান, একটি for_each মেটা-আর্গুমেন্ট যোগ করুন, যেমন:

    প্রধান.টিএফ
    # 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.
    
    আপনি এই কোডল্যাবের GitHub রিপোজিটরিতে for_each মেটা-আর্গুমেন্ট ব্যবহার করে এমন একটি main.tf ফাইলের সম্পূর্ণ কনফিগারেশন খুঁজে পেতে পারেন:

    web/terraform-checkpoints/replicate-config/main-foreach.tf

    আপনি যদি এই কনফিগারেশনটি ব্যবহার করতে চান, তাহলে নিম্নলিখিতগুলি করুন:
    1. main-foreach.tf থেকে কনফিগারেশনটি কপি করুন, এবং তারপর এটি আপনার main.tf ফাইলে পেস্ট করুন।
    2. আপনার main.tf ফাইলে, নিম্নলিখিতগুলি করুন:
      • google_project রিসোর্স ব্লকে, name অ্যাট্রিবিউট, project-id অ্যাট্রিবিউট এবং (যদি আপনি Terraform এর মাধ্যমে Authentication সেট আপ করেন) billing_account অ্যাট্রিবিউটটি আপনার নিজস্ব মান দিয়ে আপডেট করুন।
      • In the google_firebase_web_app resource block, update the display_name attribute with your own value.
      • In the google_firestore_database and google_app_engine_application resource blocks, update the location_id attributes with your own value.
  3. 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.
    1. Right now, if you applied this config that uses for_each , the resource addresses would look like 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"]
      
      However, the existing project you created in the first part of this codelab is known to Terraform as the following:
      google_project.default
      google_firebase_project.default
      google_firebase_android_app.default
      
    2. Run terraform plan to 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 address google_project.default has been moved to the new address google_project.default["prod"] .
    3. To fix this, run the terraform state mv command:
      terraform state mv "google_project.default" "google_project.default[\"prod\"]"
      
    4. Similarly, to fix all the other resource blocks, run terraform state mv for google_firebase_project , google_firebase_web_app , and all the other resource blocks in your main.tf file.
    5. Now, if you run terraform plan again, it shouldn't show that Terraform would delete the project you created in the first part of this codelab.
  4. Run terraform apply to provision your new "staging" Firebase project and all its resources and enable its services.
  5. 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

  1. In your app's codebase, change the firebase-config.js to 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.
  2. At the root of your web directory, run the following command to deploy your app to your staging Firebase project.
    firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
    
  3. 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.
  4. After testing your app in staging, change the firebase-config.js back to using the prod project's Firebase config (the first project that you created in this codelab).
  5. At the root of your web directory, run the following command to deploy your app to your production Firebase project.
    firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
    
  6. 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.
  7. 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.