Oracle NoSQL-Tabelle mit Terraform und OCI Resource Manager bereitstellen

Das Deployment von NDCS-Tabellen auf OCI (Oracle Cloud Infrastructure) mit Terraform und Resource Manager-Stack ist einfach. 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 die zugehörigen 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 basierend auf Terraform, der Terraform-Konfigurationsdateien verwendet, um Deployment und 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

  • 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, wie lokalen Ordner oder ZIP, Object Storage-Bucket und Quellkontrollsysteme, wie GitHub oder GitLab.
  • Führen Sie die Resource Manager-CLI-Befehle aus, um die folgenden Aufgaben auszuführen:
    • Stack erstellen.
    • Generieren und prüfen Sie den Ausführungsplan.
    • Führen Sie den Job "Anwenden" aus, um NoSQL-Ressourcen bereitzustellen.
    • Prüfen Sie die Logdateien, falls erforderlich.

Hinweis:

Wir arbeiten mit der Befehlszeilenschnittstelle (CLI) von Oracle Cloud Infrastructure (OCI) Resource Manager zusammen 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- oder Private-Key-Paare 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 Verständnis von Terraform. Die kurze Einführung finden Sie hier.
  • Ein Oracle Cloud-Account und ein Abonnement von Oracle NoSQL Database Cloud Service. Wenn Sie noch keinen Oracle Cloud-Account besitzen, können Sie hier starten.
  • OCI-Terraform-Provider installiert und konfiguriert.

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:
  • API-Authentifizierung
  • Autorisierung des Instanz-Hauptelements
  • Security Token-Authentifizierung
Das Argument region gibt die geografische Region an, in der die Providerressourcen erstellt werden. Um mehrere Regionen in einer einzelnen Konfiguration als Ziel zuzuweisen, erstellen Sie einfach eine Providerdefinition für jede Region, und unterscheiden Sie sich dann mithilfe eines Provideralias, wie im folgenden Beispiel dargestellt. Beachten Sie, dass nur ein Provider mit dem Namen "oci" definiert ist, die OCI-Providerdefinition jedoch 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 Argument region 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 unter 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
}
Bei der Principal-Instanzautorisierung kann der Provider API-Aufrufe aus einer OCI Compute-Instanz ohne die Attribute tenancy_ocid, user_ocid, private_key_path und fingerprint in der Providerdefinition ausführen.

Hinweis:

Die Principal-Instanzautorisierung kann nur für Instanzen angewendet werden, die in Oracle Cloud Infrastructure ausgeführt werden.
Im folgenden Beispiel ist ein region-Argument für den OCI-Terraform-Provider erforderlich, und ein auth-Argument ist für die Instanz-Principal-Autorisierung erforderlich. Sie können den Wert für das Argument region als Umgebungsvariablen oder in Terraform-Konfigurationsvariablen angeben (wie unter Unterschritt 1.3: Terraform-Konfigurationsvariablen laden erwähnt).
variable "region" {
}
provider "oci" {
   auth = "InstancePrincipal"
   region = var.region
}
Mit der Security Token-Authentifizierung können Sie Terraform mit einem Token ausführen, das mit der okenbasierten Authentifizierung für die CLI generiert wurde.

Hinweis:

Dieses Token läuft nach einer Stunde ab. 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 die NoSQL terraform-Konfigurationsressourcen zum Erstellen von NoSQL Database Cloud Service-Tabellen oder -Indizes enthält. Weitere Informationen zu den Datenbankressourcen und Datenquellen NoSQL 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 in Terraform-Konfigurationsvariablen angeben (wie unter Unterschritt 1.3: Terraform-Konfigurationsvariablen laden erwähnt).
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 namens "terraform.tfvars" und geben Werte für die erforderlichen OCI-Terraform-Providerargumente basierend auf der Authentifizierungsmethode an.

Geben Sie Werte für die Argumente für den IAM-Zugriff und die Secret Keys (tenancy_ocid, user_ocid, private_key_path und fingerprint), region und compartment_ocid 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 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 Eingabevariablen darin Werte zuzuweisen. Klicken Sie hier, um in der Terraform-Dokumentation nach den gültigen Argumenten oder Eigenschaften zu suchen, die für die Datenbank NoSQL verfügbar sind. Im Beispiel wird der Standardwert der Lese-, Schreib- und Speichereinheiten für die Tabelle NoSQL auf 10, 10 bzw. 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 Providerdefinition, 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.

  • Lokale ZIP-Datei
  • Ordner Lokal
  • Objektspeicher-Bucket

    Der aktuelle 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 aktuelle Version Ihrer Konfiguration wird automatisch von jedem Job verwendet, der auf dem verknüpften Stack ausgeführt wird.

  • Vorlage (vordefinierte Terraform-Konfiguration von Oracle oder eine private Vorlage)
  • Vorhandenes Compartment (Resource Discovery)

Unterschritt 2.1: Konfigurationsquellenprovider für Remote-Terraform-Konfigurationen erstellen

Sie müssen einen Quellkonfigurationsprovider erstellen, wenn Sie die Remote-Terraform-Konfigurationen verwenden möchten, die auf einem Quellkontrollsystem gehostet werden, wie GitHub und GitLab.

Weitere Informationen zum Erstellen von Konfigurationsquellenprovidern für Remote-Terraform-Konfigurationen finden Sie unter Konfigurationsquellenprovider verwalten.

Schritt 3: Stack aus einer Datei erstellen


Stack aus Datei erstellen

Verwenden Sie den Ihrem Dateipfad entsprechenden Befehl. Informationen zu Terraform-Konfigurationsquellen, die mit Resource Manager unterstützt werden, finden Sie unter Wo werden Ihre Terraform-Konfigurationen gespeichert.

In diesem Tutorial erstellen wir einen Stack mit der Instanz-Principal-Authentifizierungsmethode aus einer lokalen Terraform-Konfigurations-ZIP-Datei, terraform.zip. Die terraform.zip-Datei 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.
Zum Erstellen eines Stacks aus einer Datei, die auf einem Quellcodekontrollsystem wie GitHub und GitLab gehostet wird.
oci resource-manager stack create-from-git-provider 
--compartment-id ocid1.tenancy.oc1..uniqueid 
--config-source-configuration-source-provider-id ocid.ormconfigsourceprovider.oc1..uniqueid 
--config-source-repository-url https://github.com/user/repo.git
--config-source-branch-name mybranch 
--display-name "My Stack from Git" 
--description "Create NoSQL Table" 
--variables file://variables.json
--working-directory ""
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 Compartment, 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 der Datei, in der Eingabevariablen für Ihre Ressourcen angegeben sind.

    Der Oracle Cloud Infrastructure-Terraform-Provider erfordert zusätzliche Parameter, wenn Terraform lokal ausgeführt wird (es sei denn, Sie verwenden Instanz-Principals). For more information on using variables in Terraform, see Input Variables. 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"

Schritt 4: 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.
Führen Sie den folgenden Befehl aus, um einen Ausführungsplan zu generieren:
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. Resource Manager erstellt einen Job mit einer eindeutigen ID, die diesem Ausführungsplan entspricht. Diese Job-ID des Plans kann später verwendet werden, um die Ausführungsplandetails zu prüfen, bevor der Apply-Vorgang ausgeführt wird, um die Datenbankressourcen NoSQL in der OCI-Cloud bereitzustellen.
"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
      "operation": "PLAN"
      ...
}

Unterschritt 4.1: Ausführungsplan prüfen

So prüfen Sie einen Ausführungsplan:
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 validiert, 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.",
 ...
}

Schritt 5: Job "Anwenden" ausführen


Ausführen des Jobs "Anwenden" zum Provisioning von Ressourcen

  • Um einen "Planen" -Job anzugeben (einen "Anwenden" eines Ausführungsplans): 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 Planjob 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 von einem Stack ausgeführt. Resource Manager erstellt einen Job mit einer eindeutigen ID, um den Apply-Vorgang auszuführen. Mit dieser Job-ID "Anwenden" können Sie später die Logs prüfen, die beim Deployment der Datenbanktabelle NoSQL in der 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

Prüfen Sie den Status eines Jobs mit dem folgenden Befehl:
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 nicht erfolgreich war.
{
...
      "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 erfolgreich zwei NoSQL-Tabellen bereitgestellt: demo und demoKeyVal.
{
 ...
      "message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
 ...
}

Wir haben in diesem Tutorial 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 einen Apply Job für den Ausführungsplan ausgeführt.