terrafrom aws_instance subnet_id - 启动源实例时出错:不支持:当前不支持请求的配置

时间:2017-07-28 16:45:44

标签: terraform

我正在尝试在该VPC中构建VPC和子网。第三,我正在尝试在该子网内创建AWS实例。听起来很简单,但subnet_id参数似乎打破了terraform' apply' (计划工作得很好)。我错过了什么吗?

从main.tf中提取

resource "aws_vpc" "poc-vpc" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "dedicated"
  enable_dns_hostnames = "true"
}

resource "aws_subnet" "poc-subnet" {
  vpc_id     = "${aws_vpc.poc-vpc.id}"
  cidr_block = "10.0.1.0/24"
  map_public_ip_on_launch = "true"
  availability_zone = "${var.availability_zone}"
}


resource "aws_instance" "POC-Instance" {
  ami = "${lookup(var.amis, var.region)}"
  instance_type = "${var.instance_type}"
  availability_zone = "${var.availability_zone}"
  associate_public_ip_address = true
  key_name = "Pipeline-POC-Key-Pair"
  vpc_security_group_ids = ["${aws_security_group.poc-sec-group.id}"]
  subnet_id = "${aws_subnet.poc-subnet.id}"
}

如果我删除subnet_id,则应用'有效,但实例是在我的默认VPC中创建的。这不是目的。

任何帮助将不胜感激。我是terraform的新手所以请保持温柔。

4 个答案:

答案 0 :(得分:1)

我解决了这个问题并希望将其发布以希望能够为其他人节省一些时间。

问题是aws_instance配置器中的subnet_id与aws_vpc配置器中的instance_tennancy的冲突。删除实例租约并且所有内容都已修复(或设置为默认值)

错误消息毫无意义。我已经问过这是否可以改善。

答案 1 :(得分:0)

如果您想创建自己的VPC网络而不使用默认网络,则还需要创建路由表和Internet网关,以便可以访问创建的ec2。您还需要添加以下配置以创建一个完整的VPC网络,其中包含可通过您指定的公共IP访问的ec2实例

# Internet GW
resource "aws_internet_gateway" "main-gw" {
    vpc_id = "${aws_vpc.poc-vpc.id}"

    tags {
        Name = "poc-vpc"
    }
}

# route tables
resource "aws_route_table" "main-public" {
    vpc_id = "${aws_vpc.poc-vpc.id}"
    route {
        cidr_block = "0.0.0.0/0"
        gateway_id = "${aws_internet_gateway.main-gw.id}"
    }

    tags {
        Name = "main route"
    }
}

# route associations public
resource "aws_route_table_association" "main-public-1-a" {
    subnet_id = "${aws_subnet.poc-subnet.id}"
    route_table_id = "${aws_route_table.main-public.id}"
}

答案 2 :(得分:0)

您的其他配置中也可能存在冲突。由于不同的原因,我遇到了相同的Unsupported错误。

我使用了从https://cloud-images.ubuntu.com/locator/ec2/中找到的AMI ami-0ba5dfee72d5bb9a1 我只选择与VPC处于同一区域的任何东西。

显然,AMI仅支持a *实例类型,不支持t *或m *实例类型。

所以我想仔细检查一下:

  • 您的AMI与您的实例类型兼容。
  • 您的AMI与您的VPC或子网位于同一区域。
  • 没有其他冲突的配置。

答案 3 :(得分:0)

问题是您可能复制的terraform示例是WRONG。

在大多数情况下,问题是vpc实例的租期属性。

将VPC instance_tenancy =“专用”更改为instance_tenancy =“默认”。

它适用于任何ec2实例类型。

原因是专用实例仅支持m5.large或更大的实例,因此,如果您实际上创建的是t3.small或t2.m之类的较小实例,则VPC和ec2实例类型会发生冲突。您可以微型等。您可以在这里查看专用实例。

https://aws.amazon.com/ec2/pricing/dedicated-instances/