Despliegue de tablas activas globales con Terraform

Es fácil desplegar una tabla activa global en OCI mediante Terraform.

Terraform es una herramienta de infraestructura como código que le permite crear, cambiar y versionar recursos en la nube y onPremises de forma segura y eficiente. Para conocer Terraform de forma básica, lea la breve introducción. Asegúrese de que tiene el proveedor de Terraform de OCI instalado y configurado.

Pasos para desplegar una tabla global

El siguiente script de terraform realiza lo siguiente:

  • Crea la tabla de origen como una tabla singleton si no está presente.
  • Agrega un índice a la tabla singleton.
  • Crea una réplica regional de la tabla y la convierte en una tabla activa global.

Pasos:

Paso 1: Cree archivos de configuración de Terraform para la tabla activa global: debe crear los siguientes archivos de configuración para crear una tabla activa global.

provider.tf:

En este archivo, proporciona la definición del proveedor de Terraform de OCI y también las definiciones de variables asociadas. El proveedor de Terraform de OCI SOLO necesita el argumento region. Sin embargo, puede que tenga que configurar argumentos adicionales con credenciales de autenticación para una cuenta de OCI según el método de autenticación. El proveedor de Terraform de OCI soporta cuatro métodos de autenticación: autenticación de clave de API, autorización de principal de instancia, autorización de entidad de recurso y autenticación de token de seguridad.

Ejemplo de provider.tf con autenticación de clave de API
variable "tenancy_ocid" {
}
variable "user_ocid" {
}
variable "fingerprint" {
}
variable "private_key_path" {
}
variable "region" {
}

provider "oci" {
   region = var.region
   tenancy_ocid = var.tenancy_ocid
   user_ocid = var.user_ocid
   fingerprint = var.fingerprint
   private_key_path = var.private_key_path
}
Ejemplo de provider.tf con autorización de principal de instancia
variable "region" {
}
provider "oci" {
  auth = "InstancePrincipal"
  region = var.region
}
Ejemplo de provider.tf con autorización de entidad de recurso
variable "region" {
}

provider "oci" {
  auth = "ResourcePrincipal"
  region = var.region
}
Ejemplo de provider.tf con autenticación de token de seguridad
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
  auth = "SecurityToken"
  config_file_profile = var.config_file_profile
  region = var.region
}
nosql.tf: los recursos son el elemento más importante del lenguaje de Terraform. Terraform crea una tabla singleton, un índice y una réplica de tabla como recurso. En este archivo, se proporciona la definición de los recursos de configuración de terraform NoSQL para crear una tabla activa global. En el siguiente ejemplo, está creando una tabla Global Active agregando una réplica regional de esta tabla.
  • Los recursos que se crean a continuación son oci_nosql_table, oci_nosql_index y oci_nosql_table_replica.
  • La definición de DDL de tabla debe incluir con esquema congelado o con esquema congelado force en la tabla singleton. Para obtener más información, consulte Creación de una tabla activa global.
  • Se deben proporcionar los límites de tabla de la tabla de remitentes (unidad de lectura, unidad de escritura y capacidad de almacenamiento).
  • Al agregar una réplica de tabla regional, puede especificar el nombre de la tabla o el OCID de la tabla. Si especifica el nombre de la tabla, debe especificar el OCID del compartimento y la cláusula depends_on al definir la réplica regional como se muestra a continuación. Si especifica el OCID de la tabla, la cláusula depends_on y el OCID del compartimento son opcionales.
Consulte Sintaxis de recursos para comprender cómo se construye un bloque de recursos en Terraform. La sintaxis del comando de recurso incluye el tipo de recurso oci_nosql_table_replica, que es una réplica de tabla y el nombre del recurso, por ejemplo replica_montreal. Consulte Identificadores para obtener más información sobre cómo definir nombres de recursos en un script de Terraform.

Note:

Puede utilizar una de las dos opciones siguientes (opción 1: uso del OCID de la tabla o opción 2: uso del nombre de la tabla) en el script nosql.tf.
#Option 1 of adding a regional replica of the table
resource "oci_nosql_table_replica" "replica_montreal" {
  table_name_or_id = oci_nosql_table.mr_test.id
  region = "ca-montreal-1"
#Optional
  max_read_units     = "60"
  max_write_units    = "60"
}
# Option 2 of adding a regional replica of the table
resource "oci_nosql_table_replica" "replica_toronto" {
compartment_id = var.compartment_ocid
table_name_or_id = "mr_test"
region = "ca-toronto-1"  
depends_on = [oci_nosql_table.mr_test]
}
Archivo nosql.tf de ejemplo:
variable "compartment_ocid" {
}

variable "table_ddl_statement" {
  default = "CREATE TABLE IF NOT EXISTS mr_test(id INTEGER,
                            name STRING, info JSON,PRIMARY KEY(id))
                           using TTL 10 days with schema frozen"
}
#Add index resource "idx_age"
resource "oci_nosql_index" "idx_age" {
  table_name_or_id = oci_nosql_table.test_mrtable.id
  name = "idx_age"
  keys {
    column_name = "name"
  }
  keys {
    column_name = "info"
    json_path = "age"
    json_field_type = "anyatomic"
  }
}
resource "oci_nosql_table" "mr_test" {
  #Required
  compartment_id = var.compartment_ocid
  ddl_statement  = var.table_ddl_statement
  name           = "mr_test"

  table_limits {
    #Required
    max_read_units = 51
    max_write_units = 51
    max_storage_in_gbs = 2     
  }
}
#add a regional replica
resource "oci_nosql_table_replica" "replica_montreal" {
  table_name_or_id = oci_nosql_table.mr_test.id
  region = "ca-montreal-1"
  #Optional
  max_read_units     = "60"
  max_write_units    = "60"
}

Note:

La definición de la tabla singleton (CREATE TABLE IF NOT EXISTS mr_test...) siempre se debe incluir en el script terraform incluso si la tabla de origen ya existe. Al eliminar la definición CREATE TABLE del script terraform, se borra la tabla de la región.

terraform.tfvars: en este archivo, proporcione los valores para los argumentos del proveedor de Terraform de OCI necesarios según el método de autenticación.

Ejemplo de terraform.tfvars con autenticación de clave de API:
tenancy_ocid = "<tenancy_your_ocid>"
user_ocid = "<your_user_ocid">
fingerprint = "your_fingerprint>"
private_key_path = "<path_private_key>"
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Ejemplo de terraform.tfvars con autorización de principal de instancia:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Ejemplo de terraform.tfvars con autorización de entidad de recurso:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Ejemplo de terraform.tfvars con autenticación de token de seguridad:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
config_file_profile = "PROFILE"

Note:

Puede tener un único archivo terraform.tf donde se puedan agregar todos los detalles de configuración, pero se recomienda tener archivos de configuración independientes como se muestra anteriormente para mayor claridad y fácil mantenimiento.
Paso 2: Llame a terraform e inicialice la configuración.
terraform init
Paso 3: Ejecute el siguiente comando para invocar el script terraform.
terraform apply
Terraform muestra el plan que se va a aplicar y solicita confirmación, como se muestra a continuación.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Al confirmar, se crea la tabla singleton y se agrega un índice a ella. A continuación, se crea una réplica regional de la tabla, convirtiendo la tabla singleton en un GAT.