Terraform を使用した Databases for PostgreSQL インスタンスのプロビジョン

このチュートリアルでは、Terraform を使用して Databases for PostgreSQL インスタンスをプロビジョンする方法について学習します。

使用可能なツールの概要

Terraform を使用してデータベースをプロビジョニングするプロセスを開始する前に、 IBM Cloud アカウントを持っている必要があります。

このチュートリアルでは、Terraform を使用してデータベースをプロビジョンします。これにより、インフラストラクチャーを安全かつ予測どおりに作成、変更、および改善できます。 これは、API を宣言構成ファイルに体系化するオープン・ソース・ツールであり、チーム・メンバー間で共有できます。チーム・メンバーは、コードとして扱われ、編集され、レビューされ、バージョン管理されます。 これは Infrastructure as Code です。 インフラストラクチャーの外観を書き留めます。Terraform は、必要に応じてクラウド・リソースを作成、更新、削除します。 詳しくは Terraformの基本を理解しようを参照

マルチクラウド方式をサポートするため、Terraform はプロバイダーと連携します。 プロバイダーは、API の対話を理解し、リソースを公開する責任があります。 IBM Cloud® には Terraform 用のプロバイダーがあり、 IBM Cloud® のユーザーが Terraform を使用してリソースを管理できます。 Terraform は、Infrastructure as Code として分類されますが、Infrastructure as a Service リソースに制限されません。 詳しくは、 ibm_databaseを参照してください。

Terraformをインストールする

  1. Install Terraformの手順に従って、Terraformをインストールする。

IBM Cloud® Provider プラグインの設定

  1. IBM Cloud® API キーを作成または取得します。 API キーは、 IBM Cloud® プラットフォームでの認証に使用され、 IBM Cloud® サービスに対する許可を決定するために使用されます。

  2. IBM Cloud Databases プロジェクト・ディレクトリーに Terraform を作成します。 このディレクトリーには、このチュートリアルの一環として作成するすべての構成ファイルが保持されます。 このチュートリアルのディレクトリーの名前は tf-postgresですが、ディレクトリーには任意の名前を使用できます。

    mkdir tf-postgres && cd tf-postgres
    
  3. プロジェクト・ディレクトリーで、terraform.tfvarsという名前の変数定義ファイルを作成し、取得した IBM Cloud API キーを指定します。 さらに、 IBM Cloud リソースを作成したいリージョンを指定します。 リージョンが指定されていない場合、 IBM Cloud® プロバイダー・プラグインによって us-south リージョンにリソースが自動的に作成されます。 terraform.tfvarsファイルで定義されている変数は、 IBM Cloud Provider プラグインの初期化時に 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- 宣言したリソースグループの値。
  • 名前 -サービス名は任意のストリングにすることができます。これは、新規デプロイメントを識別するために Web および CLI で使用される名前です。
  • サービス - Databases for PostgreSQLの場合、サービス ID は databases-for-postgresqlです。 デプロイメントの正しいサービス ID を選択します。
  • 計画 -このチュートリアルでは、標準プランを使用します。 詳細は IBM Cloud® Pricing を参照。
  • 所在地 -デプロイメント・インスタンスに適したリージョンを選択します。
  • サービスエンドポイント- 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 サービスには admin ユーザーが設定されているため、コマンドラインツール psql を使用して PostgreSQL を管理できます。 詳しくは、 管理者パスワードの設定を参照してください。
  • グループ- スケーリンググループは、配置に割り当てられるさまざまなリソー スを表します。 group 属性を使用するデータベースの設定とデプロイの例については、 グループ属性を使用するサンプル・データベース・インスタンスを参照してください
  • グループの値- メモリ、ディスク、および CPU の値はすべて、 Databases for PostgreSQL 共有コンピュートインスタンスをプロビジョニングするための最小要件に基づいています。
  • 出力- テラフォーム処理が終了すると、新しいデータベースの接続情報がターミナルに表示されます。

あるいは、 Terraform IBM Modules(TIM)for Databases for PostgreSQL を使うこともできる。 生のリソースとは異なり、このモジュールは以下の機能を提供する:

  • 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 を使用して、リソースをプロビジョンするためのコマンドの初期化、実行、計画、および適用を行うことができます。 以下のコマンドが必要です。

Terrarformプロビジョニングコマンド
コマンドの説明 コマンド
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 の索引を参照してください。