Terraform 및 Firebase 시작하기

Firebase에서 Terraform을 지원하기 시작했습니다. 특정 리소스를 프로비저닝하고 서비스가 사용 설정된 Firebase 프로젝트 생성을 자동화하고 표준화하려는 팀에 속한 경우 Firebase에서 Terraform을 사용하는 것이 좋습니다.

Firebase에서 Terraform을 사용하기 위한 기본 워크플로에는 다음이 포함됩니다.

  • 프로비저닝할 인프라(즉, 프로비저닝할 리소스 및 사용 설정할 서비스)를 지정하는 Terraform 구성 파일(.tf 파일)을 만들고 맞춤설정합니다.

  • Terraform과 상호작용하는 gcloud CLI 명령어를 사용하여 .tf 파일에 지정된 인프라를 프로비저닝합니다.

Terraform과 Firebase로 무엇을 할 수 있나요?

이 가이드의 일반화된 워크플로 예시는 Android 앱을 사용하여 새 Firebase 프로젝트를 만드는 것입니다. 하지만 Terraform으로 다음과 같은 더 많은 작업을 할 수 있습니다.

  • Terraform을 사용하여 기존 인프라를 삭제하고 수정합니다.

  • Terraform을 사용하여 다음과 같은 제품별 구성 및 작업을 관리합니다.

    • 로그인 제공업체 Firebase Authentication개를 사용 설정하는 중입니다.
    • 버킷 또는 데이터베이스 인스턴스 Cloud Storage개 만들기 및 배포 중 Firebase Security Rules입니다.

표준 Terraform 구성 파일과 명령어를 사용하여 이러한 모든 작업을 수행할 수 있습니다. 이를 지원하기 위해 몇 가지 일반적인 사용 사례에 관한 샘플 Terraform 구성 파일을 제공했습니다.



Firebase에서 Terraform을 사용하기 위한 일반화된 워크플로

기본 요건

이 가이드에서는 Firebase에서 Terraform을 사용하는 방법을 소개하므로 Terraform에 대한 기본 숙련도를 갖춘 것을 전제로 합니다. 이 워크플로를 시작하기 전에 다음 기본 요건을 완료해야 합니다.

  • Terraform을 설치하고 공식 튜토리얼을 따라 Terraform을 숙지하세요.

  • Google Cloud CLI 설치 (gcloud CLI) 다음을 사용하여 로그인 사용자 계정 또는 서비스 계정을 탭합니다.


1단계: Terraform 구성 파일 만들기 및 맞춤설정

Terraform 구성 파일에는 두 가지 기본 섹션이 필요합니다(아래에 자세히 설명되어 있음).

provider 설정

provider 설정은 관련된 Firebase 제품 또는 서비스와 관계없이 필요합니다.

  1. 로컬 디렉터리에 Terraform 구성 파일(예: main.tf 파일)을 만듭니다.

    이 가이드에서는 이 구성 파일을 사용하여 provider 설정과 Terraform에서 만들려는 모든 인프라를 지정합니다. 그러나 제공업체 설정을 포함하는 방법에 관한 옵션이 있습니다.

  2. main.tf 파일 상단에 다음 provider 설정을 포함합니다.

    Firebase에서 Terraform을 사용하는 베타 버전이므로 google-beta 제공업체를 사용해야 합니다. 프로덕션에서 사용할 때는 주의해야 합니다.

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

    Firebase에서 Terraform을 사용할 때 프로젝트 관련 속성 유형(이 가이드에서 언급된 '할당량 확인 프로젝트' 포함)에 대해 자세히 알아보세요.

  3. 다음 섹션으로 이동하여 구성 파일을 작성하고 생성할 인프라를 지정합니다.

resource 블록을 사용하여 만들 인프라 지정

Terraform 구성 파일(이 가이드의 경우 main.tf 파일)에서 Terraform에서 만들려는 모든 인프라(프로비저닝할 모든 리소스 및 사용 설정할 모든 서비스)를 지정해야 합니다. 이 가이드에서 Terraform을 지원하는 모든 Firebase 리소스의 전체 목록을 확인하세요.

  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 콘솔.



Terraform을 지원하는 Firebase 리소스

다음 Firebase 및 Google 리소스에 Terraform이 지원됩니다. 계속해서 더 많은 리소스를 추가하고 있습니다. 따라서 Terraform으로 관리하려는 리소스가 표시되지 않으면 나중에 다시 확인하여 리소스를 사용할 수 있는지 확인하거나 GitHub 저장소에서 문제를 제출하여 요청하세요.


Firebase 프로젝트 및 앱 관리

  • google_firebase_project - 기존 Google Cloud 프로젝트에서 Firebase 서비스 사용 설정

  • Firebase 앱


Firebase Authentication

  • google_identity_platform_config - Google Cloud Identity Platform (GCIP) (Firebase Authentication의 백엔드) 사용 설정 프로젝트 수준의 인증 설정을 제공하세요

    • Terraform을 통해 Firebase Authentication를 구성하려면 GCIP를 사용 설정해야 합니다. 제조업체 자세한 내용은 Firebase Authentication 설정 방법을 보여주는 샘플 .tf 파일.

    • Terraform이 GCIP 및/또는 Firebase Authentication를 사용 설정할 프로젝트입니다. Blaze 요금제를 사용해야 합니다. 즉, 프로젝트에 연결된 Cloud Billing 계정). 이렇게 하려면 프로그래매틱 방식으로 다음을 수행합니다. 설정 billing_account 드림 속성을 google_project 리소스에서 사용하세요.

    • 이 리소스를 사용하면 익명, 이메일/비밀번호, 전화 인증과 같은 로컬 로그인 방식, 차단 함수, 승인된 도메인과 같은 더 많은 구성을 사용할 수 있습니다.

  • google_identity_platform_default_supported_idp_config - Google, Facebook, Apple과 같은 일반적인 제휴 ID 공급업체 구성

  • identity_platform_oauth_idp_config — 임의 OAuth ID 공급업체(IdP) 소스 구성

  • google_identity_platform_inbound_saml_config — SAML 통합 구성

아직 지원되지 않음:

  • Terraform을 통한 다중 인증(MFA) 구성

Firebase Realtime Database

아직 지원되지 않음:

  • Terraform을 통해 Firebase Realtime Database Security Rules 배포 (방법 알아보기) 배포할 Rules 프로그래매틱 옵션을 포함한 다른 도구 사용)

Cloud Firestore

  • google_firestore_database - Cloud Firestore 인스턴스 만들기

  • google_firestore_indexCloud Firestore에 효율적인 쿼리 사용 설정

  • google_firestore_document - 컬렉션의 특정 문서를 사용하여 Cloud Firestore 인스턴스 시드

    중요: 이 시드 문서에 실제 최종 사용자 또는 프로덕션 데이터를 사용하지 마세요.


Cloud Storage for Firebase


Firebase Security Rules (Cloud FirestoreCloud Storage)

Firebase Realtime Database에서는 서비스마다 다른 프로비저닝 시스템을 사용합니다. Firebase Security Rules입니다.

  • google_firebaserules_ruleset - Cloud Firestore 인스턴스 또는Firebase Security Rules 버킷 Cloud Storage

  • google_firebaserules_release - 특정 규칙 세트를 Cloud Firestore 인스턴스에 배포하거나 버킷 Cloud Storage


Firebase App Check


Firebase Extensions



일반적인 사용 사례를 위한 샘플 Terraform 구성 파일



문제해결 및 FAQ