Oracle NoSQL-Tabelle mit Terraform und OCI Resource Manager bereitstellen
Es ist einfach, NDCS-Tabellen auf OCI (Oracle Cloud Infrastructure) mit Terraform und Resource Manager-Stack bereitzustellen. Wir verwenden die OCI Resource Manager-CLI, um NDCS-Tabellen in Oracle Cloud bereitzustellen. Bevor wir mit diesem Artikel fortfahren, wird davon ausgegangen, dass Sie NoSQL Cloud Service kennen und dessen Grundlagen sowie Terraform kennen.
Terraform verwendet Provider als Schnittstelle zwischen der Terraform-Engine und der unterstützten Cloud-Plattform. Der Oracle Cloud Infrastructure-(OCI-)Terraform-Provider ist eine Komponente, die Terraform mit den zu verwaltenden OCI-Services verbindet. Sie können den OCI-Terraform-Provider verwenden, einschließlich Terraform Cloud und OCI Resource Manager.
Der OCI-Resource Manager ist ein von Oracle verwalteter Service, der auf Terraform basiert und Terraform-Konfigurationsdateien verwendet, um das Deployment und die Vorgänge für die OCI-Ressourcen zu automatisieren, die vom OCI-Terraform-Provider unterstützt werden. Mit Resource Manager können Sie Infrastrukturkonfigurationen und Statusdateien über mehrere Teams und Plattformen hinweg gemeinsam verwenden und verwalten.

-
Um Ressourcen in OCI zu erstellen, müssen wir terraform konfigurieren. Erstellen Sie die grundlegenden Terraform-Konfigurationsdateien für Terraform-Providerdefinition, NoSQL-Ressourcendefinitionen, Authentifizierung und Eingabevariablen.
-
Legen Sie fest, wo die Terraform-Konfigurationsdateien gespeichert werden sollen. Sie können diese Dateien in verschiedenen Quellen speichern, z.B. in lokalen Ordnern oder ZIP-Dateien, Object Storage-Buckets und Quellkontrollsystemen, wie GitHub oder GitLab.
-
Führen Sie die Resource Manager-CLI-Befehle aus, um die folgenden Aufgaben auszuführen:
-
Stack erstellen.
-
Generieren Sie den Ausführungsplan, und prüfen Sie ihn.
-
Führen Sie den Job "Anwenden" aus, um NoSQL-Ressourcen bereitzustellen.
-
Prüfen Sie die Protokolldateien nach Bedarf.
-
Hinweis: Wir arbeiten mit der Oracle Cloud Infrastructure-(OCI-)Resource Manager-Befehlszeilenschnittstelle (CLI) und führen diese Befehle in der Cloud Shell mit der Konsole aus. Das bedeutet, dass Sie einige Informationen zu Ihrem Cloud-Mandanten und anderen Elementen wie Public-Key- oder Private-Key-Paaren benötigen. Wenn Sie die OCI-CLI auf Ihrem lokalen Rechner konfigurieren möchten, lesen Sie diese Dokumentation.
Dieser Artikel enthält die folgenden Themen:
Voraussetzungen
-
Grundlegendes zu Terraform. Lesen Sie die kurze Einführung hier.
-
Ein Oracle Cloud-Account und ein Abonnement für Oracle NoSQL Database Cloud Service. Wenn Sie noch keinen Oracle Cloud-Account besitzen, können Sie hier beginnen.
-
OCI-Terraform-Provider installiert und konfiguriert.
Schritt 1: Terraform-Konfigurationsdateien für NDCS-Tabelle oder -Index erstellen

Unterschritt 1.1: OCI-Terraform-Providerkonfiguration erstellen
Erstellen Sie eine neue Datei namens "provider.tf", die die OCI-Terraform-Providerdefinition sowie zugehörige Variablendefinitionen enthält. Der OCI-Terraform-Provider erfordert NUR das Argument region.
Möglicherweise müssen Sie jedoch zusätzliche Argumente mit Authentifizierungszugangsdaten für einen OCI-Account basierend auf der Authentifizierungsmethode konfigurieren. Der OCI-Terraform-Provider unterstützt drei Authentifizierungsmethoden:
-
API-Schlüsselauthentifizierung
-
Instanz-Principal-Autorisierung
-
Sicherheitstokenauthentifizierung
Das Argument region gibt die geografische Region an, in dem die Providerressourcen erstellt werden. Um mehrere Regionen in einer einzelnen Konfiguration zu zielen, erstellen Sie einfach eine Providerdefinition für jede Region und differenzieren sie dann mithilfe eines Provideralias, wie im folgenden Beispiel dargestellt. Beachten Sie, dass nur ein Provider mit dem Namen "oci" definiert ist und die Providerdefinition OCI zweimal eingegeben wird, einmal für die Region us-phoenix-1 (mit dem Alias "phx") und einmal für die Region us-ashburn-1 (mit dem Alias "iad").
provider "oci" {
region = "us-phoenix-1"
alias = "phx"
}
provider "oci" {
region = "us-ashburn-1"
alias = "iad"
}
Im folgenden Beispiel ist ein region-Argument für den OCI-Terraform-Provider erforderlich. Für die API-Schlüsselauthentifizierung sind die Argumente tenancy_ocid, user_ocid, private_key_path und fingerprint erforderlich. Sie können den Wert für region und API-Schlüsselauthentifizierungsschlüssel (tenancy_ocid, user_ocid, private_key_path und fingerprint) als Umgebungsvariablen oder in Terraform-Konfigurationsvariablen angeben (wie in Unterschritt 1.3: Terraform-Konfigurationsvariablen laden beschrieben).
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
}
Die Instanz-Principal-Autorisierung ermöglicht es dem Provider, API-Aufrufe aus einer OCI-Compute-Instanz ohne die Attribute tenancy_ocid, user_ocid, private_key_path und fingerprint in der Providerdefinition auszuführen.
Hinweis: Die Instance-Principal-Autorisierung kann nur für Instanzen angewendet werden, die in Oracle Cloud Infrastructure ausgeführt werden.
Im folgenden Beispiel ist ein Argument region für den OCI-Terraform-Provider erforderlich, und ein Argument auth ist für die Instanz-Principal-Autorisierung erforderlich. Sie können den Wert für das Argument region als Umgebungsvariablen oder innerhalb von Terraform-Konfigurationsvariablen angeben (wie unter Unterschritt 1.3: Terraform-Konfigurationsvariablen laden beschrieben).
variable "region" {
}
provider "oci" {
auth = "InstancePrincipal"
region = var.region
}
Die Sicherheitstokenauthentifizierung ermöglicht die Ausführung von Terraform mit einem Token, das mit dertokenbasierten Authentifizierung für die CLI generiert wurde.
Hinweis: Dieses Token läuft nach einer Stunde aus. Verwenden Sie diese Authentifizierungsmethode nicht, wenn das Provisioning von Ressourcen länger als eine Stunde dauert. Weitere Informationen finden Sie unter Token aktualisieren.
Im folgenden Beispiel ist region ein Argument für den OCI-Terraform-Provider erforderlich. Die Argumente auth und config_file_profile sind für die Sicherheitstokenauthentifizierung erforderlich.
variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
auth = "SecurityToken"
config_file_profile = var.config_file_profile
region = var.region
}
Unterschritt 1.2: NoSQL-Terraform-Konfiguration erstellen
Erstellen Sie eine neue Datei namens "nosql.tf", die NoSQL-Terraform-Konfigurationsressourcen zum Erstellen von NoSQL Database Cloud Service-Tabellen oder -Indizes enthält. Weitere Informationen zu den NoSQL-Datenbankressourcen und Datenquellen finden Sie unter oci_nosql_table.
Im folgenden Beispiel werden 2 NoSQL-Tabellen erstellt. Das Argument compartment_ocid ist für NoSQL-Datenbankressourcen wie Tabellen und Indizes erforderlich. Sie können den Wert für compartment_ocid als Umgebungsvariablen oder innerhalb von Terraform-Konfigurationsvariablen angeben (wie unter Unterschritt 1.3: Terraform-Konfigurationsvariablen laden beschrieben).
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
}
}
Unterschritt 1.3: Terraform-Konfigurationsvariablen laden
Im nächsten Schritt erstellen Sie eine Datei mit dem Namen "terraform.tfvars" und geben Werte für die erforderlichen OCI-Terraform-Providerargumente basierend auf der Authentifizierungsmethode an.
Geben Sie Werte für die IAM-Zugriffs- und Secret Keys (tenancy_ocid, user_ocid, private_key_path und fingerprint), region und compartment_ocid-Argumente an. Sie sollten bereits einen OCI-IAM-Benutzer mit Secret und Zugriffsschlüsseln mit ausreichenden Berechtigungen für NoSQL Database Cloud Service haben. Holen Sie sich diese Schlüssel und speichern Sie sie in der Datei.
Beispiel:
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"
Geben Sie Werte für die Argumente region und compartment_ocid an.
Beispiel:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
Geben Sie Werte für die Argumente region, compartment_ocid und config_file_profile an.
Beispiel:
region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"
Unterschritt 1.4: Eingabevariablen deklarieren
Der letzte Schritt besteht darin, "variables.tf" zu erstellen und den darin enthaltenen Eingabevariablen Werte zuzuweisen. Klicken Sie hier, um die Terraform-Dokumentation zu lesen und zu prüfen, ob die gültigen Argumente oder Eigenschaften für NoSQL Database verfügbar sind. Im Beispiel wird der Standardwert der Lese-, Schreib- und Speichereinheiten für die NoSQL-Tabelle auf 10, 10 und 1 gesetzt.
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
}
Mit Cloud Shell aus der Konsole haben wir alle erforderlichen Terraform-Konfigurationsdateien für Provider-Definition, NoSQL-Datenbankressourcen, Authentifizierungswerte und Eingabevariablen erstellt.

Schritt 2: Terraform-Konfigurationen speichern

Wenn Sie einen Stack mit Resource Manager erstellen, können Sie die Terraform-Konfiguration aus den folgenden Quellen auswählen.
-
Lokale ZIP-Datei
-
Ordner Lokal
-
Objektspeicher-Bucket
Der neueste Inhalt des Buckets wird automatisch von jedem Job verwendet, der auf dem zugehörigen Stack ausgeführt wird.
-
Quellcode-Kontrollsysteme wie GitHub und GitLab
Die neueste Version Ihrer Konfiguration wird automatisch von jedem Job verwendet, der auf dem zugehörigen Stack ausgeführt wird.
-
Vorlage (vorgefertigte Terraform-Konfiguration von Oracle oder eine private Vorlage)
-
Vorhandenes Compartment (Ressourcen-Discovery)
Unterschritt 2.1: Konfigurationsquellenprovider für Remote-Terraform-Konfigurationen erstellen
Sie müssen einen Quellkonfigurationsprovider erstellen, falls Sie die Remote-Terraform-Konfigurationen verwenden möchten, die auf einem Quellkontrollsystem wie GitHub und GitLab gehostet werden.
Weitere Informationen zum Erstellen von Konfigurationsquellenprovidern für Remote-Terraform-Konfigurationen finden Sie unter Konfigurationsquellenprovider verwalten.
Schritt 3: Erstellen eines Stacks aus einer Datei

Verwenden Sie den Ihrem Dateispeicherort entsprechenden Befehl. Informationen zu mit Resource Manager unterstützten Terraform-Konfigurationsquellen finden Sie unter Terraform-Konfigurationen speichern.
In diesem Tutorial erstellen wir einen Stack mit der Instanz-Principal-Authentifizierungsmethode aus einer lokalen Terraform-Konfigurations-ZIP-Datei, terraform.zip. Die Datei terraform.zip enthält die folgenden Dateien:
-
provider.tf -
nosql.tf -
terraform.tfvars -
variables.tf
Hinweis: In diesem Tutorial verwenden wir OCI Resource Manager-CLI-Befehle, um einen Stack zu erstellen. Sie können dieselbe Aufgabe mit der OCI Resource Manager-Konsole ausführen.
So erstellen Sie einen Stack aus der Datei, die auf einem Quellcode-Kontrollsystem gehostet wird, wie GitHub und 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 ""
So erstellen Sie einen Stack aus einer Terraform-Konfiguration in einem Objektspeicher-Bucket.
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
So erstellen Sie einen Stack aus einer hochgeladenen Konfigurationsdatei (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 ""
Wobei
-
--compartment-idist die OCID des Compartments, in dem Sie den Stack erstellen möchten. -
--config-sourceist der Name einer ZIP-Datei, die eine oder mehrere Terraform-Konfigurationsdateien enthält. -
(Optional)
--variablesist der Pfad zu dieser Datei, in der Eingabevariablen für Ihre Ressourcen angegeben werden.Der Oracle Cloud Infrastructure-Terraform-Provider erfordert zusätzliche Parameter, wenn Terraform lokal ausgeführt wird (es sei denn, Sie verwenden Instanz-Principals). Weitere Informationen zur Verwendung von Variablen in Terraform finden Sie unter Eingabevariablen. Siehe auch Konfiguration von Eingabevariablen.
-
(Optional)
--display-nameist der benutzerfreundliche Name für den neuen Stack. -
(Optional)
--descriptionist die Beschreibung für den neuen Stack. -
(Optional)
--working-directoryist die Root-Konfigurationsdatei im Verzeichnis. Wenn dieser Wert nicht angegeben oder wie in diesem Beispiel null ist, geht der Service davon aus, dass die Datei der obersten Ebene im Verzeichnis die Root-Konfigurationsdatei ist.
Beispiel:
oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip
Beispielantwort:
{
"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"
}
Wir haben einen Stack aus den terraform-Konfigurationsdateien erstellt und eine Stack-ID generiert. Im nächsten Schritt wird mit dieser Stack-ID ein Ausführungsplan für das Deployment von NoSQL-Tabellen generiert.
"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"
4. Schritt: Ausführungsplan generieren

Hinweis: In diesem Tutorial verwenden wir OCI Resource Manager-CLI-Befehle, um einen Ausführungsplan zu generieren. Sie können dieselbe Aufgabe mit der OCI Resource Manager-Konsole ausführen.
Um einen Ausführungsplan zu generieren, führen Sie folgenden Befehl aus:
oci resource-manager job create-plan-job
--stack-id <*`stack_OCID`*>
--display-name "<*`friendly_name`*>"
Beispiel:
oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq
Beispielantwort:
{
"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"
}
Wir haben einen Ausführungsplan aus einem Stack generiert. Der Resource Manager erstellt einen Job mit einer eindeutigen ID, die diesem Ausführungsplan entspricht. Diese Planjob-ID kann später verwendet werden, um die Ausführungsplandetails zu prüfen, bevor der Apply-Vorgang ausgeführt wird, um die NoSQL-Datenbankressourcen in der OCI-Cloud bereitzustellen.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
"operation": "PLAN"
...
}
Unterschritt 4.1: Ausführungsplan prüfen
Um einen Ausführungsplan zu prüfen, führen Sie folgenden Befehl aus:
oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>
Beispiel:
oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq
Beispielantwort:
...
{
"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"
},
...
Dieser Schritt ist sehr wichtig, da er prüft, ob der Stackcode Syntaxfehler enthält und wie viele OCI-Ressourcen hinzugefügt, aktualisiert oder gelöscht werden. Im Tutorial stellen wir zwei NoSQL-Tabellen bereit: demo und demoKeyVal.
{
...
"message": "Plan: 2 to add, 0 to change, 0 to destroy.",
...
}
5. Schritt: Apply-Job ausführen

-
Um einen "Planen"-Job anzugeben (einen "Anwenden"-Plan für einen Ausführungsplan auszuführen), verwenden Sie
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" -
Um den Job "Anwenden" automatisch zu genehmigen (kein "Planen"-Job angegeben), verwenden Sie
AUTO_APPROVED:oci resource-manager job create-apply-job --stack-id <*`stack_OCID`*> --execution-plan-strategy AUTO_APPROVED --display-name "Example Apply Job"
Beispiel:
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"
Beispielantwort:
{
"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"
}
Der Apply-Vorgang für den Ausführungsplan wurde über einen Stack ausgeführt. Der Resource Manager erstellt einen Job mit einer eindeutigen ID, um den Apply-Vorgang auszuführen. Diese Apply-Job-ID kann später verwendet werden, um die Logs zu prüfen, die im Rahmen des NoSQL Database-Tabellen-Deployments in OCI Cloud generiert wurden.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
"operation": "APPLY"
...
}
Hinweis: Wenn Sie eine dedizierte Hostumgebung verwenden, legen Sie die Umgebungsvariable CLIENT_HOST_OVERRIDES fest, um den benutzerdefinierten Endpunkt anzugeben, bevor Sie den Job ausführen.
Beispiel:
export CLIENT_HOST_OVERRIDES=<oci_nosql.NosqlClient=https://ndcs.us-ashburn-1.oci.oc-test.com>
Unterschritt 5.1: Jobstatus prüfen
Um den Status eines Jobs zu prüfen, führen Sie den folgenden Befehl aus:
oci resource-manager job get
--job-id <*`job_OCID`*>
Beispiel:
oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Beispielantwort:
{
"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"
}
Sie können den Status Ihres Bewerbungsjobs prüfen, um zu prüfen, ob der Job ERFOLGREICH oder FEHLGESCHLAGEN ist.
{
...
"lifecycle-state": "SUCCEEDED",
...
}
Unterschritt 5.2: Log für einen Job anzeigen
Um das Log für einen Job anzuzeigen, führen Sie den folgenden Befehl aus:
oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>
Beispiel:
oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq
Beispielantwort:
...
{
"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"
},
...
Dieser Schritt ist sehr wichtig, da er genau bestätigt, wie viele OCI-Ressourcen hinzugefügt, aktualisiert oder zerstört wurden. Im Tutorial haben wir zwei NoSQL-Tabellen erfolgreich bereitgestellt: demo und demoKeyVal.
{
...
"message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
...
}
In diesem Tutorial haben wir viele Details behandelt. Wir haben Terraform-Konfigurationsdateien erstellt, die für das Deployment von NoSQL-Datenbanktabellen in der OCI-Cloud erforderlich sind, und dann den Quellspeicherort für diese Dateien konfiguriert. Anschließend haben wir mit der OCI Resource Manager-CLI einen Stack erstellt, einen Ausführungsplan generiert und den Apply-Job im Ausführungsplan ausgeführt.