amazon-web-services - 如何使用现有VPC创建aws_instance?

标签 amazon-web-services terraform

是否可以在重用现有 VPC 的同时创建 EC2 实例?

运行以下代码会产生启动源实例时出错:VPCIdNotSpecified:此用户没有默认 VPC。仅 EC2-Classic 和默认 VPC 支持 GroupName。(状态代码:400):

data "aws_security_groups" "my_tib_sg" {
  tags = {
    Name = "my-security-group"
  }
}

resource "aws_instance" "nginx" {
  ami                    = data.aws_ami.aws-linux.id
  instance_type          = "t2.micro"
  key_name               = var.key_name
  vpc_security_group_ids = [data.aws_security_groups.my_tib_sg.id]

  # more, irrelevant stuff...
}

FWIU 从错误来看,aws_instance block 需要引用我的 VPC,该 VPC 基本上存在于我的安全组中。此外,我找不到在 aws_instance block 中引用 VPC 的方法。

更新每个答案的代码:

我根据以下答案更新了代码:

data "aws_security_groups" "my_tib_sg" {
  tags = {
    Name = "my-tib-sg"
  }
}

data "aws_subnet" "my_subnet" {
  tags = {
    Name = "my-tib-subnet-1"
  }
}

resource "aws_network_interface" "my_ani" {
  subnet_id = data.aws_subnet.my_subnet.id
  private_ips = ["10.0.0.10"]

  tags = {
    Name = "my-tib-ani"
    by = "TF_TF"
  }
}

resource "aws_instance" "nginx" {
  ami                    = data.aws_ami.aws-linux.id
  instance_type          = "t2.micro"
  key_name               = var.key_name
  vpc_security_group_ids = [data.aws_security_groups.my_tib_sg.id]

  network_interface {
    network_interface_id = aws_network_interface.my_ani.id
    device_index = 0
  }

  connection {
    type        = "ssh"
    host        = self.public_ip
    user        = "ec2-user"
    private_key = file(var.private_key_path)

  }

  provisioner "remote-exec" {
    inline = [
      "sudo yum install nginx -y",
      "sudo service nginx start"
    ]
  }
}

但错误更改为“network_interface”:与vpc_security_group_ids冲突

(不用说:my_subnetmy_tib_sg 使用相同的 VPC)

最佳答案

我通常直接在 aws_instance 资源上使用 subnet_id 参数:

data "aws_security_groups" "my_tib_sg" {
  tags = {
    Name = "my-tib-sg"
  }
}

data "aws_subnet" "my_subnet" {
  tags = {
    Name = "my-tib-subnet-1"
  }
}

resource "aws_instance" "nginx" {
  ami                    = data.aws_ami.aws-linux.id
  instance_type          = "t2.micro"
  key_name               = var.key_name
  vpc_security_group_ids = [data.aws_security_groups.my_tib_sg.ids[0]]

  # specify the subnet_id here
  subnet_id              = data.aws_subnet.my_subnet.id

  # more, irrelevant stuff...
}

关于amazon-web-services - 如何使用现有VPC创建aws_instance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65860901/

相关文章:

amazon-web-services - 如何使用 STSAssumeRoleSessionCredentialsProvider 和 roleSessionName 和 roleArn 为 AWS SDK for Java 2.x 进行配置?

azure - 如何使用 Terraform 创建 Azure 警报

azure - Azure Stack 的 terraform 配置

terraform - 从另一个 terraform 项目获取 VPC id

kubernetes - 如何在 master 上重新启动 kubelet 以更改标志选项以及如何在 terraform 中应用它

amazon-web-services - 适用于 Windows Phone 8 和 Windows 应用商店应用程序的 AWS 开发工具包

amazon-web-services - 适用于不同用户角色的 AWS Serverless Protect API 路径

javascript - 带分页的 AWS s3 listobjects

amazon-web-services - 将 AWS 拆分列表转换为多个 yaml/json block

azure - 在 Terraform 中定义 Azure VM CustomScriptExtension (预期状态 'Element' ..遇到 'Text' ,名称 '' ,命名空间 '' 。\".")