เริ่มต้นใช้งาน 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 สำหรับสิ่งเหล่านี้

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



ขั้นตอนการทำงานทั่วไปสำหรับการใช้ Terraform กับ Firebase

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

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

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

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


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

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

ตั้งค่า 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 = "~> 4.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 ใหม่ จากนั้นสร้างแอป Firebase Android ภายในโปรเจ็กต์นั้น

    # 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 repo


การจัดการโปรเจ็กต์ Firebase และแอป

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

  • google_firebase_project_location - ตั้งค่าตำแหน่งสำหรับทรัพยากร Google Cloud เริ่มต้นของโปรเจ็กต์

  • แอป Firebase


การรับรองความถูกต้องของ Firebase

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

    • การกำหนดค่าการตรวจสอบสิทธิ์ Firebase ผ่าน 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 - กำหนดค่าแหล่งที่มาของผู้ให้บริการข้อมูลประจำตัว OAuth (IdP) ที่กำหนดเอง

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

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

  • การกำหนดค่าการรับรองความถูกต้องแบบหลายปัจจัย (MFA) ผ่าน Terraform

ฐานข้อมูลเรียลไทม์ Firebase

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

  • การปรับใช้กฎการรักษาความปลอดภัยของฐานข้อมูลเรียลไทม์ Firebase ผ่าน Terraform (เรียนรู้วิธี ปรับใช้กฎเหล่านี้ โดยใช้เครื่องมืออื่น รวมถึงตัวเลือกทางโปรแกรม)

คลาวด์ไฟร์สโตร์

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

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

  • google_firestore_document - สร้างอินสแตนซ์ Cloud Firestore ด้วยเอกสารเฉพาะในคอลเลกชัน

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


ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase


กฎความปลอดภัยของ Firebase (สำหรับ Cloud Firestore และ Cloud Storage)

โปรดทราบว่าฐานข้อมูลเรียลไทม์ของ Firebase ใช้ระบบการจัดเตรียมที่แตกต่างกันสำหรับกฎความปลอดภัยของ Firebase

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

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


ตรวจสอบแอป Firebase


ส่วนขยาย Firebase



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



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