无法跨区域更新安全组规则

时间:2018-11-02 06:22:01

标签: amazon-web-services amazon-vpc

Terraform版本:v0.11.8

在部署当前的安全组(俄亥俄州)后,我试图更新位于另一个区域(爱尔兰)的安全组的规则。

下面是我的代码段:

variable "aws_account_id" {}

terraform {
  backend "s3" {}
}

provider "aws" {
  region              = "us-east-2"
  allowed_account_ids = ["${var.aws_account_id}"]
}

provider "aws" {
  alias               = "TestApp"
  region              = "eu-west-1"
}


data "aws_security_group" "test_sg" {
  provider        = "aws.TestApp"
  name = "test-sg"
}

resource "aws_security_group" "test1_sg" {
  name        = "Test 1"
  vpc_id      = "VPC ID"
}

resource "aws_security_group_rule" "allow_test1_access_test_sg" {
  provider        = "aws.TestApp"

  type            = "ingress"
  from_port       = "80"
  to_port         = "80"
  protocol        = "tcp"
  security_group_id = "${data.aws_security_group.test_sg.id}"

  source_security_group_id = "${aws_security_group.test1_sg.id}"
}

我越来越像下面这样的循环依赖。

案例1 :运行以上代码,得到错误,提示test1_sg安全组不存在。

情况2 :在provider = "aws.TestApp"中没有上述aws_security_group_rule的情况下运行以上代码,出现错误,指出test_sg安全组不存在。

案例3 :在provider = "aws.TestApp"中没有以上data "aws_security_group" "test_sg"的情况下运行上述代码,得到错误,指出test_sg安全组不存在。

我不确定这是否是区域间通信的100%问题,但似乎是这种情况。

注意:在运行Terraform Apply时出现上述错误。计划显示正确的更改,没有任何错误。

我们将不胜感激任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

据我对您的案例1的了解,您的源安全组应为“ test1_sg”。没有名称为“ test1_access_test2”的安全组。使用这个。

source_security_group_id = "${aws_security_group.test1_sg.id}"

否则,请在控制台上检查该安全组是否存在。

答案 1 :(得分:2)

好,最后我找到了答案。

根据Amazon文档...

  

您不能引用位于其中的对等VPC的安全组。   不同地区。而是使用对等VPC的CIDR块。

AWS Doc: Updating Your Security Groups to Reference Peer VPC Groups

在跨区域引用时,我需要使用cidr块而不是安全组。