Despliegue de Tablas de Oracle NoSQL mediante Terraform y OCI Resource Manager
Es fácil desplegar tablas de NDCS en OCI (Oracle Cloud Infrastructure) mediante la pila de Terraform y Resource Manager. Vamos a utilizar la CLI de OCI Resource Manager para desplegar tablas de NDCS en Oracle Cloud. Antes de continuar con este artículo, se supone que conoce NoSQL Cloud Service y conoce sus conceptos básicos, junto con Terraform.
Terraform utiliza proveedores para interactuar entre el motor de Terraform y la plataforma en la nube soportada. El proveedor de Terraform de Oracle Cloud Infrastructure (OCI) es un componente que conecta Terraform a los servicios de OCI que desea gestionar. Puede utilizar el proveedor de Terraform de OCI, incluidos Terraform Cloud y el gestor de recursos de OCI.
Resource Manager de OCI es un servicio gestionado por Oracle basado en Terraform que utiliza archivos de configuración de Terraform para automatizar el despliegue y las operaciones de los recursos de OCI soportados por el proveedor de Terraform de OCI. Resource Manager le permite compartir y gestionar configuraciones y archivos de estado de infraestructura entre varios equipos y plataformas.

-
Para crear recursos en OCI, necesitamos configurar terraform. Cree los archivos de configuración básicos de terraform para la definición del proveedor de terraform, las definiciones de recursos NoSQL, la autenticación y las variables de entrada.
-
Decida dónde almacenar los archivos de configuración de terraform. Puede almacenar estos archivos en diferentes orígenes, como carpetas o zip locales, cubos de Object Storage y sistemas de control de origen, como GitHub o GitLab.
-
Ejecute los comandos de la CLI del gestor de recursos para realizar las siguientes tareas:
-
Crear una pila.
-
Generación y revisión del plan de ejecución.
-
Ejecute el trabajo Aplicar para aprovisionar recursos NoSQL.
-
Revise los archivos log, según sea necesario.
-
Nota: Vamos a trabajar con la interfaz de línea de comandos (CLI) de Oracle Cloud Infrastructure (OCI) Resource Manager y a ejecutar estos comandos en Cloud Shell mediante la consola. Esto significa que necesitará cierta información sobre su arrendamiento en la nube y otros elementos, como pares de claves públicas o privadas, útiles. Si desea configurar la CLI de OCI en su máquina local, consulte esta documentación.
En este artículo se incluyen los siguientes temas:
Requisitos
-
Conocimientos básicos de Terraform. Lea la breve introducción aquí.
-
Una cuenta de Oracle Cloud y una suscripción a Oracle NoSQL Database Cloud Service. Si aún no tiene una cuenta de Oracle Cloud, puede empezar aquí.
-
Proveedor de Terraform de OCI instalado y configurado.
Paso 1: Crear archivos de configuración de Terraform para índice o tabla de NDCS

Paso 1.1: Crear configuración de proveedor de Terraform de OCI
Cree un nuevo archivo denominado "provider.tf" que contenga la definición del proveedor de Terraform de OCI y las definiciones de variables asociadas. El proveedor de Terraform de OCI solo necesita el argumento region.
Sin embargo, puede que tenga que configurar argumentos adicionales con credenciales de autenticación para una cuenta de OCI según el método de autenticación. El proveedor de Terraform de OCI soporta tres métodos para la autenticación:
-
Autenticación de clave de API
-
Autorización de principal de instancia
-
Autenticación de token de seguridad
El argumento region especifica las regiones geográficas en las que se crean los recursos del proveedor. Para dirigirse en varias regiones en una única configuración, solo tiene que crear una definición de proveedor para cada región y, a continuación, diferenciarlas mediante un alias del proveedor, como se muestra en el siguiente ejemplo. Ten en cuenta que solo se ha definido un proveedor, denominado "oci", y la definición de proveedor de oci se ha introducido dos veces, una vez para la región us-phoenix-1 (con el alias "phx") y una vez para la región us-ashburn-1 (con el alias "iad").
provider "oci" {
region = "us-phoenix-1"
alias = "phx"
}
provider "oci" {
region = "us-ashburn-1"
alias = "iad"
}
En el siguiente ejemplo, se necesita un argumento region para el proveedor de Terraform de OCI. Los argumentos tenancy_ocid, user_ocid, private_key_path y fingerprint son necesarios para la autenticación de clave de API. Puede proporcionar el valor para region y las claves de autenticación de clave de API (tenancy_ocid, user_ocid, private_key_path y fingerprint) como variables de entorno o dentro de las variables de configuración de Terraform (como se menciona en el subpaso 1.3: carga de variables de configuración de 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
}
La autorización de principal de instancia permite al proveedor realizar llamadas de API desde una instancia informática de OCI sin necesidad de los atributos tenancy_ocid, user_ocid, private_key_path y fingerprint en la definición de su proveedor.
Nota: La autorización de principal de instancia solo se aplica a instancias que en Oracle Cloud Infrastructure se ejecutan.
En el siguiente ejemplo, se necesita un argumento region para el proveedor de Terraform de OCI y un argumento auth para la autorización de principal de instancia. Puede proporcionar el valor para el argumento region como variables de entorno o dentro de variables de configuración de Terraform (como se menciona en el subpaso 1.3: carga de variables de configuración de Terraform).
variable "region" {
}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
La autenticación de token de seguridad le permite ejecutar Terraform mediante un token generado con la autenticación basada en tokens para la CLI.
Nota: Este token caduca después de una hora. Evite utilizar este método de autenticación cuando el aprovisionamiento de recursos tarde más de una hora. Consulte Refrescamiento de un token para obtener más información.
En el ejemplo siguiente, region se necesita un argumento para el proveedor de Terraform de OCI. Los argumentos auth y config_file_profile son necesarios para la autenticación del token de seguridad.
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
auth = "SecurityToken"
config_file_profile = var.config_file_profile
region = var.region
}
Paso 1.2: Crear la configuración de Terraform de NoSQL
Cree un nuevo archivo denominado "nosql.tf" que contenga los recursos de configuración de terraform de NoSQL para crear tablas o índices de NoSQL Database Cloud Service. Para obtener más información sobre los recursos y orígenes de datos de la base de datos NoSQL, consulte oci_nosql_table.
En el siguiente ejemplo, estamos creando 2 tablas NoSQL. Se necesita el argumento compartment_ocid para los recursos de NoSQL Database, como tablas e índices. Puede proporcionar el valor para compartment_ocid como variables de entorno o dentro de las variables de configuración de Terraform (como se menciona en el subpaso 1.3: carga de variables de configuración de 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
}
}
Subpaso 1.3: Carga de variables de configuración de Terraform
El siguiente paso consiste en crear un archivo denominado "terraform.tfvars" y proporcionar valores para los argumentos del proveedor de Terraform de OCI necesarios basados en el método de autenticación.
Proporcione valores para sus claves secretas y de acceso a IAM (tenancy_ocid, user_ocid, private_key_path y fingerprint), region y argumentos compartment_ocid. Ya debería tener un usuario de OCI IAM con claves secretas y de acceso que tengan permisos suficientes en NoSQL Database Cloud Service. Obtener esas claves y almacenarlas en el archivo.
Por ejemplo:
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"
Proporcione valores para los argumentos region y compartment_ocid.
Por ejemplo:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Proporcione valores para los argumentos region, compartment_ocid y config_file_profile.
Por ejemplo:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"
Paso 1.4: Declaración de variables de entrada
El último paso es crear "variables.tf" y asignar valores a las variables de entrada en él. Haga clic aquí para consultar la documentación de Terraform y comprobar si hay argumentos o propiedades válidos disponibles para NoSQL Database. En el ejemplo, el valor por defecto de las unidades de lectura, escritura y almacenamiento para la tabla NoSQL se define en 10, 10 y 1, respectivamente.
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
}
Con Cloud Shell desde la consola, hemos creado todos los archivos de configuración de terraform necesarios para la definición del proveedor, los recursos de base de datos NoSQL, los valores de autenticación y las variables de entrada.

Paso 2: Dónde almacenar sus configuraciones de Terraform

Al crear una pila con Resource Manager, puede seleccionar la configuración de Terraform de los siguientes orígenes.
-
Archivo .zip local
-
Carpeta Local
-
Bucket de Object Storage
Los contenidos más recientes del cubo los utiliza automáticamente cualquier trabajo que se ejecute en la pila asociada.
-
Sistemas de control de código fuente, como GitHub y GitLab
La última versión de la configuración la utiliza automáticamente cualquier trabajo que se ejecute en la pila asociada.
-
Plantilla (configuración de Terraform predefinida de Oracle o una plantilla privada)
-
Compartimento existente (Detección de recursos)
Paso 2.1: Crear proveedores de origen de configuración para configuraciones de Terraform remotas
Debe crear un proveedor de configuración de origen en caso de que desee utilizar las configuraciones remotas de terraform que se alojan en un sistema de control de origen, como GitHub y GitLab.
Para obtener más información sobre cómo crear proveedores de origen de configuración para configuraciones remotas de Terraform, consulte Gestión de proveedores de origen de configuración.
Paso 3: Creación de una pila a partir de un archivo

Utilice el comando relacionado con la ubicación del archivo. Para conocer los orígenes de configuración de Terraform soportados con Resource Manager, consulte Dónde almacenar las configuraciones de Terraform.
Para este tutorial, vamos a crear una pila con el método de autenticación de principal de instancia a partir de un archivo zip de configuración de terraform local, terraform.zip. El archivo terraform.zip contiene los siguientes archivos:
-
provider.tf -
nosql.tf -
terraform.tfvars -
variables.tf
Nota: En este tutorial, estamos utilizando los comandos de la CLI de OCI Resource Manager para crear una pila. Puede realizar la misma tarea mediante la consola de OCI Resource Manager.
Para crear una pila a partir de un archivo alojado en un sistema del control del código fuente, como GitHub y 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 ""
Para crear una pila a partir de una configuración de Terraform en un cubo de 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
Para crear una pila de un archivo (.zip) de configuración cargado
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 ""
Donde,
-
--compartment-ides el OCID del compartimento en el que desea crear la pila. -
--config-sourcees el nombre de un archivo .zip que contiene uno o más archivos de configuración de Terraform. -
(Opcional)
--variableses la ruta al archivo donde se especifican las variables de entrada para sus recursos.El proveedor de Terraform de Oracle Cloud Infrastructure requiere parámetros adicionales al ejecutar Terraform de forma local (a menos que esté utilizando principales de instancia). Para obtener más información sobre el uso de variables en Terraform, consulte Variables de entrada. Consulte también Configuración de variables de entrada.
-
(Opcional)
--display-namees el nombre fácil de Recordar de la nueva pila. -
(Opcional)
--descriptiones la descripción de la nueva pila. -
(Opcional)
--working-directoryes el archivo del directorio de configuración raíz. Si no se especifica, o si es nulo, como en este ejemplo, el servicio asume que el archivo de nivel superior del directorio es el archivo de configuración raíz.
Por ejemplo:
oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip
Ejemplo de respuesta:
{
"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"
}
Hemos creado una pila a partir de los archivos de configuración terraform y hemos generado un ID de pila. En el siguiente paso, este identificador de pila se utiliza para generar un plan de ejecución para el despliegue de tablas NoSQL.
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
Paso 4: Generar un Plan de Ejecución

Nota: En este tutorial, estamos utilizando los comandos de la CLI de OCI Resource Manager para generar un plan de ejecución. Puede realizar la misma tarea mediante la consola de OCI Resource Manager.
Para generar un Plan de Ejecución, ejecute el siguiente comando:
oci resource-manager job create-plan-job
--stack-id <*`stack_OCID`*>
--display-name "<*`friendly_name`*>"
Por ejemplo:
oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
Ejemplo de respuesta:
{
"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"
}
Hemos generado un plan de ejecución a partir de una pila. El gestor de recursos crea un trabajo con un ID único correspondiente a este plan de ejecución. Este ID de trabajo de plan se puede utilizar posteriormente para revisar los detalles del plan de ejecución antes de ejecutar la operación de aplicación para desplegar los recursos de base de datos NoSQL en la nube de OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Paso 4.1: Revisar el Plan de Ejecución
Para revisar un plan a ejecutar, ejecute el siguiente comando:
oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>
Por ejemplo:
oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq
Ejemplo de respuesta:
...
{
"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"
},
...
Este paso es muy importante, ya que valida si el código de pila contiene errores de sintaxis y cuántos recursos de OCI se están agregando, actualizando o destruyendo. En el tutorial, estamos desplegando dos tablas NoSQL: demo y demoKeyVal.
{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
Paso 5: Ejecutar un trabajo de aplicación

-
Para especificar un trabajo (aplicar) un plan de ejecución, utilice
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" -
Para aprobar automáticamente el trabajo de aplicación (no se ha especificado ningún trabajo de planificación), utilice
AUTO_APPROVED:oci resource-manager job create-apply-job --stack-id <*`stack_OCID`*> --execution-plan-strategy AUTO_APPROVED --display-name "Example Apply Job"
Por ejemplo:
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"
Ejemplo de respuesta:
{
"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"
}
Hemos ejecutado la operación de aplicación en el plan de ejecución desde una pila. El gestor de recursos crea un trabajo con un ID único para ejecutar la operación de aplicación. Este ID de trabajo de aplicación se puede utilizar posteriormente para revisar los logs generados como parte del despliegue de la tabla de base de datos NoSQL en la nube de OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Nota: Si utiliza un entorno de host dedicado, defina la variable de entorno CLIENT_HOST_OVERRIDES para especificar el punto final personalizado antes de ejecutar el trabajo.
Por ejemplo:
export CLIENT_HOST_OVERRIDES=<oci_nosql.NosqlClient=https://ndcs.us-ashburn-1.oci.oc-test.com>
Paso 5.1: Verificar el estado del trabajo
Para verificar el estado de un trabajo, ejecute el siguiente comando:
oci resource-manager job get
--job-id <*`job_OCID`*>
Por ejemplo:
oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Ejemplo de respuesta:
{
"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"
}
Puede comprobar el estado de su trabajo de aplicación para verificar si el trabajo es correcto o fallido.
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Paso 5.2: Ver el log de un trabajo
Para ver el log de un trabajo, ejecute el siguiente comando:
oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>
Por ejemplo:
oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Ejemplo de respuesta:
...
{
"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"
},
...
Este paso es muy importante, ya que confirma exactamente cuántos recursos de OCI se agregaron, actualizaron o destruyeron. En el tutorial, hemos desplegado correctamente dos tablas NoSQL: demo y demoKeyVal.
{
...
"message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
...
}
Hemos cubierto muchos detalles en este tutorial. Hemos creado los archivos de configuración terraform necesarios para el despliegue de tablas de base de datos NoSQL en la nube de OCI y, a continuación, hemos configurado la ubicación de origen para estos archivos. A continuación, utilizamos la CLI de OCI Resource Manager para crear una pila, generar un plan de ejecución y ejecutar un trabajo de aplicación en el plan de ejecución.