使用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后应用了不正确的更改代码,导致无意中删除或更改了已导入的资源,因此必须避免这种情况发生。

但是,如果多个人同时修改代码的话,

    1. 执行terraform import命令来实施A的更改

 

    1. 应用B的更改

 

    应用A的更改

如果按照这样的顺序,导入的资源将被删除。
然而,如果不导入,就无法查看与代码的差异,因此几乎没有机会可以在零时间内导入和修复代码。

此外,如果在合并公关(PR)时设置了可以自动应用更改的流程管道,那么很有可能其他人在导入之前就无意中进行了合并操作。

在这种情况下,导入块是很有用的。

在实际经历中,有些时候在导入资源并创建公关请求(PR)的过程中,我们不得不进行紧急发布。结果由于匆忙地合并了用于紧急发布的PR,导致导入的资源消失。

如果可以的话…

希望能够将terraform state rm命令也进行代码化。

总结

我意识到,当多人合作开发时,导入块非常方便。

我的感受

当初我得知这个新功能时,虽然并没有太大的改变,但为什么要实施这个功能让我很困惑。但当我开始使用它时,我确实被它的实用性所震撼。老实说,我之前有点小看它了。

广告
将在 10 秒后关闭
bannerAds