使用 Terraform 更新全局活动表

可以使用 Terraform 修改现有的全局活动表

添加区域副本

可以添加现有全局活动表的区域副本。

在此示例中,全局活动表 mr_test 已存在,并且在加拿大东南部(蒙特利尔)区域中具有区域副本。要在加拿大东南部(多伦多)的另一个区域添加此表的区域副本,请使用以下 nosql.tf 文件定义区域副本。

注意:

单例表 (CREATE TABLE IF NOT EXISTS mr_test...) 和现有副本的定义必须始终包括在 terraform 脚本中,即使源表和副本已存在也是如此。从 terraform 脚本中删除 CREATE TABLE 定义会从区域中删除表。同样,从 terraform 脚本中删除现有副本定义会删除区域表副本。
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]
}

按照使用 Terraform 创建全局活动表中所述的步骤,在新区域中添加表的区域副本。您会收到 Terraform 的提示,提示您正在添加新的副本资源。确认后,Terraform 将添加全局活动表的新区域副本。

删除区域副本

可以删除现有全局活动表的区域副本。

在此示例中,全局活动表 mr_test 已存在,并在加拿大东南部(蒙特利尔)和加拿大东南部(多伦多)区域具有副本。要从加拿大东南部(多伦多)区域删除副本,请使用以下 nosql.tf 文件,在其中注释(或删除)与在加拿大东南部(多伦多)添加副本相关的代码。

注意:

单例表 (CREATE TABLE IF NOT EXISTS mr_test...) 的定义必须始终包括在 terraform 脚本中,即使源表已存在也是如此。从 terraform 脚本中删除 CREATE TABLE 定义会从区域中删除表。
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]
#}

按照使用 Terraform 创建全局活动表中所述的步骤从加拿大东南部(多伦多)区域删除表的副本。您会收到 Terraform 的提示,提示您正在销毁副本 oci_nosql_table_replica.replica_toronto。确认后,Terraform 将删除“Global Active(全局活动)”表的区域副本。

更改全局活动表的表容量

您可以使用 Terraform 更改全局活动表的读取单位数、写入单位数、存储容量和表 TTL。

在全局活动表中,更改读取容量限制或写入容量限制仅适用于发生更改的本地区域。但是,更改存储容量或更改默认表级 TTL 值会将更改应用于表的所有区域副本。

要更改 mr_test 表的表容量,请使用以下 nosql.tf 文件更改表属性(默认表 TTL)并更改表限制。
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 = 60
    max_write_units = 60
    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"
}
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]
}
按照使用 Terraform 创建全局活动表中所述的步骤操作,并修改 nosql.tf 文件,如上所示。

注意:

全局活动表具有对称表定义,包括所有区域副本中的方案、索引、TTL 和存储大小。如果更改一个区域副本中的索引、TTL 或存储大小,则会自动将其应用于所有其他区域副本。因此,建议仅从一个区域管理这些表定义。

编辑单个区域副本的表容量

使用 Terraform,无法直接编辑区域表副本的容量。

例如,您无法直接使用 Terraform 更改加拿大东南部(多伦多)区域中的副本的读取单位和写入单位。在这种情况下,您需要先导入表资源,然后更改限制,如下例所示。

注意:

单例表 (CREATE TABLE IF NOT EXISTS mr_test...) 的定义必须始终包括在 terraform 脚本中,即使源表已存在也是如此。从 terraform 脚本中删除 CREATE TABLE 定义会从区域中删除表。
#Table has been created on ca-montreal-1
#update table read/write units to 100/100
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    = "100"
    max_storage_in_gbs = "1"
  }
}

#Run terraform import 
#Import table on ca-montreal-1 to bring it under Terraform management
$terraform import oci_nosql_table.mr_test <OCID>
$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.