如何创建具有多个标签的单个 dlm 策略
how to create single dlm policy with multiple tags
正在尝试创建 DLM(数据生命周期管理)策略以每 12 小时拍摄一次 ebs 快照。 AWS UI 允许指定多个目标标签以将多个实例合并到一个策略中。
尝试使用 terraform 创建相同的内容,https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dlm_lifecycle_policy#target_tags
target_tags 似乎没有采用多个映射值 -
target_tags = {
Name = "g1n1",
Name = "g1n2"
}
Terraform 计划正在从列表中获取最后一个地图值 -
# aws_dlm_lifecycle_policy.example has changed
~ resource "aws_dlm_lifecycle_policy" "example" {
id = "policy-0719fc4b498671592"
tags = {}
# (5 unchanged attributes hidden)
~ policy_details {
~ target_tags = {
~ "Name" = "g1n1" -> "g1n2"
}
# (1 unchanged attribute hidden)
# (1 unchanged block hidden)
}
}
为了克服这个问题,我为每个实例创建了 2 个策略,但是有什么方法可以为多个实例创建单个策略吗?
resource "aws_dlm_lifecycle_policy" "DLM_g1n1" {
description = "DLM_g1n1"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = {
Name = "g1n1"
}
}
}
resource "aws_dlm_lifecycle_policy" "DLM_g1n2" {
description = "DLM_g1n2"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "cedcas-snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = {
Name = "g1n2"
}
}
}
TF里好像不行。但是您可以使用 count
或 for_each
:
而不是创建完全独立的 aws_dlm_lifecycle_policy
variable "tags" {
default = [{Name = "g1n1"}, {Name = "g1n2"}]
}
resource "aws_dlm_lifecycle_policy" "DLM_g1" {
count = length(var.tags)
description = "DLM_g1n${count.index}"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = var.tags[count.index]
}
}
正在尝试创建 DLM(数据生命周期管理)策略以每 12 小时拍摄一次 ebs 快照。 AWS UI 允许指定多个目标标签以将多个实例合并到一个策略中。
尝试使用 terraform 创建相同的内容,https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dlm_lifecycle_policy#target_tags
target_tags 似乎没有采用多个映射值 -
target_tags = {
Name = "g1n1",
Name = "g1n2"
}
Terraform 计划正在从列表中获取最后一个地图值 -
# aws_dlm_lifecycle_policy.example has changed
~ resource "aws_dlm_lifecycle_policy" "example" {
id = "policy-0719fc4b498671592"
tags = {}
# (5 unchanged attributes hidden)
~ policy_details {
~ target_tags = {
~ "Name" = "g1n1" -> "g1n2"
}
# (1 unchanged attribute hidden)
# (1 unchanged block hidden)
}
}
为了克服这个问题,我为每个实例创建了 2 个策略,但是有什么方法可以为多个实例创建单个策略吗?
resource "aws_dlm_lifecycle_policy" "DLM_g1n1" {
description = "DLM_g1n1"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = {
Name = "g1n1"
}
}
}
resource "aws_dlm_lifecycle_policy" "DLM_g1n2" {
description = "DLM_g1n2"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "cedcas-snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = {
Name = "g1n2"
}
}
}
TF里好像不行。但是您可以使用 count
或 for_each
:
aws_dlm_lifecycle_policy
variable "tags" {
default = [{Name = "g1n1"}, {Name = "g1n2"}]
}
resource "aws_dlm_lifecycle_policy" "DLM_g1" {
count = length(var.tags)
description = "DLM_g1n${count.index}"
execution_role_arn = "AWSDataLifecycleManagerDefaultRole"
policy_details {
resource_types = ["INSTANCE"]
schedule {
name = "snapshot-every12hours"
create_rule {
interval = 12
interval_unit = "HOURS"
times = ["04:30"]
}
retain_rule { count = 28 }
copy_tags = false
}
target_tags = var.tags[count.index]
}
}