เริ่มต้นใช้งาน 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 สำหรับที่เก็บข้อมูลหรืออินสแตนซ์เหล่านั้น
    • การสร้างFirebase App Hostingแบ็กเอนด์ บิลด์ และทรัพยากรอื่นๆ ที่เกี่ยวข้อง

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



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

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

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

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

  • ติดตั้ง 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 = "~> 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 }

    ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ประเภทต่างๆ ที่เกี่ยวข้องกับโปรเจ็กต์ (รวมถึงสิ่งที่คู่มือนี้เรียกว่า "โปรเจ็กต์ตรวจสอบโควต้า") เมื่อใช้ 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 Provider โดยเรียกใช้คำสั่งต่อไปนี้

    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 App Hosting

  • google_firebase_app_hosting_backend - สร้างและจัดการแบ็กเอนด์ Firebase App Hosting รวมถึงการเชื่อมต่อที่เก็บ GitHub และสาขาที่ใช้งานจริงสำหรับการติดตั้งใช้งานอย่างต่อเนื่อง

  • google_firebase_app_hosting_build - สร้างบิลด์สำหรับแบ็กเอนด์ ณ จุดหนึ่งในแท็กอ้างอิงฐานของโค้ด และจุดในเวลา

  • google_firebase_app_hosting_traffic - เปิดตัวบิลด์หรือกำหนดค่าการติดตั้งใช้งาน GitHub อย่างต่อเนื่อง


Firebase Data Connect


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 ด้วยเอกสารที่เฉพาะเจาะจงในคอลเล็กชัน

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


Cloud Storage for Firebase

  • google_firebase_storage_bucket — ทําให้ SDK ของ Firebase, การตรวจสอบสิทธิ์ และ Firebase Security Rules เข้าถึงที่เก็บข้อมูล Cloud Storage ที่มีอยู่ได้

  • google_storage_bucket_object — เพิ่มออบเจ็กต์ไปยังที่เก็บข้อมูล Cloud Storage

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


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 สำหรับกรณีการใช้งานทั่วไป



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