代码移至模块时,Terraform正在破坏AWS资源

时间:2019-12-08 16:52:11

标签: terraform amazon-cloudwatch terraform-provider-aws

最初我有Terraform脚本,用于创建CloudWatch日志组。

resource "aws_cloudwatch_log_group" "main_server_log_group" {
  name              = "server_name"
  retention_in_days = 60
}

我应用了它,后来将其移至专用模块并重新命名

resource "aws_cloudwatch_log_group" "server_log_group" {
  name              = "${var.server_name}"
  retention_in_days = 60
}

并在main.tf

中使用此模块
module "main_server" {
  source = "./modules/server"
  server_name = "${local.main_server_name}"
}

现在Terrafrom Apply正在销毁原始CloudWatch组并创建一个新组。

module.main_server.aws_cloudwatch_log_group.main_server_log_group[0]: Creating...
aws_cloudwatch_log_group.main_server_log_group: Destroying... [id=xxxx]

我认为这是因为Terraform资源的名称已更改,不是吗? 这是不期望的。 CW组的名称未更改。

有什么变通办法可以在重构Terraform代码时保留现有资源?

1 个答案:

答案 0 :(得分:1)

找到了解决方案,显然可以将资源移动到模块中。状态文件需要更新-https://www.terraform.io/docs/commands/state/mv.html

更新 移动状态对我不起作用。但是删除状态和导入状态可以解决问题。

terraform state rm 'my_resource'
terraform import ...