首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VPC Terraform社区模块获取subnet_id

从VPC Terraform社区模块获取subnet_id
EN

Stack Overflow用户
提问于 2017-04-24 13:51:21
回答 1查看 3K关注 0票数 2

我正在使用vpcec2 Terraform社区模块,butnI很难获得subnet_id,我应该使用它在AWS中创建一个EC2实例。

在tf_aws_ec2模块文档中,他们说要在变量中定义它,但是我不能从变量中获得它,因为在创建子网之前我不知道它的id。

我正在尝试使用Terraform模块。当不使用Terraform模块时,我知道如何做到这一点。

如何在VPC中创建EC2实例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-24 14:47:21

我首先要说的是,我不太相信这些模块真正提供的是什么,只需要自己使用资源,因为它们并不真正为您做出任何有用的决定,所以我建议您不要使用它们。

但是,如果您确实想使用它们,并且您在同一个“级别”上使用它们(这意味着单个terraform apply同时创建VPC和实例),那么您可以简单地使用模块输出并将它们传递给EC2实例。

像这样的事情应该有效:

代码语言:javascript
复制
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的输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43589980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档