Oracle Cloud Infrastructureドキュメント

リソース・マネージャ用Terraform構成

このトピックでは、「リソース・マネージャ」で使用されるTerraform構成の要件と推奨事項について説明します。 Terraform構成の基本情報は、「Terraform構成の作成」を参照してください。 スタックおよびジョブで構成を使用する手順は、「スタックとジョブの管理」を参照してください。

警告

Terraform構成にユーザー資格証明やその他の機密情報を指定しないでください。

Terraformプロバイダ

「リソース・マネージャ」を使用する場合、provider "oci"ブロック内のregionフィールドのみが必須フィールドです。 useridfingerprintなど、その他のすべてのフィールドはオプションです。

ファイル構造

「リソース・マネージャ」を構成するには、次のTerraform構成ファイル(.zip)構造が必要です:

  • 作業ディレクトリには少なくとも1つの.tfファイルが必要です。 作業ディレクトリに.terraformディレクトリを含めることはできません。

    作業ディレクトリは、Terraformを実行するためのパスです。 デフォルトでは、作業ディレクトリは.zipファイルのルートです。 APIを使用する場合、workingDirectoryパラメータを設定して作業ディレクトリの別のロケーションを指定できます。

  • 構成は、「Terraform構成の作成」で指定されているガイドラインに従っている必要があります。
  • 構成内にTerraform状態ファイル(.tfstate)が存在しない可能性があります。

モジュール: 「リソース・マネージャ」スタックで使用されるすべてのモジュールは、ローカルに構成に組み込まれ、ローカル・パスを使用して参照されることをお薦めします。 「Terraformモジュール・レジストリ」からOracle Cloud Infrastructureのモジュールを使用するには、次の手順を実行します。

  • GitHubからソースをダウンロードし、関連する部分を.zipファイルのサブディレクトリに含めます。
  • ローカル・パスを使用してモジュールを参照します。 詳細は、「ローカル・パス」を参照してください。

変数

リソース・マネージャでは、変数を処理するためのネイティブTerraform動作をサポートしています。 terraform.tfvarsファイルと、.auto.tfvars拡張子のファイルを構成.zipファイルに含めることができます。 変数の定義の詳細は、「変数の定義」および「入力変数」を参照してください。

変数入力を促進するスキーマ文書の追加

ユーザーがTerraform構成を使用してコンソールでスタックを作成または更新するとき、変数を入力しやすくなります。 「リソース・マネージャ」スキーマ・ドキュメントは、コンソールにおける変数の意味と使用方法を明確にしたものです。 スキーマ・ドキュメントを使用すると、次の操作を実行できます: 

  • 許可された値をより明確に示すために変数を検証および制約します。
  • 名前、グループ、および順序の変数。
  • 変数が必要です。
  • 変数の可視性を制御します。
  • 変数値の動的な事前移入。

スキーマ・ドキュメント要件

「リソース・マネージャ」スキーマ文書には次の要件があります:

  • YAML形式。
  • 「リソース・マネージャ」 Terraform構成(.zip)ファイルのルート・フォルダの下に配置されます。 (デフォルトでは、スキーマ・ドキュメントはルート・フォルダが作業フォルダであると見なします。)

スキーマ・ドキュメントなどの詳細は、「サンプル・スキーマ」および「メタ・スキーマ」を参照してください。

変数入力の検証と制約

Terraformの構成言語は、入力変数に対してデフォルト値、説明および3つのタイプをサポートしています: 文字列、リストおよびマップ。 これら3つの型はすべて文字列であるため、ユーザーは各変数に許可される値を理解することは容易ではありません。

スキーマ・ドキュメントを使用して、変数の検証および制約を定義します。 これらの検証および制約は、コンソールを使用してスタックを作成および編集する場合に、許可される値を決定するのに役立ちます。

例1 : 変数フィールドのエントリを検証および制約するための列挙タイプです。 コンソールによって、num_nodesフィールドが選択可能なリストとしてレンダリングされ、1と2の選択が可能になります。 デフォルト値は2です。

num_nodes:
  type: enum
  enum:
  - "1"
  - "2"
  default: "2"

例2 : 変数フィールドのエントリを検証するためのパターン。 コンソールでは、urlフィールドがフリー・テキスト入力フィールドとしてレンダリングされ、指定されたURLパターン(およびタイプ)に対して入力された値が検証されます。

url:
  type: string
  pattern: ^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$

変数の命名および必要

スキーマ・ドキュメントにgroupingsノードを追加します。 このノードでは、titleを追加し、グループ内の変数を必要な順序でリストします。 変数のわかりやすい名前と説明を指定できます。また、変数を明示的に要求することもできます。 変数が必須の場合、ユーザーは値を指定する必要があります。

次の例は、regionおよびcompartment_ocidをリストする"VCNの作成"というタイトルのグループを定義しています。 タイプ別(oci:identity:region:name for regionなど)の変数を定義すると、フィールドが自由テキスト入力のかわりに選択できるようになります。 各フィールドには、わかりやすい名前と説明も含まれます。 どちらの変数も必須です。

schemaVersion: 1.0.0
version: "20190612"
locale: "en"
groupings:
  - title: "Create A VCN"
    variables:
    - region
    - compartment_ocid
 
variables:
  region:
    type: oci:identity:region:name
    title: Region
    description: The region in which to create all resources
    required: true
 
  compartment_ocid:
    type: oci:identity:compartment:id
    title: Target Compartment
    description: The target compartment for all of the provisioned resources
    required: true

コンソールでは、"VCNの作成"変数グループが次のようにレンダリングされます。

このスクリーンショットは、サンプル・スキーマからの"VCNの作成"変数グループの結果を示しています。

変数の表示の制御

より複雑なスタックの起動では、スタックの特定の構成のみに入力変数を指定することもあります。 スキーマを使用して、他の変数の値に基づいてグループおよび変数の可視性を制御します。 サポートされている操作には"eq"、"and"、"or"、および"not"が含まれます。

次の例では、変数objectStorageTierの値が"standard"の場合、"等価条件セクション"が表示されます:

- title: "Equality Conditional Section"
  variables:
  - ${myVcn}
  visible:
    eq:
      - ${objectStorageTier}
      - standard

次の例では、変数"useExistingVcn"の値がtrueの場合、"mySubnet"変数が表示されます:

mySubnet:
  type: oci:core:subnet:id
  dependsOn:
    compartmentId: ${subnetCompartment}
    vcnId: ${myVcn}
  visible: ${useExistingVcn}

グループは、グループ構成変数よりも優先度が高くなります。 たとえば、変数が可視ではないグループ内で可視である場合、グループ全体が見えません。

変数値の動的準備

スキーマを使用して、コンソールで動的に事前移入できる変数を定義します。 動的事前移入には、事前移入に使用する要素を見つけるための2つの要件があります: 型と依存性。 タイプは、リストするエンティティを示します。 依存性は、リストを検索するために必要な内容を記述します。

次の例は、VCNおよびコンパートメントIDに基づいて事前に移入できる変数を示しています:

vcnCompartment:
   type: oci:identity:compartment:id
 
myVcn:
   type: oci:core:vcn:id
   dependsOn:
     compartmentId: ${vcnCompartment}
 
subnetCompartment:
   type: oci:identity:compartment:id
 
mySubnet:
   type: oci:core:subnet:id
   dependsOn:
     compartmentId: ${subnetCompartment}
     vcnId: ${myVcn}

コンソールでは、このスキーマから動的に事前移入された変数は、次のようにレンダリングされます。

このスクリーンショットは、サンプル・スキーマから動的に事前に移入された変数の結果を示しています。

構成例

次の例に、1つのファイルに含まれる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"
}

多くの場合、Terraform構成では、複数のファイルがバンドルされて.zipファイルにアップロードされています。 より複雑で複数ファイルのTerraform構成を確認するには、Oracle Cloud Infrastructure GitHubの例を参照してください: terraform-provider-oci/docs/examples