发布于 2017-04-24 14:47:21
我首先要说的是,我不太相信这些模块真正提供的是什么,只需要自己使用资源,因为它们并不真正为您做出任何有用的决定,所以我建议您不要使用它们。
但是,如果您确实想使用它们,并且您在同一个“级别”上使用它们(这意味着单个terraform apply同时创建VPC和实例),那么您可以简单地使用模块输出并将它们传递给EC2实例。
像这样的事情应该有效:
module "vpc" {
source = "github.com/terraform-community-modules/tf_aws_vpc"
name = "my-vpc"
cidr = "10.0.0.0/16"
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = "true"
azs = ["us-west-2a", "us-west-2b", "us-west-2c"]
tags {
"Terraform" = "true"
"Environment" = "${var.environment}"
}
}
module "ec2_instance" {
source = "github.com/terraform-community-modules/tf_aws_ec2_instance"
instance_type = "${var.instance_type}"
instance_name = "${var.instance_name}"
ami_id = "${var.ami_id}"
aws_access_key = "${var.aws_access_key}"
aws_secret_key = "${var.aws_secret_key}"
aws_region = "${var.aws_region}"
subnet_id = "${element(module.vpc.private_subnets, 0)}"
number_of_instances = "${var.number_of_instances}"
user_data = "${var.user_data}"
}这使用VPC模块中的输出,该模块返回VPC中所有私有子网in的列表,然后使用element选择第一个子网in。如果实例模块获取了一个子网ids列表,将实例放入其中(循环遍历所有实例以将实例分散到AZs中),那么您可以删除element函数。
如果您的Terraform位于不同的目录中(因此您只为您的VPC申请了一次,然后再次在另一个目录中创建您的EC2实例),您将需要使用数据源访问VPC的输出。
https://stackoverflow.com/questions/43589980
复制相似问题