Atualizando tabelas Ativas Globais usando o Terraform

Você pode usar o Terraform para modificar uma Tabela Ativa Global existente

Adicionar uma réplica regional

Você pode adicionar uma réplica regional de uma Tabela Ativa Global existente.

Neste exemplo, a tabela Global Active mr_test já existe e tem uma réplica regional na região Sudeste do Canadá (Montreal). Para adicionar uma réplica regional desta tabela em outra região Sudeste do Canadá (Toronto), use o arquivo nosql.tf a seguir.

Observação:

As definições da tabela (CREATE TABLE IF NOT EXISTS mr_test...) e as réplicas existentes devem sempre ser incluídas no script terraform, mesmo que a tabela e as réplicas já existam. A remoção da definição CREATE TABLE do script terraform elimina a tabela da região. Da mesma forma, a remoção da definição de réplica existente do script terraform elimina a réplica da tabela regional.
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"
}
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     
  }
}
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"
}
#add a regional replica
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]
}
Execute o seguinte comando para executar 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.

Depois que você confirmar, o Terraform adicionará a nova réplica regional da tabela Global Active na região de Toronto. Como não há unidades de leitura e gravação fornecidas explicitamente para a réplica nesta região, os valores são assumidos da tabela mr_test na região US East (Ashburn). No exemplo acima, as unidades de leitura e gravação da tabela de réplicas na região Canada Southeast(Toronto) seriam 51.

Eliminar uma réplica regional

Você pode eliminar uma réplica regional de uma Tabela Ativa Global existente.

Neste exemplo, a tabela Global Active mr_test já existe e tem uma réplica na região Sudeste do Canadá (Montreal) e Sudeste do Canadá (Toronto). Para eliminar a réplica da região Sudeste do Canadá (Toronto), use o seguinte arquivo nosql.tf onde você precisa comentar (ou remover) o código pertencente à adição da réplica no Sudeste do Canadá (Toronto).

Observação:

A definição da tabela (CREATE TABLE IF NOT EXISTS mr_test...) sempre deve ser incluída no script terraform mesmo que a tabela já exista. A remoção da definição CREATE TABLE do script terraform elimina a tabela da região.
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"
}
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     
  }
}
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"
}
#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]
#}
Execute o seguinte comando 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.

Depois que você confirmar, o Terraform eliminará a réplica na região Sudeste do Canadá (Toronto).

Alterar os limites de TTL e de tabela de uma Tabela Ativa Global

Você pode alterar as unidades de leitura, as unidades de gravação, a capacidade de armazenamento e o TTL da tabela para uma tabela Ativa Global usando o Terraform.

Em uma tabela Global Ativa, a alteração do limite de capacidade de leitura ou de gravação só se aplica à região em que ela foi alterada. No entanto, a alteração da capacidade de armazenamento ou da alteração do valor TTL no nível da tabela aplica as alterações à tabela local, bem como a todas as réplicas regionais da tabela.

Para alterar a capacidade da tabela mr_test, use o arquivo nosql.tf a seguir.
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 15 days with schema frozen"
}
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 = 70
    max_write_units = 70
    max_storage_in_gbs = 2     
  }
}
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
}
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]
}
Execute o seguinte comando 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.
Depois que você confirmar, as unidades de leitura e gravação da tabela na região local (us-ashburn-1) serão alteradas para 70. Os limites de tabela das réplicas nas outras regiões não são alterados. No entanto, o valor de TTL é alterado para 15 dias na tabela local e em todas as réplicas.

Observação:

Uma tabela Ativa Global tem uma definição de tabela simétrica que inclui esquema, índice, TTL e tamanho de armazenamento em todas as réplicas regionais. Se você fizer uma alteração em um índice, TTL ou tamanho de armazenamento em uma réplica regional, ele será aplicado automaticamente a todas as outras réplicas regionais. Portanto, é recomendável gerenciar essas definições de tabela somente de uma região.

Editar os limites da tabela de uma réplica regional

O provedor do OCI no Terraform é configurado para uma única região. Como as atualizações de limite de tabela são específicas da região, você só pode gerenciar as unidades de leitura e gravação de uma réplica criada em ca-toronto-1 na região de Toronto. Da mesma forma, se você quiser gerenciar os limites de tabela das diferentes regiões da sua tabela ativa global, recomendamos que você estruture seus módulos no terraform, conforme mostrado abaixo. Aqui, Região 1, Região 2 etc. são diretórios dentro do seu diretório Terraform. O diretório Terraform é aquele que é criado quando você instala o Terraform.



No diretório Terraform, mantenha diretórios separados para cada região e mantenha as configurações (representadas como nosql.tfno diagrama acima) com limites de tabela específicos da região dentro deles. Os arquivos de estado do terraform (terraform.tfstate) também são criados e gerenciados separadamente para cada região.

No nosso caso, teríamos três diretórios dentro do diretório Terraform correspondentes às três regiões, us-ashburn-1, ca-montreal-1 e ca-toronto-1. Vamos chamar os diretórios Ashburn, Montreal e Toronto.

Etapas para modificar as unidades de leitura/gravação da tabela de réplica na região ca-toronto-1:
  1. Navegue até o diretório Toronto. Crie uma configuração do Terraform (aqui, nosql.tf) duplicando a definição de recurso oci_nosql_table da configuração usada na região Leste dos EUA (Ashburn).
  2. Atualize as unidades de leitura e/ou gravação da tabela conforme necessário.
    resource "oci_nosql_table" "mr_test" {
      #Required
      compartment_id = var.compartment_ocid
      ddl_statement  = "CREATE TABLE IF NOT EXISTS mr_test(id INTEGER,
                        name STRING, info JSON, PRIMARY KEY(id))
                        with schema frozen"
      name           = "mr_test"
      table_limits {
        #Required
        max_read_units     = 100
        max_write_units    = 90
        max_storage_in_gbs = 1
      }
    }
  3. Importe a tabela existente para o estado do Terraform. Como mostrado no diagrama acima, o arquivo de estado também é específico da região e, portanto, a importação da tabela não cria nenhum conflito de estado. Você pode obter o ocid da tabela de réplicas na região Sudeste do Canadá (Toronto) na console do OCI.
    terraform import oci_nosql_table.mr_test <ocid-of-replica-table-in-ca-toronto-1>
  4. Aplicar alterações
    terraform apply
    
    Terraform shows the plan to be applied and prompts for confirmation as shown below.
    Do you want to perform these actions?
    Terraform will perform the actions described above.
    Only 'yes' will be accepted to approve.
    

    Na confirmação, as unidades de leitura e gravação são modificadas respectivamente para 100 e 90 para a réplica na região ca-toronto-1.