【发布时间】:2021-06-16 06:55:54
【问题描述】:
我有一段 Terraform 代码,它在 AWS 中创建一个带有一组规则的 Web ACL。
provider "aws" {
region = "eu-west-2"
}
resource "aws_wafv2_web_acl" "foo" {
name = "foo"
description = "foo"
scope = "REGIONAL"
default_action {
block {}
}
rule {
name = "AWS-AWSManagedRulesLinuxRuleSet"
priority = 0
override_action {
count {}
}
statement {
managed_rule_group_statement {
name = "AWS-AWSManagedRulesLinuxRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "foo_name"
sampled_requests_enabled = false
}
}
rule {
name = "AWS-AWSManagedRulesSQLiRuleSet"
priority = 1
override_action {
count {}
}
statement {
managed_rule_group_statement {
name = "AWS-AWSManagedRulesSQLiRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "foo_name"
sampled_requests_enabled = false
}
}
tags = {
Tag1 = "Value1"
}
visibility_config {
metric_name = "foo"
sampled_requests_enabled = false
cloudwatch_metrics_enabled = false
}
}
这很好用,但是添加更多规则意味着我的代码开始变得有点像单体。
有没有办法在 Terraform 中使用 dynamic_blocks 或 for_each 或其他东西以看起来更干净、更干燥的方式创建多个规则?
【问题讨论】:
-
是的,可以使用
dynamic块对规则进行建模。具体如何取决于什么数据,规则的哪一部分,你想要变量 -
它们都将具有准确的配置并遵循相同的格式。名称、优先级、override_action、语句。等等。它是通过我正在努力解决的 dynamic_blocks 来构建它的。
-
您没有演示任何动态块或在创建它们时使用的变量。所以不清楚“结构化”是什么意思?任何实际的错误消息或代码示例?
-
你可以使用
for_each- learn.hashicorp.com/tutorials/terraform/for-each
标签: amazon-web-services terraform terraform-provider-aws terraform0.12+ amazon-waf