升级到新的 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.4
或 terraform_v1.5
-
选择要更新的工作空间,并验证其是否处于
Normal
状态,以及计划操作是否未生成任何建议的资源更改。 保存workspace_id
并记下工作空间所在的区域。 -
使用 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>" } ] }'
- 使用
-
请在工作空间设置页面中验证 TF 版本现在是否已设置为所需版本。
-
对工作空间运行“生成计划”操作。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。 该计划不应导致对资源的拟议修改。
-
对工作空间运行“应用计划”操作。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。
-
您现在已成功升级。
将 Terraform 模板 V 0.x 升级到 1.x
在 0.x 发行版中,Terraform 版本升级是一个逐步过程,通过每个发行版进行升级。 升级不支持跨多个发行版进行升级,必须按发行版执行。 某些更新需要执行 Terraform upgrade
命令来修改配置文件以及对 Terraform 状态文件的更改。 无法在 Schematics中执行这些步骤。 必须使用 Terraform 的本地副本来升级工作空间 Terraform 模板。 遵循用于升级 0.x 发行版的步骤。
版本 | 建议 |
---|---|
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 版本。
-
升级 Terraform 配置文件以使用较新的语法和语义。
-
迁移 Terraform 状态文件以与较新版本兼容。Schematics 不支持在修改 Terraform 状态文件时构建。 因此,您需要遵循以下步骤。
- 在本地机器中准备 Terraform 配置文件和 Terraform 状态文件 的升级版本。
- 使用新的 Terraform 配置文件和 Terraform 状态文件创建新的 Schematics 工作空间。
- 删除较旧的工作空间 而不破坏资源。
以下是从 0.12 升级到 0.13:
-
检查位于
v0.12
的 Schematics 工作空间是否具有资源,上次应用是否成功,以及工作空间是否处于normal
状态。 验证 Terraform 配置文件和 Terraform 状态文件是否处于Terraform v0.12
的一致状态。 -
将
Terraform v0.12
Schematics 工作空间使用的 Git 存储库下载或克隆到本地计算机。 -
在本地机器上安装 Terraform 0.13。
-
将目录切换到克隆的存储库,并通过运行
Terraform v0.13upgrade
命令将配置文件升级到Terraform v0.13
。 有关更多信息,请参阅 升级到Terraform v0.13
文档。 升级命令生成具有terraform
配置块的versions.tf
文件。 -
编辑
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" }
-
使用 Schematics state pull 命令从现有 Schematics 工作空间下载 Terraform 状态文件。
创建工作空间时,将使用
tfstate
Schematics 将其视为安全文件。 此外,无法通过 UI 拉取已创建的tfstate
文件。 您需要使用命令行来 拉取 状态文件和 创建工作空间。将下载的状态文件作为
terraform.tfstate
复制到 Terraform 执行文件夹中。 -
在命令行上运行状态替换提供程序命令,以更新状态文件中的 IBM Cloud 提供程序版本。
terraform state replace-provider registry.terraform.io/-/ibm registry.terraform.io/ibm-cloud/ibm.
-
验证是否对
terraform.tfstate
文件进行了更新,并将 Terraform 版本从1.3
更新到>= 1.4
以及更新为registry.terraform.io/ibm-cloud/ibm
的提供程序。 -
将升级后的 TF 配置文件和
version.tf
推送回 Git 存储库。 -
将已修改的
terraform.tfstate
文件的内容复制到state.json
文件。 -
创建或更新
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"
}]
}
- 通过命令行运行这些命令,创建一个新的 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>
.
- [可选] 您可以删除使用
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 状态文件。 成功升级单个版本后,可以执行下一次版本更新。
- 阅读发行版的 Terraform 升级指南,并实现任何必需的配置更改。
- 遵循 升级 Terraform 模板 V 1.x 和更高版本 中概述的过程,将单个版本升级到目标版本。
- 请在工作空间设置页面中验证 TF 版本现在是否已设置为所需版本。
- 对工作空间运行“生成计划”操作。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。 该计划不应导致对资源的拟议修改。
- 对工作空间运行“应用计划”操作。 此步骤 必需 以执行 Terraform 状态文件更新。 验证该命令是否成功运行而未发生错误,并且未记录任何意外消息。
- 现在,您已成功升级单个版本步骤。