เริ่มต้นใช้งาน Terraform และ Firebase

Firebase กำลังเริ่มรองรับ Terraform หากคุณอยู่ในทีมที่ต้องการทำให้การสร้าง Firebase เป็นแบบอัตโนมัติและมีมาตรฐานเดียวกัน โปรเจ็กต์ที่มีการจัดสรรทรัพยากรเฉพาะและเปิดใช้บริการแล้ว จากนั้นใช้ Terraform กับ Firebase อาจเหมาะกับคุณ

เวิร์กโฟลว์พื้นฐานสำหรับการใช้ Terraform กับ Firebase มีดังนี้

  • สร้างและปรับแต่งไฟล์การกำหนดค่า Terraform (ไฟล์ .tf) ระบุโครงสร้างพื้นฐานที่คุณต้องการจัดสรร (ซึ่งก็คือทรัพยากรที่คุณ ต้องการจัดสรรและบริการที่คุณต้องการเปิดใช้)

  • ใช้คำสั่ง gcloud CLI ที่อินเทอร์เฟซกับ Terraform เพื่อจัดสรรโครงสร้างพื้นฐานที่ระบุไว้ในไฟล์ .tf

คุณใช้ Terraform และ Firebase ทำอะไรได้บ้าง

ตัวอย่างเวิร์กโฟลว์ทั่วไปในคู่มือนี้ กำลังสร้างโปรเจ็กต์ Firebase ใหม่ด้วยแอป Android แต่คุณทำอะไรได้มากมาย เพิ่มเติมด้วย Terraform เช่น

  • ลบและแก้ไขโครงสร้างพื้นฐานที่มีอยู่โดยใช้ Terraform

  • จัดการการกําหนดค่าและงานที่เจาะจงผลิตภัณฑ์โดยใช้ Terraform เช่น

    • เปิดใช้ผู้ให้บริการการลงชื่อเข้าใช้ Firebase Authentication
    • การสร้างที่เก็บข้อมูล Cloud Storage หรืออินสแตนซ์ฐานข้อมูล และทำให้ Firebase Security Rules พร้อมใช้งาน

คุณสามารถใช้ไฟล์การกําหนดค่าและคําสั่ง Terraform มาตรฐานเพื่อทํางานเหล่านี้ทั้งหมดได้ เราได้จัดทำตัวอย่างไฟล์การกําหนดค่า Terraform สําหรับกรณีการใช้งานทั่วไปหลายกรณีเพื่อช่วยคุณในเรื่องนี้



เวิร์กโฟลว์ทั่วไปสำหรับการใช้ Terraform กับ Firebase

ข้อกำหนดเบื้องต้น

คู่มือนี้เป็นการแนะนำการใช้ Terraform กับ Firebase โดยมีสมมติฐานว่า ความเชี่ยวชาญในการใช้ terform ในระดับพื้นฐาน โปรดตรวจสอบว่าคุณได้ดำเนินการตามข้อกําหนดเบื้องต้นต่อไปนี้แล้วก่อนที่จะเริ่มเวิร์กโฟลว์นี้

  • ติดตั้ง Terraform และทำความคุ้นเคยกับ terform ด้วยบทแนะนำอย่างเป็นทางการของพวกเขา

  • ติดตั้ง Google Cloud CLI (gcloud CLI). เข้าสู่ระบบโดยใช้ บัญชีผู้ใช้ หรือ บัญชีบริการ


ขั้นตอนที่ 1: สร้างและปรับแต่งไฟล์การกําหนดค่า Terraform

ไฟล์การกําหนดค่า Terraform ต้องมี 2 ส่วนหลัก (ซึ่งอธิบายไว้อย่างละเอียดด้านล่าง)

ตั้งค่าprovider

ต้องมีการตั้งค่า provider ไม่ว่าผลิตภัณฑ์หรือบริการ Firebase จะเป็นอะไรก็ตาม ที่เกี่ยวข้อง

  1. สร้างไฟล์การกำหนดค่า Terraform (เช่น ไฟล์ main.tf) ในเครื่องของคุณ ไดเรกทอรี

    ในคู่มือนี้ คุณจะใช้ไฟล์การกำหนดค่านี้เพื่อระบุทั้ง provider การตั้งค่าและโครงสร้างพื้นฐานทั้งหมดที่คุณต้องการให้ Terraform สร้าง หมายเหตุ แต่คุณจะมีตัวเลือกในการรวมการตั้งค่าผู้ให้บริการ

  2. ใส่การตั้งค่า provider ต่อไปนี้ที่ด้านบนของไฟล์ main.tf

    คุณต้องใช้บริการของผู้ให้บริการ google-beta เนื่องจากนี่เป็นรุ่นเบต้าของการใช้ Firebase กับ Terraform โปรดใช้ความระมัดระวังเมื่อใช้ในเวอร์ชันที่ใช้งานจริง

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 5.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
    }

    ดูข้อมูลเพิ่มเติมเกี่ยวกับ แอตทริบิวต์ประเภทต่างๆ ที่เกี่ยวข้องกับโครงการ (รวมถึงสิ่งที่คู่มือนี้เรียกว่า "โปรเจ็กต์ตรวจสอบโควต้า") เมื่อใช้ Terraform กับ Firebase

  3. ไปที่ส่วนถัดไปเพื่อกําหนดค่าไฟล์ให้เสร็จสิ้นและระบุสิ่งต่อไปนี้ ที่จะสร้างโครงสร้างพื้นฐานดังกล่าว

ระบุโครงสร้างพื้นฐานที่จะสร้างโดยใช้บล็อก resource

ในไฟล์การกําหนดค่า Terraform (ไฟล์ main.tf ในคู่มือนี้) คุณต้องระบุโครงสร้างพื้นฐานทั้งหมดที่ต้องการให้ Terraform สร้าง (หมายถึงทรัพยากรทั้งหมดที่ต้องการจัดสรรและบริการทั้งหมดที่ต้องการเปิดใช้) ใน คู่มือนี้ดูรายการทั้งหมด ทรัพยากร Firebase ที่รองรับ Terraform

  1. เปิดไฟล์ main.tf

  2. ในส่วนการตั้งค่า provider ให้ใส่การกำหนดค่าต่อไปนี้ของ resource บล็อก

    ตัวอย่างพื้นฐานนี้จะสร้างโปรเจ็กต์ Firebase ใหม่ จากนั้นสร้างโปรเจ็กต์ แอป Android ใน Firebase ในโปรเจ็กต์ดังกล่าว

    # 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,
      ]
    }


ขั้นตอนที่ 2: เรียกใช้คำสั่ง Terraform เพื่อสร้างโครงสร้างพื้นฐานที่ระบุ

ในการจัดสรรทรัพยากรและเปิดใช้บริการที่ระบุใน main.tf ให้เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีเดียวกับไฟล์ main.tf ดูรายละเอียดเกี่ยวกับคําสั่งเหล่านี้ได้ที่เอกสารประกอบของ Terraform

  1. หากคุณเรียกใช้คำสั่ง Terraform ใน คุณจะต้องเริ่มต้นไดเรกทอรีการกำหนดค่าและติดตั้ง ผู้ให้บริการ Google Terraform ซึ่งทำได้โดยเรียกใช้คำสั่งต่อไปนี้

    terraform init
  2. สร้างโครงสร้างพื้นฐานที่ระบุในไฟล์ main.tf โดยเรียกใช้ คำสั่งต่อไปนี้

    terraform apply
  3. ตรวจสอบว่าทุกอย่างได้รับการจัดสรรหรือเปิดใช้งานตามที่คาดไว้:

    • ตัวเลือกที่ 1: ดูการกำหนดค่าที่พิมพ์ไว้ในเครื่องชำระเงินโดยเรียกใช้ คำสั่งต่อไปนี้

      terraform show
    • ตัวเลือกที่ 2: ดูโปรเจ็กต์ Firebase ใน คอนโซล Firebase



ทรัพยากร Firebase ที่รองรับ Terraform

ทรัพยากรของ Firebase และ Google ต่อไปนี้รองรับ Terraform และเราจะ เพิ่มทรัพยากรอยู่ตลอดเวลา ดังนั้นหากคุณไม่เห็นทรัพยากรที่คุณต้องการ ต้องการจัดการด้วย Terraform แล้วกลับมาดูอีกครั้งว่าใช้งานได้หรือไม่ ขอโดย ยื่นปัญหาในที่เก็บ GitHub


การจัดการแอปและแอป Firebase

  • google_firebase_project — เปิดใช้บริการ Firebase ในโปรเจ็กต์ Google Cloud ที่มีอยู่

  • แอป Firebase


Firebase Authentication

  • google_identity_platform_config — เปิดใช้ Google Cloud Identity Platform (GCIP) (ซึ่งเป็นแบ็กเอนด์สำหรับ Firebase Authentication) และระบุการตั้งค่าการตรวจสอบสิทธิ์ระดับโปรเจ็กต์

    • การกำหนดค่า Firebase Authentication ผ่าน Terraform จำเป็นต้องเปิดใช้ GCIP สร้าง อย่าลืมเข้าไปดู ตัวอย่างไฟล์ .tf สําหรับวิธีตั้งค่า Firebase Authentication

    • โปรเจ็กต์ที่ Terraform จะเปิดใช้ GCIP และ/หรือ Firebase Authentication ต้องอยู่ในแพ็กเกจราคา Blaze (กล่าวคือ โปรเจ็กต์ต้องมีแพ็กเกจ บัญชี Cloud Billing ที่เชื่อมโยง) ซึ่งคุณสามารถทำได้แบบเป็นโปรแกรมโดย การตั้งค่า billing_account ในทรัพยากร google_project

    • ทรัพยากรนี้ยังเปิดใช้การกำหนดค่าเพิ่มเติม เช่น วิธีการลงชื่อเข้าใช้ในเครื่อง เช่น การตรวจสอบสิทธิ์แบบไม่ระบุตัวตน อีเมล/รหัสผ่าน และโทรศัพท์ รวมถึง ฟังก์ชันการบล็อก และโดเมนที่ได้รับอนุญาต

  • google_identity_platform_default_supported_idp_config — กำหนดค่าผู้ให้บริการข้อมูลประจำตัวแบบรวมศูนย์ทั่วไป เช่น Google, Facebook หรือ Apple

  • identity_platform_oauth_idp_config — กำหนดค่าแหล่งที่มาของผู้ให้บริการข้อมูลประจำตัว (IdP) OAuth ที่กำหนดเอง

  • google_identity_platform_inbound_saml_config — กำหนดค่าการผสานรวม SAML

ยังไม่รองรับ:

  • การกำหนดค่าการตรวจสอบสิทธิ์แบบหลายปัจจัย (MFA) ผ่าน Terraform

Firebase Realtime Database

ยังไม่รองรับ:

  • การทำให้ Firebase Realtime Database Security Rules ใช้งานได้ผ่าน Terraform (ดูวิธีการ ทำให้ Rules เหล่านี้ใช้งานได้ โดยใช้เครื่องมืออื่นๆ รวมถึงตัวเลือกแบบเป็นโปรแกรม)

Cloud Firestore

  • google_firestore_database — สร้างอินสแตนซ์ Cloud Firestore

  • google_firestore_index — เปิดใช้การค้นหาที่มีประสิทธิภาพสําหรับ Cloud Firestore

  • google_firestore_document — เริ่มต้นอินสแตนซ์ Cloud Firestore พร้อมเอกสารที่เฉพาะเจาะจงในคอลเล็กชัน

    สำคัญ: อย่าใช้ข้อมูลผู้ใช้ปลายทางหรือข้อมูลที่ใช้งานจริงใน Seed นี้ เอกสาร


Cloud Storage for Firebase


Firebase Security Rules (สำหรับ Cloud Firestore และ Cloud Storage)

โปรดทราบว่า Firebase Realtime Database ใช้ระบบการจัดสรรอื่นสำหรับ Firebase Security Rules

  • google_firebaserules_ruleset — กำหนด Firebase Security Rules ที่นำไปใช้กับอินสแตนซ์ Cloud Firestore หรือ ที่เก็บข้อมูล Cloud Storage รายการ

  • google_firebaserules_release — ทำให้ชุดกฎเฉพาะใช้งานได้กับอินสแตนซ์ Cloud Firestore หรือ ที่เก็บข้อมูล Cloud Storage รายการ


Firebase App Check


Firebase Extensions



ตัวอย่างไฟล์การกำหนดค่า Terraform สำหรับกรณีการใช้งานทั่วไป



การแก้ปัญหาและคำถามที่พบบ่อย