スタックから新しいTerraformバージョンへのアップグレード
リソース・マネージャのスタックを新しいTerraformバージョンにアップグレードします。
これらの手順は、Marketplaceを介して作成されたリソース・マネージャ・スタックには適用されません。
これらのステップは、コマンドラインおよびコンソールで完了します。
リソース・マネージャでサポートされているTerraformバージョンの詳細は、サポートされているTerraformバージョンを参照してください。
開始前
スタックを正常にアップグレードするには、次の要件が必要です。
- 
コマンドライン・ツールを実行するためのMacOS、LinuxまたはWindowsコンピュータ 
- 
7-ZIPなどの .zipアーカイブを作成および解凍するソフトウェア
自動更新
古いTerraformバージョン(1.5.xより前)の非推奨をサポートするために、Resource Managerでは、Terraformバージョンの自動アップグレードが試行されます。この自動アップグレードは、古いTerraformバージョン用に構成されたスタックで成功した適用ジョブ(ジョブ状態が成功)を実行するたびに試行されます。
試行されたアップグレードのターゲット・バージョンは、スタックの現在構成されているTerraformバージョンによって異なります。中間的な自動アップグレードでは、1つ以上のアップグレードを成功させると、スタックが1.5.xに移動します。中間アップグレードを使用すると、手動アップグレード手順で説明するように、HCL構文、プロバイダブロック定義、および状態ファイルの違いを回避できます。アップグレードのターゲット・バージョンは次のように選択されます。
- 0.12.xをアップグレードするターゲット・バージョンは0.13.xです。
- 0.13.xをアップグレードするターゲット・バージョンは0.14.xです。
- 0.14.x、1.0.x、1.1.x、または1.2.xをアップグレードするターゲットバージョンは1.5.xです。
アップグレードの試行は、適用ジョブが成功した(ジョブの状態が成功した)後にのみ行われます。
- アップグレードが成功すると、スタックのTerraformバージョンおよび状態ファイルが1.5.x (または中間バージョン)にアップグレードされます。これ以外のアクションは必要ありません。
- アップグレードが失敗した場合、スタックのTerraformバージョンは変更されず、リソースは影響を受けません。アップグレード失敗メッセージがスタックの詳細ページに表示されます。この状況では、適用ジョブのログを取得(失敗の詳細は、「terraformアップグレード・ログの表示」を選択)してから、Terraform構成を更新します。このスタックで実行した次回の正常な適用ジョブによって、リソース・マネージャによる自動アップグレード・プロセスがトリガーされます。ノート
 アップグレードが失敗した場合でも、ジョブの状態は成功します。
アップグレードの流れ
初期バージョンでサポートされているアップグレード・パスは次のとおりです。
| Terraformの初期バージョン | アップグレード・パス | 
|---|---|
| 0.12 | 順番に、サポートされている各バージョン(0.13、0.14、1.0 (推奨)、1.1、1.2、1.5)にアップグレードします。 | 
| 0.13 | 順番に、サポートされている各バージョン(0.14、1.0 (推奨)、1.1、1.2、1.5)にアップグレードします。 | 
| 0.14 | 順番に、サポートされている各バージョン(1.0 (推奨)、1.1、1.2、1.5)にアップグレードします。 | 
| 1.0 | 順番に、サポートされている各バージョン(1.1、1.2、1.5)にアップグレードします。 | 
| 1.1 | 順番に、サポートされている各バージョン(1.2、1.5)にアップグレードします。 | 
| 1.2 | 次にアップグレード 1.5 | 
Terraformの公式アップグレード・ガイドを参照してください:
タスク1: 最新のインフラストラクチャの確認
このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。
タスク2: 構成および状態のダウンロード
スタックのTerraform構成がGitLabなどのソース・コード制御システムに格納されている場合は、Terraform構成をチェックアウトしてそこからダウンロードします。
スタックのTerraform構成がバケットに格納されている場合は、そこからTerraform構成をダウンロードします。
このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。
タスク3: 構成のアップグレード
タスク4: スタックのアップグレード
タスク5: 状態のインポート
タスク6: 問題のチェック
このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。
アップグレード中のログのトラブルシューティング
エラー: プロバイダのインストールに失敗しました
ログには、次のようなエラーメッセージが表示されます。
Error:  Failed to install providers
Could not find required providers, but found possible alternatives:
hashicorp/gitlab -> gitlabhq/gitlab
If these suggestions look correct, upgrade your configuration with the following command:
terraform 0.13upgrade .構成は、指定されたTerraformバージョンの要件を満たしていません。バージョン0.13.x以降では、この構文はプロバイダには使用されません。このエラーの原因となる構成例:
provider "gitlab" {
  token = "glpat-_abcd"
}  
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
  name = "example"
}required_providersブロックを追加し、プロバイダのソース情報を明示的に指定します。詳細は、プロバイダの要求を参照してください。更新例:
terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = "5.46"
    }
    gitlab = {
      source  = "gitlabhq/gitlab"
      version = "17.8.0"
    }
  }
}エラー: 無効な引用符付きタイプ制約
ログには、次のようなエラーメッセージが表示されます。
Error: Invalid quoted type constraints on variables.tf line 18, in variable "vcn_dns_label"
 18:       type = "string"
Terraform 0.11 and earlier required type constraints to be given in quotes, 
but that form is now deprecated and will be removed in a future version of
Terraform. Remove the quotes around "string".構成は、指定されたTerraformバージョンの要件を満たしていません。バージョン1.0.x以降では、変数の型宣言に引用符を使用しません。このエラーの原因となる構成例:
variable "vcn_dns_label" {
  type  = "string"
  default = "vcn"
}変数の型宣言から引用符を削除します。更新例:
variable "vcn_dns_label" {
  type = string
  default = "vcn"
}エラー: 関数呼び出し(map)のエラー
ログには、次のようなエラーメッセージが表示されます。
Error: Error in function call
on main.tf line 44, in resource "oci_core_subnet" "this":
44:       display_name        = lookup(map("a", "b", "c", "d"), "a", "default")
────────────────
while calling map(vals...)
Call to function "map" failed: the "map" function was deprecated in Terraform v0.12 and 
is no longer available; use tomap({ ... }) syntax to write a literal map.構成は、指定されたTerraformバージョンの要件を満たしていません。バージョン1.0.x以降では、この構文はマップに使用されません。このエラーの原因となる構成例:
resource "oci_core_subnet" "this" {
   ...
   ...
   vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
   ...
   ...
}tomap()を使用するようにマップの構文を修正します。更新例:
resource "oci_core_subnet" "this" {
   ...
   ...
   vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
   ...
   ...
}エラー: 関数呼び出し(list)でエラーが発生しました
ログには、次のようなエラーメッセージが表示されます。
Error: Error in function call
on main.tf line 35, in resource "oci_core_subnet" "this"
  35:       count               = length(list("phx-ad-1"", ""phx-ad-2"))
Call to function "list"" failed: the ""list" function was deprecated in
Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to
write a literal list.構成は、指定されたTerraformバージョンの要件を満たしていません。バージョン1.0.x以降では、この構文はリストに使用されません。このエラーの原因となる構成例:
resource "oci_core_subnet" "this" {
   count = length(list("phx-ad-1", "phx-ad-2"))
   ...
   ...
}tolist()を使用するようにリストの構文を修正します。更新例:
resource "oci_core_subnet" "this" {
   count = length(tolist(["phx-ad-1", "phx-ad-2"]))
   ...
   ...
}エラー: ["*"]形式のignore_changesワイルドカードは非推奨です
ログには、次のようなエラーメッセージが表示されます。
Getting providers from registry and/or custom terraform providers
resource "oci_core_subnet" "this"
  44:         ignore_changes = ["*"]
The ["*"] form of ignore_changes wildcard is was deprecated and is now
invalid. Use "ignore_changes = all" to ignore changes to all attributes.構成は、指定されたTerraformバージョンの要件を満たしていません。バージョン1.0.x以降では、この構文はignore_changesワイルドカードには使用されません。このエラーの原因となる構成例:
resource "oci_core_subnet" "this" {
    ...
    ...
    lifecycle {
      ignore_changes = ["*"]
    }
}かわりにignore_changes = allを使用してください。更新例:
resource "oci_core_subnet" "this" {
    ...
    ...
    lifecycle {
      ignore_changes = all
    }
}問題: 非推奨のHCL構文
ログは、非推奨のHCL構文が存在することを示します。
構成は、指定されたTerraformバージョンの要件を満たしていません。
非推奨のHCL構文を省略するように構成を更新します。