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

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

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

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

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

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

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

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

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

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

คุณสามารถใช้ไฟล์กำหนดค่าและคำสั่ง 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 = "~> 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) คุณจะต้องดำเนินการต่อไปนี้ ระบุโครงสร้างพื้นฐานทั้งหมดที่คุณต้องการให้ terform สร้าง (หมายถึง ทรัพยากรที่ต้องการจัดสรรและบริการทั้งหมดที่ต้องการเปิดใช้) ใน คู่มือนี้ดูรายการทั้งหมด ทรัพยากร 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 ที่มีอยู่

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

  • แอป Firebase


การตรวจสอบสิทธิ์ Firebase

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

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

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

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

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

Cloud Firestore

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

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

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

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


Cloud Storage for Firebase


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

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

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

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


Firebase App Check


Firebase Extensions



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



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