amazon-web-services - Terraform - 为安全组迭代并创建入口规则

标签 amazon-web-services terraform terraform-provider-aws aws-security-group

我一直在为 AWS 基础设施编写可重用的模块。在创建安全组时,我的方法是为安全组创建一个通用模块并在控制代码中提供端口列表。但是,当使用 count 时它为每个端口创建一个安全组。有没有办法像在这种情况下那样迭代特定部分?

SG模块

resource "aws_security_group" "this" {
  name        = var.sg_name
  description = var.description
  vpc_id      = var.vpc_id

  count = min(length(var.ingress_ports))
  ingress {
    from_port   = var.ingress_ports[count.index]
    to_port     = var.ingress_ports[count.index]
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/8"]
  }

  egress {
    from_port       = 0
    to_port         = 0
    protocol        = "-1"
    cidr_blocks     = ["0.0.0.0/0"]
  }
}

控制码
module "qliksense_sg" {
  source = "modules/aws-sg"

  sg_name = "My-SG"
  description = "A security group"
  vpc_id = module.vpc.vpc_id

  ingress_ports = ["80", "443"]
}

最佳答案

要在 Terraform 0.12 中执行此操作,您可以使用 dynamic blocks .事实上,该文档链接中给出的示例用于在端口列表上添加入口规则:

resource "aws_security_group" "example" {
  name = "example" # can use expressions here

  dynamic "ingress" {
    for_each = var.service_ports
    content {
      from_port = ingress.value
      to_port   = ingress.value
      protocol  = "tcp"
    }
  }
}

关于amazon-web-services - Terraform - 为安全组迭代并创建入口规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59154055/

相关文章:

amazon-web-services - 如何检查我的 CDK 堆栈中的所有资源是否都具有某些属性?

python - 使用 boto3 向 S3 存储桶添加额外标签

amazon-web-services - Auto Scaling 组不会在启动配置更改时更新

amazon-web-services - 在 terraform 对象中使用输出值

mysql - 如何解决在亚马逊托管 jboss Web 应用程序时数据库连接被拒绝的问题

amazon-web-services - 如何检查与 AWS 中特定 IAM 访问 key 关联的权限

Terraform 0.11.1 不支持状态版本 4

azure - 使用 Azure Terraform AzApi 提供程序为容器应用程序环境启用内部负载平衡模式

amazon-web-services - 如何解决错误加载状态: AccessDenied: Access Denied status code: 403 when trying to use s3 for terraform backend?

terraform - terraform中的“环境中至少需要一个字段”错误