Distribuzione di tabelle attive globali 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 versioni delle risorse cloud e on-premise in modo sicuro ed efficiente. Per una conoscenza di base di Terraform, leggere il breve documento introduzione. Assicurarsi di disporre del provider Terraform OCI installato e dell'autenticazione della chiave API configurata, dell'autorizzazione del principal dell'istanza, dell'autorizzazione del principal risorsa e dell'autenticazione del token di sicurezza.

Passi per distribuire una tabella globale

Lo script terraform riportato di seguito fa quanto segue:

Passi

Passo 1: creare i file di configurazione Terraform per la tabella Attivo globale: è necessario creare i seguenti file di configurazione per la creazione di una tabella Attivo globale.

provider.tf: in questo file, si fornisce 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 credenziali di autenticazione per un account OCI in base al metodo di autenticazione.

Il provider Terraform OCI supporta quattro metodi di autenticazione: autenticazione della chiave API, autorizzazione del principal dell'istanza, autorizzazione del principal risorsa e autenticazione del 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 di tabella come risorsa. In questo file viene fornita la definizione delle risorse di configurazione NoSQL terraform per la creazione di una tabella attiva globale. Nell'esempio riportato di seguito, si sta creando una tabella Attivo globale aggiungendo una replica regionale di questa tabella.

Vedere Sintassi delle risorse per comprendere come viene costruito 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. Per informazioni dettagliate su come definire i nomi delle risorse in uno script Terraform, vedere Identificatori.

Nota: è possibile utilizzare una delle due opzioni riportate di seguito (Opzione 1 - utilizzando 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à. Se si rimuove la definizione CREATE TABLE dallo script terraform, la tabella viene eliminata dall'area.

terraform.tfvars:in questo file vengono forniti i valori per gli argomenti del provider Terraform OCI necessari 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 avere 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: richiamare 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 la 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.