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 apply
Terraformには、適用する計画が表示され、次に示すように確認を求められます。
Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve.

確認すると、Terraformによって、トロント・リージョンにグローバル・アクティブ表の新しいリージョン・レプリカが追加されます。このリージョンではレプリカに対して明示的に指定された読取りおよび書込みユニットがないため、値はUS East (Ashburn)リージョンのmr_test表から引き継がれます。前述の例では、Canada Southeast(Toronto)リージョンのレプリカ表の読取りおよび書込みユニットは51になります。

リージョナル・レプリカの削除

既存のグローバル・アクティブ表のリージョン・レプリカを削除できます。

この例では、グローバル・アクティブ表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 apply
Terraformには、適用する計画が表示され、次に示すように確認を求められます。
Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve.

確認すると、Terraformはカナダ南東部(トロント)リージョンのレプリカを削除します。

グローバル・アクティブ表のTTLおよび表の制限の変更

Terraformを使用して、グローバル・アクティブ表の読取りユニット、書込みユニット、ストレージ容量および表TTLを変更できます。

グローバル・アクティブ表では、読取り容量制限または書込み容量制限の変更は、その制限が変更されたリージョンにのみ適用されます。ただし、ストレージ容量を変更するか、表レベルのTTL値を変更すると、ローカル表および表のすべてのリージョン・レプリカに変更が適用されます。

mr_test表の表容量を変更するには、次のnosql.tfファイルを使用します。
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]
}
次のコマンドを実行して、terraformスクリプトを起動します。
terraform apply
Terraformには、適用する計画が表示され、次に示すように確認を求められます。
Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve.
確認すると、ローカル・リージョン(us-ashburn-1)内の表の読取りおよび書込みユニットが70に変更されます。他のリージョンのレプリカの表の制限は変更されません。ただし、TTL値はローカル表とすべてのレプリカの両方で15日に変更されます。

ノート:

グローバル・アクティブ表には、スキーマ、索引、TTLおよびすべてのリージョン・レプリカ内のストレージ・サイズを含む対称表定義があります。1つのリージョナル・レプリカで索引、TTLまたはストレージ・サイズを変更すると、他のすべてのリージョナル・レプリカに自動的に適用されます。そのため、これらの表定義は1つのリージョンからのみ管理することをお薦めします。

リージョナル・レプリカの表制限の編集

TerraformのOCIプロバイダは、単一リージョンに対して構成されます。表制限更新はリージョン固有であるため、ca-toronto-1で作成されたレプリカの読取りおよび書込みユニットはトロント・リージョンからのみ管理できます。同様に、グローバル・アクティブ表の様々なリージョンの表制限を管理する場合は、次に示すように、モジュールをterraformで構造化することをお薦めします。ここで、リージョン1、リージョン2などは、Terraformディレクトリ内のディレクトリです。Terraformディレクトリは、Terraformのインストール時に作成されるディレクトリです。



Terraformディレクトリで、リージョンごとに個別のディレクトリを維持し、リージョン固有の表制限を含む構成(前述の図ではnosql.tf)を維持します。terraform状態ファイル(terraform.tfstate)も、リージョンごとに個別に作成および管理されます。

この場合、Terraformディレクトリ内に、us-ashburn-1ca-montreal-1およびca-toronto-1の3つのリージョンに対応する3つのディレクトリがあります。ディレクトリAshburnMontrealおよびTorontoをコールします。

ca-toronto-1リージョンのレプリカ表の読取り/書込みユニットを変更するステップ:
  1. Torontoディレクトリに移動します。米国東部(アッシュバーン)リージョンで使用される構成からoci_nosql_tableリソース定義を複製して、Terraform構成(ここではnosql.tf)を作成します。
  2. 必要に応じて、表の読取りユニットまたは書込みユニット(あるいはその両方)を更新します。
    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. 既存の表をTerraform状態にインポートします。上の図に示すように、状態ファイルもリージョン固有であるため、表をインポートしても状態の競合は発生しません。カナダ南東部(トロント)リージョンのレプリカ表のocidは、OCIコンソールから取得できます。
    terraform import oci_nosql_table.mr_test <ocid-of-replica-table-in-ca-toronto-1>
  4. 変更の適用
    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.
    

    確認時に、ca-toronto-1リージョンのレプリカについて、読取りユニットと書込みユニットがそれぞれ100および90に変更されます。