【问题标题】:Terraform shows `InvalidGroup.NotFound` while creating an EC2 instanceTerraform 在创建 EC2 实例时显示“InvalidGroup.NotFound”
【发布时间】:2021-09-09 16:12:28
【问题描述】:

我正在尝试使用 Terrafom 部署 EC2 实例,我可以看到以下错误:

Error: Error launching source instance: InvalidGroup.NotFound: The security group 'prod-web-servers-sg' does not exist in VPC 'vpc-db3a3cb3'

这是我正在使用的 Terraform 模板:

resource "aws_default_vpc" "default" {
}

resource "aws_security_group" "prod-web-servers-sg" {
name        = "prod-web-servers-sg"
description = "security group for production grade web servers"
vpc_id      = "${aws_default_vpc.default.id}"

ingress {
from_port   = 80
to_port     = 80
protocol    = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port   = 443
to_port     = 443
protocol    = "tcp"
cidr_blocks = ["0.0.0.0/0"]
  }
}

#Subnet

 resource "aws_subnet" "private_subnet" {
 vpc_id     = "${aws_default_vpc.default.id}"
 cidr_block = "172.31.0.0/24"
 availability_zone = "ap-south-1a"
 }

 resource "aws_instance" "prod-web-server" {
 ami           = "ami-04b1ddd35fd71475a"
 count    = 2
 key_name = "test_key"
 instance_type = "r5.large"
 security_groups = ["prod-web-servers-sg"]
 subnet_id = "${aws_subnet.private_subnet.id}"
  }

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    你有一个竞争条件,因为 Terraform 不知道要等到安全组创建后再创建实例。

    要解决这个问题,您应该将 aws_security_group.prod-web-servers-sg.id 插入到 aws_instance.prod-web-server 资源中,以便它可以计算出资源之间的依赖链。您还应该使用vpc_security_group_ids 而不是security_groups,如aws_instance resource documentation 中所述:

    security_groups -(可选,仅限 EC2-Classic 和默认 VPC)要关联的安全组名称 (EC2-Classic) 或 ID(默认 VPC)列表。

    注意: 如果您在 VPC 中创建实例,请改用 vpc_security_group_ids。

    所以你应该有如下的东西:

    resource "aws_default_vpc" "default" {}
    
    resource "aws_security_group" "prod-web-servers-sg" {
      name        = "prod-web-servers-sg"
      description = "security group for production grade web servers"
      vpc_id      = aws_default_vpc.default.id
    
      ingress {
        from_port   = 80
        to_port     = 80
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
      }
      ingress {
        from_port   = 443
        to_port     = 443
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
      }
    }
    
    #Subnet
    
    resource "aws_subnet" "private_subnet" {
      vpc_id            = aws_default_vpc.default.id
      cidr_block        = "172.31.0.0/24"
      availability_zone = "ap-south-1a"
    }
    
    resource "aws_instance" "prod-web-server" {
      ami                    = "ami-04b1ddd35fd71475a"
      count                  = 2
      key_name               = "test_key"
      instance_type          = "r5.large"
      vpc_security_group_ids = [aws_security_group.prod-web-servers-sg.id]
      subnet_id              = aws_subnet.private_subnet.id
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2021-12-09
      • 2021-10-11
      • 2019-09-12
      • 2020-07-19
      • 2020-10-07
      相关资源
      最近更新 更多