簡體   English   中英

在 terraform 中使用現有的 AWS 安全組

[英]Use existing AWS security group in terraform

我對 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。 這是我的 simple.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 的 scope 之外,因為 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]
  ...
}

如果它們在不同的文件夾中,您可以像上面的答案那樣進行硬編碼,或者編寫輸出然后通過數據源導入。 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM