用于嵌套配置的动态块
使用动态块以编程方式生成重复的嵌套配置块,免去为安全组规则等内容复制粘贴。
用于嵌套配置的动态块 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
重复问题
某些资源包含重复的嵌套块,例如安全组中的多个 ingress 规则。逐个手写既冗长,也难以保持 DRY。动态块可以根据集合生成这些块。
先看静态块
下面是手动编写的版本:三个几乎完全相同的 ingress 块。请想象一下维护十几个这样的块。
resource "aws_security_group" "web" {
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}动态块的组成
一个 dynamic 块包含:与嵌套块名称匹配的标签、一个 for_each 集合,以及用于描述每个生成实例的 content 块。
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}迭代器对象
在 content 中,可以通过以块标签命名的对象引用当前元素。该对象提供 .value(元素)和 .key(映射键或列表索引)。
定义输入变量
使用带类型的变量驱动动态块。对象列表可以让每条规则都清晰地说明自身含义。
variable "rules" {
type = list(object({
port = number
cidrs = list(string)
}))
}整合起来
现在,无论传入多少条规则,该资源都能保持简洁。
resource "aws_security_group" "web" {
name = "web-sg"
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}
}重命名迭代器
iterator 参数可以重命名迭代变量。在嵌套动态块中,这有助于避免混淆。
dynamic "ingress" {
for_each = var.rules
iterator = rule
content {
from_port = rule.value.port
to_port = rule.value.port
}
}有条件地跳过块
传入空集合即可生成零个块。在 for_each 上使用三元表达式,可以让块变为可选项。
dynamic "logging" {
for_each = var.enable_logging ? [1] : []
content {
target_bucket = var.log_bucket
}
}嵌套动态块
动态块可以嵌套。请使用不同的迭代器,使内部块能够明确引用两个层级。
dynamic "setting" {
for_each = var.settings
iterator = s
content {
namespace = s.value.namespace
name = s.value.name
value = s.value.value
}
}何时不应使用动态块
动态块会增加间接性,并可能降低可读性。如果只有一两个静态块,请直接保留其字面定义。当数量由数据驱动时,再使用动态块。
检查结果
运行计划,确认生成的块符合预期。Terraform 会将集合中的每个元素展开为一个具体的嵌套块。
terraform plan快速检查
测试您对动态块的了解。
回顾:保持嵌套配置简洁
动态块可以根据数据生成嵌套配置:
for_each驱动迭代;content定义每个块。- 迭代器提供
.value和.key。 - 空集合可以使块变为可选项。
- 请谨慎使用,以保持配置的可读性。
常见问题解答
「用于嵌套配置的动态块」课时是免费的吗?
是的 — 「用于嵌套配置的动态块」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「用于嵌套配置的动态块」这节课中我会学到什么?
使用动态块以编程方式生成重复的嵌套配置块,免去为安全组规则等内容复制粘贴。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「用于嵌套配置的动态块」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。