Déploiement de tables actives globales à l'aide de Terraform
Il est facile de déployer une table active globale sur OCI à l'aide de Terraform.
Terraform est un outil d'infrastructure en tant que code qui vous permet de créer, de modifier et de versions des ressources en nuage et sur place en toute sécurité et efficacement. Pour avoir une compréhension de base de Terraform, lisez la brève introduction. Assurez-vous que le fournisseur Terraform pour OCI est installé et configuré pour l'authentification par clé d'API, l'autorisation du principal d'instance, l'autorisation du principal de ressource et l'authentification par jeton de sécurité.
Etapes de déploiement d'une table globale
Le script terraform ci-dessous effectue les opérations suivantes :
- Crée la table source en tant que table singleton si elle n'est pas présente.
- Ajoute un index à la table singleton.
- Crée une réplique régionale de la table et en fait une table active globale.
Étapes :
Étape 1 : Créez des fichiers de configuration Terraform pour la table Global Active : Vous devez créer les fichiers de configuration suivants pour créer une table Global Active.
provider.tf : Dans ce fichier, vous fournissez la définition du fournisseur Terraform pour OCI et les définitions de variable associées. Le fournisseur Terraform pour OCI nécessite UNIQUEMENT l'argument region. Toutefois, vous devrez peut-être configurer des arguments supplémentaires avec des données d'identification pour un compte OCI en fonction de la méthode d'authentification.
Le fournisseur Terraform pour OCI prend en charge quatre méthodes d'authentification : Authentification par clé d'API, Autorisation du principal d'instance, Autorisation du principal de ressource et Authentification par jeton de sécurité.
Exemple de provider.tf avec authentification par clé d'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
}
Exemple de provider.tf avec autorisation de principal d'instance
variable "region" {
}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
Exemple de provider.tf avec autorisation de principal de ressource
variable "region" {
}
provider "oci" {
auth = "ResourcePrincipal"
region = var.region
}
Exemple de provider.tf avec authentification par jeton de sécurité
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
auth = "SecurityToken"
config_file_profile = var.config_file_profile
region = var.region
}
nosql.tf : Les ressources sont l'élément le plus important dans le langage Terraform. Terraform crée une table singleton, un index et une réplique de table en tant que ressource. Dans ce fichier, vous indiquez la définition des ressources de configuration NoSQL terraform pour la création d'une table active globale. Dans l'exemple ci-dessous, vous créez une table active globale en ajoutant une réplique régionale de cette table.
-
Les ressources créées ci-dessous sont oci_nosql_table, oci_nosql_index.
-
La définition LDD de table doit inclure
with schema frozenouwith schema frozen forcedans la table singleton. Pour plus de détails, voir Création d'une table active globale. -
Les limites de la table d'expéditeur (unité de lecture, unité d'écriture et capacité de stockage) doivent être indiquées.
-
Lorsque vous ajoutez une réplique de table régionale, vous pouvez spécifier le nom de la table ou l'OCID de la table. Si vous spécifiez le nom de la table, vous devez spécifier l'OCID du compartiment et la clause
depends_onlors de la définition de la réplique régionale, comme illustré ci-dessous. Si vous spécifiez l'OCID de la table, la clausedepends_onet l'OCID du compartiment sont facultatifs.
Voir Syntaxe de ressource pour comprendre comment un bloc de ressource est construit dans Terraform. La syntaxe de la commande resource inclut le type de ressource oci_nosql_table_replica, qui est une réplique de table, et le nom de la ressource, par exemple replica_montreal. Voir Identificateurs pour plus de détails sur la définition des noms de ressource dans un script Terraform.
Note : Vous pouvez utiliser l'une des deux options ci-dessous (Option 1 - à l'aide de l'OCID de la table ou Option 2 - à l'aide du nom de la table) dans le 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]
}
Exemple de fichier 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"
}
Note : La définition de la table singleton (CREATE TABLE IF NOT EXISTS mr_test...) doit toujours être incluse dans le script terraform même si la table source existe déjà. La suppression de la définition CREATE TABLE du script terraform supprime la TABLE de la région.
terraform.tfvars : Dans ce fichier, vous fournissez les valeurs des arguments de fournisseur Terraform pour OCI requis en fonction de la méthode d'authentification.
Exemple de terraform.tfvars avec authentification par clé d'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>"
Exemple de terraform.tfvars avec autorisation de principal d'instance :
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Exemple d'autorisation terraform.tfvars avec principal de ressource :
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
Exemple de terraform.tfvars avec authentification par jeton de sécurité :
compartment_ocid = "<your_compartment_ocid>"
region = "<name of your region>"
config_file_profile = "PROFILE"
Note : Vous pouvez avoir un seul fichier terraform.tf dans lequel vous pouvez ajouter tous les détails de configuration, mais il est recommandé d'avoir des fichiers de configuration distincts comme indiqué ci-dessus pour plus de clarté et faciliter la maintenance.
Étape 2 : Appelez terraform et initialisez la configuration.
terraform init
Étape 3 : Exécutez la commande suivante pour appeler le script terraform.
terraform apply
Terraform affiche le plan à appliquer et invite à confirmer, comme indiqué ci-dessous.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Sur confirmation, la table singleton est créée et un index lui est ajouté. Une réplique régionale de la table est ensuite créée, convertissant la table singleton en GAT.