在Terraform部署时出现问题。我有一个创建网络的模块,然后是另一个创建一系列ec2实例的模块。这些服务器需要具有特定的IP地址,这些地址在模块中被调用(我宁愿动态设置这些,但现在它们是"硬编码")。然而,我得到一个警告,我与ec2实例关联的IP地址"不属于子网的地址范围",但它是。下面是基本的分类:
servers
->main.tf
->variables.tf
->outputs.tf
network
->main.tf
->variables.tf
->outputs.tf
main.tf
相关位如下:网络main.tf
# Create VPC
resource "aws_vpc" "foo" {
cidr_block = "192.168.1.0/24"
enable_dns_hostnames = "true"
enable_dns_support = "true"
tags = {
Name = "foo"
}
}
# Create a Subnet
resource "aws_subnet" "subnet-1" {
vpc_id = aws_vpc.foo.id
cidr_block = "192.168.1.0/24"
availability_zone = "ca-central-1a"
tags = {
Name = "subnet-1"
}
}
服务器main.tf
resource "aws_instance" "bar" {
ami = var.some_ami
instance_type = "t3.medium"
associate_public_ip_address = true
private_ip = "192.168.1.15"
# root disk
root_block_device {
volume_size = "60"
volume_type = "gp3"
encrypted = true
delete_on_termination = true
}
tags = {
Name = "bar"
}
}
main.tf
module "network" {
source = "./network"
}
module "servers" {
source = "./servers"
subnet_id = module.network.aws_subnet
}
一切正常,我在AWS中验证VPC已创建,子网已创建,但由于某种原因,当服务器正在创建时,我得到以下错误:
│错误:创建EC2实例:InvalidParameterValue:地址192.168.1.15不属于子网的地址范围状态码:400
我省略了tfs中一些不相关的部分,但除了这一件事之外,其他一切都像预期的那样工作。有人知道是怎么回事吗?
aws_instance
资源没有subnet_id
属性。因此实例在默认子网中启动。
添加subnet_id
属性如下
resource "aws_instance" "bar" {
ami = var.some_ami
instance_type = "t3.medium"
associate_public_ip_address = true
subnet_id = "your_subnet_id"
private_ip = "192.168.1.15"
# root disk
root_block_device {
volume_size = "60"
volume_type = "gp3"
encrypted = true
delete_on_termination = true
}
tags = {
Name = "bar"
}
}
您也可以使用data resource来获取子网id。
data "aws_subnet" "selected" {
filter {
name = "tag:Name"
values = ["myawesomesubnet"]
}
}