繁体   English   中英

Terraform:安全组中的循环定义

[英]Terraform: Cycle definitions in security group

我正在定义几个属于SG的实例(这来自实例资源定义)

vpc_security_group_ids = ["${aws_security_group.rancher-nodes-sg.id}"]

但是,我也想明确允许上述实例的公共(即elastic )IP如下(这是从上述SG资源定义中得出的)

resource "aws_security_group" "rancher-nodes-sg" {

   ingress {
       from_port = 0
       to_port = 0
       protocol = -1
       cidr_blocks = ["${aws_eip.rancher-node-01-eip.public_ip}/32"]
   }


   ingress {
       from_port = 0
       to_port = 0
       protocol = -1
       cidr_blocks = ["${aws_eip.rancher-node-02-eip.public_ip}/32"]
   }

这会导致Cycle问题

$ terraform apply

Error: Error asking for user input: 1 error(s) occurred:

* Cycle: aws_instance.rancher-node-02, aws_eip.rancher-node-02-eip, aws_security_group.rancher-nodes-sg, aws_instance.rancher-node-01, aws_eip.rancher-node-01-eip

关于如何解决这个问题有什么建议吗?

您不必在安全组规则中指定IP地址...您可以让安全组允许其 self = true

resource "aws_security_group" "rancher-nodes-sg" {
  ingress {
    from_port = 0
    to_port = 0
    protocol = -1
    self = true
  }
}

当在同一模板中具有sg2的入口规则的sg1和具有sg1的入口规则的sg2时,会发生循环错误。 它混淆了Terraform。 为了保护这种错误,请始终使用资源aws_security_group_rule单独设置规则。 如果sg1依赖于sg2,而sg2依赖于sg1,则切勿使用资源aws_security_group创建安全组规则。 首先创建sg,然后设置规则。
关于萨钦

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM