在地形中使用现有的AWS安全组



我是terraform的新手,最近开始学习它。我已经成功启动了AWS ec2实例。在创建它时,我给出了以下SG相关信息:

resource "aws_security_group" "forssh" {
name = "ssh-access"
ingress {
cidr_blocks = [ "0.0.0.0/0" ]
from_port = 22
protocol = "tcp"
to_port = 22
}
tags = {
"Name" = "terraform-create"
}
}

这创建了一个SG,我可以在AWS控制台上看到它;sg-000312648cb099634";。现在,假设我想要另一个完全不同的EC2实例,但不重新声明SG。我想在我的新配置中使用这个相同的现有SG。有可能这样做吗?如何做到这一点?

新信息

我想我可以通过引用@Marcin的评论,使用数据源重新使用现有的SG。这是我的简单.tf代码:

data "aws_security_group" "testsg" {
id = "sg-0f9fb8b59aebac240"
}
resource "aws_instance" "myec2" {
ami           = "ami-033b95fb8079dc481"
instance_type = "t2.micro"
tags = {
"Name" = "terra"
}
key_name               = aws_key_pair.sshkey.id
vpc_security_group_ids = [data.aws_security_group.testsg.id]
}
resource "aws_key_pair" "sshkey" {
public_key = file("C:/Users/admin/key.pub")
}

我在aws控制台上手动创建了一个SG;sg-0f9fb8b59aebac240";。这完全超出了TF的范围,因为TF无法知道它的存在。然后我使用数据源读取它,并将其中的信息输入到TF。实例正确启动,并连接了正确的SG。

希望我上面所做的是正确的,否则我会洗耳恭听:(

仅供参考,我也尝试了@Ash Blake的方法。当我在同一个目录下创建文件时,效果非常好。对于diff目录,我认为数据源是正确的方法。

您可以使用名为aws_security_group的数据源来获取现有SG:的详细信息

data "aws_security_group" "selected" {
id ="sg-000312648cb099634"
}

然后,您可以使用数据源引用与给定安全组相关的所有信息。

如果EC2和SG-tf文件在同一文件夹中,则可以声明EC2以从SG块中获取ID。文档

resource "aws_instance" "web" {
...
security_groups = [aws_security_group.forssh.id]
...
}

如果它们在不同的文件夹中,您可以像上面的答案一样编写硬代码,或者编写输出,然后通过数据源导入。文档

最新更新