데이터베이스 생성 자동화

다음 단계를 통해 Firestore 데이터베이스 만들기를 자동화할 수 있습니다.

  1. 새 Google Cloud 프로젝트를 만듭니다. 프로젝트마다 Firestore 데이터베이스는 한 개로 제한됩니다.
  2. App Engine 애플리케이션을 만듭니다. Firestore에는 App Engine이 필요합니다. Firestore를 사용하려면 App Engine을 활성화해야 합니다.
  3. Firestore 데이터베이스를 만듭니다.

이 페이지에서는 REST API, gcloud 명령줄 도구, Terraform을 사용하여 이 과정을 완료하는 방법을 설명합니다.

REST API로 데이터베이스 만들기

Resource Manager API와 App Engine Admin API를 사용하여 Firestore 데이터베이스를 프로비저닝할 수 있습니다.

인증 및 승인

Resource Manager API와 App Engine Admin API에 액세스하려면 액세스 토큰으로 요청을 인증해야 합니다. 액세스 토큰에는 다음과 같은 OAuth 2.0 범위가 필요합니다.

https://www.googleapis.com/auth/cloud-platform

애플리케이션 인증을 설정하는 방법은 서버 간 프로덕션 애플리케이션 인증 설정을 참조하세요.

애플리케이션을 개발하고 테스트하는 동안 다음을 사용하여 액세스 토큰을 얻을 수 있습니다.

gcloud auth application-default print-access-token.

승인

인증된 사용자 계정 또는 서비스 계정에 새 프로젝트를 만들려면 resourcemanager.projects.create 권한이 필요합니다. 예를 들어 프로젝트 생성자 IAM 역할로 이 권한을 부여할 수 있습니다.

이 역할을 부여하는 방법은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

새 프로젝트 및 데이터베이스 만들기

  1. projects.create 메서드를 사용하여 프로젝트 생성 작업을 시작합니다. 요청 본문에서 Project 리소스를 정의합니다. 예를 들면 다음과 같습니다.

    HTTP

    POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
    Content-Type: application/json
    
    {
      "projectId": "project-id"
    }
          

    다음을 바꿉니다.

    성공하면 요청이 작업 이름을 반환합니다.

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. 이전 단계에서 반환된 작업 이름과 Resource Manager operations.get 메서드를 사용하여 프로젝트 생성을 확인합니다.

    HTTP

    GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
    

    프로젝트 생성에 성공하면 응답에 다음 필드가 포함됩니다.

    "done": true,
          
  3. App Engine Admin API apps.create 메서드를 사용하여 App Engine 애플리케이션과 Firestore 데이터베이스를 만듭니다. 요청 본문에서 애플리케이션 리소스를 정의하고 databaseType 필드를 포함합니다. 예를 들면 다음과 같습니다.

    HTTP

    POST https://appengine.googleapis.com/v1/apps HTTP/1.1
    
    Authorization: Bearer access_token
    Accept: application/json
    Content-Type: application/json
    
    {
      "databaseType": "CLOUD_FIRESTORE",
      "id": "project-id",
      "locationId": "location"
    }
          

    다음을 바꿉니다.

    • project-id는 생성한 프로젝트의 ID입니다.
    • location은 App Engine 애플리케이션과 Firestore 데이터베이스의 위치를 설정합니다. 위치를 설정하면 변경할 수 없습니다. 지원되는 위치의 전체 목록은 App Engine 위치를 참조하세요.

      App Engine과 Firestore는 동일한 위치를 지원하지만 다음 App Engine 리전은 Firestore 멀티 리전에 매핑됩니다.

      • us-central(아이오와)은 nam5(미국) 멀티 리전에 Firestore 데이터베이스를 만듭니다.
      • europe-west(벨기에)는 eur3(유럽) 멀티 리전에 Firestore 데이터베이스를 만듭니다.

    요청은 작업 이름을 반환합니다.

    200:
    
    {
      "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c",
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "method": "google.appengine.v1.Applications.CreateApplication",
        "insertTime": "2020-06-05T23:34:32.587Z",
        "user": "username",
        "target": "apps/project-id"
      }
    }
            
  4. 이전 단계에서 반환된 작업 이름과 apps.operations.get을 사용하여 데이터베이스 생성을 확인합니다.

    HTTP

    GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
        

    작업이 성공하면 응답에 다음 필드가 포함됩니다.

    "done": true,
          

결제 계정 및 Firebase 서비스 추가

결제 계정을 프로그래매틱 방식으로 프로젝트에 연결하려면 projects.updateBillingInfo 메서드를 사용하세요.

프로젝트에 Firebase 서비스를 프로그래매틱 방식으로 사용 설정하려면 Management REST API를 사용하여 Firebase 프로젝트 설정 및 관리를 참조하세요.

gcloud로 데이터베이스 만들기

gcloud 명령줄 도구를 사용하여 Bash 또는 PowerShell 스크립트에서 데이터베이스 생성을 자동화할 수 있습니다. 스크립트에서 다음 단계를 완료하세요.

  1. gcloud projects create로 새 프로젝트를 만듭니다.

    gcloud projects create project-id
  2. gcloud app create로 App Engine을 활성화합니다.

    gcloud app create --region=region --project=project-id

    여기서 region은 App Engine 애플리케이션과 Firestore 데이터베이스의 위치입니다. 위치를 설정하면 변경할 수 없습니다. 지원되는 위치의 전체 목록은 App Engine 위치를 참조하세요.

    App Engine과 Firestore는 동일한 위치를 지원하지만 다음 App Engine 리전은 Firestore 멀티 리전에 매핑됩니다.

    • us-central(아이오와)은 nam5(미국) 멀티 리전에 Firestore 데이터베이스를 만듭니다.
    • europe-west(벨기에)는 eur3(유럽) 멀티 리전에 Firestore 데이터베이스를 만듭니다.
  3. gcloud services enable로 App Engine Admin API를 사용 설정합니다.

    gcloud services enable appengine.googleapis.com --project=project-id
  4. gcloud alpha firestore databases create 또는 gcloud alpha datastore databases create로 Firestore 데이터베이스를 만듭니다.

    gcloud alpha firestore databases create --project=project-id --region=region

    Datastore 모드의 Firestore 데이터베이스를 만들려면 다음을 사용합니다.

    gcloud alpha datastore databases create --project=project-id --region=region

    region은 App Engine을 활성화하는 데 사용한 값과 동일해야 합니다.

Terraform으로 데이터베이스 만들기

Terraform으로 Firestore 데이터베이스를 프로비저닝하려면 google_firestore_database 리소스를 사용합니다.

예를 들어 다음 Terraform 구성 파일은 새로운 프로젝트를 만들고 Firestore 데이터베이스를 프로비저닝합니다.

firestore.tf

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name       = "My Project"
  project_id = "project-id"
}

resource "google_project_service" "firestore" {
  project = google_project.my_project.project_id
  service = "firestore.googleapis.com"
}

resource "google_firestore_database" "database" {
  project     = google_project.my_project.project_id
  name        = "(default)"
  location_id = "location"
  type        = "FIRESTORE_NATIVE"

  depends_on = [google_project_service.firestore]
}

다음을 바꿉니다.

  • credentials-file은 서비스 계정 키 파일의 경로입니다.
  • project-id는 프로젝트 ID입니다. 프로젝트 ID는 고유해야 합니다.
  • location은 두 Firestore 데이터베이스의 위치입니다. 위치를 설정하면 변경할 수 없습니다. 지원되는 위치의 전체 목록은 Firestore 위치를 참조하세요.

App Engine을 사용하려면 google_app_engine_application 리소스를 대신 사용합니다. database_typeCLOUD_FIRESTORE 또는 CLOUD_DATASTORE_COMPATIBILITY로 설정합니다.

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name = "My Project"
  project_id = "project-id"
}

resource "google_app_engine_application" "app" {
  project     = google_project.my_project.project_id
  location_id = "location"
  database_type = "CLOUD_FIRESTORE"
}
  • us-central(아이오와)은 nam5(미국) 멀티 리전에 Firestore 데이터베이스를 만듭니다.
  • europe-west(벨기에)는 eur3(유럽) 멀티 리전에 Firestore 데이터베이스를 만듭니다.

또한 Firestore는 App Engine이 지원되지 않는 일부 리전에서 사용할 수 있습니다.

데이터베이스에 색인 만들기

Firestore 데이터베이스에는 단일 필드 색인이나 복합 색인이 포함될 수 있습니다. Terraform 구성 파일을 수정하여 데이터베이스의 색인을 만들 수 있습니다.

단일 필드 색인

다음 Terraform 구성 파일 예시에서는 chatrooms 컬렉션의 name 필드에 대한 단일 필드 색인을 만듭니다.

firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "(default)"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • project-id를 프로젝트 ID로 바꿉니다. 프로젝트 ID는 고유해야 합니다.

복합 색인

다음 Terraform 구성 파일 예시에서는 chatrooms 컬렉션의 name 필드와 description 필드 조합에 대한 복합 색인을 만듭니다.

firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • project-id를 프로젝트 ID로 바꿉니다. 프로젝트 ID는 고유해야 합니다.