Terraform v0.12への構成のアップグレード

Terraform v0.12のOCI Terraformプロバイダ構成をアップグレードします。

Terraform v0.12のリリースでは、Oracle Cloud Infrastructure Terraformプロバイダをアップグレードする必要があり、いくつかの既存の構成も更新する必要があります。

Terraformプロバイダのアップグレード

Oracle Cloud Infrastructure (OCI) Terraformプロバイダのバージョン3.26.0以下は、Terraform v0.12と互換性がありません。OCI Terraformプロバイダのバージョン3.27.0は、Terraform v0.12をサポートする最も早いバージョンです。

ノート

OCI Terraformプロバイダのバージョンはすべて、引き続きTerraform v0.11およびv0.10と互換性があります。
HashiCorpプロバイダ・レジストリから最新のv0.12互換プロバイダの使用を開始する最も簡単な方法は、次に示すように、プロバイダ構成ブロックに明示的なバージョン要件を配置することです:
provider "oci" {
  version          = ">= 3.27.0"
  region           = "${var.region}"
  tenancy_ocid     = "${var.tenancy_ocid}"
  user_ocid        = "${var.user_ocid}"
  fingerprint      = "${var.fingerprint}"
  private_key_path = "${var.private_key_path}"
}

追加のバージョン構成オプションを使用する際のガイダンスは、プロバイダ・バージョンを参照してください。

Terraform構成のアップグレード

一部のユーザーは、v0.12で既存のTerraform構成を実行するための変更は必要ありません。

アップグレードが必要な構成については、Terraform構成のアップグレードを参照してください。

v0.11の互換性を維持した構成のアップグレード

Terraform構成のアップグレードで推奨されているとおり、構成をアップグレードする最も簡単な方法は、terraform 0.12upgradeコマンドを使用することです。ただし、terraform 0.12upgradeコマンドを使用して構成をアップグレードすると、Terraform v0.11以前との互換性がなくなります。

注意

構成を変更する前に、バージョン管理または別の優先メカニズムを使用して構成ファイルと状態ファイルをバックアップすることを強くお薦めします。

v0.11との互換性を維持しながら、v0.12で動作するように構成を手動でアップグレードできる場合があります。使用可能なすべての構成がv0.11とv0.12の両方と互換性を持つわけではありません。この方法は、v0.11との互換性を維持するためのベストエフォートとしてのみ使用してください。

次の事例では、v0.11とv0.12の両方と互換性を持つように既存のv0.11の使用方法を変換できる場合について詳しく説明します。

属性とブロック

v0.11では、属性とネストしたブロックを同じ方法で処理できました。属性metadataとネストしたブロックsource_detailsは、両方とも中カッコのみを使用する方法で割り当てられていることに注意してください。

// v0.11 compatible representation
resource "oci_core_instance" "my_instance" {
  metadata {
    ssh_authorized_keys = "${var.ssh_public_key}"
  }

  source_details {
    source_type = "image"
    source_id   = "${var.instance_image_ocid[var.region]}"
    kms_key_id  = "${oci_kms_key.test_key.id}"
  }
}

v0.12では、属性は=演算子を使用して割り当てる必要がありますが、ブロックは中カッコのみを使用して割り当てる必要があります。属性metadataが現在、=でどのように割り当てられているかに注意してください。この使用方法は、引き続きv0.11と互換性があります。

// v0.12 and v0.11 compatible representation
resource "oci_core_instance" "my_instance" {
  metadata = {
    ssh_authorized_keys = "${var.ssh_public_key}"
  }

  source_details {
    source_type = "image"
    source_id   = "${var.instance_image_ocid[var.region]}"
    kms_key_id  = "${oci_kms_key.test_key.id}"
  }
複数の要素を持つネストしたブロック

v0.11では、この例のように、ネストしたブロックのリストを[]内で折り返すことができました。

// v0.11 compatible representation
resource "oci_core_virtual_circuit" "virtual_circuit_public" {
  public_prefixes = [
    {
      cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block}"
    },
    {
      cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block2}"
    },
    {
      cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block3}"
    },
  ]

  ...
}

v0.12では、ネストした各ブロックを[]内で折り返さずに個別に指定する必要があります。この使用方法は、引き続きv0.11と互換性があります。

// v0.11 compatible representation
resource "oci_core_virtual_circuit" "virtual_circuit_public" {
  public_prefixes {
    cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block}"
  }
  public_prefixes {
    cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block2}"
  }
  public_prefixes {
    cidr_block = "${var.virtual_circuit_public_prefixes_cidr_block3}"
  }

  ...
}
属性名を囲む引用符

v0.11では、属性名を引用符"で囲むことができました。minおよびmax属性が引用符で囲まれていることに注意してください。

// v0.11 compatible representation
resource "oci_core_security_list" "bastion" {
  egress_security_rules {
    destination = "${var.vcn_cidr}"
    protocol    = "${local.tcp_protocol}"

    tcp_options {
      "min" = 22
      "max" = 22
    }
  }

  ...
}

v0.12では、属性名を囲む引用符"は使用できなくなりました。

// v0.11 and v0.12 compatible representation
resource "oci_core_security_list" "bastion" {
  egress_security_rules {
    destination = "${var.vcn_cidr}"
    protocol    = "${local.tcp_protocol}"

    tcp_options {
      min = 22
      max = 22
    }
  }

  ...
}
アルファベット以外の文字で始まる変数名

v0.11では、アルファベット以外の文字で始まる変数名を指定できました。

// v0.11 compatible representation
variable "2TB" {
  default = "2048"
}

v0.12では、変数名はアルファベット文字で始める必要があります。

// v0.11 and v0.12 compatible representation
variable "Size2TB" {
  default = "2048"
}
リスト索引値の計算

v0.11では、除算操作の結果、通常はリストで有効な索引として使用できる整数値が生成されました。

// v0.11 compatible representation
instance_id     = "${oci_core_instance.TFInstance.*.id[count.index / var.NumParavirtualizedVolumesPerInstance]}"

v0.12では、除算操作の結果、有効とならない浮動小数点値が生成される可能性があります。この状況を回避するには、floor補間を使用して浮動小数点値を索引に変換します。

// v0.11 and v0.12 compatible representation
instance_id     = "${oci_core_instance.TFInstance.*.id[floor(count.index / var.NumParavirtualizedVolumesPerInstance)]}"