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时出现上述错误。计划显示正确的更改,没有任何错误。
我们将不胜感激任何帮助。
谢谢!
答案 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块而不是安全组。