Oracle Cloud Infrastructureドキュメント

Terraform構成の作成

概要

Terraformを使用すると、Terraform構成ファイル(「構成構文」を参照)で「HashiCorp構成言語」形式(HCL)を使用してOracle Cloud Infrastructureを記述することができます。 Terraform構成ファイルは、2つの形式: Terraformドメイン固有の言語(「HashiCorp構成言語」形式[HCL])(推奨アプローチ)、またはファイルを機械可読でなければならない場合はJSON形式。 HCL形式を使用する構成ファイルは、.tfファイル拡張子で終了します。JSON形式を使用するものは.tf.jsonファイル拡張子で終わります。 「Terraform」形式は人間が読める形式ですが、JSON形式は機械で読み取り可能です。

Terraform構成を使用して、Oracle Cloud Infrastructureリソース、変数定義、データソースなどを定義します。 Terraformは、Oracle Cloud Infrastructureの構成を、Oracle Cloud Infrastructure APIエンドポイントに対する一連のAPI呼び出しに変換します。 Terraform構成を書くためのキーは、概念的に望ましいインフラストラクチャを抽象化して「Terraform構成構文」にする方法を理解することです。

重要

Oracle Cloud Infrastructure APIではcamelCase extensivelyを使用しますが、Terraformは構成ファイルのcamelCaseをサポートしません。
このため、構成では、区切り記号として大文字ではなく下線が表示されます。 たとえば、APIがavailabilityDomainを使用する場合、Terraform構成ではavailability_domainが使用されます。

構成ファイルの要件

Terraform構成(.tf)ファイルには、ファイルに定義されているコンポーネントに応じて固有の要件があります。 たとえば、Terraform Providerを1つのファイル(provider.tf)に定義し、変数を別のファイル(variables.tf)で定義し、データソースを別のファイル(provider.tf)で定義します。

ノート

Oracle Cloud Infrastructure GitHub上の「Terraformプロバイダの例」には、多くの構成ファイル例が用意されています。

プロバイダの定義

Terraform構文を使用する次の例は、Oracle Cloud Infrastructure Terraform Provider定義の要件を示しており、関連する変数定義も示しています。 プロバイダ定義は、構成ファイル自体に機密データが含まれないように変数に依存します。 機密データを含めると、構成ファイルを交換または共有する際にセキュリティ・リスクが発生します。

variable "tenancy_ocid" {}
variable "user_ocid" {}
variable "fingerprint" {}
variable "private_key_path" {}
variable "region" {}

provider "oci" {
   tenancy_ocid = "${var.tenancy_ocid}"
   user_ocid = "${var.user_ocid}"
   fingerprint = "${var.fingerprint}"
   private_key_path = "${var.private_key_path}"
   region = "${var.region}"
}

region属性は、プロバイダ・リソースが作成されるリージョンを指定します。 単一の構成で複数のリージョンをターゲットにするには、各リージョンのプロバイダ定義を作成し、次の例に示すようにプロバイダ別名を使用して区別します。 "oci"という名前のプロバイダは1つだけ定義されていますが、ociプロバイダ定義は、us-phoenix-1リージョン(別名phx)に1回、us-ashburn-1 (別名iad) )。

variable "tenancy_ocid" {}
variable "user_ocid" {}
variable "fingerprint" {}
variable "private_key_path" {}
variable "compartment_ocid" {}

provider "oci" {
   region = "us-phoenix-1"
   alias = "phx"
   tenancy_ocid = "${var.tenancy_ocid}"
   user_ocid = "${var.user_ocid}"
   fingerprint = "${var.fingerprint}"
   private_key_path = "${var.private_key_path}"
}

provider "oci" {
   region = "us-ashburn-1"
   alias = "iad"
   tenancy_ocid = "${var.tenancy_ocid}"
   user_ocid = "${var.user_ocid}"
   fingerprint = "${var.fingerprint}"
   private_key_path = "${var.private_key_path}"
}

詳細は、「プロバイダの構成」を参照してください。

変数定義

Terraformの変数は、Terraformモジュールのパラメータを表します。 変数定義では、各ブロックは1つの入力変数を構成し、各定義は3つのオプション引数のいずれかまたはすべてを取ることができます:

  • type (optional): 変数型を3つの許容値の1つとして定義: stringlist、およびmap この引数が使用されない場合、変数型はdefaultに基づいて推論されます。 default が指定されていない場合、そのタイプはstringとみなされます。
  • default (optional): 変数のデフォルト値を設定します。 デフォルト値が指定されていない場合、呼び出し元は値を指定する必要があります。そうしないと、Terraformはエラーをスローします。
  • description (optional): 人間が読める変数の説明。

以下は、いくつかの変数定義の例です。 定義にはオプションのパラメータが含まれています。

variable "tenancy_ocid" {}
variable "user_ocid" {}
variable "fingerprint" {}
variable "private_key_path" {}
variable "region" {}

variable "AD" {
    default     = "1"
    description = "Availability Domain"
}

variable "CPUCoreCount" {
    default = "2"
    type    = "string"
}

詳細は、「入力変数の構成」を参照してください。 「入力変数」も参照してください。

出力構成

出力変数は、Terraformのエンド・ユーザー問合せをサポートする手段を提供します。 これにより、ユーザーは、複雑なインフラストラクチャに関連する潜在的に大量のデータの中から意味のあるデータを抽出することができます。 たとえば、一度にいくつかの重要な値だけに関心があり、出力変数を定義することで、必要な情報を正確に抽出することができます。

以下は、いくつかの出力変数(インスタンスIPアドレスとブート・ボリュームID)のみが定義されている単純な例です:

# Output the private and public IPs of the instance
output "InstancePrivateIPs" {
value = ["${oci_core_instance.TFInstance.*.private_ip}"]
}

output "InstancePublicIPs" {
value = ["${oci_core_instance.TFInstance.*.public_ip}"]
}

# Output the boot volume IDs of the instance
output "BootVolumeIDs" {
  value = ["${oci_core_instance.TFInstance.*.boot_volume_id}"]
}

詳細は、「出力変数」を参照してください。 「出力構成」も参照してください。

リソース構成

リソースはOracle Cloud Infrastructureのコンポーネントです。 これらのリソースには、物理サーバーや仮想サーバーなどの低レベル・コンポーネントから、電子メールやデータベース・プロバイダなどの上位コンポーネント、DNSレコードなどすべてのリソースが含まれます。

次に、基本的な構造を示すリソース定義の簡単な例を示します。

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

この例の最初の行のリソース宣言は、キーワード"resource"を使用し、リソースtypeとリソースname (この例では"oci_core_virtual_network"と"vcn1")の2つのパラメータをとります。 コード・ブロックの中では、リソース構成です。

詳細は、「リソース構成」を参照してください。

データ・ソースの構成

データソースは、Terraform構成における意味論的使用を目的とした既存のインフラストラクチャの読み取り専用ビューを表します。 次に、基本的な構造を示すためのデータソース構成の簡単な例を示します:

# Gets a list of Availability Domains
data "oci_identity_availability_domains" "ADs" {
  compartment_id = "${var.tenancy_ocid}"
}

# Get DB node list
data "oci_database_db_nodes" "DBNodeList" {
  compartment_id = "${var.compartment_ocid}"
  db_system_id = "${oci_database_db_system.TFDBNode.id}"
}

# Get DB node details
data "oci_database_db_node" "DBNodeDetails" {
  db_node_id = "${lookup(data.oci_database_db_nodes.DBNodeList.db_nodes[0], "id")}"
}

# Gets the OCID of the first (default) vNIC
data "oci_core_vnic" "DBNodeVnic" {
  vnic_id = "${data.oci_database_db_node.DBNodeDetails.vnic_id}"
}

詳細は、データ・ソースの構成を参照してください。

Instance Principal認可の有効化

インスタンスの主な認可は、お使いのプロバイダがtenancy_ocidを必要とせずにOracle Cloud Infrastructureコンピュート・インスタンスからのAPI呼び出しを行うことができますuser_ocidfingerprint、およびprivate_key_pathは、あなたのプロバイダ定義の属性。

ノート

インスタンス原則の認可は、Oracle Cloud Infrastructureで実行中のインスタンスにのみ適用されます。

Oracle Cloud Infrastructure Terraform ProviderのInstance Principal認可を有効にするには、次の例に示すように、プロバイダ定義のauth属性をInstancePrincipalに設定します:

variable "region" {}

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

Terraform Providerの例

Oracle Cloud Infrastructure Terraform Providerの例については、「Terraform Providerの例」を参照してください。 コンピュートデータベースネットワーキングロード・バランシング、およびその他のいくつかの例が提供され、サービスごとにグループ化されています。

詳細情報