Terraformを使用したグローバル・アクティブ表のデプロイ

Terraformを使用してOCIにグローバル・アクティブ表を簡単にデプロイできます。

Terraformは、クラウドおよびonPremisesリソースを安全かつ効率的に構築、変更およびバージョニングできるInfrastructure-as-Codeツールです。Terraformを基本的に理解するには、概要を参照してください。OCI Terraformプロバイダがインストールされ、構成されていることを確認します。

グローバル表をデプロイするステップ

次のterraformスクリプトは、次の操作を行います:

  • ソース表が存在しない場合は、シングルトン表として作成します。
  • シングルトン表に索引を追加します。
  • 表のリージョナル・レプリカを作成し、それをグローバル・アクティブ表にします。

ステップ:

ステップ1: グローバル・アクティブ表のTerraform構成ファイルの作成: グローバル・アクティブ表を作成するには、次の構成ファイルを作成する必要があります。

provider.tf:

このファイルでは、OCI Terraformプロバイダ定義および関連する変数定義を指定します。OCI Terraformプロバイダには、region引数のみが必要です。ただし、認証方法に基づいて、OCIアカウントの認証資格証明を使用して追加の引数を構成する必要がある場合があります。OCI Terraformプロバイダでは、APIキー認証、Instance Principal認可、リソース・プリンシパル認可およびセキュリティ・トークン認証の4つの認証方法がサポートされています。

APIキー認証を使用したprovider.tfの例
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
}
Instance Principal認可を使用したprovider.tfの例
variable "region" {
}
provider "oci" {
  auth = "InstancePrincipal"
  region = var.region
}
リソース・プリンシパル認可を使用したprovider.tfの例
variable "region" {
}

provider "oci" {
  auth = "ResourcePrincipal"
  region = var.region
}
セキュリティ・トークン認証を使用するprovider.tfの例
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
  auth = "SecurityToken"
  config_file_profile = var.config_file_profile
  region = var.region
}
nosql.tf: リソースは、Terraform言語で最も重要な要素です。Terraformは、シングルトン表、索引および表レプリカをリソースとして作成します。このファイルでは、グローバル・アクティブ表を作成するためのNoSQLテラフォーム構成リソースの定義を指定します。次の例では、この表のリージョナル・レプリカを追加して、グローバル・アクティブ表を作成します。
  • 次に作成されるリソースは、oci_nosql_tableoci_nosql_indexおよびoci_nosql_table_replicaです。
  • 表DDL定義には、シングルトン表にスキーマがフリーズされているか、スキーマがフリーズされている必要があります。詳細は、グローバル・アクティブ表の作成を参照してください。
  • 送信者テーブルのテーブル制限(読み取り単位、書き込み単位、およびストレージ容量)を指定する必要があります。
  • リージョナル表レプリカを追加する場合は、表の名前または表のOCIDを指定できます。表の名前を指定する場合は、次に示すように、リージョナル・レプリカを定義するときに、コンパートメントのOCIDとdepends_on 句を指定する必要があります。表のOCIDを指定する場合、depends_on 句およびコンパートメントOCIDはオプションです。
Terraformでリソース・ブロックがどのように構築されるかを理解するには、リソースの構文を参照してください。resourceコマンドの構文には、表レプリカであるリソースoci_nosql_table_replicaのタイプとリソースの名前(replica_montrealなど)が含まれます。Terraformスクリプトでリソース名を定義する方法の詳細は、識別子を参照してください。

ノート:

nosql.tfスクリプトでは、次の2つのオプションのいずれか(オプションの1 - 表のOCIDを使用するか、オプション2 - 表の名前を使用)を使用できます。
#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]
}
サンプル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 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"
}

ノート:

ソース表がすでに存在する場合でも、シングルトン表(CREATE TABLE IF NOT EXISTS mr_test...)の定義は常にterraformスクリプトに含まれている必要があります。terraformスクリプトからCREATE TABLE定義を削除すると、リージョンから表が削除されます。

terraform.tfvars: このファイルでは、認証方法に基づいて、必要なOCI Terraformプロバイダ引数の値を指定します。

APIキー認証を使用したterraform.tfvarsの例:
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>"
Instance Principal Authorizationを使用したterraform.tfvarsの例:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
リソース・プリンシパル認可を使用したterraform.tfvarsの例:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
セキュリティ・トークン認証を使用するterraform.tfvarsの例:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
config_file_profile = "PROFILE"

ノート:

構成の詳細全体を追加できる単一のterraform.tfファイルを作成できますが、わかりやすくメンテナンスしやすいように、前述のように個別の構成ファイルを使用することをお薦めします。
ステップ2: terraformを起動し、設定を初期化します。
terraform init
ステップ3: 次のコマンドを実行して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.

確認時に、シングルトン表が作成され、索引が追加されます。表のリージョナル・レプリカが作成され、シングルトン表がGATに変換されます。