【发布时间】:2019-10-17 12:15:26
【问题描述】:
当我刚开始使用 Terraform 时,我或多或少地天真地单独声明了资源,如下所示:
resource "aws_cloudwatch_log_group" "image1_log" {
name = "${var.image1}-log-group"
tags = module.tagging.tags
}
resource "aws_cloudwatch_log_group" "image2_log" {
name = "${var.image2}-log-group"
tags = module.tagging.tags
}
resource "aws_cloudwatch_log_stream" "image1_stream" {
name = "${var.image1}-log-stream"
log_group_name = aws_cloudwatch_log_group.image1_log.name
}
resource "aws_cloudwatch_log_stream" "image2_stream" {
name = "${var.image2}-log-stream"
log_group_name = aws_cloudwatch_log_group.image2_log.name
}
然后,在 10-20 个不同的日志组之后,我意识到随着基础设施的增长,这将无法正常工作。我决定定义一个变量列表:
variable "image_names" {
type = list(string)
default = [
"image1",
"image2"
]
}
然后我使用索引替换了资源:
resource "aws_cloudwatch_log_group" "service-log-groups" {
name = "${element(var.image_names, count.index)}-log-group"
count = length(var.image_names)
tags = module.tagging.tags
}
resource "aws_cloudwatch_log_stream" "service-log-streams" {
name = "${element(var.image_names, count.index)}-log-stream"
log_group_name = aws_cloudwatch_log_group.service-log-groups[count.index].name
count = length(var.image_names)
}
这里的问题是当我运行terraform apply 时,我得到4 resources to add, 4 resources to destroy。我用一个旧的日志组对此进行了测试,发现我的所有日志都被擦除了(显然,因为日志被销毁了)。
日志组/流的名称和其他属性是相同的- 我只是重构了基础架构代码以使其更易于维护。如何在不删除现有日志组的情况下维护现有日志组,但仍重构代码以使用列表?
【问题讨论】:
标签: amazon-web-services terraform amazon-cloudwatch