Distribuzione della tabella Oracle NoSQL mediante Terraform e OCI Resource Manager
È facile distribuire tabelle NDCS su OCI (Oracle Cloud Infrastructure) utilizzando Terraform e lo stack di Resource Manager. Useremo l'interfaccia CLI di OCI Resource Manager per distribuire tabelle NDCS su Oracle Cloud. Prima di procedere con questo articolo, si presume che tu sia a conoscenza di NoSQL Cloud Service e ne conosca le nozioni di base, insieme a Terraform.
Terraform utilizza i provider per l'interfaccia tra il motore Terraform e la piattaforma cloud supportata. Il provider Terraform di Oracle Cloud Infrastructure (OCI) è un componente che connette Terraform ai servizi OCI che si desidera gestire. Puoi utilizzare il provider Terraform OCI, tra cui Terraform Cloud e OCI Resource Manager.
OCI Resource Manager è un servizio gestito da Oracle basato su Terraform che utilizza i file di configurazione Terraform per automatizzare la distribuzione e le operazioni per le risorse OCI supportate dal provider Terraform OCI. Resource Manager consente di condividere e gestire le configurazioni dell'infrastruttura e i file di stato su più team e piattaforme.

-
Per creare risorse in OCI, dobbiamo configurare terraform. Creare i file di configurazione terraform di base per la definizione del provider terraform, le definizioni delle risorse NoSQL, l'autenticazione e le variabili di input.
-
Decidere dove memorizzare i file di configurazione del terrenoform. Puoi memorizzare questi file in origini diverse, ad esempio cartella locale o zip, bucket di storage degli oggetti e sistemi di controllo dell'origine, ad esempio GitHub o GitLab.
-
Eseguire i comandi CLI di Resource Manager per eseguire i task riportati di seguito.
-
Creare uno stack.
-
Generare ed esaminare il piano di esecuzione.
-
Eseguire il job Applica per eseguire il provisioning delle risorse NoSQL.
-
Rivedere i file di log, se necessario.
-
Nota: lavoreremo con l'interfaccia a riga di comando di Oracle Cloud Infrastructure (OCI) Resource Manager (CLI) ed eseguendo questi comandi in Cloud Shell utilizzando la console. Ciò significa che avrai bisogno di alcune informazioni sulla tua tenancy cloud e altri elementi come coppie di chiavi pubbliche o private a portata di mano. Se si desidera configurare l'interfaccia CLI OCI sul computer locale, consultare questa documentazione.
Questo articolo contiene i seguenti argomenti:
Prerequisiti
-
Conoscenza di base di Terraform. Leggi la breve introduzione qui.
-
Un account Oracle Cloud e una sottoscrizione a Oracle NoSQL Database Cloud Service. Se non disponi già di un account Oracle Cloud, puoi iniziare qui.
-
Provider Terraform OCI installato e configurato.
Passo 1: creare i file di configurazione Terraform per la tabella o l'indice NDCS

Passo 1.1: creare la configurazione del provider Terraform OCI
Creare un nuovo file denominato "provider.tf" che contenga la definizione del provider Terraform OCI e le definizioni delle variabili associate. Il provider Terraform OCI richiede SOLO l'argomento region.
Tuttavia, potrebbe essere necessario configurare argomenti aggiuntivi con credenziali di autenticazione per un account OCI in base al metodo di autenticazione. Il provider Terraform OCI supporta tre metodi di autenticazione:
-
Autenticazione chiave API
-
Autorizzazione principal istanza
-
Autenticazione token di sicurezza
L'argomento region specifica l'area geografica in cui vengono create le risorse del provider. Per indirizzare più aree in una singola configurazione, è sufficiente creare una definizione di provider per ogni area e quindi differenziarsi utilizzando un alias di provider, come mostrato nell'esempio riportato di seguito. Si noti che è definito un solo provider, denominato "oci", ma la definizione del provider oci viene immessa due volte, una volta per l'area us-phoenix-1 (con l'alias "phx") e una volta per l'area us-ashburn-1 (con l'alias "iad").
provider "oci" {
region = "us-phoenix-1"
alias = "phx"
}
provider "oci" {
region = "us-ashburn-1"
alias = "iad"
}
Nell'esempio riportato di seguito, è necessario un argomento region per il provider Terraform OCI. Per l'autenticazione della chiave API sono necessari gli argomenti tenancy_ocid, user_ocid, private_key_path e fingerprint. È possibile fornire il valore per le chiavi di autenticazione delle chiavi region e API (tenancy_ocid, user_ocid, private_key_path e fingerprint) come variabili di ambiente o all'interno delle variabili di configurazione Terraform (come indicato nel Passo 1.3: caricamento delle variabili di configurazione 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'autorizzazione del principal dell'istanza consente al provider di effettuare chiamate API da un'istanza di computazione OCI senza aver bisogno degli attributi tenancy_ocid, user_ocid, private_key_path e fingerprint nella definizione del provider.
Nota: l'autorizzazione del principal dell'istanza si applica solo alle istanze in esecuzione in Oracle Cloud Infrastructure.
Nell'esempio riportato di seguito, è necessario un argomento region per il provider Terraform OCI e un argomento auth per l'autorizzazione principal dell'istanza è richiesto. È possibile fornire il valore per l'argomento region come variabili di ambiente o all'interno delle variabili di configurazione Terraform (come indicato nel Passo 1.3: caricamento delle variabili di configurazione Terraform).
variable "region" {
}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
L'autenticazione del token di sicurezza consente di eseguire Terraform utilizzando un token generato con l'autenticazione basata su token per l'interfaccia CLI.
Nota: questo token scade dopo un'ora. Evitare di utilizzare questo metodo di autenticazione quando il provisioning delle risorse richiede più di un'ora. Per ulteriori informazioni, vedere Aggiornamento di un token.
Nell'esempio riportato di seguito, region è richiesto un argomento per il provider Terraform OCI. Gli argomenti auth e config_file_profile sono necessari per l'autenticazione del token di sicurezza.
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
auth = "SecurityToken"
config_file_profile = var.config_file_profile
region = var.region
}
Passo 1.2: creare la configurazione NoSQL Terraform
Creare un nuovo file denominato "nosql.tf" che contenga le risorse di configurazione NoSQL terraform per la creazione di tabelle o indici NoSQL Database Cloud Service. Per ulteriori informazioni sulle risorse e le origini dati del database NoSQL, vedere oci_nosql_table.
Nell'esempio riportato di seguito, vengono create 2 tabelle NoSQL. L'argomento compartment_ocid è obbligatorio per le risorse di database NoSQL quali tabelle e indici. È possibile fornire il valore per compartment_ocid come variabili di ambiente o all'interno di variabili di configurazione Terraform (come indicato nel Passo 1.3: caricamento delle variabili di configurazione 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
}
}
Passaggio 1.3: caricamento delle variabili di configurazione Terraform
Il passo successivo consiste nel creare un file denominato "terraform.tfvars" e fornire i valori per gli argomenti del provider Terraform OCI necessari in base al metodo di autenticazione.
Fornire i valori per le chiavi di accesso e segrete IAM (tenancy_ocid, user_ocid, private_key_path e fingerprint), region e gli argomenti compartment_ocid. Si dovrebbe già disporre di un utente IAM OCI con chiavi segrete e di accesso con autorizzazioni sufficienti su NoSQL Database Cloud Service. Recupera queste chiavi e le memorizza nel file.
Ad esempio:
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"
Fornire i valori per gli argomenti region e compartment_ocid.
Ad esempio:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Fornire i valori per gli argomenti region, compartment_ocid e config_file_profile.
Ad esempio:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"
Fase 1.4: dichiarazione delle variabili di input
L'ultimo passo è creare "variables.tf" e assegnare valori alle variabili di input in esso contenute. Fare clic qui per fare riferimento alla documentazione Terraform per verificare la presenza di argomenti o proprietà validi disponibili per NoSQL Database. Nell'esempio, il valore predefinito delle unità di lettura, scrittura e memorizzazione per la tabella NoSQL viene impostato rispettivamente su 10, 10 e 1.
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
}
Utilizzando Cloud Shell dalla console, abbiamo creato tutti i file di configurazione terraform necessari per la definizione del provider, le risorse del database NoSQL, i valori di autenticazione e le variabili di input.

Passo 2: Dove memorizzare le configurazioni Terraform

Quando si crea uno stack con Resource Manager, è possibile selezionare la configurazione Terraform dalle origini seguenti.
-
File .zip locale
-
cartella Locale
-
Bucket di storage degli oggetti
I contenuti più recenti del bucket vengono utilizzati automaticamente da qualsiasi job in esecuzione nello stack associato.
-
Sistemi di controllo del codice sorgente, come GitHub e GitLab
La versione più recente della configurazione viene utilizzata automaticamente da qualsiasi job in esecuzione nello stack associato.
-
Modello (configurazione Terraform predefinita da Oracle o modello privato)
-
Compartimento esistente (Ricerca automatica delle risorse)
Passo 2.1: Creare provider di origine configurazione per le configurazioni Terraform remote
È necessario creare un provider di configurazione di origine se si desidera utilizzare le configurazioni terraform remote ospitate in un sistema di controllo di origine, ad esempio GitHub e GitLab.
Per ulteriori informazioni su come creare provider di origine configurazione per le configurazioni Terraform remote, vedere Gestione dei provider di origine configurazione.
Passo 3: Creare uno stack da un file

Utilizzare il comando relativo alla posizione del file. Per le origini di configurazione Terraform supportate con Resource Manager, vedere Dove memorizzare le configurazioni Terraform.
Per questa esercitazione verrà creato uno stack utilizzando il metodo di autenticazione Principal dell'istanza da un file zip di configurazione terraform locale, terraform.zip. Il file terraform.zip contiene i file riportati di seguito.
-
provider.tf -
nosql.tf -
terraform.tfvars -
variables.tf
Nota: in questa esercitazione vengono utilizzati i comandi CLI di OCI Resource Manager per creare uno stack. È possibile eseguire lo stesso task utilizzando OCI Resource Manager Console.
Per creare uno stack da un file ospitato su un sistema di controllo del codice sorgente, ad esempio GitHub e 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 ""
Per creare uno stack da una configurazione Terraform in un bucket di storage degli oggetti.
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
Per creare uno stack da un file di configurazione caricato (.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 ""
Dove,
-
--compartment-idè l'OCID del compartimento in cui si desidera creare lo stack. -
--config-sourceè il nome di un file .zip contenente uno o più file di configurazione Terraform. -
(Opzionale)
--variablesè il percorso del file che specifica le variabili di input per le risorse.Il provider Terraform di Oracle Cloud Infrastructure richiede parametri aggiuntivi durante l'esecuzione locale di Terraform (a meno che non si utilizzino i principal delle istanze). Per ulteriori informazioni sull'uso delle variabili in Terraform, vedere Variabili di input. Vedere anche Configurazione delle variabili di input.
-
(Facoltativo)
--display-nameè il nome descrittivo del nuovo stack. -
(Facoltativo)
--descriptionè la descrizione del nuovo stack. -
(Opzionale)
--working-directoryè il file di configurazione root della directory. Se non è specificato, o se è nullo come in questo esempio, il servizio presume che il file di livello superiore nella directory sia il file di configurazione root.
Ad esempio:
oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip
Risposta di esempio:
{
"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"
}
Abbiamo creato uno stack dai file di configurazione terraform e generato un ID stack. Nel passo successivo, questo ID stack viene utilizzato per generare un piano di esecuzione per la distribuzione di tabelle NoSQL.
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
Passo 4: generare un piano di esecuzione

Nota: in questa esercitazione vengono utilizzati i comandi CLI di OCI Resource Manager per generare un piano di esecuzione. È possibile eseguire lo stesso task utilizzando OCI Resource Manager Console.
Per generare un piano di esecuzione, eseguire il comando seguente:
oci resource-manager job create-plan-job
--stack-id <*`stack_OCID`*>
--display-name "<*`friendly_name`*>"
Ad esempio:
oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
Risposta di esempio:
{
"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"
}
Abbiamo generato un piano di esecuzione da uno stack. Resource Manager crea un job con un ID univoco corrispondente a questo piano di esecuzione. Questo ID job del piano può essere utilizzato in un secondo momento per esaminare i dettagli del piano di esecuzione prima di eseguire l'operazione di applicazione per distribuire le risorse del database NoSQL nel cloud OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Passo 4.1: Esaminare il piano di esecuzione
Per rivedere un piano di esecuzione, eseguire il comando seguente:
oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>
Ad esempio:
oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq
Risposta di esempio:
...
{
"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"
},
...
Questo passo è molto importante poiché consente di verificare se il codice dello stack contiene errori di sintassi ed esattamente quante risorse OCI vengono aggiunte, aggiornate o eliminate. Nell'esercitazione vengono distribuite due tabelle NoSQL: demo e demoKeyVal.
{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
Passo 5: eseguire un job di applicazione

-
Per specificare un job del piano ("applicare" un piano di esecuzione), utilizzare
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" -
Per approvare automaticamente il job di applicazione (nessun job del piano specificato), utilizzare
AUTO_APPROVED:oci resource-manager job create-apply-job --stack-id <*`stack_OCID`*> --execution-plan-strategy AUTO_APPROVED --display-name "Example Apply Job"
Ad esempio:
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"
Risposta di esempio:
{
"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"
}
Abbiamo eseguito l'operazione di applicazione sul piano di esecuzione da uno stack. Resource Manager crea un job con un ID univoco per eseguire l'operazione di applicazione. Questo ID job di applicazione può essere utilizzato in un secondo momento per esaminare i log generati nell'ambito della distribuzione della tabella di database NoSQL nel cloud OCI.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Nota: se si utilizza un ambiente host dedicato, impostare la variabile di ambiente CLIENT_HOST_OVERRIDES per specificare l'endpoint personalizzato prima di eseguire il job.
Esempio:
export CLIENT_HOST_OVERRIDES=<oci_nosql.NosqlClient=https://ndcs.us-ashburn-1.oci.oc-test.com>
Fase 5.1: verifica dello stato del job
Per verificare lo stato di un job, eseguire il comando seguente:
oci resource-manager job get
--job-id <*`job_OCID`*>
Ad esempio:
oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Risposta di esempio:
{
"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"
}
È possibile controllare lo stato del job di candidatura per verificare se il job è SUCCESSO o NON RIUSCITO.
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Passaggio 5.2: visualizzare il log per un job
Per visualizzare il log per un job, eseguire il comando seguente:
oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>
Ad esempio:
oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Risposta di esempio:
...
{
"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"
},
...
Questo passo è molto importante in quanto conferma esattamente quante risorse OCI sono state aggiunte, aggiornate o eliminate. Nell'esercitazione sono state distribuite due tabelle NoSQL: demo e demoKeyVal.
{
...
"message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
...
}
Abbiamo trattato molti dettagli in questo tutorial. Abbiamo creato i file di configurazione terraform necessari per la distribuzione delle tabelle di database NoSQL nel cloud OCI, quindi abbiamo configurato la posizione di origine per questi file. Abbiamo quindi utilizzato l'interfaccia CLI di OCI Resource Manager per creare uno stack, generare un piano di esecuzione ed eseguire il job di applicazione nel piano di esecuzione.