【问题标题】:how to update terraform state with manual change done on resources如何通过对资源进行手动更改来更新 terraform 状态
【发布时间】:2019-05-29 19:07:41
【问题描述】:

我已经通过 AWS 预置了一些资源,其中也包括 EC2 实例,但之后我们为这些实例附加了一些额外的安全组,这些实例现在被 terraform 检测到,它说它会根据配置文件回滚它.

假设我有以下将 SG 附加到我的 EC2 的代码

vpc_security_group_ids = ["sg-xxxx"]

但现在我的问题是如何更新 terraform.tfstate 文件,使其不应该分离手动附加的安全组:

我可以如下解决:

  1. 我将使用 terraform refresh 刷新 terraform 状态文件,这将更新状态文件。
  2. 然后我必须使用手动附加的安全组 ID 手动更新我的 terraform 配置文件

但是如果我们有一个复杂的场景,那么对于小型设置是可能的,那么我们在 terraform 中是否有任何其他机制可以检测漂移并更新它

谢谢!!

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    当检测到 AWS 上的漂移时,Terraform 不会更新您的源代码。

    你说的过程是对的:

    1. 将在 AWS 中完成的手动更改报告到 Terraform 代码中
    2. 做一个terraform plan。它将刷新状态并显示是否仍有差异

    【讨论】:

    • 感谢 Quentin ...我希望 terraform 将来会对此有所作为
    【解决方案2】:

    这可以通过手动更新 terraform 状态文件来实现,但手动更新此文件不是最佳做法。

    此外,如果您手动或在 terraform 代码之外更新您的 AWS 资源(由 Terraform 创建),那么它会破坏 Infrastructure as Code 的全部目的。

    如果您希望使用 Terraform 在 AWS 上管理复杂的基础设施,那么遵循最佳实践非常好,其中之一就是所有更改都应通过代码完成。

    希望这会有所帮助。

    【讨论】:

    • 能解释一下手动更新吗?我的意思是即使我手动更改状态文件,terraform 仍然会检测到漂移,直到我对配置文件进行更改
    • 是的,您需要更新代码和状态文件。使用Infrastructure as Code时,代码为source of truth
    【解决方案3】:

    您可以使用带有 id 的terraform import 将远程更改导入到您的 terraform 状态文件。稍后使用terraform plan检查更改是否反映在代码中。

    【讨论】:

      【解决方案4】:

      terraform import <resource>.<resource_name> [unique_id_from_aws]

      您可能需要临时注释掉任何依赖于手动创建资源的输出的提供者/资源。

      运行以上后,取消注释依赖并运行terraform refresh

      【讨论】:

        猜你喜欢
        • 2022-10-19
        • 1970-01-01
        • 2019-11-22
        • 2017-10-12
        • 1970-01-01
        • 2020-01-16
        • 2022-01-12
        • 2021-11-23
        • 1970-01-01
        相关资源
        最近更新 更多