使用 Terraform 提供Databases for PostgreSQL实例

在本教程中,您将学习如何使用 Terraform 配置 Databases for PostgreSQL 实例。

可用工具概述

在开始使用 Terraform 配置数据库之前,你需要有一个IBM Cloud账户。

在本教程中,您将使用 Terraform 来配置数据库,Terraform 使您能够安全、可预测地创建、更改和改进基础架构。 它是一种开源工具,可将应用程序接口编入声明式配置文件,这些文件可在团队成员之间共享,并被视为代码进行编辑、审核和版本控制。 这属于基础架构即代码。 您只需写下基础架构的样子,Terraform 就会根据需要创建、更新和删除云资源。 如需了解更多信息,请参阅 了解 Terraform 基础知识。

为了支持多云方法,Terraform 使用多个提供者。 提供程序负责理解 API 交互并公开资源。IBM Cloud®为 Terraform 提供了提供程序,使IBM Cloud®的用户能够使用 Terraform 管理资源。 虽然 Terraform 被分类为基础架构即代码,但适用范围并不局限于基础架构即服务资源。 有关详细信息,请参阅 ibm_database。

安装 Terraform

  1. 按照 安装 Terraform的步骤安装 Terraform。

配置IBM Cloud®提供商插件提供程序插件

  1. 创建或获取IBM Cloud®API 密钥。 API 密钥用于与IBM Cloud®平台进行身份验证,并确定您使用IBM Cloud®服务的权限。

  2. 在IBM Cloud上创建 Terraform数据库项目目录下创建 Terraform。 该目录包含您在本教程中创建的所有配置文件。 本教程中的目录名为 tf-postgres,但可以使用任何名称。

    mkdir tf-postgres && cd tf-postgres
    
  3. 在项目目录下创建一个名为 terraform.tfvars 的变量定义文件,并指定所获取的IBM CloudAPI 密钥。 此外,您还需要指定创建IBM Cloud资源的区域。 如果未指定地区,IBM Cloud®提供商插件会自动在美国南方地区创建资源。提供商插件会自动在 us-south 区域创建资源。 Terraform 会在初始化IBM Cloud提供商插件时自动加载 terraform.tfvars 文件中定义的变量。提供程序插件初始化时,Terraform 会自动加载该文件中定义的变量。

    由于变量定义文件包含机密信息,请勿将该文件推送到版本控制系统。 该文件只能保存在本地系统中。

    terraform.tfvars 文件示例

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

    us-east 区域仅作为示例,并非要求。 使用最适合实例部署的区域。

  4. 创建名为 provider.tf 的提供程序配置文件。 使用该文件配置 IBM Cloud Provider 插件,使用 terraform.tfvars 文件中的 IBM Cloud API 密钥。 插件使用此密钥访问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- 您声明的资源组值。
  • name- 服务名称可以是任意字符串,是网络和 CLI 中用于标识新部署的名称。
  • service- 对于Databases for PostgreSQL 而言,服务 ID 为 databases-for-postgresql。 为您的部署选择正确的服务 ID。
  • 计划- 本教程使用标准计划。 如需了解更多信息,请参阅 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共享计算实例的最低要求。
  • output- terraform 进程结束后,终端将显示新数据库的连接信息。

另外,也可以使用 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 索引 》。