Déploiement de la 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 la pile Terraform et Resource Manager. Nous allons utiliser l'interface de ligne de commande OCI Resource Manager pour déployer des tables NDCS sur Oracle Cloud. Avant de poursuivre cet article, il est supposé que vous connaissez NoSQL Cloud Service et 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 Oracle Cloud Infrastructure (OCI) Terraform 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 pour les ressources OCI prises en charge par le fournisseur OCI Terraform. Resource Manager permet de partager et de gérer 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 ou le fichier ZIP local, le bucket Object Storage et les systèmes de contrôle de source, tels que GitHub ou GitLab.
- Exécutez les commandes de l'interface de ligne de commande de Resource Manager pour effectuer les tâches suivantes :
- Créer une pile.
- Générez et vérifiez le plan d'exécution.
- Exécutez le travail Apply pour provisionner les ressources NoSQL.
- Au besoin, consultez les journaux.
Remarques :
Nous allons utiliser l'interface de ligne de commande (CLI) 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 sur votre location cloud et d'autres éléments tels que les paires de clés publiques ou privées à portée de main. Si vous souhaitez configurer l'interface de ligne de commande OCI sur votre ordinateur local, reportez-vous à cette documentation.Cet article comprend les rubriques suivantes :
Sous-étape 1.1 : création de la configuration de fournisseur OCI Terraform
Créez un fichier nommé "provider.tf
" qui contient la définition du fournisseur OCI Terraform, ainsi que les définitions de variable associées. Le fournisseur OCI Terraform requiert UNIQUEMENT l'argument region
.
- API Key Authentication
- Autorisation de principal d'instance
- Authentification par jeton de sécurité
region
spécifie la région géographique dans laquelle les ressources de votre fournisseur sont créées. Afin de cibler plusieurs régions dans une même configuration, vous créez simplement une définition de fournisseur pour chaque région, puis vous les différenciez en utilisant un alias de fournisseur, comme indiqué ci-dessous. Notez qu'un seul fournisseur, nommé "oci
", est défini, mais que la définition de fournisseur oci est saisie 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"
}
region
est requis pour le fournisseur OCI Terraform. Les arguments tenancy_ocid
, user_ocid
, private_key_path
et fingerprint
sont requis pour l'authentification de clé d'API. Vous pouvez fournir la valeur de region
et des clés d'authentification de clé d'API (tenancy_ocid
, user_ocid
, private_key_path
et fingerprint
) en tant que variables d'environnement ou dans des variables de configuration Terraform (comme indiqué dans 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
}
tenancy_ocid
, user_ocid
, private_key_path
et fingerprint
dans la définition de fournisseur.
Remarques :
L'autorisation de principal d'instance s'applique uniquement aux instances exécutées dans Oracle Cloud Infrastructure.region
est requis pour le fournisseur OCI Terraform et un argument auth
est requis pour l'autorisation de 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
}
Remarques :
Ce jeton expire 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.region
requiert un argument 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 Terraform NoSQL
Créez un fichier nommé "nosql.tf
" qui contient les ressources de configuration terraform NoSQL permettant de créer des tables ou des index NoSQL Database Cloud Service. Pour plus d'informations sur les sources de données et les ressources de base de données NoSQL, reportez-vous à oci_nosql_table.
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 : 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 les 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.
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
.
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Fournissez des valeurs pour les arguments region
, compartment_ocid
et config_file_profile
.
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
variables.tf
" et à affecter des valeurs aux variables d'entrée qu'il contient. Cliquez ici pour consulter la documentation Terraform afin de rechercher les arguments ou propriétés valides disponibles pour la base de données NoSQL. Dans l'exemple, la valeur par défaut des unités de lecture, d'écriture et de stockage de 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
}
A l'aide de 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

Lors de la création d'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 en cours d'exécution 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 d'Oracle ou modèle privé)
- Compartiment existant (Repérage de ressources)
Sous-étape 2.1 : Création de 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, telles 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éer 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 par Resource Manager, reportez-vous à Emplacement de stockage des configurations Terraform.
terraform.zip
. Le fichier terraform.zip
contient les fichiers suivants :
provider.tf
nosql.tf
terraform.tfvars
variables.tf
Remarques :
Dans ce tutoriel, nous utilisons les commandes de l'interface de ligne de commande OCI Resource Manager pour créer une pile. Vous pouvez effectuer la même tâche à l'aide de la console OCI Resource Manager.oci resource-manager stack create-from-git-provider
--compartment-id ocid1.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 ""
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
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 ""
--compartment-id
est l'OCID du compartiment dans lequel vous souhaitez créer la pile.--config-source
est le nom d'un fichier .zip contenant un ou plusieurs fichiers de configuration Terraform.- (Facultatif)
--variables
est le chemin du fichier indiquant les variables d'entrée de vos ressources.Le fournisseur Oracle Cloud Infrastructure Terraform exige des paramètres supplémentaires si vous exécutez Terraform en local (à moins d'utiliser des ID d'instance). Pour plus d'informations sur l'utilisation des variables dans Terraform, voir Variables d'entrée. Reportez-vous également à Configuration des variables d'entrée.
- (Facultatif)
--display-name
est le nom convivial de la nouvelle pile. - (Facultatif)
--description
est la description de la nouvelle pile. - (Facultatif)
--working-directory
est le fichier de configuration racine dans le répertoire. Si cette option n'est pas définie ou si la valeur de cet exemple est NULL, le service suppose que le fichier de niveau supérieur dans le répertoire est le fichier de configuration racine.
oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip
{
"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"
}
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
Etape 4 : Générer un plan d'exécution

Remarques :
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.oci resource-manager job create-plan-job
–-stack-id <stack_OCID>
--display-name "<friendly_name>"
oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
{
"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"
}
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Sous-étape 4.1 : Vérifier le plan d'exécution
oci resource-manager job get-job-logs
--job-id <plan_job_OCID>
oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq
...
{
"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"
},
...
demo
et demoKeyVal
.{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
Etape 5 : Exécuter un travail de candidature

- Pour définir un travail 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"
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"
{
"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"
}
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Remarques :
Si vous utilisez un environnement hôte dédié, définissez la variable d'environnement CLIENT_HOST_OVERRIDES pour indiquer 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
oci resource-manager job get
--job-id <job_OCID>
oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
{
"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"
}
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Sous-étape 5.2 : Afficher le journal d'un travail
oci resource-manager job get-job-logs-content
--job-id <job_OCID>
oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
...
{
"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"
},
...
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.
Déploiement de la table Oracle NoSQL à l'aide de Terraform et d'OCI Resource Manager