TerraformおよびOCIリソース・マネージャを使用したOracle NoSQL表のデプロイ

TerraformおよびResource ManagerのStackを使用して、NDCS表をOCI (Oracle Cloud Infrastructure)に簡単にデプロイできます。OCI Resource Manager CLIを使用して、NDCS表をOracle Cloudにデプロイします。この記事を進める前に、NoSQL Cloud Serviceを認識し、その基本をTerraformとともに把握していることを前提としています。

Terraformは、Terraformエンジンとサポートされるクラウド・プラットフォーム間のインタフェースにプロバイダを使用します。Oracle Cloud Infrastructure (OCI) Terraformプロバイダは、Terraformを管理対象のOCIサービスに接続するコンポーネントです。OCI Terraformプロバイダ(Terraform CloudやOCI Resource Managerなど)を使用できます。

OCI リソース・マネージャは、Terraformに基づくOracle管理サービスであり、Terraform構成ファイルを使用して、OCI TerraformプロバイダでサポートされているOCIリソースのデプロイメントと操作を自動化します。リソース・マネージャを使用すると、複数のチームおよびプラットフォームにわたってインフラストラクチャ構成と状態ファイルを共有および管理することができます。

Terraformを使用したNoSQLデータベース表のデプロイ

ノート: Oracle Cloud Infrastructure (OCI) Resource Managerコマンドライン・インタフェース(CLI)で作業し、コンソールを使用してクラウド・シェルでこれらのコマンドを実行します。つまり、クラウド・テナンシに関する情報や、公開キーや秘密キーのペアなど、便利なその他の項目が必要になります。ローカル・マシンでOCI CLIを構成する場合は、このドキュメントを参照してください。

この記事には次のトピックが含まれます:

前提条件

ステップ1: NDCS表または索引のTerraform構成ファイルの作成

OCI Terraformプロバイダ構成の作成

サブステップ1.1: OCI Terraformプロバイダ構成の作成

OCI Terraformプロバイダ定義および関連する変数定義を含む、provider.tfという名前の新しいファイルを作成します。OCI Terraformプロバイダに必要なのは、region引数のみです。

ただし、認証方法に基づいて、OCIアカウントの認証資格証明を使用して追加の引数を構成する必要がある場合があります。OCI Terraformプロバイダは、3つの認証方法をサポートしています:

region引数は、プロバイダ・リソースが作成される地理的リージョンを指定します。単一の構成で複数のリージョンを対象にするには、各リージョンでプロバイダ定義を作成してから、次の例に示すようにプロバイダの別名を使用して区別します。「oci」という名前のプロバイダが1つだけ定義されているが、ociプロバイダ定義は、us-phoenix-1リージョン(別名は「phx」)に対して1回とus-ashburn-1リージョン(別名「iad」)に対して1回、計2回の入力されています。

provider "oci" {
region = "us-phoenix-1"
   alias = "phx"
}
provider "oci" {
region = "us-ashburn-1"
alias = "iad"
}

次の例では、OCI Terraformプロバイダにregion引数が必要です。APIキー認証には、tenancy_ociduser_ocidprivate_key_pathおよびfingerprint引数が必要です。環境変数として、またはTerraform構成変数(サブステップ1.3: Terraform構成変数のロードを参照)内で、regionおよびAPIキー認証キー(tenancy_ociduser_ocidprivate_key_pathおよびfingerprint)の値を指定できます。

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
}

インスタンス・プリンシパル認可によって、プロバイダは、プロバイダ定義のtenancy_ociduser_ocidprivate_key_pathおよびfingerprint属性を必要とすることなく、OCIコンピュート・インスタンスからAPIコールを行うことができます。

ノート:インスタンス・プリンシパル認可が適用されるのは、Oracle Cloud Infrastructureで実行中のインスタンスのみです。

次の例では、OCI Terraformプロバイダにregion引数が必要で、Instance Principal認可にauth引数が必要です。region引数の値は、環境変数として、またはTerraform構成変数内で指定できます(サブステップ1.3: Terraform構成変数のロードを参照)。

variable "region" {
}
provider "oci" {
   auth = "InstancePrincipal"
   region = var.region
}

セキュリティ・トークン認証により、CLIでのトークンベースの認証で生成されたトークンを使用してTerraformを実行できます。

ノート:このトークンは1時間後に期限切れになります。リソースのプロビジョニングに1時間以上かかる場合は、この認証方法を使用しないでください。詳細は、トークンのリフレッシュを参照してください。

次の例では、regionはOCI Terraformプロバイダに引数が必要です。セキュリティ・トークン認証には、authおよびconfig_file_profile引数が必要です。

variable "region" {
}
variable "config_file_profile" {
}
provider "oci" {
auth = "SecurityToken"
  config_file_profile = var.config_file_profile
   region = var.region
}

サブステップ1.2: NoSQL Terraform構成の作成

NoSQL Database Cloud Serviceの表または索引を作成するためのNoSQL terraform構成リソースを含む"nosql.tf"という名前の新しいファイルを作成します。NoSQL Databaseのリソースおよびデータ・ソースの詳細は、oci_nosql_tableを参照してください。

次の例では、2つのNoSQL表を作成しています。表や索引などのNoSQL Databaseリソースには、compartment_ocid引数が必要です。compartment_ocidの値は、環境変数として、またはTerraform構成変数内で指定できます(サブステップ1.3: Terraform構成変数のロードを参照)。

variable "compartment_ocid" {
}

resource "oci_nosql_table" "nosql_demo" {
    compartment_id = var.compartment_ocid
    ddl_statement = "CREATE TABLE if not exists demo (ticketNo INTEGER, fullName STRING, contactPhone STRING, confNo STRING, gender STRING, bagInfo JSON, PRIMARY KEY (ticketNo))"
    name = "demo"
    table_limits {
        max_read_units = var.table_table_limits_max_read_units
        max_storage_in_gbs = var.table_table_limits_max_storage_in_gbs
        max_write_units = var.table_table_limits_max_write_units
    }
}

resource "oci_nosql_table" "nosql_demoKeyVal" {

    compartment_id = var.compartment_ocid
    ddl_statement = "CREATE TABLE if not exists demoKeyVal (key INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 NO CYCLE), value JSON, PRIMARY KEY (key))"
    name = "demoKeyVal"
    table_limits {
       max_read_units = var.table_table_limits_max_read_units
        max_storage_in_gbs = var.table_table_limits_max_storage_in_gbs
        max_write_units = var.table_table_limits_max_write_units
    }
}

サブステップ1.3: Terraform構成変数のロード

次のステップでは、terraform.tfvarsという名前のファイルを作成し、認証方法に基づいて必要なOCI Terraformプロバイダ引数の値を指定します。

IAMアクセスおよび秘密キー(tenancy_ociduser_ocidprivate_key_pathおよびfingerprint)、regionおよびcompartment_ocid引数に値を指定します。NoSQL Database Cloud Serviceに対する十分な権限を持つ秘密キーおよびアクセス・キーを持つOCI IAMユーザーがすでに必要です。これらのキーを取得し、ファイルに格納します。

たとえば:

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"

regionおよびcompartment_ocid引数の値を指定します。

たとえば:

region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"

regioncompartment_ocidおよびconfig_file_profile引数の値を指定します。

たとえば:

region = "us-phoenix-1"
compartment_ocid = "ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya"
config_file_profile = "PROFILE"

サブステップ1.4: 入力変数の宣言

最後のステップでは、variables.tfを作成し、その中の入力変数に値を割り当てます。ここをクリックしてTerraformのドキュメントを参照し、NoSQL Databaseで使用可能な有効な引数またはプロパティを確認してください。この例では、NoSQL表の読取り、書込みおよびストレージ・ユニットのデフォルト値は、それぞれ1010および1に設定されています。

variable "table_table_limits_max_read_units" {
default = 10
}
variable "table_table_limits_max_write_units" {
default = 10
}
variable "table_table_limits_max_storage_in_gbs" {
default = 1
}

コンソールのクラウド・シェルを使用して、プロバイダ定義、NoSQLデータベース・リソース、認証値および入力変数に必要なすべてのterraform構成ファイルを作成しました。

クラウド・シェルでのTerraform構成ファイルの作成

ステップ2: Terraform構成の格納場所

terraform設定ファイルを保存する場所

Resource Managerでスタックを作成する際は、次のソースからTerraform構成を選択できます。

サブステップ2.1: リモートTerraform構成の構成ソース・プロバイダの作成

GitHubやGitLabなどのソース・コントロール・システムでホストされているリモート・テラフォーム構成を使用する場合は、ソース構成プロバイダを作成する必要があります。

リモートTerraform構成の構成ソース・プロバイダを作成する方法の詳細は、構成ソース・プロバイダの管理を参照してください。

ステップ3: ファイルからのスタックの作成

ファイルからのスタックの作成

ファイルの場所に関連するコマンドを使用します。Resource ManagerでサポートされているTerraform構成ソースについては、Terraform構成の格納場所を参照してください。

このチュートリアルでは、ローカルterraform構成Zipファイルterraform.zipから、Instance Principal認証方法を使用してスタックを作成します。terraform.zipファイルには、次のファイルが含まれています。

ノート:このチュートリアルでは、OCI Resource ManagerのCLIコマンドを使用してスタックを作成します。OCIリソース・マネージャ・コンソールを使用して、同じタスクを実行できます。

ソース・コード制御システムでホストされているファイルからスタックを作成するには(GitHubや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 ""

オブジェクト・ストレージ・バケット内のTerraform構成からスタックを作成するには:

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

アップロードした構成ファイル(.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 ""

説明

  • --compartment-idは、スタックを作成するコンパートメントのOCIDである。

  • --config-sourceは、1つ以上のTerraform構成ファイルを含む.zipファイルの名前です。

  • (オプション) --variablesは、リソースの入力変数を指定するファイルのパスで、

    Terraformのローカル実行時には、Oracle Cloud Infrastructure Terraformプロバイダに追加のパラメータが必要です(インスタンス・プリンシパルを使用していない場合)。Terraformでの変数の使用の詳細は、入力変数を参照してください。入力変数の構成も参照してください。

  • (オプション) --display-nameは、新しいスタクのわかりやすい名前。

  • (オプション) --descriptionは、新しいスタックの記述です。

  • (オプション) --working-directoryは、ディレクトリのルート構成ファイルである。指定しない場合またはこの例のようにnullである場合、サービスはディレクトリ内の最上位ファイルがルート構成ファイルであるとみなします。

たとえば:

oci resource-manager stack create
--compartment-id ocid1.compartment.oc1..aaaaaaaawrmvqjzoegxbsixp5k3b5554vlv2kxukobw3drjho3f7nf5ca3ya
--config-source terraform.zip

レスポンスの例:

{
  "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"
}

terraform構成ファイルからスタックを作成し、スタックIDを生成しました。次のステップでは、このスタックIDを使用して、NoSQL表のデプロイメントの実行計画を生成します。

"id": "ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq"

ステップ4: 実行プランを生成

実行計画を生成して確認します。

ノート:このチュートリアルでは、OCI Resource ManagerのCLIコマンドを使用して実行計画を生成します。OCIリソース・マネージャ・コンソールを使用して、同じタスクを実行できます。

実行計画を生成するには、次のコマンドを実行します:

oci resource-manager job create-plan-job
--stack-id <*`stack_OCID`*>
--display-name "<*`friendly_name`*>"

たとえば:

oci resource-manager job create-plan-job
--stack-id ocid1.ormstack.oc1.phx.aaaaaaaa7jrci2s5iav5tdxpl6ucwo2dwazzrdkfhs6bxiohgcpkscmr57bq

レスポンスの例:

{
  "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"
}

スタックから実行計画を生成しました。リソース・マネージャは、この実行計画に対応する一意のIDを持つジョブを作成します。このプラン・ジョブIDは、適用操作を実行してNoSQLデータベース・リソースをOCIクラウドにデプロイする前に、後から実行プランの詳細を確認するために使用できます。

"id": "ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq",
"job-operation-details": {
      "operation": "PLAN"
      ...
}

サブステップ4.1: 実行プランの確認

実行計画を確認するには、次のコマンドを実行します:

oci resource-manager job get-job-logs
--job-id <*`plan_job_OCID`*>

たとえば:

oci resource-manager job get-job-logs
--job-id ocid1.ormjob.oc1.phx.aaaaaaaacrylnpglae4yvwo4q2r2tk5z5x5v6bwjsoxgn26moyg3eqwnt2aq

レスポンスの例:

...
    {
      "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"
    },
...

このステップは、スタック・コードに構文エラーが含まれているかどうか、および追加、更新または破棄されるOCIリソースの数を正確に検証するため、非常に重要です。チュートリアルでは、2つのNoSQL表(demoおよびdemoKeyVal)をデプロイします。

{
 ...
      "message": "Plan: 2 to add, 0 to change, 0 to destroy.",
 ...
}

ステップ5: 適用ジョブの遂行

適用ジョブを実行してリソースをプロビジョニングします

たとえば:

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"

レスポンスの例:

{
  "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"
}

スタックから実行計画に対して適用操作を実行しました。リソース・マネージャは、適用操作を実行するための一意のIDを持つジョブを作成します。この適用ジョブIDは、後でOCIクラウドでのNoSQL Database表デプロイメントの一部として生成されたログを確認するために使用できます。

"id": "ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq",
"job-operation-details": {
      "operation": "APPLY"
      ...
}

ノート:専用ホスト環境を使用している場合は、ジョブを実行する前に、環境変数CLIENT_HOST_OVERRIDESを設定してカスタム・エンドポイントを指定します。

次に例を示します:

  export CLIENT_HOST_OVERRIDES=<oci_nosql.NosqlClient=https://ndcs.us-ashburn-1.oci.oc-test.com>

サブステップ5.1: ジョブのステータスの確認

ジョブのステータスを確認するには、次のコマンドを実行します。

oci resource-manager job get
--job-id <*`job_OCID`*>

たとえば:

oci resource-manager job get
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq

レスポンスの例:

{
  "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"
}

適用ジョブのステータスをチェックして、ジョブがSUCCESSFULまたはFAILEDであるかどうかを確認できます。

{
...
      "lifecycle-state": "SUCCEEDED",
...
}

サブステップ5.2: ジョブ・ログの表示

ジョブのログを表示するには、次のコマンドを実行します。

oci resource-manager job get-job-logs-content
--job-id <*`job_OCID`*>

たとえば:

oci resource-manager job get-job-logs-content
--job-id ocid1.ormjob.oc1.phx.aaaaaaaaqn4nsnfgi3th4rxolwqn3kftzzdpsw52pnfeyphi5dsxd6fhescq

レスポンスの例:

...
    {
      "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"
    },
...

このステップは、追加、更新または破棄されたOCIリソースの数を正確に確認するため、非常に重要です。チュートリアルでは、2つのNoSQL表(demoおよびdemoKeyVal)を正常にデプロイしました。

{
 ...
      "message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
 ...
}

このチュートリアルでは、多くの詳細について説明しました。OCIクラウドへのNoSQLデータベース表のデプロイメントに必要なterraform構成ファイルを作成し、これらのファイルのソースの場所を構成しました。次に、OCI Resource Manager CLIを使用してスタックを作成し、実行計画を生成し、実行計画で適用ジョブを実行しました。