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

TerraformおよびResource Managerのスタックを使用して、OCI(Oracle Cloud Infrastructure)にNDCSテーブルを簡単にデプロイできます。OCI Resource Manager CLIを使用して、NDCS表をOracle Cloudにデプロイします。この記事に進む前に、NoSQL Cloud Serviceを認識しており、Terraformとともにその基本を理解していることを前提としています。

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

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


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

  • OCIでリソースを作成するには、terraformを構成する必要があります。terraformプロバイダ定義、NoSQLリソース定義、認証および入力変数の基本的なterraform構成ファイルを作成します。
  • terraform構成ファイルの格納場所を決定します。これらのファイルは、ローカル・フォルダやzip、オブジェクト・ストレージ・バケット、ソース制御システム(GitHubやGitLabなど)などの様々なソースに格納できます。
  • リソース・マネージャCLIコマンドを実行して、次のタスクを実行します:
    • スタックを作成します
    • 実行計画を生成して確認します。
    • 適用ジョブを実行して、NoSQLリソースをプロビジョニングします。
    • 必要に応じて、ログ・ファイルを確認します。

ノート:

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

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

前提条件

  • Terraformの基本的な理解。こちらで簡単な概要をお読みください。
  • Oracle CloudアカウントおよびOracle NoSQL Database Cloud Serviceのサブスクリプション。Oracle Cloudアカウントがまだない場合は、ここで開始できます。
  • OCI Terraformプロバイダは、インストールおよび構成済です。

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


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

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

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

ただし、認証方法に基づいて、OCIアカウントの認証資格証明を使用して追加の引数を構成する必要がある場合があります。OCI Terraformプロバイダは、3つの認証方法をサポートしています:
  • APIキー認証
  • Instance Principal認可
  • セキュリティ・トークン認証
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引数が必要です。regionおよびAPIキー認証キー(tenancy_ociduser_ocidprivate_key_pathおよびfingerprint)の値を環境変数として、またはTerraform構成変数内で指定できます(サブステップ1.3: Terraform構成変数のロードを参照)。
variable "tenancy_ocid" {
}
variable "user_ocid" {
}
variable "fingerprint" {
}
variable "private_key_path" {
}
variable "region" {
}

provider "oci" {
   region = var.region
   tenancy_ocid = var.tenancy_ocid
   user_ocid = var.user_ocid
   fingerprint = var.fingerprint
   private_key_path = var.private_key_path
}
インスタンス・プリンシパル認可を使用すると、プロバイダは、プロバイダ定義の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時間以上かかる場合は、この認証方法を使用しないでください。詳細は、トークンのリフレッシュを参照してください。
次の例では、OCI Terraformプロバイダにregion引数が必要です。セキュリティ・トークン認証には、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テラフォーム構成リソースを含む、nosql.tfという名前の新しいファイルを作成します。NoSQLデータベース・リソースおよびデータ・ソースの詳細は、oci_nosql_tableを参照してください。

次の例では、2つのNoSQL表を作成します。表や索引などのNoSQLデータベース・リソースには、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データベースで使用可能な有効な引数またはプロパティを確認します。この例では、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
}

コンソールからCloud Shellを使用して、プロバイダ定義、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ファイルには、次のファイルが含まれています。
  • provider.tf
  • nosql.tf
  • terraform.tfvars
  • variables.tf

ノート:

このチュートリアルでは、OCI Resource Manager CLIコマンドを使用してスタックを作成します。OCI Resource Managerコンソールを使用して同じタスクを実行できます。
GitHubやGitLabなど、ソース・コード制御システムでホストされているファイルからスタックを作成します。
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 ""
オブジェクト・ストレージ・バケット内の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 Resource Managerコンソールを使用して同じタスクを実行できます。
実行計画を生成するには、次のコマンドを実行します:
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: 適用ジョブの実行


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

  • 計画ジョブ(実行計画を「適用」)を指定するには、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"
  • 適用ジョブを自動的に承認する(計画ジョブは指定しない)には、AUTO_APPROVEDを使用します:
    oci resource-manager job create-apply-job 
    --stack-id <stack_OCID> 
    --execution-plan-strategy AUTO_APPROVED 
    --display-name "Example Apply Job"
たとえば次のようにします。
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データベース表デプロイメントの一部として生成されたログを確認するために使用できます。
"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"
}
適用ジョブのステータスをチェックして、ジョブが成功か失敗かを確認できます。
{
...
      "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リソースの数を正確に確認するため、非常に重要です。チュートリアルでは、demoおよびdemoKeyValという2つのNoSQL表を正常にデプロイしました。
{
 ...
      "message": "Apply complete! Resources: 2 added, 0 changed, 0 destroyed.",
 ...
}

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