Déploiement d'une table NoSQL Oracle à l'aide de Terraform et du gestionnaire de ressources OCI
Il est facile de déployer des tables NDCS sur OCI (Oracle Cloud Infrastructure) à l'aide de Terraform et de la pile du gestionnaire de ressources. Nous allons utiliser l'interface de ligne de commande du gestionnaire de ressources OCI pour déployer les tables NDCS sur Oracle Cloud. Avant de poursuivre avec cet article, il est supposé que vous connaissez NoSQL Cloud Service et que vous connaissez ses bases, ainsi que Terraform.
Terraform utilise des fournisseurs pour l'interface entre le moteur Terraform et la plate-forme en nuage prise en charge. Le fournisseur Terraform pour Oracle Cloud Infrastructure (OCI) est un composant qui connecte Terraform aux services OCI que vous voulez gérer. Vous pouvez utiliser le fournisseur Terraform pour OCI, notamment Terraform Cloud et le gestionnaire de ressources pour OCI.
Le gestionnaire de ressources OCI est un service géré par Oracle basé sur Terraform qui utilise des fichiers de configuration Terraform pour automatiser le déploiement et les opérations pour les ressources OCI prises en charge par le fournisseur Terraform pour OCI. Resource Manager vous permet de partager et de gérer des configurations d'infrastructure et des fichiers d'état pour plusieurs équipes et plates-formes.

-
Pour créer des ressources dans OCI, nous devons configurer terraform. Créez les fichiers de configuration terraform de base pour la définition de fournisseur terraform, les définitions de ressource NoSQL, l'authentification et les variables d'entrée.
-
Déterminez où stocker les fichiers de configuration terraform. Vous pouvez stocker ces fichiers dans différentes sources, telles qu'un dossier local ou un fichier zip, un seau de stockage d'objets et des systèmes de contrôle de source, tels que GitHub ou GitLab.
-
Exécutez les commandes de l'interface de ligne de commande du gestionnaire de ressources pour effectuer les tâches suivantes :
-
Créer une pile.
-
Générez et vérifiez le plan d'exécution.
-
Exécutez la tâche Apply pour provisionner des ressources NoSQL.
-
Consultez les fichiers journaux, au besoin.
-
Note : Nous allons utiliser l'interface de ligne de commande du gestionnaire de ressources pour Oracle Cloud Infrastructure (OCI) et exécuter ces commandes dans Cloud Shell à l'aide de la console. Cela signifie que vous aurez besoin d'informations sur votre location en nuage et d'autres éléments, tels que les paires de clés publiques ou privées, à portée de main. Pour configurer l'interface de ligne de commande OCI sur votre ordinateur local, consultez cette documentation.
Cet article contient les rubriques suivantes :
Conditions requises
-
Compréhension de base de Terraform. Lisez la présentation ici.
-
Un compte Oracle Cloud et un abonnement au service Oracle NoSQL Database Cloud Service. Si vous n'avez pas déjà de compte Oracle Cloud, vous pouvez commencer ici.
Étape 1 : Créer des fichiers de configuration Terraform pour la table ou l'index NDCS

Sous-étape 1.1 : Créer la configuration du fournisseur Terraform pour OCI
Créez un nouveau fichier nommé "provider.tf" qui contient 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 trois méthodes d'authentification :
-
Authentification par clé d'API
-
Autorisation du principal d'instance
-
Authentification par jeton de sécurité
L'argument region spécifie la région géographique dans laquelle les ressources de fournisseur sont créées. Pour cibler plusieurs régions dans une configuration unique, il suffit de créer une définition de fournisseur pour chaque région et de les distinguer à l'aide d'un alias de fournisseur, comme illustré dans l'exemple suivant. Notez qu'un seul fournisseur, nommé "oci", est défini et que la définition du fournisseur oci est entrée deux fois, une fois pour la région us-phoenix-1 (avec l'alias "phx") et une fois pour la région us-ashburn-1 (avec l'alias "iad").
provider "oci" {
region = "us-phoenix-1"
alias = "phx"
}
provider "oci" {
region = "us-ashburn-1"
alias = "iad"
}
Dans l'exemple ci-dessous, un argument region est requis pour le fournisseur Terraform pour OCI. Les arguments tenancy_ocid, user_ocid, private_key_path et fingerprint sont requis pour l'authentification par clé d'API. Vous pouvez fournir la valeur pour region et les clés d'authentification par clé d'API (tenancy_ocid, user_ocid, private_key_path et fingerprint) en tant que variables d'environnement ou dans les variables de configuration Terraform (comme indiqué à la sous-étape 1.3 : Chargement des variables de configuration Terraform).
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
}
L'autorisation du principal d'instance permet à votre fournisseur d'effectuer des appels d'API à partir d'une instance du service de calcul pour OCI sans nécessiter les attributs tenancy_ocid, user_ocid, private_key_path, et fingerprint dans la définition du fournisseur.
Note : L'autorisation du principal d'instance s'applique seulement aux instances qui s'exécutent dans Oracle Cloud Infrastructure.
Dans l'exemple ci-dessous, un argument region est requis pour le fournisseur Terraform pour OCI et un argument auth est requis pour l'autorisation du principal d'instance. Vous pouvez fournir la valeur de l'argument region en tant que variables d'environnement ou dans les variables de configuration Terraform (comme indiqué à la sous-étape 1.3 : Chargement des variables de configuration Terraform).
variable "region" {
}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
Security Token authentication allows you to run Terraform using a token generated with Token-based Authentication for the CLI.
Note : Ce jeton expire après une heure. Évitez d'utiliser cette méthode d'authentification lorsque le provisionnement des ressources prend plus d'une heure. Pour plus d'informations, voir Actualisation d'un jeton.
Dans l'exemple ci-dessous, region un argument est requis pour le fournisseur Terraform pour OCI. Les arguments auth et config_file_profile sont requis pour l'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
}
Sous-étape 1.2 : Créer une configuration Terraform NoSQL
Créez un nouveau fichier nommé "nosql.tf" qui contient les ressources de configuration NoSQL terraform pour créer des tables ou des index du service NoSQL Database Cloud. Pour plus d'informations sur les ressources et les sources de données NoSQL Database, voir oci_nosql_table.
Dans l'exemple ci-dessous, nous créons 2 tables NoSQL. L'argument compartment_ocid est requis pour les ressources de base de données NoSQL telles que les tables et les index. Vous pouvez fournir la valeur de compartment_ocid en tant que variables d'environnement ou dans les variables de configuration Terraform (comme indiqué à la sous-étape 1.3 : Chargement des variables de configuration Terraform).
variable "compartment_ocid" {
}
resource "oci_nosql_table" "nosql_demo" {
compartment_id = var.compartment_ocid
ddl_statement = "CREATE TABLE if not exists demo (ticketNo INTEGER, fullName STRING, contactPhone STRING, confNo STRING, gender STRING, bagInfo JSON, PRIMARY KEY (ticketNo))"
name = "demo"
table_limits {
max_read_units = var.table_table_limits_max_read_units
max_storage_in_gbs = var.table_table_limits_max_storage_in_gbs
max_write_units = var.table_table_limits_max_write_units
}
}
resource "oci_nosql_table" "nosql_demoKeyVal" {
compartment_id = var.compartment_ocid
ddl_statement = "CREATE TABLE if not exists demoKeyVal (key INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), value JSON, PRIMARY KEY (key))"
name = "demoKeyVal"
table_limits {
max_read_units = var.table_table_limits_max_read_units
max_storage_in_gbs = var.table_table_limits_max_storage_in_gbs
max_write_units = var.table_table_limits_max_write_units
}
}
Sous-étape 1.3 : Chargement des variables de configuration Terraform
L'étape suivante consiste à créer un fichier nommé "terraform.tfvars" et à fournir des valeurs pour les arguments de fournisseur Terraform pour OCI requis en fonction de la méthode d'authentification.
Fournissez des valeurs pour vos clés d'accès et de clé secrète IAM (tenancy_ocid, user_ocid, private_key_path et fingerprint), region et compartment_ocid. Vous devriez déjà avoir un utilisateur OCI IAM avec une clé secrète et des clés d'accès ayant des autorisations suffisantes sur le service NoSQL Database Cloud. Obtenez ces clés et stockez-les dans le fichier.
Par exemple :
tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaaqljdu37xcfoqvyj47pf5dqutpxu4twoqc7hukwgpbavpdwkqxc6q"
user_ocid = "ocid1.user.oc1..aaaaaaaafxz473ypsc6oqiespihan6yi6obse3o4e4t5zmpm6rdln6fnkurq"
fingerprint = "2c:9b:ed:12:81:8d:e6:18:fe:1f:0d:c7:66:cc:03:3c"
private_key_path = "~/NoSQLLabPrivateKey.pem"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
region = "us-phoenix-1"
Indiquez des valeurs pour les arguments region et compartment_ocid.
Par exemple :
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Indiquez des valeurs pour les arguments region, compartment_ocid et config_file_profile.
Par exemple :
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"
Sous-étape 1.4 : Déclarer des variables d'entrée
La dernière étape consiste à créer "variables.tf" et à y affecter des valeurs aux variables d'entrée. Cliquez ici pour vous reporter à la documentation sur Terraform pour vérifier les arguments ou propriétés valides disponibles pour NoSQL Database. Dans l'exemple, la valeur par défaut des unités de lecture, d'écriture et de stockage pour la table NoSQL est réglée à 10, 10 et 1 respectivement.
variable "table_table_limits_max_read_units" {
default = 10
}
variable "table_table_limits_max_write_units" {
default = 10
}
variable "table_table_limits_max_storage_in_gbs" {
default = 1
}
À l'aide de Cloud Shell dans la console, nous avons créé tous les fichiers de configuration terraform requis pour la définition de fournisseur, les ressources de base de données NoSQL, les valeurs d'authentification et les variables d'entrée.

Étape 2 : Où stocker vos configurations Terraform

Lors de la création d'une pile avec le gestionnaire de ressources, vous pouvez sélectionner votre configuration Terraform à partir des sources suivantes.
-
Fichier .zip local
-
Dossier local
-
Seau de stockage d'objets
Le contenu le plus récent du seau est automatiquement utilisé par toute tâche exécutée sur la pile associée.
-
Systèmes de contrôle de code source, tels que GitHub et GitLab
La dernière version de votre configuration est automatiquement utilisée par toute tâche exécutée sur la pile associée.
-
Modèle (configuration Terraform prédéfinie à partir d'Oracle ou d'un modèle privé)
-
Compartiment existant (Détection des ressources)
Sous-étape 2.1 : Créer des fournisseurs de source de configuration pour les configurations Terraform distantes
Vous devez créer un fournisseur de configuration source si vous souhaitez utiliser les configurations terraform distantes hébergées sur un système de contrôle source, tel que GitHub et GitLab.
Pour plus d'informations sur la création de fournisseurs de source de configuration pour les configurations Terraform distantes, voir Gestion des fournisseurs de source de configuration.
Étape 3 : Créer une pile à partir d'un fichier

Utilisez la commande liée à l'emplacement du fichier. Pour les sources de configuration Terraform prises en charge par le gestionnaire de ressources, voir Où stocker vos configurations Terraform.
Pour ce tutoriel, nous allons créer une pile à l'aide de la méthode d'authentification du principal d'instance à partir d'un fichier zip de configuration terraform local, terraform.zip. Le fichier terraform.zip contient les fichiers suivants :
-
provider.tf -
nosql.tf -
terraform.tfvars -
variables.tf
Note : Dans ce tutoriel, nous utilisons les commandes de l'interface de ligne de commande du gestionnaire de ressources OCI pour créer une pile. Vous pouvez effectuer la même tâche à l'aide de la console du gestionnaire de ressources OCI.
Pour créer une pile à partir d'un fichier hébergé sur un système de contrôle de code source, tel que GitHub et GitLab.
oci resource-manager stack create-from-git-provider
--compartment-id ocid
1.tenancy.oc1..uniqueid
--config-source-configuration-source-provider-id ocid.ormconfigsourceprovider.oc1..uniqueid
--config-source-repository-url https://github.com/user/repo.git
--config-source-branch-name mybranch
--display-name "My Stack from Git"
--description "Create NoSQL Table"
--variables file://variables.json
--working-directory ""
Pour créer une pile à partir d'une configuration Terraform dans un seau de stockage d'objets.
oci resource-manager stack create-from-object-storage
--compartment-id ocid1.tenancy.oc1..uniqueid
--config-source-namespace MyNamespace
--config-source-bucket-name MyBucket
--config-source-region PHX
--display-name "My Stack from Object Storage"
--description "Create NoSQL Table"
--variables file://variables.json
Pour créer une pile à partir d'un fichier de configuration chargé (.zip)
oci resource-manager stack create
--compartment-id ocid1.tenancy.oc1..uniqueid
--config-source vcn.zip
--variables file://variables.json
--display-name "My Example Stack"
--description "Create NoSQL Table"
--working-directory ""
Où,
-
--compartment-idest l'OCID du compartiment dans lequel vous voulez créer la pile. -
--config-sourceest le nom d'un fichier .zip qui contient un ou plusieurs fichiers de configuration Terraform. -
(Facultatif)
--variablesest le chemin d'accès au fichier spécifiant des variables d'entrée pour les ressources.Le fournisseur Terraform pour Oracle Cloud Infrastructure nécessite des paramètres supplémentaires lors de l'exécution de Terraform localement (à moins que vous n'utilisiez des principaux d'instance). Pour plus d'informations sur l'utilisation de variables dans Terraform, voir Variables d'entrée. Voir aussi Configuration des variables d'entrée.
-
(Facultatif)
--display-nameest le nom convivial de la nouvelle pile. -
(Facultatif)
--descriptionest la description de la nouvelle pile. -
(Facultatif)
--working-directoryest le fichier de configuration racine dans le répertoire. Si non précisé, ou si la valeur est nulle comme dans cet exemple, le service suppose que le fichier de niveau supérieur du répertoire est le fichier de configuration racine.
Par exemple :
oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip
Exemple de réponse :
{
"data": {
"compartment-id": "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya",
"config-source": {
"config-source-type": "ZIP_UPLOAD",
"working-directory": null
},
"defined-tags": {},
"description": null,
"display-name": "ormstack20220117104810",
"freeform-tags": {},
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq",
"lifecycle-state": "ACTIVE",
"stack-drift-status": "NOT_CHECKED",
"terraform-version": "1.0.x",
"time-created": "2022-01-17T10:48:10.878000+00:00",
"time-drift-last-checked": null,
"variables": {}
},
"etag": "dd62ace0b9e9d825d825c05d4588b73fede061e55b75de6436b84fb2bb794185"
}
Nous avons créé une pile à partir des fichiers de configuration terraform et généré un ID pile. À l'étape suivante, cet ID pile est utilisé pour générer un plan d'exécution pour le déploiement des tables NoSQL.
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
Étape 4 : Générer un plan d'exécution

Note : Dans ce tutoriel, nous utilisons les commandes de l'interface de ligne de commande du gestionnaire de ressources OCI pour générer un plan d'exécution. Vous pouvez effectuer la même tâche à l'aide de la console du gestionnaire de ressources OCI.
Pour générer un plan d'exécution, exécutez la commande suivante :
oci resource-manager job create-plan-job
--stack-id <*`stack_OCID`*>
--display-name "<*`friendly_name`*>"
Par exemple :
oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
Exemple de réponse :
{
"data": {
"apply-job-plan-resolution": null,
"cancellation-details": {
"is-forced": false
},
"compartment-id": "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya",
"config-source": {
"config-source-record-type": "ZIP_UPLOAD"
},
"defined-tags": {},
"display-name": "ormjob20220117104856",
"failure-details": null,
"freeform-tags": {},
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN",
"terraform-advanced-options": {
"detailed-log-level": null,
"is-refresh-required": true,
"parallelism": 10
}
},
"lifecycle-state": "ACCEPTED",
"operation": "PLAN",
"resolved-plan-job-id": null,
"stack-id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq",
"time-created": "2022-01-17T10:48:56.324000+00:00",
"time-finished": null,
"variables": {},
"working-directory": null
},
"etag": "a6f75ec1e205cd9105705fd7c8d65bf262159a7e733b27148049e70ce6fc14fe"
}
Nous avons généré un plan d'exécution à partir d'une pile. Le gestionnaire de ressources crée une tâche avec un ID unique correspondant à ce plan d'exécution. Cet ID tâche de plan peut être utilisé plus tard pour vérifier les détails du plan d'exécution avant d'exécuter l'opération d'application pour déployer les ressources de base de données NoSQL dans le nuage OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Sous-étape 4.1 : Réviser le plan d'exécution
Pour vérifier un plan d'exécution :
oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>
Par exemple :
oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq
Exemple de réponse :
...
{
"level": "INFO",
"message": "Terraform used the selected providers to generate the following execution",
"timestamp": "2022-01-17T10:49:21.634000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "plan. Resource actions are indicated with the following symbols:",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + create",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "Terraform will perform the following actions:",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " # oci_nosql_table.nosql_demo will be created",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + resource "oci_nosql_table" "nosql_demo" {",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + compartment_id = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + ddl_statement = "CREATE TABLE if not exists demo (ticketNo INTEGER, fullName STRING, contactPhone STRING, confNo STRING, gender STRING, bagInfo JSON, PRIMARY KEY (ticketNo))"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + is_auto_reclaimable = true",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + name = "demo"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + table_limits {",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_read_units = 10",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_storage_in_gbs = 1",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_write_units = 10",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " # oci_nosql_table.nosql_demoKeyVal will be created",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + resource "oci_nosql_table" "nosql_demoKeyVal" {",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + compartment_id = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + ddl_statement = "CREATE TABLE if not exists demoKeyVal (key INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), value JSON, PRIMARY KEY (key))"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + is_auto_reclaimable = true",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + name = "demoKeyVal"",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + table_limits {",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_read_units = 10",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_storage_in_gbs = 1",
"timestamp": "2022-01-17T10:49:21.635000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_write_units = 10",
"timestamp": "2022-01-17T10:49:21.636000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
"timestamp": "2022-01-17T10:49:21.636000+00:00",
"type": "TERRAFORM_CONSOLE"
},
...
Cette étape est très importante car elle permet de vérifier si le code de pile contient des erreurs de syntaxe et le nombre exact de ressources OCI en cours d'ajout, de mise à jour ou de destruction. Dans le tutoriel, nous déployons deux tables NoSQL : demo et demoKeyVal.
{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
Étape 5 : Exécuter une tâche de candidature

-
Pour spécifier une tâche de planification (application d'un plan d'exécution), utilisez
FROM_PLAN_JOB_ID:oci resource-manager job create-apply-job --stack-id <*`stack_OCID`*> --execution-plan-strategy FROM_PLAN_JOB_ID --execution-plan-job-id <*`plan_job_OCID`*> --display-name "Example Apply Job" -
Pour approuver automatiquement la tâche d'application (sans spécifier de tâche de planification), utilisez
AUTO_APPROVED:oci resource-manager job create-apply-job --stack-id <*`stack_OCID`*> --execution-plan-strategy AUTO_APPROVED --display-name "Example Apply Job"
Par exemple :
oci resource-manager job create-apply-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
--execution-plan-strategy AUTO_APPROVED
--display-name "Create NoSQL Tables Using Terraform"
Exemple de réponse :
{
"data": {
"apply-job-plan-resolution": {
"is-auto-approved": true,
"is-use-latest-job-id": null,
"plan-job-id": null
},
"cancellation-details": {
"is-forced": false
},
"compartment-id": "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya",
"config-source": {
"config-source-record-type": "ZIP_UPLOAD"
},
"defined-tags": {},
"display-name": "Create NoSQL Tables Using Terraform",
"failure-details": null,
"freeform-tags": {},
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"execution-plan-job-id": null,
"execution-plan-strategy": "AUTO_APPROVED",
"operation": "APPLY",
"terraform-advanced-options": {
"detailed-log-level": null,
"is-refresh-required": true,
"parallelism": 10
}
},
"lifecycle-state": "ACCEPTED",
"operation": "APPLY",
"resolved-plan-job-id": null,
"stack-id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq",
"time-created": "2022-01-17T10:54:46.346000+00:00",
"time-finished": null,
"variables": {},
"working-directory": null
},
"etag": "4042a300e8f678dd6da0f49ffeccefed66902b51331ebfbb559da8077a728126"
}
Nous avons exécuté l'opération d'application sur le plan d'exécution à partir d'une pile. Le gestionnaire de ressources crée une tâche avec un ID unique pour exécuter l'opération d'application. Cet ID tâche d'application peut être utilisé plus tard pour consulter les journaux générés dans le cadre du déploiement de la table NoSQL Database sur le nuage OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Note : Si vous utilisez un environnement hôte dédié, réglez la variable d'environnement CLIENT_HOST_OVERRIDES pour spécifier le point d'extrémité personnalisé avant d'exécuter la tâche.
Exemple :
export CLIENT_HOST_OVERRIDES=<oci_nosql.NosqlClient=https://ndcs.us-ashburn-1.oci.oc-test.com>
Sous-étape 5.1 : Vérifier le statut de la tâche
Pour vérifier le statut d'un travail, exécutez la commande suivante :
oci resource-manager job get
--job-id <*`job_OCID`*>
Par exemple :
oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Exemple de réponse :
{
"data": {
"apply-job-plan-resolution": {
"is-auto-approved": true,
"is-use-latest-job-id": null,
"plan-job-id": null
},
"cancellation-details": {
"is-forced": false
},
"compartment-id": "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya",
"config-source": {
"config-source-record-type": "ZIP_UPLOAD"
},
"defined-tags": {},
"display-name": "Create NoSQL Tables Using Terraform",
"failure-details": null,
"freeform-tags": {},
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"execution-plan-job-id": null,
"execution-plan-strategy": "AUTO_APPROVED",
"operation": "APPLY",
"terraform-advanced-options": {
"detailed-log-level": null,
"is-refresh-required": true,
"parallelism": 10
}
},
"lifecycle-state": "SUCCEEDED",
"operation": "APPLY",
"resolved-plan-job-id": null,
"stack-id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq",
"time-created": "2022-01-17T10:54:46.346000+00:00",
"time-finished": "2022-01-17T10:55:28.853000+00:00",
"variables": {},
"working-directory": null
},
"etag": "9e9f524b87e3c47b3f3ea3bbb4c1f956172a48e4c2311a44840c8b96e318bcaf--gzip"
}
Vous pouvez vérifier le statut de votre tâche d'application pour vérifier si la tâche est SUCCESSFUL ou FAILED.
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Sous-étape 5.2 : Voir le journal d'un travail
Pour voir le journal d'une tâche, exécutez la commande suivante :
oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>
Par exemple :
oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Exemple de réponse :
...
{
"level": "INFO",
"message": "Terraform will perform the following actions:",
"timestamp": "2022-01-17T10:55:05.580000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "",
"timestamp": "2022-01-17T10:55:05.580000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " # oci_nosql_table.nosql_demo will be created",
"timestamp": "2022-01-17T10:55:05.580000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + resource "oci_nosql_table" "nosql_demo" {",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + compartment_id = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + ddl_statement = "CREATE TABLE if not exists demo (ticketNo INTEGER, fullName STRING, contactPhone STRING, confNo STRING, gender STRING, bagInfo JSON, PRIMARY KEY (ticketNo))"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + is_auto_reclaimable = true",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + name = "demo"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + table_limits {",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_read_units = 10",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_storage_in_gbs = 1",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_write_units = 10",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " # oci_nosql_table.nosql_demoKeyVal will be created",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + resource "oci_nosql_table" "nosql_demoKeyVal" {",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + compartment_id = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + ddl_statement = "CREATE TABLE if not exists demoKeyVal (key INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), value JSON, PRIMARY KEY (key))"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + is_auto_reclaimable = true",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + name = "demoKeyVal"",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + table_limits {",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_read_units = 10",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_storage_in_gbs = 1",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": " + max_write_units = 10",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
"timestamp": "2022-01-17T10:55:05.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "oci_nosql_table.nosql_demoKeyVal: Creating...",
"timestamp": "2022-01-17T10:55:06.581000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "oci_nosql_table.nosql_demo: Creating...",
"timestamp": "2022-01-17T10:55:06.582000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "oci_nosql_table.nosql_demoKeyVal: Creation complete after 6s [id=ocid1.nosqltable.oc1.phx.amaaaaaau7x7rfyaqgpbjucp3s6jjzpnar4lg5yudxhwlqrlbd54l3wdo7hq]",
"timestamp": "2022-01-17T10:55:12.582000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "oci_nosql_table.nosql_demo: Creation complete after 9s [id=ocid1.nosqltable.oc1.phx.amaaaaaau7x7rfyasvdkoclhgryulgzox3nvlxb2bqtlxxsrvrc4zxr6lo4a]",
"timestamp": "2022-01-17T10:55:15.583000+00:00",
"type": "TERRAFORM_CONSOLE"
},
{
"level": "INFO",
"message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
"timestamp": "2022-01-17T10:55:15.583000+00:00",
"type": "TERRAFORM_CONSOLE"
},
...
Cette étape est très importante car elle confirme exactement le nombre de ressources OCI ajoutées, mises à jour ou détruites. Dans le tutoriel, nous avons déployé deux tables NoSQL : demo et demoKeyVal.
{
...
"message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
...
}
Nous avons couvert beaucoup de détails dans ce tutoriel. Nous avons créé les fichiers de configuration terraform requis pour le déploiement des tables de base de données NoSQL dans le nuage OCI, puis configuré l'emplacement source de ces fichiers. Nous avons ensuite utilisé l'interface de ligne de commande du gestionnaire de ressources OCI pour créer une pile, générer un plan d'exécution et exécuter une tâche d'application sur le plan d'exécution.