Terraform을 사용하여 Databases for PostgreSQL 인스턴스 프로비저닝

이 튜토리얼에서는 Terraform을 사용하여 Databases for PostgreSQL 인스턴스를 프로비저닝하는 방법을 알아봅니다.

사용 가능한 도구 개요

Terraform을 사용하여 데이터베이스 프로비저닝 프로세스를 시작하기 전에 IBM Cloud 계정이 있어야 합니다.

이 튜토리얼에서는 인프라를 안전하게 예측한 대로 작성하고, 변경하고, 개선할 수 있는 Terraform을 사용하여 데이터베이스를 프로비저닝합니다. 이는 API를 팀 구성원 간에 공유할 수 있으며 코드로 취급하여 편집, 검토 및 버전화할 수 있는 선언적 구성 파일로 코드화하는 오픈 소스 도구입니다. Terraform은 코드로서의 인프라입니다. 사용자가 인프라의 외양을 작성하고 Terraform은 필요에 따라 클라우드 리소스를 작성, 업데이트 및 제거합니다. 자세한 내용은 테라폼의 기본 사항 이해를 참조 하세요

다중 클라우드 접근 방식을 지원하기 위해 Terraform은 제공자와 함께 작업합니다. 공급자는 API 상호작용을 이해하고 리소스를 노출할 책임이 있습니다. IBM Cloud®에는 Terraform을 위한 제공자가 있으며 이를 통해 IBM Cloud®의 사용자가 Terraform에서 리소스를 관리할 수 있습니다. Terraform은 코드로서의 인프라로 분류되지만 IaaS(Infrastructure-As-A-Service) 리소스로 제한되지는 않습니다. 자세한 정보는 ibm_database를 참조하십시오.

Terraform 설치

  1. 테라폼 설치의 단계에 따라 테라폼을 설치합니다.

IBM Cloud® 공급자 플러그인 구성

  1. IBM Cloud® API 키를 작성하거나 검색하십시오. API 키는 IBM Cloud® 플랫폼에서 인증하고 IBM Cloud® 서비스에 대한 권한을 판별하는 데 사용됩니다.

  2. IBM Cloud 데이터베이스 프로젝트 디렉토리에 Terraform을 작성하십시오. 디렉토리에는 이 튜토리얼의 일부로 작성한 모든 구성 파일이 있습니다. 이 튜토리얼의 디렉토리 이름은 tf-postgres이지만 디렉토리의 이름을 사용할 수 있습니다.

    mkdir tf-postgres && cd tf-postgres
    
  3. 프로젝트 디렉토리에서 이름이 terraform.tfvars인 변수 정의 파일을 작성하고 검색한 IBM Cloud API 키를 지정하십시오. 또한 IBM Cloud 리소스를 작성할 지역을 지정합니다. 지역이 지정되지 않으면 IBM Cloud® 제공자 플러그인이 미국 남부 지역에 자동으로 리소스를 작성합니다. terraform.tfvars 파일에 정의된 변수는 IBM Cloud 제공자 플러그인이 초기화될 때 자동으로 Terraform에 의해 로드되며 사용하는 모든 Terraform 구성 파일에서 이를 참조할 수 있습니다.

    변수 정의 파일에 기밀 정보가 포함되어 있으므로, 이 파일을 버전 제어 시스템에 푸시하지 마십시오. 이 파일은 로컬 시스템에만 있어야 합니다.

    terraform.tfvars 파일의 예

      ibmcloud_api_key = "<IBMCLOUD_API_KEY>"
      region = "us-east"
    

    us-east 지역은 요구사항이 아닌 예제로 제공됩니다. 인스턴스 배치에 가장 적합한 지역을 사용하십시오.

  4. 이름이 provider.tf인 제공자 구성 파일을 작성하십시오. 이 파일을 사용하여 terraform.tfvars 파일의 IBM Cloud API 키로 IBM Cloud 제공자 플러그인을 구성하십시오. 플러그인은 이 키를 사용하여 IBM Cloud에 액세스하고 IBM Cloud 서비스에 대해 작업합니다. terraform.tfvars 파일에서 변수 값에 액세스하려면 먼저 provider.tf 파일에서 변수를 선언한 후 var.<variable_name> 구문을 사용하여 변수를 참조해야 합니다.

    예제 provider.tf 파일

    terraform {
      required_providers {
        ibm = {
          source  = "IBM-Cloud/ibm"
          version = ">= 1.28.0"
        }
      }
    }
    
    variable "ibmcloud_api_key" {}
    variable "region" {}
    
    provider "ibm" {
      ibmcloud_api_key = var.ibmcloud_api_key
      region           = var.region
    }
    

Databases for PostgreSQL 인스턴스 프로비저닝

이름이 postgres.tf인 Terraform 구성 파일을 작성하십시오.

postgres.tf 파일의 예

```terraform {: codeblock}
resource "ibm_resource_group" "resource_group" {
  name = "tutorialRG"
}

resource "ibm_database" "postgresql_db" {
  resource_group_id = ibm_resource_group.resource_group.id
  name              = "terraform_postgres"
  service           = "databases-for-postgresql"
  plan              = "standard"
  location          = "us-east"
  service_endpoints = "public"
  adminpassword     = "password123456789"

  group {
    group_id = "member"
    host_flavor {
      id = "multitenant"
    }
    cpu {
      allocation_count = 2
    }
    memory {
      allocation_mb = 4096
    }
    disk {
      allocation_mb = 5120
    }
  }
}

data "ibm_database_connection" "icd_conn" {
  deployment_id = ibm_database.postgresql_db.id
  user_type     = "database"
  user_id       = "admin"
  endpoint_type = "public"
}

output "Postgresql" {
  value = data.ibm_database_connection.icd_conn
}
```
  • resource_group_id- 선언하는 리소스 그룹 값입니다.
  • 이름 - 서비스 이름은 임의의 문자열일 수 있으며 새 배치를 식별하기 위해 웹 및 CLI에서 사용되는 이름입니다.
  • 서비스 - Databases for PostgreSQL의 경우, 서비스 ID는 databases-for-postgresql입니다. 배치할 올바른 서비스 ID를 선택합니다.
  • 플랜 - 이 튜토리얼에서는 Standard 플랜을 사용합니다. 자세한 정보는 IBM Cloud® 가격을 참조하십시오.
  • 위치 - 배치 인스턴스에 적합한 지역을 선택하십시오.
  • 서비스_엔드포인트- The service endpoints of your deployment. public is used in the tutorial, however it is recommended that only private endpoints are used in production.
  • adminpassword- Databases for PostgreSQL 서비스는 관리자 사용자로 프로비저닝되므로 해당 명령줄 도구인 psql 을 사용하여 PostgreSQL 을 관리할 수 있습니다. 자세한 정보는 관리자 비밀번호 설정을 참조하십시오.
  • 그룹- 스케일링 그룹은 배포에 할당되는 다양한 리소스를 나타냅니다. group 속성을 사용하는 데이터베이스를 구성하고 배포하는 예제를 보려면 그룹 속성을 사용한 데이터베이스 인스턴스 샘플을 참조하세요
  • 그룹 값- 메모리, 디스크 및 CPU 값은 모두 Databases for PostgreSQL 공유 컴퓨팅 인스턴스 프로비저닝을 위한 최소 요구 사항을 기반으로 합니다.
  • 출력- 테라폼 프로세스가 완료되면 새 데이터베이스에 대한 연결 정보가 터미널에 표시됩니다.

또는 프로덕션 환경에 권장되는 접근 방식인 Databases for PostgreSQL 에 대해 Terraform IBM 모듈(TIM)을 사용할 수 있습니다. 원시 리소스와 달리 이 모듈은 다음과 같은 기능을 제공합니다:

  • README 파일과 예제가 포함된 포괄적인 문서
  • 다양한 예제를 사용한 여러 배포 시나리오
  • 안전한 업데이트와 손쉬운 종속성 관리를 위한 제어된 버전 관리
  • 안전하고 확장 가능하며 규정을 준수하는 엔터프라이즈급 구성

postgres.tf 이라는 이름의 Terraform 구성 파일을 만들려면:

postgres.tf 파일 예시

resource "ibm_resource_group" "resource_group" {
      name = "Default"
}

module "postgresql_db" {
  source            = "terraform-ibm-modules/icd-postgresql/ibm"
  version           = "latest" # Replace "latest" with a release version to lock into a specific release
  resource_group_id = ibm_resource_group.resource_group.id
  name              = "my-instance"
  region            = "us-south"
}

구성 테스트

이제 사용자 리소스에 맞는 IBM Cloud® 제공자 플러그인을 구성했으므로 IBM Cloud®에서 Terraform을 사용하여 리소스를 프로비저닝하기 위해 명령을 초기화하고, 실행하고, 계획하고, 적용할 수 있습니다. 다음과 같은 명령이 필요합니다.

테라폼 프로비저닝 명령
명령 설명 명령
terraform init terraform init 명령은 Terraform 구성 파일이 포함된 작업 디렉토리를 초기화하는 데 사용됩니다.
terraform fmt terraform fmt 명령은 Terraform 구성 파일을 표준 형식 및 스타일로 다시 작성하는 데 사용됩니다.
terraform validate terraform validate 명령은 디렉토리의 구성 파일을 유효성 검증합니다.
terraform apply terraform apply 명령은 Terraform 플랜에서 제안된 조치를 실행합니다.

자세한 정보는 IBM Cloud® 리소스 프로비저닝을 참조하십시오.

테스트할 전체 Terraform 구성 파일이 있는 샘플 Terraform 템플리트를 보려면 샘플 템플리트를 참조하십시오.

사용할 수 있는 Terraform 리소스 및 데이터 소스에 대한 개요는 IBM Cloud® 리소스 및 데이터 소스의 Terraform 색인을 참조하십시오.