Implantando tabelas Ativas Globais usando o Terraform

É fácil implantar uma tabela Global Active no OCI usando o Terraform.

O Terraform é uma ferramenta de infraestrutura como código que permite criar, alterar e controlar a versão da nuvem e dos recursos onPremises com segurança e eficiência. Para ter uma compreensão básica do Terraform, leia a breve introdução. Certifique-se de ter o provedor Terraform do OCI instalado e configurado.

Etapas para implantar uma tabela Global

O script terraform abaixo faz o seguinte:

  • Cria a tabela de origem como uma tabela singleton se ela não estiver presente.
  • Adiciona um índice à tabela singleton.
  • Cria uma réplica regional da tabela e a torna uma tabela Ativa Global.

Etapas:

Etapa 1: Criar arquivos de configuração do Terraform para a tabela Global Active: Você precisa criar os seguintes arquivos de configuração para criar uma tabela Global Active.

provider.tf:

Neste arquivo, você fornece a definição do provedor Terraform do OCI e também as definições de variáveis associadas. O provedor Terraform do OCI requer SOMENTE o argumento region. No entanto, talvez você precise configurar argumentos adicionais com credenciais de autenticação para uma conta do OCI com base no método de autenticação. O provedor Terraform do OCI suporta quatro métodos de autenticação: Autenticação de Chave de API, Autorização do Controlador de Instâncias, Autorização do Controlador de Recursos e Autenticação de Token de Segurança.

Exemplo de provider.tf com Autenticação de Chave 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
}
Exemplo de provider.tf com Autorização do Controlador de Instâncias
variable "region" {
}
provider "oci" {
  auth = "InstancePrincipal"
  region = var.region
}
Exemplo de provider.tf com Autorização do Controlador de Recursos
variable "region" {
}

provider "oci" {
  auth = "ResourcePrincipal"
  region = var.region
}
Exemplo de provider.tf com Autenticação de Token de Segurança
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
  auth = "SecurityToken"
  config_file_profile = var.config_file_profile
  region = var.region
}
nosql.tf: Os recursos são o elemento mais importante na linguagem Terraform. O Terraform cria uma tabela singleton, um índice e uma réplica de tabela como um recurso. Neste arquivo, você fornece a definição de recursos de configuração terraform NoSQL para criar uma tabela Ativa Global. No exemplo abaixo, você está criando uma tabela Ativa Global adicionando uma réplica regional dessa tabela.
  • Os recursos criados abaixo são oci_nosql_table, oci_nosql_index e oci_nosql_table_replica.
  • A definição DDL da tabela deve incluir com o esquema congelado ou com a força congelada do esquema na tabela única. Para obter mais detalhes, consulte Criando uma tabela Ativa Global.
  • Os limites da tabela do remetente (unidade de leitura, unidade de gravação e capacidade de armazenamento) devem ser fornecidos.
  • Ao adicionar uma réplica de tabela regional, você pode especificar o nome da tabela ou o OCID da tabela. Se você especificar o nome da tabela, precisará especificar o OCID do seu compartimento e a cláusula depends_on ao definir a réplica regional, conforme mostrado abaixo. Se você estiver especificando o OCID da tabela, a cláusula depends_on e o OCID do compartimento serão opcionais.
Consulte Sintaxe de recursos para entender como um bloco de recursos é construído no Terraform. A sintaxe do comando de recurso inclui o tipo de recurso oci_nosql_table_replica, que é uma réplica de tabela e o nome do recurso, por exemplo, replica_montreal. Consulte Identificadores para obter detalhes sobre como definir nomes de recursos em um script do Terraform.

Observação:

Você pode usar uma das duas opções abaixo (Opção 1 - usando o OCID da tabela ou a Opção 2 - usando o nome da tabela) no 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]
}
Arquivo nosql.tf de amostra:
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"
}

Observação:

A definição da tabela singleton (CREATE TABLE IF NOT EXISTS mr_test...) sempre deve ser incluída no script terraform, mesmo que a tabela de origem já exista. A remoção da definição CREATE TABLE do script terraform elimina a tabela da região.

terraform.tfvars: Neste arquivo, você fornece os valores dos argumentos necessários do provedor Terraform do OCI com base no método de autenticação.

Exemplo de terraform.tfvars com Autenticação de Chave 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>"
Exemplo de terraform.tfvars com Autorização do Controlador de Instâncias:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Exemplo de terraform.tfvars com Autorização do Controlador de Recursos:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Exemplo de terraform.tfvars com Autenticação de Token de Segurança:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
config_file_profile = "PROFILE"

Observação:

Você pode ter um único arquivo terraform.tf no qual todos os detalhes da configuração podem ser adicionados, mas é recomendável ter arquivos de configuração separados, conforme mostrado acima, para maior clareza e fácil manutenção.
Etapa 2: Chame terraform e inicialize a configuração.
terraform init
Etapa 3: Execute o comando a seguir para chamar o script terraform.
terraform apply
O Terraform mostra o plano a ser aplicado e solicita confirmação, conforme mostrado abaixo.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Na confirmação, a tabela singleton é criada e um índice é adicionado a ela. Uma réplica regional da tabela é criada, convertendo a tabela singleton em GAT.