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 工作空间操作。 查看 Terraform 升级指南 以了解可能需要 TF 配置/模板更新的特定于发行版的更改。

升级 Terraform 模板 V 1.x 及更高版本

从 Terraform 1.0开始,可以通过对工作空间版本进行简单更改,将 Schematics 工作空间更新为最新的 1.x 发行版。 要从 0.x 发行版进行更新,请参阅 升级 Terraform 模板 V 0.x 一节

Schematics 支持 Terraform_v1.x 并计划在一般可用性后 45-60 days 提供发行版。 建议 Terraform 模板对 Terraform 模板的 versions.tf 中的 required_version 参数使用版本范围约束 (例如,>>=~> ),以允许对次发行版和补丁发行版进行升级。 这允许 Schematics 自动采用工作空间版本设置的 Terraform 版本的最新补丁或次发行版。

terraform {
required_version = "~> 1.1"
}

更新工作空间 Terraform 1.x 版本

可以通过 Schematics 工作空间 更新 API来更新工作空间的正在使用的 Terraform 版本。

工作空间 Terraform 版本参数的格式为 terraform_v1.4terraform_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 更新 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 模板 V 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 已不推荐使用 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.12 工作空间以使用 Terraform 的 v0.13 版本是一项多步骤任务。 您必须仔细查看相关版本升级的 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 文件

    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 state pull 命令从现有 Schematics 工作空间下载 Terraform 状态文件。

    创建工作空间时,将使用 tfstate Schematics 将其视为安全文件。 此外,无法通过 UI 拉取已创建的 tfstate 文件。 您需要使用命令行来 拉取 状态文件和 创建工作空间

    将下载的状态文件作为 terraform.tfstate 复制到 Terraform 执行文件夹中。

  7. 在命令行上运行状态替换提供程序命令,以更新状态文件中的 IBM Cloud 提供程序版本。

    terraform state replace-provider registry.terraform.io/-/ibm registry.terraform.io/ibm-cloud/ibm.
    
  8. 验证是否对 terraform.tfstate 文件进行了更新,并将 Terraform 版本从 1.3 更新到 >= 1.4 以及更新为 registry.terraform.io/ibm-cloud/ibm 的提供程序。

  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 Apply。 这将使用仅与该版本和该版本相关的模式更改来更新 Terraform 状态文件。 成功升级单个版本后,可以执行下一次版本更新。

  1. 阅读发行版的 Terraform 升级指南,并实现任何必需的配置更改。
  2. 遵循 升级 Terraform 模板 V 1.x 和更高版本 中概述的过程,将单个版本升级到目标版本。
  3. 请在工作空间设置页面中验证 TF 版本现在是否已设置为所需版本。
  4. 对工作空间运行“生成计划”操作。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。 该计划不应导致对资源的拟议修改。
  5. 对工作空间运行“应用计划”操作。 此步骤 必需 以执行 Terraform 状态文件更新。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。
  6. 现在,您已成功升级单个版本步骤。