Terraformを使用したグローバル・アクティブ表の更新

Terraformを使用して、既存のグローバル・アクティブ表を変更できます

この記事には次のトピックが含まれます:

リージョナル・レプリカの追加

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

この例では、Global Active表mr_testがすでに存在し、Canada Southeast(Montreal)リージョンにリージョナル・レプリカがあります。カナダ南東部(トロント)の別のリージョンにこの表のリージョン・レプリカを追加するには、次のnosql.tfファイルを使用します。

ノート:表およびレプリカがすでに存在する場合でも、表(CREATE TABLE IF NOT EXISTS mr_test...)の定義と既存のレプリカを常に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になります。

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

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

この例では、Global Active表mr_testがすでに存在し、Canada Southeast(Montreal)およびCanada Southeast(Toronto)リージョンにレプリカがあります。カナダ南東部(トロント)リージョンからレプリカを削除するには、次のnosql.tfファイルを使用します。このファイルでは、カナダ南東部(トロント)でのレプリカの追加に関するコードをコメント(または削除)する必要があります。

ノート:表(CREATE TABLE IF NOT EXISTS mr_test...)の定義は、表がすでに存在する場合でも常に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.pngの説明が続きます

画像terraform.pngの説明

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

この場合、us-ashburn-1ca-montreal-1およびca-toronto-1の3つのリージョンに対応する3つのディレクトリがTerraformディレクトリ内にあります。ディレクトリ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状態にインポートします。上の図に示すように、状態ファイルもリージョン固有であるため、表をインポートしても状態の競合は発生しません。OCIコンソールから、Canada Southeast(Toronto)リージョンのレプリカ表のocidを取得できます。

    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に変更されます。