使用Terraform的import模块后的体验如何?
这是Metaps Advent Calendar的第二天文章。
Terraform发布1.6版本已经过去大约2个月了。
作为这个重大更新中的关注点之一,我们有了import块。
我想写下使用它后的感受。
坦白说,我低估了它。
import模块是
允许在 terraform 中管理没有纳入其管理范围的资源的功能。如果想要将资源纳入 terraform 管理下,则可以使用 import 功能。
import 块使我们可以将 terraform import 命令的功能写入代码中。
import 块是与 terraform import 命令等效的一种写法。
import {
to = xxx.xxx
id = yyy
}
以类似方式进行记录,并导入import命令。
terraform import xxx.xxx yyy
会得到相同的结果。
优势
以下是一种选择的中文释义:
优点是,
-
- importのし忘れを防げる
-
- importしていない状態でコードとの差分が見られる
- 実際にimportされるのはapplyコマンド実行時
可以提到的有以下几点。
防止忘记导入的方法
在执行apply之前必须进行import操作,有很大可能会忘记这个步骤。能够防止这种情况发生是一个显著的优势。
只需一个选择,用中文本地化地解释以下内容:
在未导入的情况下,可以查看代码与之间的差异。
如果使用import命令,没有实际进行导入的话,无法确认与代码的差异。但是,通过使用import块,即使没有实际导入,也可以确认差异。
只有在执行apply命令时才会真正引入。
在使用import命令时,导入操作和应用操作之间可能会有一定的间隔,但在import块中,可以在一次操作中几乎立即执行导入和应用操作。
还差点儿
作为缺点,
-
- 一度applyしてしまうと不要なブロックになってしまう
- terraform importコマンドと大して手間は変わらない
以下是可能的一个选项:肯定有以下一些例子。
一旦执行了terraform apply,就会变成不必要的块。
应该在某个时机将其删除,因为一旦应用,它就会变成不必要的代码。
使用terraform import命令时,所需的工作量并没有改变。
如果说通过导入模块可以显著减少工作量,实际上并不一定如此。相反,后续需要删除模块的工作反而增加了额外的操作。
用例
能够最大程度受益于导入块的场景是当“多人同时修改代码”的时候。
我认为,terraform import命令最令人担忧的部分是,在import后应用了不正确的更改代码,导致无意中删除或更改了已导入的资源,因此必须避免这种情况发生。
但是,如果多个人同时修改代码的话,
-
- 执行terraform import命令来实施A的更改
-
- 应用B的更改
- 应用A的更改
如果按照这样的顺序,导入的资源将被删除。
然而,如果不导入,就无法查看与代码的差异,因此几乎没有机会可以在零时间内导入和修复代码。
此外,如果在合并公关(PR)时设置了可以自动应用更改的流程管道,那么很有可能其他人在导入之前就无意中进行了合并操作。
在这种情况下,导入块是很有用的。
在实际经历中,有些时候在导入资源并创建公关请求(PR)的过程中,我们不得不进行紧急发布。结果由于匆忙地合并了用于紧急发布的PR,导致导入的资源消失。
如果可以的话…
希望能够将terraform state rm命令也进行代码化。
总结
我意识到,当多人合作开发时,导入块非常方便。
我的感受
当初我得知这个新功能时,虽然并没有太大的改变,但为什么要实施这个功能让我很困惑。但当我开始使用它时,我确实被它的实用性所震撼。老实说,我之前有点小看它了。