Suministrar una instancia de Databases for PostgreSQL con Terraform

En esta guía de aprendizaje, aprenderá a utilizar Terraform para suministrar una instancia de Databases for PostgreSQL .

Visión general de las herramientas disponibles

Antes de iniciar el proceso de suministro de una base de datos con Terraform, es necesario tener una cuenta de IBM Cloud.

En esta guía de aprendizaje puede suministrar la base de datos mediante Terraform, lo que le permite crear, cambiar y mejorar la infraestructura de forma segura y predecible. Es una herramienta de código abierto que codifica las API en archivos de configuración declarativos que se pueden compartir entre los miembros del equipo, tratar como código, editar, revisar y versionar. Es infraestructura como código. Puede escribir cómo debe ser la infraestructura y Terraform creará, actualizará y eliminará los recursos de nube según sea necesario. Para obtener más información, consulte Comprender los conceptos básicos de Terraform.

Para dar soporte a un enfoque de varias nubes, Terraform trabaja con proveedores. Un proveedor es responsable de entender las interacciones de la API y de exponer los recursos. IBM Cloud® tiene un proveedor para Terraform, lo que permite a los usuarios de IBM Cloud® gestionar recursos con Terraform. Aunque Terraform es un producto clasificado como infraestructura como código, no se limita a los recursos de una infraestructura como servicio. Para obtener más información, consulte ibm_database.

Instalar Terraform

  1. Siga los pasos en Instalar Terraform para instalar Terraform.

Configure el complemento IBM Cloud® Provider

  1. Cree o recupere una clave de API de IBM Cloud®. La clave de API se utiliza para autenticar con la plataforma IBM Cloud® y para determinar los permisos para los servicios de IBM Cloud®.

  2. Cree un Terraform en el directorio del proyecto de IBM Cloud Databases. El directorio contiene todos los archivos de configuración que crea como parte de esta guía de aprendizaje. El directorio de esta guía de aprendizaje se denomina tf-postgres, pero puede utilizar cualquier nombre para el directorio.

    mkdir tf-postgres && cd tf-postgres
    
  3. En el directorio del proyecto, cree un archivo de definición de variables denominado terraform.tfvars y especifique la clave de API de IBM Cloud que ha recuperado. Además, especifique la región en la que desea que se creen los recursos de IBM Cloud. Si no se especifica ninguna región, el plug-in IBM Cloud® Provider crea automáticamente los recursos en la región us-south. Terraform carga automáticamente las variables definidas en el archivo terraform.tfvars cuando se inicializa el plug-in IBM Cloud Provider y puede hacer referencia a ellas en cada archivo de configuración de Terraform que utilice.

    Dado que el archivo de definiciones de variables contiene información confidencial, no pulse este archivo en un sistema de control de versiones. Este archivo está pensado para estar solamente en el sistema local.

    Ejemplo de archivo terraform.tfvars

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

    La región us-east se proporciona como un ejemplo, no un requisito. Utilice la región que mejor funciona para el despliegue de la instancia.

  4. Cree un archivo de configuración de proveedor denominado provider.tf. Utilice este archivo para configurar el plug-in IBM Cloud Provider con la clave de API de IBM Cloud del archivo terraform.tfvars. El plug-in utiliza esta clave para acceder a IBM Cloud y para trabajar con el servicio IBM Cloud. Para acceder a un valor de variable del archivo terraform.tfvars, primero debe declarar la variable en el archivo provider.tf y, a continuación, hacer referencia a la variable con la sintaxis var.<variable_name>.

    Ejemplo de archivo 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
    }
    

Aprovisionar una instancia Databases for PostgreSQL

Cree un archivo de configuración de Terraform denominado postgres.tf.

Ejemplo de archivo 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- El valor del Grupo de Recursos que declara.
  • Nombre: el nombre de servicio puede ser cualquier serie y es el nombre que se utiliza en la web y en la CLI para identificar el nuevo despliegue.
  • Servicio: para Databases for PostgreSQL, el ID de servicio es databases-for-postgresql. Elija el ID de servicio correcto para su despliegue.
  • Plan: esta guía de aprendizaje utiliza un plan estándar. Para obtener más información, consulte IBM Cloud® Precios.
  • Ubicación: elija una región adecuada para la instancia de despliegue.
  • punto_de_servicio- 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- El servicio Databases for PostgreSQL está provisto de un usuario administrador, por lo que puede gestionar PostgreSQL utilizando su herramienta comando, psql. Para obtener más información, consulte Establecimiento de la contraseña de administrador.
  • grupo- Los grupos de escalado representan los distintos recursos que se asignan a un despliegue. Para ver un ejemplo de configuración e implantación de una base de datos que utiliza atributos group, consulte Ejemplo de instancia de base de datos utilizando atributos de grupo.
  • valores de grupo: los valores de memoria, disco y CPU se basan en los requisitos mínimos para el aprovisionamiento de una instancia informática compartida de Databases for PostgreSQL.
  • output- Cuando el proceso de terraformación finalice, la información de conexión de la nueva base de datos se mostrará en el terminal.

Alternativamente, puede utilizar Terraform IBM Modules(TIM)para Databases for PostgreSQL, que es el enfoque recomendado para entornos de producción. A diferencia del recurso bruto, este módulo proporciona las siguientes capacidades:

  • Documentación completa con archivos README y ejemplos
  • Múltiples escenarios de implantación con distintos ejemplos
  • Control de versiones para actualizaciones seguras y una gestión de dependencias más sencilla
  • Configuraciones preparadas para la empresa, seguras, escalables y conformes con la normativa

Para crear un archivo de configuración de Terraform llamado postgres.tf:

Ejemplo de archivo 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"
}

Probar la configuración

Ahora que ha configurado el plug-in IBM Cloud® Provider para el recurso, puede utilizar Terraform en IBM Cloud® para inicializar, ejecutar, planificar y aplicar mandatos para suministrar el recurso. Necesita los mandatos siguientes:

Comandos de aprovisionamiento Terrarform
Descripción del mandato Mandato
terraform init El mandato terraform init se utiliza para inicializar un directorio de trabajo que contiene los archivos de configuración de Terraform.
terraform fmt El mandato terraform fmt se utiliza para reescribir los archivos de configuración de Terraform en un formato y estilo canónicos.
terraform validate El mandato terraform validate valida los archivos de configuración en un directorio
terraform apply El mandato terraform apply ejecuta las acciones que se proponen en un plan de Terraform.

Para obtener más información, consulte Suministro de recursos de IBM Cloud®.

Para ver plantillas de ejemplo de Terraform con los archivos de configuración de Terraform completos para realizar pruebas, consulte Plantillas de ejemplo.

Para obtener una visión general de los recursos de Terraform y de los orígenes de datos que puede utilizar, consulte el Índice de Terraform de recursos y orígenes de datos de IBM Cloud®.