スタックから新しいTerraformバージョンへのアップグレード

リソース・マネージャのスタックを新しいTerraformバージョンにアップグレードします。

ノート

これらの手順は、Marketplaceを介して作成されたリソース・マネージャ・スタックには適用されません。

これらのステップは、コマンドラインおよびコンソールで完了します。

Resource Managerでサポートされている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

タスク1: 最新のインフラストラクチャの確認

このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。

  1. 「スタック」リスト・ページで、使用するスタックを選択します。リスト・ページまたはスタックの検索に関するヘルプが必要な場合は、スタックのリストを参照してください。
  2. スタックの詳細ページに予想されるバージョン(Terraformバージョン)が表示されていることを確認します。
    スタックの詳細を取得するCLIおよびAPIの手順については、スタックの詳細の取得を参照してください。
  3. インフラストラクチャに対する保留中の変更を確認します。
    1. 「プラン」を選択します。

      処理が終了すると、関連ジョブの詳細ページが開きます。

      CLIおよびAPIの手順については、プラン・ジョブの作成を参照してください。

    2. 完了したプラン処理のログを確認するには、「ログ」を選択します。

      ログの内容は、スタックが最新であるか、保留中の変更があるかを示します。

      CLIおよびAPIの手順については、ジョブのログの取得を参照してください。

      最新(保留中の変更なし)のスタックの例:

      No changes. Infrastructure is up-to-date.

  4. ログの内容が保留中の変更を示している場合は、保留中の変更を適用します。
    1. 「スタックの詳細」を選択して、スタックの詳細ページに戻ります。

    2. 「適用」を選択します。

      CLIおよびAPIの手順については、適用ジョブの作成を参照してください。

      処理が終了すると、関連ジョブの詳細ページが開きます。

    3. 適用アクションが成功したことを確認します。完了したプラン・アクションのログをレビューするには、「ログ」を選択します。

      CLIおよびAPIの手順については、ジョブのログの取得を参照してください。

スタック・インフラストラクチャが最新の場合は、Terraform構成および状態ファイルをダウンロードするための次のタスクに進むことができます。

タスク2: 構成および状態のダウンロード

ノート

スタックのTerraform構成がGitLabなどのソース・コード制御システムに格納されている場合は、Terraform構成をチェックアウトしてそこからダウンロードします。

スタックのTerraform構成がバケットに格納されている場合は、そこからTerraform構成をダウンロードします。

このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。

  1. コマンドライン・ツールを実行できるコンピュータで、ダウンロードしたTerraform構成および状態を格納するフォルダを作成します。
    フォルダ名の例: c:\StackUpgrade
  2. コンソール: 「スタック」リスト・ページで、使用するスタックを選択します。リスト・ページまたはスタックの検索に関するヘルプが必要な場合は、スタックのリストを参照してください。
  3. 「Terraform構成」の横にある「ダウンロード」を選択します。

    CLIおよびAPIの手順については、スタックのTerraform構成の取得を参照してください。

  4. Terraform状態ファイルをダウンロードします:
    1. スタックの詳細ページで、「状態の表示」を選択します。
    2. スタックの状態ファイルをダウンロードするには、「他のアクション」に移動し、「Terraform状態のダウンロード」を選択します。

    CLIおよびAPIの手順については、スタックの状態ファイルの取得を参照してください。

Terraform構成および状態がダウンロードされたら、Terraform構成をアップグレードするための次のタスクに進むことができます。

タスク3: 構成のアップグレード

このタスクでは、リソース・マネージャで使用されるTerraform構成をアップグレードするためのカスタマイズされたステップを示します。
  1. ダウンロードしたTerraform構成および状態ファイルの格納に使用したものと同じコンピュータで、Terraform構成のアップグレードに必要な.zipファイルをダウンロードします:
  2. .zipファイルの内容を抽出します。
  3. プロバイダ構成を更新して、user_ocidfingerprintprivate_key_pathなどの引数を追加します。これらの引数は以前にコメント・アウトした可能性があります。
    commented-out引数の例:
    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
                        }
  4. この手順の残りのコード例に従うには、抽出されたファイルの名前をterraform_<major-version>に変更します。
    例: terraform_13
  5. コマンド(抽出されたファイル)にアクセスできるようにするには、PATHディレクトリにあるディレクトリに格納します。
  6. コマンド・プロンプトを開きます。
  7. ダウンロードしたスタック情報を格納したフォルダにディレクトリを変更します。
    次に例を示します:
    cd c:\StackUpgrade
  8. Terraformを初期化するには、次のコマンドを実行します:
    terraform_<major-version> init

    次に例を示します:

    terraform_13 init
  9. Terraform構成の構文をアップグレードするには、ターゲットTerraformバージョンのコマンドを実行します:
    ターゲットTerraformのバージョン コマンド
    0.13 terraform_13 13upgrade
    0.14 terraform_14 14upgrade
    1.0 以上 処置は必要ありません。前述のアップグレードがプロセス中に正常に適用された場合は、構成のアップグレードに特別な変更は必要ありません。

    出力には、アップグレードが成功したかどうかが示されます。

    成功した場合は、次のステップに進みます。

    成功しない場合は、指示どおりにTerraform構成ファイルを手動で変更します。

  10. Terraform構成ファイルの.zipアーカイブを作成します。

    .zipアーカイブの例: c:\StackUpgrade\MyConfigUpgraded.zip

    Terraform構成に必要なファイル構造を満たすために、アーカイブでTerraform状態ファイル(terraform.tfstate)および.terraformディレクトリが省略されていることを確認します。

  11. スタックのTerraform構成にソース・コード制御システム(GitHubなど)が使用されている場合は、そこでアップグレードされたTerraform構成をコミットします。
    最新のコミットが、スタック上でジョブを実行するときに使用されます。
  12. オブジェクト・ストレージ・バケットがスタックのTerraform構成に使用されている場合は、アップグレードされたTerraform構成に対応するようにそのバケットの内容を変更します。
    ノート

    アップグレードしたTerraform構成に対応するように変更する前に、現在のバケットをバックアップしてください。バケットをTerraformで使用するファイルに制限します。

    バケットの最新の内容が、スタック上でジョブを実行するときに使用されます。

Terraform構成がターゲットのTerraformバージョンに正常にアップグレードされたら、次のタスクに進んでスタックをアップグレードできます。

タスク4: スタックのアップグレード

このタスクでは、コンソールを使用します。スタックを更新するためのCLIおよびAPIの手順については、スタックの更新を参照してください。
  1. コンソールで、アップグレードするスタックの詳細ページを再度開きます。「スタック」リスト・ページで、使用するスタックを選択します。リスト・ページまたはスタックの検索に関するヘルプが必要な場合は、スタックのリストを参照してください。
  2. スタックの「アクション」メニュー(アクション・メニュー)から、「編集」を選択します。
  3. アップグレードされたTerraform構成をスタックにアップロードします。

    ファイルをダイアログのコントロールにドラッグするか、「参照」を選択してファイルまたはフォルダの場所に移動できます。

    ファイル・パスの例: c:\StackUpgrade\MyConfigUpgraded.zip

    このダイアログ・ボックスには、Terraform構成に含まれる情報が移入されます。

    ノート

    スタックのTerraform構成がソース・コード制御システム(GitHubなど)またはオブジェクト・ストレージ・バケットに格納されている場合、スタックは、ソース・コードへの変更をコミットするかバケットにファイルをアップロードしたときに、タスク3: 構成のアップグレードでアップグレードされたTerraform構成を使用するように構成されていました。)
  4. ターゲットTerraformバージョンを指定します: Terraformバージョンを変更します。
  5. 「次へ」を2回選択し、「変更の保存」を選択します。
スタックは、アップグレードされたTerraform構成および指定されたTerraformバージョンと同期されるようになりました。状態ファイルをインポートするための次のタスクに進むことができます。

タスク5: 状態のインポート

このタスクでは、コンソールを使用します。CLIおよびAPIの手順については、インポート・ジョブの作成を参照してください。
  1. コンソールで、アップグレードするスタックの詳細ページを再度開きます。「スタック」リスト・ページで、使用するスタックを選択します。リスト・ページまたはスタックの検索に関するヘルプが必要な場合は、スタックのリストを参照してください。
  2. 「その他のアクション」に移動し、「インポート状態」を選択します。
  3. 「インポート」パネルで、ダウンロードしたTerraform状態ファイルを追加します。

    ファイルをダイアログのコントロールにドラッグするか、「参照」を選択してファイルまたはフォルダの場所に移動できます。

    ファイル・パスの例: c:\StackUpgrade\terraform.tfstate

  4. 「インポート」を選択します。

    インポート・ジョブが作成されます。新しいジョブが「ジョブ」の下にリストされます。

    ジョブが終了すると、「ジョブ詳細」ページが開きます。

  5. インポート成功の確認: 「ログ」を選択します。

    CLIおよびAPIの手順については、ジョブのログの取得を参照してください。

状態ファイルのインポートが成功したら、次のタスクに進んで問題をチェックします。

タスク6: 問題のチェック

このタスクではコンソールを使用します。ステップのCLIおよびAPIの手順については、関連するリンクを参照してください。

  1. 「スタック」リスト・ページで、使用するスタックを選択します。リスト・ページまたはスタックの検索に関するヘルプが必要な場合は、スタックのリストを参照してください。
  2. インフラストラクチャに対する保留中の変更を確認します。
    1. 「プラン」を選択します。

      処理が終了すると、関連ジョブの詳細ページが開きます。

      CLIおよびAPIの手順については、プラン・ジョブの作成を参照してください。

    2. 完了したプラン処理のログを確認するには、「ログ」を選択します。

      CLIおよびAPIの手順については、ジョブのログの取得を参照してください。

    3. ログの内容で、「アップグレード中のログのトラブルシューティング」で説明されている問題を確認します。

  3. アップグレード中のログのトラブルシューティングの説明に従って、Terraform構成を手動で更新して、リストされた問題を解決します。
  4. スタックの詳細ページで、「編集」を選択し、新しく更新されたTerraform構成をスタックにアップロードします。

    ファイルをダイアログのコントロールにドラッグするか、「参照」を選択してファイルまたはフォルダの場所に移動できます。

    ファイル・パスの例: c:\StackUpgrade\MyConfigUpgraded.zip

    このダイアログ・ボックスには、Terraform構成に含まれる情報が移入されます。

    ノート

    スタックのTerraform構成がソース・コード制御システム(GitHubなど)またはオブジェクト・ストレージ・バケットに格納されている場合、スタックは、ソース・コードへの変更をコミットするかバケットにファイルをアップロードしたときに、タスク3: 構成のアップグレードでアップグレードされたTerraform構成を使用するように構成されていました。)
  5. 「次へ」を2回選択し、「変更の保存」を選択します。
  6. プラン・アクションを再度実行して、問題が関連するログ・コンテンツにリストされなくなったことを確認します。
    1. 「プラン」を選択します。

      処理が終了すると、関連ジョブの詳細ページが開きます。

      CLIおよびAPIの手順については、プラン・ジョブの作成を参照してください。

    2. 完了したプラン処理のログを確認するには、「ログ」を選択します。

      CLIおよびAPIの手順については、ジョブのログの取得を参照してください。

アップグレード中のログのトラブルシューティング

次に、スタックを新しいTerraformバージョンにアップグレードするときにログに表示される可能性のある問題を示します。このリストは、リソース・マネージャ・サービス・チームが認識しているいくつかの問題に限定されます。

エラー: プロバイダのインストールに失敗しました

ログには、次のようなエラーメッセージが表示されます。

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構文を省略するように構成を更新します。