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

아직 지원되지 않음:

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

Firebase Realtime Database

아직 지원되지 않음:

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

Cloud Firestore

  • google_firestore_databaseCloud Firestore 인스턴스를 만듭니다.

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

  • google_firestore_document — 컬렉션에 특정 문서가 있는 Cloud Firestore 인스턴스 시드

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


Cloud Storage for Firebase

  • google_firebase_storage_bucket - Firebase SDK, 인증, Firebase Security Rules에서 액세스할 수 있는 기존 Cloud Storage 버킷 만들기

  • google_storage_bucket_objectCloud Storage 버킷에 객체 추가

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


Firebase Security Rules(Cloud FirestoreCloud Storage에 대한)

참고로, Firebase Realtime DatabaseFirebase Security Rules에 다른 프로비저닝 시스템을 사용합니다.

  • google_firebaserules_ruleset - Cloud Firestore 인스턴스나 Cloud Storage 버킷에 적용되는 Firebase Security Rules 정의

  • google_firebaserules_releaseCloud Firestore 인스턴스나 Cloud Storage 버킷에 특정 규칙 세트 배포


Firebase App Check


Firebase Extensions



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



문제해결 및 FAQ