IBM Cloud Docs
Terraformの新バージョンへのアップグレード

Terraformの新バージョンへのアップグレード

Schematics によって使用されるオープン・ソースの IaC ツールは、新しいバージョンの Terraform と Helm、およびサポートする Terraform プロバイダーと共に進化しています。 時間の経過とともに、最新バージョンの Terraform を使用するために、長寿命のワークスペース環境をアップグレードする必要があります。これは、古いバージョンが非推奨になり、サポート対象外になるためです。

すべての Schematics ユーザーは、操作とサポートの継続性を確保するために、最新の Terraform バージョンに定期的にアップグレードすることをお勧めします。 Schematics は、Terraform リリースの Hashicorp サポート・モデルに従い、Hashicorp に従ってバージョンを非推奨にします。

Terraform v1.0 は Terraform のメジャー・リリースであり、安定した 1.x リリースへの移行を示しています。 Hashicorp は、 1.x リリースの互換性の約束 を行いました。コア・フィーチャーの場合、 1.x リリースによるアップグレードに追加の変更は必要ありません。

つまり、 v1.x リリース間のアップグレードを簡単に行うことを目的としており、構成を変更する必要はなく、アップグレード・ステップを実行するためのコマンドも、Terraform に関してセットアップした自動化に対する変更も必要ありません。

1.x リリースにアップグレードする場合、特定の Schematics ワークスペース・アクションは必要ありません。 TF 構成/テンプレートの更新が必要になる可能性があるリリース固有の変更については、Terraform の アップグレード・ガイド を参照してください。

Terraform テンプレート・バージョン 1.x 以上のアップグレード

Terraform 1.0以降、 Schematics のワークスペースは、ワークスペースのバージョンを簡単に変更することで、より新しい 1.x リリースに更新できます。 0.x リリースから更新するには、セクション「 Terraform テンプレートのバージョン 0.xのアップグレード 」を参照してください。

Schematics は、一般出荷開始日以降に Terraform_v1.x リリースを使用可能にする 45-60 days ことをサポートします。 Terraform テンプレートの versions.tfrequired_version パラメーターに >>=~> などのバージョン範囲制約を使用することをお勧めします。これにより、マイナー・リリースとパッチ・リリースのアップグレードが可能になります。 これにより、 Schematics は、ワークスペース・バージョンによって設定された Terraform バージョンの最新のパッチまたはマイナー・リリースを自動的に採用できます。

terraform {
required_version = "~> 1.1"
}

ワークスペースの Terraform 1.x バージョンの更新

ワークスペースの Terraform の使用中のバージョンは、 Schematics ワークスペースの Update APIを使用して更新できます。

ワークスペース Terraform バージョン・パラメーターの形式は、 terraform_v1.4 または terraform_v1.5 です。

  1. 更新するワークスペースを選択し、そのワークスペースが Normal 状態であること、およびプラン操作によって提案されたリソース変更が生成されないことを確認します。 workspace_id を保存し、ワークスペースがホストされている領域をメモします。

  2. IBM Cloud CLI および API を使用して、ワークスペースの Terraform のバージョンを更新します。 これらのワークスペース操作は領域固有です。 以下のコマンドで必要になるため、UI のワークスペース領域に注意してください。

    • ibmcloud login を使用して IBM Cloud CLI にログインします。
    • ibmcloud target -r <region> を使用して、更新するワークスペースと同じになるように CLI ターゲット領域を設定します。
    • コマンド ibmcloud iam oauth-tokens を使用して、 Schematics API で使用する IAM oauth トークンを生成します。
    • トークン・データをコピーし、以下のコマンド・テキストに挿入します。ストリング <token-data> を置き換えて、 <terraform_version> を必要な Terraform のバージョンと <workspace_id> に設定します。
    • ワークスペースを更新するには、 cURL コマンドを実行して Schematics Update API を呼び出し、Terraform のバージョンを更新します。 この操作は地域固有であり、ワークスペース・ターゲット地域に対して必要な Schematics API 地域エンドポイント を指定する必要があります。 コマンド内のテキスト <schematics-region-endpoint> を、ターゲット・ワークスペース・リージョンのエンドポイントに置き換えます。
        curl -X PUT https://<schematics-region-endpoint>.cloud.ibm.com/v1/workspaces/<w_id> \
        -H 'Authorization: Bearer <token>' \
        -H 'refresh_token: <token>' \
        -d '{
        "type": [
            "<terraform_version>"
        ],
        "template_data": [
            {
                "folder": ".",
                "type": "<terraform_version>"
            }
        ]
        }'
    
  3. ワークスペース設定ページで、TF バージョンが必要なバージョンに設定されていることを確認してください。

  4. ワークスペースに対して「計画の生成」操作を実行します。 コマンドがエラーなしで正常に実行され、予期しないメッセージがログに記録されないことを確認します。 計画の結果、リソースに対する変更が提案されないようにする必要があります。

  5. ワークスペースに対して「プランの適用」操作を実行します。 コマンドがエラーなしで正常に実行され、予期しないメッセージがログに記録されないことを確認します。

  6. これで正常にアップグレードされました。

Terraform テンプレートのバージョン 0.x を 1.x にアップグレード

0.x リリースでは、Terraform のバージョン・アップグレードは、各リリースを通じてアップグレードする段階的なプロセスです。 アップグレードは、複数のリリース間でのアップグレードをサポートしていないため、リリースごとに実行する必要があります。 一部の更新では、Terraform upgrade コマンドを実行して構成ファイルも Terraform 状態ファイルに変更する必要があります。 これらのステップは Schematics内では実行できません。 ワークスペース Terraform テンプレートは、Terraform のローカル・コピーを使用してアップグレードする必要があります。 0.x リリースをアップグレードするための手順に従います。

Terraform のバージョンのリスト
バージョン 推奨
v0.12 v0.13 アップグレード・ガイド を確認し、 Terraform v0.12 ワークスペースの v0.13 へのアップグレード. Schematics has deprecated Terraform v0.12 の手順に従ってください。
v0.13 Terraform v0.14 をアップグレードするには、 Terraform v0.14 を指定して terraform apply を実行し、状態フォーマットのアップグレードを完了する必要があります。 エラーが発生した場合は、 v0.14 アップグレード・ガイドを参照してください。 upgrade-13-to10 の手順に従います。
v0.14 Terraform v1.0 バージョンに直接アップグレードできます。 v0.15 アップグレード・ガイドを確認します。
v0.15 Terraform v1.0 バージョンに直接アップグレードできます。 v1.0 アップグレード・ガイドを確認します。

Terraform v0.12 ワークスペースの v0.13 へのアップグレード

v0.13 バージョンの Terraform を使用するための v0.12 ワークスペースのアップグレードは、複数のステップからなるタスクです。 関連するバージョンのアップグレードについては、 Terraform アップグレード・ガイド を注意深く確認する必要があります。

以下の手順で、 Schematics ワークスペースの Terraform を現在のバージョンにアップグレードします。

  1. 新しい構文とセマンティクスを使用するように Terraform 構成ファイルをアップグレードする。

  2. Terraformステートファイルを新しいバージョンと互換性があるように移行する。 Schematics、Terraformステートファイルの組み込み修正には対応していない。 したがって、以下のステップを実行する必要があります。

    1. ローカル・マシンで、アップグレードされたバージョンの Terraform 構成ファイルと Terraform 状態ファイルを準備します。
    2. 新しい Terraform 構成ファイルと Terraform 状態ファイルを使用して、 新しい Schematics ワークスペースを作成します
    3. リソースを破棄せずに 古いワークスペースの削除 を実行します。

以下に、 0.12 から 0.13: にアップグレードするための詳細なステップを示します。

  1. v0.12 の Schematics ワークスペースにリソースがあるかどうか、最後の適用が成功したかどうか、およびワークスペースが normal 状態であるかどうかを確認します。 Terraformの設定ファイルとTerraformの状態ファイルが、 Terraform v0.12 の一貫した状態であることを確認する。

  2. Terraform v0.12 Schematics ワークスペースで使用している Git リポジトリを、ローカルマシンにダウンロードするかクローンします。

  3. ローカル・マシンに Terraform 0.13 をインストールします。

  4. クローンしたリポジトリにディレクトリを変更し、 Terraform v0.13upgrade コマンドを実行して設定ファイルを Terraform v0.13 にアップグレードします。 詳しくは、 Terraform v0.13 ドキュメントへのアップグレードをご覧ください。 アップグレード・コマンドは、 terraform 構成ブロックを持つ versions.tf ファイルを生成します。

  5. コード・ブロックに示されているように、 versions.tf ファイルを編集して、ソース・パラメーターを source = "IBM-Cloud/ibm" に設定します。

    versions.tf file

    terraform {
        required_providers {
        ibm = {
          # TF-UPGRADE-TODO
          #
          # No source detected for this provider. You must add a source address
          # in the following format:
          #
          source = "IBM-Cloud/ibm"
          #
          # For more information, see the provider source documentation:
          #
        }
        }
        required_version = ">= 0.13"
    }
    
  6. Schematics 状態プル コマンドを使用して、既存の Schematics ワークスペースから Terraform 状態ファイルをダウンロードします。

    tfstate Schematics を使用してワークスペースが作成された場合、そのワークスペースはセキュア・ファイルと見なされます。 また、作成した tfstate ファイルをUIから引き出すことはできない。 コマンド・ラインを使用して、状態ファイルを プル し、 ワークスペースを作成 する必要があります。

    ダウンロードした状態ファイルを terraform.tfstate として Terraform 実行フォルダーにコピーします。

  7. コマンド・ラインで状態置換プロバイダー・コマンドを実行して、状態ファイル内の IBM Cloud プロバイダーのバージョンを更新します。

    terraform state replace-provider registry.terraform.io/-/ibm registry.terraform.io/ibm-cloud/ibm.
    
  8. 1.3 から >= 1.4 への Terraform バージョンの更新と、 registry.terraform.io/ibm-cloud/ibm として更新されたプロバイダーを使用して、 terraform.tfstate ファイルが更新されていることを確認します。

  9. アップグレードした TF 構成ファイルと version.tf を Git リポジトリーにプッシュして戻します。

  10. 変更した terraform.tfstate ファイルの内容を state.json ファイルにコピーします。

  11. コード・ブロックに示されているように、 workspace.json ファイルを作成または更新します。

{
    "name": "gb",
    "type": [
        "terraform_v1.4"
    ],
    "description": "migration workspace",
    "template_repo": {
        "url": "Provide your Git repository link"
    },
    "workspace_status" : {
        "frozen": false
    },
    "template_data": [{
        "folder": ".",
        "type": "terraform_v1.4"
    }]
}
  1. コマンドラインからこれらのコマンドを実行し、新しいTerraform v0.13 ワークスペースを作成します:
  • ibmcloud schematics workspace new --file workspace.json --state state.json.

  • ibmcloud schematics workspace get --id  <workspace-id>. ワークスペースのステータスが inactive でない場合は、数秒待ってからコマンドを再試行してください。

  • ibmcloud schematics plan id <workspace id>.

  • ibmcloud schematics job get --id <job-id form plan>. ワークスペース・プランのステータスが success でない場合は、数秒待ってからコマンドを再試行してください。

  • ibmcloud schematics apply --id <workspace id>.

  • ibmcloud schematics job get --id <job-id from apply>.

  1. [オプションで]、 Terraform v0.12 を使用している Schematics ワークスペースを削除することができる。

古いワークスペースで使用されているリソースを破棄しないでください。

Terraform テンプレートを v0.13 以上から v1.0 にアップグレードします。

バージョン 0.13 から 0.15 までは、0.13 to 0.14, 0.14 to 0.15, 0.15 to 1.0 という段階的なアップグレードが必要です。

このプロセスは、各バージョン・ステップで同じです。 バージョンが変更されるたびに Terraform 適用を実行する必要があります。 これにより、Terraform 状態ファイルが、そのバージョンとそのバージョンのみに関連するスキーマ変更で更新されます。 単一バージョンを正常にアップグレードした後、次のバージョン更新を実行できます。

  1. このリリースの Terraform アップグレード・ガイド を読み、必要な構成変更を実装します。
  2. Terraform テンプレート・バージョン 1.x 以上のアップグレード で概説されているプロセスに従って、単一バージョンをターゲット・バージョンにアップグレードします。
  3. ワークスペース設定ページで、TF バージョンが必要なバージョンに設定されていることを確認してください。
  4. ワークスペースに対して「計画の生成」操作を実行します。 コマンドがエラーなしで正常に実行され、予期しないメッセージがログに記録されないことを確認します。 計画の結果、リソースに対する変更が提案されないようにする必要があります。
  5. ワークスペースに対して「プランの適用」操作を実行します。 このステップは、Terraform 状態ファイルの更新を実行する 必須 です。 コマンドがエラーなしで正常に実行され、予期しないメッセージがログに記録されないことを確認します。
  6. これで、単一バージョンのステップが正常にアップグレードされました。