1.7.18.4.1. push
terraform push
命令被用来手动上传本地状态文件到远程 Backend。该命令也可以被用在当前使用的本地状态文件上。
该命令应该很少使用。它时一种需要对远程状态进行手动干预的情况下使用的工具。
1.7.18.4.1.1. 用法
terraform state push [options] PATH
该命令会把 PATH 位置的状态文件推送到当前使用的 Backend 上(可以是当前使用的 terraform.tfstate 文件)。
如果 PATH 为 -
,则从标准输入流读取要推送的状态数据。该数据在写入目标状态之前被完全加载到内存中并进行验证。
注意:Terraform 状态文件必须采用 UTF-8 格式,不带字节顺序标记 (BOM)。对于 Windows 上的 PowerShell,使用 Set-Content 自动以 UTF-8 格式对文件进行编码。例如,运行 terraform state push | sc terraform.tfstate
。
Terraform 会进行一系列检查以防止你进行一些不安全的变更:
- 检查 lineage:如果两个状态文件的 lineage 值不同,Terraform 会禁止推送。一个不同的 lineage 说明两个状态文件描述的是完全不同的基础设而你可能会因此丢失重要数据
- 序列号检查:如果目标状态文件的 serial 值大于你要推送的状态的 serial 值,Terraform 会禁止推送。一个更高的 serial 值说明目标状态文件已经无法与要推送的状态文件对应上了
这两种检查都可以通过添加 -force
参数禁用,但不推荐这样做。如果禁用安全检查直接推送,那么目标状态文件将被覆盖。