Distribuzione delle tabelle Global Active mediante Terraform

È facile distribuire una tabella Global Active su OCI utilizzando Terraform.

Terraform è uno strumento infrastructure-as-code che ti consente di creare, modificare e sottoporre a versione le risorse cloud e onPremises in modo sicuro ed efficiente. Per avere una conoscenza di base di Terraform, leggi la breve introduzione. Assicurarsi di disporre del provider Terraform OCI installato e configurato.

Passi per distribuire una tabella globale

Lo script terraform riportato di seguito esegue le operazioni riportate di seguito.

  • Crea la tabella di origine come tabella singleton se non è presente.
  • Aggiunge un indice alla tabella singleton.
  • Crea una replica regionale della tabella e la rende una tabella attiva globale.

Passi:

Passo 1: creare i file di configurazione Terraform per la tabella Global Active: è necessario creare i file di configurazione riportati di seguito per creare una tabella Global Active.

provider.tf:

In questo file è possibile fornire la definizione del provider Terraform OCI e le definizioni delle variabili associate. Il provider Terraform OCI richiede SOLO l'argomento region. Tuttavia, potrebbe essere necessario configurare argomenti aggiuntivi con le credenziali di autenticazione per un account OCI in base al metodo di autenticazione. Il provider Terraform OCI supporta quattro metodi di autenticazione: Autenticazione chiave API, Autorizzazione principal istanza, Autorizzazione principal risorsa e Autenticazione token di sicurezza.

Esempio di provider.tf con autenticazione chiave API
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
}
Esempio di provider.tf con autorizzazione principal istanza
variable "region" {
}
provider "oci" {
  auth = "InstancePrincipal"
  region = var.region
}
Esempio di provider.tf con autorizzazione principal risorsa
variable "region" {
}

provider "oci" {
  auth = "ResourcePrincipal"
  region = var.region
}
Esempio di provider.tf con autenticazione token di sicurezza
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
  auth = "SecurityToken"
  config_file_profile = var.config_file_profile
  region = var.region
}
nosql.tf: le risorse sono l'elemento più importante nel linguaggio Terraform. Terraform crea una tabella singleton, un indice e una replica della tabella come risorsa. In questo file si fornisce la definizione delle risorse di configurazione terraform NoSQL per la creazione di una tabella attiva globale. Nell'esempio seguente si sta creando una tabella Global Active aggiungendo una replica regionale di questa tabella.
  • Le risorse create di seguito sono oci_nosql_table, oci_nosql_index e oci_nosql_table_replica.
  • La definizione DDL della tabella deve includere con schema congelato o con schema frozen force nella tabella singleton. Per ulteriori dettagli, vedere Creazione di una tabella attiva globale.
  • È necessario specificare i limiti della tabella del mittente (unità di lettura, unità di scrittura e capacità di storage).
  • Quando si aggiunge una replica della tabella regionale, è possibile specificare il nome della tabella o l'OCID della tabella. Se si specifica il nome della tabella, è necessario specificare l'OCID del compartimento e la clausola depends_on durante la definizione della replica regionale, come mostrato di seguito. Se si specifica l'OCID della tabella, la clausola depends_on e l'OCID del compartimento sono facoltativi.
Vedere Sintassi delle risorse per capire in che modo viene creato un blocco di risorse in Terraform. La sintassi del comando resource include il tipo di risorsa oci_nosql_table_replica che è una replica della tabella e il nome della risorsa, ad esempio replica_montreal. Vedere Identificativi per i dettagli su come definire i nomi delle risorse in uno script Terraform.

Nota

È possibile utilizzare una delle due opzioni riportate di seguito (opzione 1 - utilizzando l'OCID della tabella o opzione 2 - utilizzando il nome della tabella) nello script nosql.tf.
#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]
}
File nosql.tf di esempio:
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"
}

Nota

La definizione della tabella singleton (CREATE TABLE IF NOT EXISTS mr_test...) deve essere sempre inclusa nello script terraform anche se la tabella di origine esiste già. La rimozione della definizione CREATE TABLE dallo script terraform comporta l'eliminazione della tabella dall'area.

terraform.tfvars: in questo file è possibile fornire i valori per gli argomenti del provider Terraform OCI richiesti in base al metodo di autenticazione.

Esempio di terraform.tfvars con autenticazione chiave API:
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>"
Esempio di terraform.tfvars con autorizzazione principal istanza:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Esempio di terraform.tfvars con autorizzazione principal risorsa:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Esempio di terraform.tfvars con autenticazione token di sicurezza:
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
config_file_profile = "PROFILE"

Nota

È possibile disporre di un singolo file terraform.tf in cui è possibile aggiungere tutti i dettagli di configurazione, ma si consiglia di disporre di file di configurazione separati come mostrato sopra per maggiore chiarezza e facilità di manutenzione.
Passo 2: revocare terraform e inizializzare l'impostazione.
terraform init
Passo 3: eseguire il comando seguente per richiamare lo script terraform.
terraform apply
Terraform mostra il piano da applicare e richiede una conferma come mostrato di seguito.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Alla conferma, viene creata la tabella singleton e viene aggiunto un indice. Viene quindi creata una replica regionale della tabella, convertendo la tabella singleton in un GAT.