Oracle Cloud Infrastructureドキュメント

CLIを使用したResource Manager

このトピックでは、Oracle Cloud Infrastructure CLIを使用してOracle Resource Managerを使用するためのガイダンスを提供します。 コンソールResource Managerの使用手順については、「コンソールでのResource Managerの使用」を参照してください。

このトピックでは、CLIがインストールおよび構成されていることを前提としています。 CLIの設定の詳細は、「クイックスタート」および「構成」を参照してください。

警告

Oracle Cloud Infrastructure コンソール、API、またはCLIに機密情報を含む文字列値を使用しないことをお薦めします。
Terraform構成にはユーザー資格証明を指定しないでください。

構成の準備

Resource ManagerをドライブするテクノロジはTerraformです。Terraformの使用は、Terraform構成の作成から始まります。 Terraform構成は、宣言コードを使用してインフラストラクチャ構成を記述する、1つ以上の構成(.tf)ファイルの集合です。 Terraform構成の詳細については、「Terraform構成の作成」を参照してください。 「Terraform: 構成」も参照してください。

このウォークスルーでは、vcn.tfという名前の単一のTerraform構成ファイルを使用します。 これは、1つのTerraformプロバイダ、1つのOracle Cloud Infrastructureリソースのみを定義し、変数のセットを宣言する非常に基本的なサンプル・ファイルです。


variable "compartment_ocid" {}
variable "region" {}

provider "oci" {
  region = "${var.region}"
}

resource "oci_core_virtual_network" "vcn1" {
  cidr_block = "10.0.0.0/16"
  dns_label = "vcn1"
  compartment_id = "${var.compartment_ocid}"
  display_name = "vcn1"
}

スタックの作成

stack createコマンドを使用し、スタックを作成しようとしているコンパートメントのOCIDを指定してください。 また、Terraform構成ファイル(以降の例ではvcn.tf)も参照します。 オプションで、スタックにわかりやすい名前を指定し、次に示すように説明も追加します。

スタックを作成するには、次のコマンドを実行します:

oci resource-manager stack create –-compartment-id <compartment_OCID> 
    --config-source vcn.zip --variables file://variables.json
    --display-name "My Example Stack" 
    --description Tutorial to create a VCN

stack createコマンドを使用してスタックを作成する場合、--config-sourceパラメータは、1つ以上の構成ファイルを含む1つの.zipファイルの名前を取得します。

ディレクトリ構造を公開するには、オプションの--working-directoryパラメータを使用して、ディレクトリ内のルート構成ファイルを指します。 このパラメータを使用しない場合、サービスでは、ディレクトリ内の最上位ファイルがルート構成ファイルであると想定されます。

警告

.terraformディレクトリを構成.zipファイルの作業ディレクトリに含めないでください。
作業ディレクトリに.terraformを含めると、stack createまたはstack updateの呼出し時に無効なパラメータ・エラーが発生します。

重要

Windowsの場合は、.zipファイルとvariables.jsonファイルが、CLIを実行しているディレクトリと同じディレクトリにあることを確認してください。
現在、CLIにはWindowsの制限があり、いずれかがサブディレクトリにある場合にファイルが正しく処理されないようにしています。

例variables.json

次に、variables.jsonファイルの例を示します:

{ 
  "compartment_ocid": "ocid1.compartment.oc1..example7lcdlihrvur7xq", 
  "region": "us-phoenix-1" 
}	

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

レスポンスの作成例

stack createへのコールの例は、次のとおりです:

{
  "data": {
    "config-source": {
      "working-directory": null,
      "config-source-type": "ZIP_UPLOAD"
    },
    "defined-tags": {},
    "description": "Tutorial to create a VCN",
    "display-name": "My Example Stack",
    "freeform-tags": {},
    "id": "ocid1.ormstack.oc1..examplej6whb4mluogzdv4xjma",
    "lifecycle-state": "ACTIVE",
    "time-created": "2018-04-03T18:26:56.299000+00:00",
    "variables": {
      "compartment_ocid": "ocid1.compartment.oc1..example7lcdlihrvur7xq", 
      "region": "us-phoenix-1"
    }
  }
}

コンパートメントのスタックをリスト

指定されたコンパートメント内のスタックのリストを取得するには、stack listコマンドを使用し、次のようにコンパートメントのOCIDを指定します。

oci resource-manager stack list –-compartment-id <stack_compartment_OCID>

スタックの完全な詳細のリスト

指定のスタックの完全な詳細を取得するには、stack getコマンドを使用し、次のようにスタックOCIDを指定します:

oci resource-manager stack get –-stack-id <stack_OCID>

スタックの削除

スタックを削除するには、stack deleteコマンドを使用し、次のようにスタックOCIDを指定します:

oci resource-manager stack delete –-stack-id <stack_OCID>

ノート

スタックを削除する前に、まずスタック上で破棄ジョブを実行します。stack deleteはスタックを削除する際にスタック・リソースをクリーンアップしません。

計画ジョブの実行

スタックを作成してTerraform構成をアップロードした後は、スタックに対してジョブを実行できます。 最初に、計画ジョブを実行します。 計画ジョブの間、Resource Managerは構成ファイルを解析し、実行計画を作成します。 実行計画を使用すると、構成の実行時に実行されるアクションを確認できます。

計画ジョブを実行するには、job createコマンドを使用し、適切なスタックOCIDを渡してから、次に示すように操作を指定します:

oci resource-manager job create --operation PLAN 
    --stack-id <stack_OCID> 
    --display-name "Example Plan Job"

この操作には数分かかります。 job getをコールし、次に示すようにジョブOCIDを指定して、計画ジョブの現在の状態を確認できます:

oci resource-manager job get –-job-id <plan_job_OCID>

コール・レスポンスにはlifecycle-state値が含まれ、これはジョブが完了した後SUCCEEDEDです。 次のレスポンス例では、ライフサイクル・スタートの値はACCEPTEDです。この値は、APIコールが有効であったが、ジョブがまだ開始されていないことを意味します。

{
  "data": {
    "compartment-id": " ocid1.compartment.oc1..example3e6iindlsm5e4elqa ",
    "defined-tags": null,
    "display-name": "Example Plan Job",
    "freeform-tags": {},
    "id": "ocid1.ormjob.oc1..exampleog2iwhxafi2iilsn6d3p5",
    "lifecycle-state": "ACCEPTED",
    "operation": "PLAN",
    "stack-id": " ocid1.ormstack.oc1..examplej6whb4mluogzdv4xjma ",
    "time-created": "2018-03-09T20:52:13.922000+00:00",
    "time-finished": null,
    "variables": {
      "compartment_ocid": "ocid1.compartment.oc1..example7lcdlihrvur7xq", 
      "region": "us-phoenix-1"
    }P
  }
}

実行計画の確認

計画のコンテンツは、ジョブ・ログ・ファイルに表示されます。 特定のジョブのログ・エントリを表示するには、job get-job-logsコマンドを使用し、次のようにジョブOCIDを指定します:

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

このコマンドは、ログ・エントリを記述するJSONオブジェクトを返します。 各オブジェクトには、実行計画の1行を表示するプロパティを持つメッセージ・メンバーがあります。 次の例では、計画は単一の仮想クラウド・ネットワーク(VCN)を作成します。残りのメンバーはVCNに関する詳細を表示します。

...
 {
   "level": "INFO",
   "message": "Terraform will perform the following actions:",
   "timestamp": "2018-05-24T00:57:14.170000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "",
   "timestamp": "2018-05-24T00:57:14.170000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "+ oci_core_virtual_network.vcn1",
   "timestamp": "2018-05-24T00:57:14.170000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "id: <computed>",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "cidr_block:  \"10.0.0.0/16\",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "compartment_id:  \"ocid1.tenancy.oc1..exampleaqnpcpfqfmrf6dw5gcew7yqpirvarueirj2mv4jzn5goejsxma\",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "default_dhcp_options_id:  <computed_value>",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "      default_route_table_id: <computed_value>",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
 {
   "level": "INFO",
   "message": "      default_security_list_id: <computed_value>",
   "timestamp": "2018-05-24T00:57:14.172000+00:00",
   "type": "TERRAFORM_CONSOLE"
 },
...

実行計画の更新

実行計画を更新するには、次のステップに従います:

  1. Terraform構成(.tf)ファイルを開き、必要に応じて構成を更新します。
  2. stack update (oci resource-manager stack update <options>)を使用して、変更した構成ファイルを使用するようにスタックを更新します。
  3. スタックに対して新規計画ジョブを実行します。
  4. 結果の実行計画(ログ・ファイル)を確認して、出力を確認します。

適用ジョブの実行

適用ジョブを実行すると、実行計画が取得され、スタックに対して実行(適用)されます。 適用ジョブを作成して実行するには、次のように、 job create コマンドをコールし、計画ジョブOCID、スタックOCID、操作タイプ、およびオプションで表示名を渡します:

oci resource-manager job create --operation APPLY
    –-apply-job-plan-resolution <JSON string>
    --stack-id <stack_OCID>
    --display-name "Example Apply Job"

適用ジョブを実行する前に計画ジョブを実行することを強くお薦めします。これは、apply jobコマンドの入力パラメータとして計画ジョブOCIDを指定する必要があるためです。--apply-job-plan-resolution --apply-job-plan-resolutionは入力としてJSON文字列を取る複雑なタイプであることに注意してください。 このJSON文字列には、次に示すように使用可能な3つのパラメータ(isAutoApprovedisUseLatestJobId、またはplanJobId)のいずれか1つのみを使用できます:

{
  "planJobId": "<plan_job_OCID>"
  "isAutoApproved": false,              
  "isUseLatestJobId": false,                          
}

使用する方法に応じて、次のいずれかを実行します:

  • 計画ジョブOCIDにplanJobIdパラメータを設定します。
  • 実行計画を参照せずにTerraform構成を直接使用するには、isAutoApprovedtrueに設定します。
  • 最近実行した計画ジョブを使用するには、isLatestJobIdtrueに設定

次に、planJobIdパラメータを使用する際のJSON入力の例を示します:

oci resource-manager job create --stack-id <stack_OCID> --apply-job-plan-resolution '{"planJobId":"<plan_job_OCID>"}' --operation APPLY

次に、isAutoApprovedパラメータを使用する際のJSON入力の例を示します:

oci resource-manager job create --stack-id <stack_OCID> --apply-job-plan-resolution '{"isAutoApproved":true}' --operation APPLY

適用ジョブのライフサイクル状態を定期的にチェックして、IN_PROGRESSからSUCCEEDEDに切り替わると確認します。 そのためには、job getコマンドを使用し、次に示すようにジョブOCIDを指定します:

oci resource-manager job get –-job-id <apply_job_OCID>

状態の表示

適用ジョブを実行すると、次に示すように、Resource Managerによって状態ファイルが作成され、job get-job-tf-stateをコールしてジョブOCIDを渡すことで、このファイルをダウンロードおよび検査できます:

oci resource-manager job get-job-tf-state --job-id <apply_job_OCID>

このコールは、状態ファイルのJSON表現を返します。 次に状態ファイルの例を示します:

{
  "data": {
    "lineage": "57ef4f0c-c8cd-8a32-d45f-d2c40be7b915",
    "modules": [
      {
        "depends_on": [],
        "outputs": {},
        "path": [
          "root"
        ],
        "resources": {
          "oci_core_virtual_network.vcn1": {
            "depends_on": [],
            "deposed": [],
            "primary": {
              "attributes": {
                "cidr_block": "10.0.0.0/16",
                "compartment_id": "ocid1.tenancy.oc1..examplerueirj2mv4jzn5vkjgoejsxma",
                "default_dhcp_options_id": "ocid1.dhcpoptions.oc1.phx.exampletlwtdnjp5nuixopfwq",
                "default_route_table_id": "ocid1.routetable.oc1.phx.examplehttsmjqc6vgnq7dw75h6q6oq",
                "default_security_list_id": "ocid1.securitylist.oc1.phx.exampleztvxuauezzmz4qxsfg6e4c5l7dlq",
                "display_name": "My VCN display name",
                "dns_label": "myvcntest",
                "id": "ocid1.vcn.oc1.phx.examplegjih5mjjkb3g777aza",
                "state": "AVAILABLE",
                "time_created": "2018-05-24 01:13:05.855 +0000 UTC",
                "vcn_domain_name": "myvcntest.oraclevcn.com"
              },
              "id": "ocid1.vcn.oc1.phx. examplegjih5mjjkb3g777aza",
              "meta": {
                "e2bfb730-ecaa-11e6-8f88-34363bc7c4c0": {
                  "create": 300000000000,
                  "delete": 300000000000,
                  "update": 300000000000
                }
              },
              "tainted": false
            },
            "provider": "provider.oci",
            "type": "oci_core_virtual_network"
          }
        }
      }
    ],
    "serial": 4,
    "terraform_version": "0.11.7",
    "version": 3
  }
}

スタック上のリソースの検査

スタックを適用ジョブでプロビジョニングした後は、次のコマンドを発行して検査するリソースを指定することで、プロビジョニングしたクラウド・リソースを検査できます。 この構成例では、コンパートメント内のVcnのリストを参照して、作成したvcnがリストに含まれていることを確認しています。

oci network vcn list 
    --compartment-id <vcn_compartment_OCID>

破棄ジョブの実行

ここに示すように、破棄ジョブを実行し、スタックOCIDを指定することで、作成したリソースを分解してクリーンアップできます:

oci resource-manager job create --operation DESTROY --stack-id <stack_OCID> --apply-job-plan-resolution '{"isAutoApproved": true}'

クラウド・リソースが削除されたことを確認するには、コンパートメント内のVCNをリストに表示して、VCNがリストにもう表示されていないことを確認します:

oci network vcn list 
    --compartment-id <vcn_compartment_OCID>