Déploiement d'une table Oracle NoSQL à l'aide de Terraform et d'OCI Resource Manager
Il est facile de déployer des tables NDCS sur OCI (Oracle Cloud Infrastructure) à l'aide de Terraform et de la pile de Resource Manager. Nous allons utiliser l'interface de ligne de commande d'OCI Resource Manager pour déployer des tables NDCS sur Oracle Cloud. Avant de poursuivre cet article, nous supposons que vous connaissez NoSQL Cloud Service et que vous connaissez ses bases, ainsi que Terraform.
Terraform utilise des fournisseurs pour faire l'interface entre le moteur Terraform et la plate-forme cloud prise en charge. Le fournisseur Terraform (OCI) Oracle Cloud Infrastructure est un composant qui connecte Terraform aux services OCI à gérer. Vous pouvez utiliser le fournisseur OCI Terraform, y compris Terraform Cloud et OCI Resource Manager.
OCI Resource Manager 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 des ressources OCI prises en charge par le fournisseur OCI Terraform. Resource Manager permet de partager et d'administrer les configurations d'infrastructure et les fichiers d'état entre 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 que le dossier local ou le fichier ZIP, le bucket Object Storage et les systèmes de contrôle de source, tels que GitHub ou GitLab.
-
Exécutez les commandes de la CLI de Resource Manager pour effectuer les tâches suivantes :
-
Créer une pile.
-
Générez le plan d'exécution et vérifiez-le.
-
Exécutez le travail d'application pour provisionner les ressources NoSQL.
-
Consultez les fichiers journaux, si nécessaire.
-
Remarque : nous allons travailler avec l'interface de ligne de commande d'Oracle Cloud Infrastructure (OCI) Resource Manager et exécuter ces commandes dans Cloud Shell à l'aide de la console. Cela signifie que vous aurez besoin d'informations pratiques sur votre location cloud et d'autres éléments tels que des paires de clés publiques ou privées. Pour configurer l'interface de ligne de commande OCI sur votre ordinateur local, reportez-vous à cette documentation.
Cet article comprend les rubriques suivantes :
Prérequis
-
Connaissance de base de Terraform. Lisez la brève introduction ici.
-
Un compte Oracle Cloud et un abonnement à Oracle NoSQL Database Cloud Service. Si vous n'avez pas déjà de compte Oracle Cloud, vous pouvez commencer par ici.
Etape 1 : création de fichiers de configuration Terraform pour une table ou un index NDCS

Sous-étape 1.1 : Créer une configuration de fournisseur OCI Terraform
Créez un fichier nommé "provider.tf" qui contient la définition de fournisseur OCI Terraform, ainsi que les définitions de variable associées. Le fournisseur OCI Terraform requiert UNIQUEMENT l'argument region.
Toutefois, vous devrez peut-être configurer des arguments supplémentaires avec des informations d'identification d'authentification pour un compte OCI en fonction de la méthode d'authentification. Le fournisseur OCI Terraform prend en charge trois méthodes d'authentification :
-
Authentification par clé d'API
-
Autorisation de principal d'instance
-
Authentification par jeton de sécurité
L'argument region spécifie la région géographique dans laquelle les ressources de votre fournisseur sont créées. Pour cibler plusieurs régions dans une même configuration, il vous suffit d'en créer une définition pour chaque région, puis de les différencier en utilisant un alias de fournisseur, comme indiqué dans l'exemple suivant. Vous devez remarquer qu'un seul fournisseur nommé "oci" est défini, mais qu'une fois la définition du fournisseur oci est saisie 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 OCI Terraform. Les arguments tenancy_ocid, user_ocid, private_key_path et fingerprint sont requis pour l'authentification par clé d'API. Vous pouvez indiquer la valeur des clés d'authentification par clé d'API et region (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 de principal d'instance permet à votre fournisseur d'effectuer des appels d'API d'une instance OCI à partir d'une instance OCI sansavoir besoin des attributs tenancy_ocid, user_ocid, private_key_path et fingerprint dans la définition de fournisseur.
Remarque : l'autorisation de principal d'instance s'applique uniquement aux instances exécutées dans Oracle Cloud Infrastructure.
Dans l'exemple ci-dessous, un argument region est requis pour le fournisseur OCI Terraform et un argument auth est requis pour l'autorisation de principal d'instance. Vous pouvez indiquer 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
}
L'authentification par jeton de sécurité permet d'exécuter Terraform à l'aide d'un jeton généré avec l'authentification basée sur un jeton pour l'interface de ligne de commande.
Remarque : ce jeton arrive à expiration au bout d'une heure. Évitez d'utiliser cette méthode d'authentification lorsque le provisionnement des ressources prend plus d'une heure. Pour plus d'informations, reportez-vous à Actualisation d'un jeton.
Dans l'exemple ci-dessous, region un argument est requis pour le fournisseur OCI Terraform. 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 NoSQL Terraform
Créez un fichier nommé "nosql.tf" contenant les ressources de configuration terraform NoSQL pour la création de tables ou d'index NoSQL Database Cloud Service. Pour plus d'informations sur les ressources et les sources de données NoSQL Database, reportez-vous à oci_nosql_table.
Dans l'exemple ci-dessous, nous créons 2 tables NoSQL. L'argument compartment_ocid est requis pour les ressources NoSQL Database telles que les tables et les index. Vous pouvez indiquer 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 : Charger les variables de configuration Terraform
L'étape suivante consiste à créer un fichier nommé "terraform.tfvars" et à fournir des valeurs pour les arguments de fournisseur OCI Terraform requis en fonction de la méthode d'authentification.
Fournissez des valeurs pour vos arguments d'accès et de clé secrète IAM (tenancy_ocid, user_ocid, private_key_path et fingerprint), region et compartment_ocid. Vous devez déjà disposer d'un utilisateur OCI IAM avec une clé secrète et des clés d'accès disposant de droits d'accès suffisants sur NoSQL Database Cloud Service. Obtenez ces clés et stockez-les dans le fichier.
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"
Fournissez des valeurs pour les arguments region et compartment_ocid.
Exemple :
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Fournissez des valeurs pour les arguments region, compartment_ocid et config_file_profile.
Exemple :
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"
Sous-étape 1.4 : Déclaration de 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 consulter la documentation Terraform afin de rechercher les arguments ou les 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 définie sur 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
}
En utilisant Cloud Shell à partir de 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.

Etape 2 : stockage des configurations Terraform

Lorsque vous créez une pile avec Resource Manager, vous pouvez sélectionner votre configuration Terraform à partir des sources suivantes.
-
Fichier .zip local
-
Dossier Local
-
Bucket Object Storage
Le contenu le plus récent du bucket est automatiquement utilisé par tout travail exécuté 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 tout travail exécuté sur la pile associée.
-
Modèle (configuration Terraform prédéfinie à partir d'Oracle ou modèle privé)
-
Compartiment existant (Repérage de 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 au cas où vous souhaiteriez 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, reportez-vous à Gestion des fournisseurs de source de configuration.
Etape 3 : création d'une pile à partir d'un fichier

Utilisez la commande associée à l'emplacement du fichier. Pour connaître les sources de configuration Terraform prises en charge avec Resource Manager, reportez-vous à Emplacement de stockage des configurations Terraform.
Dans ce tutoriel, nous allons créer une pile à l'aide de la méthode d'authentification 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
Remarque : dans ce tutoriel, nous utilisons les commandes de l'interface de ligne de commande d'OCI Resource Manager pour créer une pile. Vous pouvez effectuer la même tâche à l'aide de la console OCI Resource Manager.
Procédure de création d'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 ""
Procédure de création d'une pile à partir d'une configuration Terraform dans un bucket Object Storage.
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
Procédure de création d'une pileà partir d'un fichier d'une configuration télé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 souhaitez créer la pile. -
--config-sourceest le nom d'un fichier .zip contenant un ou plusieurs fichiers de configuration Terraform. -
(Facultatif)
--variablesest le chemin du fichier indiquant les variables d'entrée de vos ressources.Le fournisseur Terraform Oracle Cloud Infrastructure exige des paramètres supplémentaires lorsque vous exécutez Terraform en local (sauf Si vous utilisez des ID d'instance). Pour plus d'informations sur l'utilisation des variables dans Terraform, reportez-vous à la page relative aux variables d'entrée. Reportez-vous également à la page relative à la 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 d'installation racine du répertoire. Si cette option n'est pas définie ou si la valeur correspondante est NULL, comme dans cet exemple, le service suppose que le fichier de niveau supérieur dans le répertoire est le fichier de configuration racine.
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 du ou des fichiers de configuration terraform et généré un ID de pile. A l'étape suivante, cet ID de pile est utilisé pour générer un plan d'exécution pour le déploiement de tables NoSQL.
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
Etape 4 : génération d'un plan d'exécution

Remarque : dans ce tutoriel, nous utilisons les commandes de l'interface de ligne de commande OCI Resource Manager pour générer un plan d'exécution. Vous pouvez effectuer la même tâche à l'aide de la console OCI Resource Manager.
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`*>"
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. Resource Manager crée un travail avec un ID unique correspondant à ce plan d'exécution. Cet ID de travail de plan peut être utilisé ultérieurement pour vérifier les détails du plan d'exécution avant d'exécuter l'opération d'application des modifications afin de déployer les ressources de base de données NoSQL sur le cloud OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Sous-étape 4.1 : Vérifier le plan d'exécution
Pour vérifier un plan d'exécution, exécutez la commande suivante :
oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>
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 exactement combien de ressources OCI sont ajoutées, mises à jour ou détruites. Dans ce tutoriel, nous déployons deux tables NoSQL : demo et demoKeyVal.
{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
Etape 5 : exécution d'un travail d'application

-
Pour définir un projet de planification (pour "appliquer" 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 le travail d'application (sans définir de travail 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"
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. Resource Manager crée un travail avec un ID unique pour exécuter l'opération d'application. Cet ID de travail d'application peut être utilisé ultérieurement pour vérifier les journaux générés dans le cadre du déploiement de table NoSQL Database sur le cloud OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Remarque : si vous utilisez un environnement hôte dédié, définissez la variable d'environnement CLIENT_HOST_OVERRIDES pour spécifier l'adresse personnalisée avant d'exécuter le travail.
Par 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 du travail
Pour vérifier le statut d'un travail, exécutez la commande suivante :
oci resource-manager job get
--job-id <*`job_OCID`*>
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 travail de candidature pour vérifier si le travail est SUCCESSFUL ou FAILED.
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Sous-étape 5.2 : Visualiser le journal d'un travail
Pour afficher le journal d'un travail, exécutez la commande suivante :
oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>
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 sur le cloud OCI, puis configuré l'emplacement source de ces fichiers. Nous avons ensuite utilisé l'interface de ligne de commande OCI Resource Manager pour créer une pile, générer un plan d'exécution et exécuter un travail d'application sur le plan d'exécution.