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.

NoSQL-Datenbanktabellen mit Terraform bereitstellen

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

Schritt 1: Terraform-Konfigurationsdateien für NDCS-Tabelle oder -Index erstellen

OCI-Terraform-Providerkonfiguration 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:

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.

Terraform-Konfigurationsdateien in Cloud Shell erstellen

Schritt 2: Terraform-Konfigurationen speichern

Wo speichern Sie Ihre Terraform-Konfigurationsdateien

Wenn Sie einen Stack mit Resource Manager erstellen, können Sie die Terraform-Konfiguration aus den folgenden Quellen auswählen.

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

Stack aus einer Datei erstellen

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:

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-id ist die OCID des Compartments, in dem Sie den Stack erstellen möchten.

  • --config-source ist der Name einer ZIP-Datei, die eine oder mehrere Terraform-Konfigurationsdateien enthält.

  • (Optional) --variables ist 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-name ist der benutzerfreundliche Name für den neuen Stack.

  • (Optional) --description ist die Beschreibung für den neuen Stack.

  • (Optional) --working-directory ist 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

Ausführungsplan generieren und prüfen

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

Job "Anwenden" ausführen, um Ressourcen bereitzustellen

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.