Bắt đầu sử dụng Terraform và Firebase

Firebase đang bắt đầu hỗ trợ Terraform. Nếu bạn thuộc một nhóm muốn tự động hoá và chuẩn hoá việc tạo dự án Firebase bằng cách cung cấp tài nguyên cụ thể và bật dịch vụ, thì việc sử dụng Terraform với Firebase có thể phù hợp với bạn.

Quy trình làm việc cơ bản để sử dụng Terraform với Firebase bao gồm:

  • Tạo và tuỳ chỉnh tệp cấu hình Terraform (tệp .tf) chỉ định cơ sở hạ tầng mà bạn muốn cung cấp (tức là tài nguyên bạn muốn cung cấp và dịch vụ bạn muốn bật).

  • Sử dụng các lệnh gcloud CLI giao tiếp với Terraform để cung cấp cơ sở hạ tầng được chỉ định trong tệp .tf.

Bạn có thể làm gì với Terraform và Firebase?

Quy trình làm việc tổng quát trong hướng dẫn này là tạo một dự án Firebase mới bằng ứng dụng Android. Tuy nhiên, bạn có thể làm nhiều việc hơn nữa bằng Terraform, chẳng hạn như:

  • Xoá và sửa đổi cơ sở hạ tầng hiện có bằng Terraform.

  • Quản lý cấu hình và tác vụ theo sản phẩm cụ thể bằng Terraform, chẳng hạn như:

    • Đang bật nhà cung cấp dịch vụ đăng nhập Firebase Authentication.
    • Tạo bộ chứa Cloud Storage hoặc thực thể cơ sở dữ liệu và triển khai Firebase Security Rules cho các bộ chứa hoặc thực thể đó.
    • Tạo phần phụ trợ, bản dựng và các tài nguyên có liên quan khác của Firebase App Hosting.

Bạn có thể sử dụng các tệp cấu hình và lệnh Terraform tiêu chuẩn để hoàn thành tất cả các nhiệm vụ này. Để giúp bạn thực hiện việc này, chúng tôi đã cung cấp các tệp cấu hình Terraform mẫu cho một số trường hợp sử dụng phổ biến.



Quy trình tổng quát để sử dụng Terraform với Firebase

Điều kiện tiên quyết

Hướng dẫn này giới thiệu cách sử dụng Terraform với Firebase, vì vậy, hướng dẫn này giả định rằng bạn đã có kiến thức cơ bản về Terraform. Hãy đảm bảo bạn đã hoàn tất các điều kiện tiên quyết sau đây trước khi bắt đầu quy trình làm việc này.

  • Cài đặt Terraform và làm quen với Terraform bằng cách sử dụng các hướng dẫn chính thức của họ.

  • Cài đặt Google Cloud CLI (gcloud CLI). Đăng nhập bằng tài khoản người dùng hoặc tài khoản dịch vụ.


Bước 1: Tạo và tuỳ chỉnh tệp cấu hình Terraform

Tệp cấu hình Terraform cần có hai phần chính (được mô tả chi tiết bên dưới):

Thiết lập provider

Bạn bắt buộc phải thiết lập provider bất kể sản phẩm hoặc dịch vụ Firebase nào có liên quan.

  1. Tạo tệp cấu hình Terraform (chẳng hạn như tệp main.tf) trong thư mục cục bộ.

    Trong hướng dẫn này, bạn sẽ sử dụng tệp cấu hình này để chỉ định cả chế độ thiết lập provider và tất cả cơ sở hạ tầng mà bạn muốn Terraform tạo. Tuy nhiên, xin lưu ý rằng bạn có nhiều lựa chọn về cách thiết lập trình cung cấp.

  2. Thêm nội dung thiết lập provider sau đây vào đầu tệp main.tf.

    Bạn phải sử dụng nhà cung cấp google-beta vì đây là bản phát hành thử nghiệm của việc sử dụng Firebase với Terraform. Hãy thận trọng khi sử dụng trong môi trường thực tế.

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 6.0"
        }
      }
    }
    
    # Configures the provider to use the resource block's specified project for quota checks.
    provider "google-beta" {
      user_project_override = true
    }
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    # This provider should only be used during project creation and initializing services.
    provider "google-beta" {
      alias = "no_user_project_override"
      user_project_override = false
    }

    Tìm hiểu thêm về các loại thuộc tính khác nhau liên quan đến dự án (bao gồm cả những thuộc tính mà hướng dẫn này gọi là "dự án kiểm tra hạn mức") khi sử dụng Terraform với Firebase.

  3. Tiếp tục chuyển sang phần tiếp theo để hoàn tất tệp cấu hình và chỉ định cơ sở hạ tầng cần tạo.

Chỉ định cơ sở hạ tầng cần tạo bằng cách sử dụng các khối resource

Trong tệp cấu hình Terraform (đối với hướng dẫn này, tệp main.tf của bạn), bạn cần chỉ định tất cả cơ sở hạ tầng mà bạn muốn Terraform tạo (nghĩa là tất cả tài nguyên bạn muốn cung cấp và tất cả dịch vụ bạn muốn bật). Trong hướng dẫn này, bạn sẽ tìm thấy danh sách đầy đủ tất cả tài nguyên Firebase hỗ trợ Terraform.

  1. Mở tệp main.tf.

  2. Trong phần thiết lập provider, hãy thêm cấu hình sau của các khối resource.

    Ví dụ cơ bản này tạo một dự án Firebase mới, sau đó tạo một Ứng dụng Android Firebase trong dự án đó.

    # Terraform configuration to set up providers by version.
    ...
    
    # Configures the provider to use the resource block's specified project for quota checks.
    ...
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    ...
    
    # Creates a new Google Cloud project.
    resource "google_project" "default" {
      provider   = google-beta.no_user_project_override
    
      name       = "Project Display Name"
      project_id = "project-id-for-new-project"
      # Required for any service that requires the Blaze pricing plan
      # (like Firebase Authentication with GCIP)
      billing_account = "000000-000000-000000"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    # Enables required APIs.
    resource "google_project_service" "default" {
      provider = google-beta.no_user_project_override
      project  = google_project.default.project_id
      for_each = toset([
        "cloudbilling.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "firebase.googleapis.com",
        # Enabling the ServiceUsage API allows the new project to be quota checked from now on.
        "serviceusage.googleapis.com",
      ])
      service = each.key
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enables Firebase services for the new project created above.
    resource "google_firebase_project" "default" {
      provider = google-beta
      project  = google_project.default.project_id
    
      # Waits for the required APIs to be enabled.
      depends_on = [
        google_project_service.default
      ]
    }
    
    # Creates a Firebase Android App in the new project created above.
    resource "google_firebase_android_app" "default" {
      provider = google-beta
    
      project      = google_project.default.project_id
      display_name = "My Awesome Android app"
      package_name = "awesome.package.name"
    
      # Wait for Firebase to be enabled in the Google Cloud project before creating this App.
      depends_on = [
        google_firebase_project.default,
      ]
    }


Bước 2: Chạy các lệnh Terraform để tạo cơ sở hạ tầng được chỉ định

Để cấp phép tài nguyên và bật các dịch vụ được chỉ định trong tệp main.tf, hãy chạy các lệnh sau trong cùng thư mục với tệp main.tf. Để biết thông tin chi tiết về các lệnh này, hãy xem tài liệu về Terraform.

  1. Nếu đây là lần đầu tiên bạn chạy các lệnh Terraform trong thư mục, thì bạn cần khởi động thư mục cấu hình và cài đặt nhà cung cấp Google Terraform. Hãy thực hiện việc này bằng cách chạy lệnh sau:

    terraform init
  2. Tạo cơ sở hạ tầng được chỉ định trong tệp main.tf bằng cách chạy lệnh sau:

    terraform apply
  3. Xác nhận rằng mọi thứ đã được cấp phép hoặc bật như mong đợi:

    • Cách 1: Xem cấu hình được in trong dòng lệnh bằng cách chạy lệnh sau:

      terraform show
    • Cách 2: Xem dự án Firebase trong bảng điều khiển Firebase.



Tài nguyên Firebase có hỗ trợ Terraform

Các tài nguyên sau đây của Firebase và Google có hỗ trợ Terraform. Và chúng tôi liên tục bổ sung thêm tài nguyên! Vì vậy, nếu bạn không thấy tài nguyên mà bạn muốn quản lý bằng Terraform, hãy kiểm tra lại sau để xem tài nguyên đó có sẵn hay không hoặc yêu cầu tài nguyên đó bằng cách gửi vấn đề trong kho lưu trữ GitHub.


Quản lý ứng dụng và dự án Firebase

  • google_firebase_project — bật các dịch vụ Firebase trên một dự án Google Cloud hiện có

  • Ứng dụng Firebase


Firebase Authentication

  • google_identity_platform_config — bật Google Cloud Identity Platform (GCIP) (phần phụ trợ cho Firebase Authentication) và cung cấp chế độ cài đặt xác thực ở cấp dự án

    • Để định cấu hình Firebase Authentication thông qua Terraform, bạn cần bật GCIP. Hãy nhớ xem lại tệp mẫu .tf để biết cách thiết lập Firebase Authentication.

    • Dự án mà Terraform sẽ bật GCIP và/hoặc Firebase Authentication phải thuộc gói giá Blaze (tức là dự án phải có một tài khoản Cloud Billing được liên kết). Bạn có thể thực hiện việc này theo phương thức lập trình bằng cách đặt thuộc tính billing_account trong tài nguyên google_project.

    • Tài nguyên này cũng cho phép bạn thiết lập thêm nhiều cấu hình, chẳng hạn như phương thức đăng nhập cục bộ (như ẩn danh, email/mật khẩu và xác thực qua điện thoại), cũng như các hàm chặn và miền được uỷ quyền.

  • google_identity_platform_default_supported_idp_config — định cấu hình các Nhà cung cấp danh tính liên kết phổ biến, chẳng hạn như Google, Facebook hoặc Apple

  • identity_platform_oauth_idp_config — định cấu hình các nguồn Nhà cung cấp danh tính (IdP) OAuth tuỳ ý

  • google_identity_platform_inbound_saml_config – định cấu hình các chế độ tích hợp SAML

Chưa được hỗ trợ:

  • Định cấu hình tính năng xác thực đa yếu tố (MFA) thông qua Terraform

Firebase App Hosting

  • google_firebase_app_hosting_backend – tạo và quản lý phần phụ trợ Firebase App Hosting, bao gồm cả kết nối kho lưu trữ GitHub và nhánh hoạt động để triển khai liên tục.

  • google_firebase_app_hosting_build – tạo một bản dựng cho phần phụ trợ, tại một thẻ tham chiếu toàn bộ mã nguồn cụ thể và thời điểm cụ thể.

  • google_firebase_app_hosting_traffic — phát hành một bản dựng hoặc định cấu hình quy trình triển khai liên tục trên GitHub.


Firebase SQL Connect


Firebase Realtime Database

Chưa được hỗ trợ:

  • Triển khai Firebase Realtime Database Security Rules qua Terraform (tìm hiểu cách triển khai các Security Rules này bằng các công cụ khác, bao gồm cả các tuỳ chọn có lập trình)

Cloud Firestore

  • google_firestore_database — tạo một thực thể Cloud Firestore

  • google_firestore_index — cho phép truy vấn hiệu quả cho Cloud Firestore

  • google_firestore_document – đưa một tài liệu cụ thể trong một tập hợp vào một thực thể Cloud Firestore

    Quan trọng: Không sử dụng dữ liệu thực tế của người dùng cuối hoặc dữ liệu thực tế trong tài liệu gốc này.


Cloud Storage for Firebase

  • google_firebase_storage_bucket — cho phép Firebase SDK, tính năng xác thực và Firebase Security Rules truy cập vào một bộ chứa Cloud Storage hiện có

  • google_storage_bucket_object — thêm đối tượng vào bộ chứa Cloud Storage

    Quan trọng: Đừng sử dụng dữ liệu thực tế của người dùng cuối hoặc dữ liệu thực tế trong tệp này.


Firebase Security Rules (cho Cloud Firestore và Cloud Storage)

Xin lưu ý rằng Firebase Realtime Database sử dụng một hệ thống cấp phép khác cho Firebase Security Rules.

  • google_firebaserules_ruleset — xác định Firebase Security Rules áp dụng cho một thực thể Cloud Firestore hoặc một nhóm Cloud Storage

  • google_firebaserules_release — triển khai các bộ quy tắc cụ thể cho một thực thể Cloud Firestore hoặc một vùng lưu trữ Cloud Storage


Firebase App Check


Firebase Extensions



Tệp cấu hình Terraform mẫu cho các trường hợp sử dụng phổ biến



Khắc phục sự cố và câu hỏi thường gặp