【问题标题】:Get subnet_id from VPC Terraform community module从 VPC Terraform 社区模块获取 subnet_id
【发布时间】:2017-09-21 05:55:06
【问题描述】:

我正在使用 tf_aws_vpctf_aws_ec2 Terraform 社区模块,但我正在努力获取我应该用来在 AWS VPC 中创建 EC2 实例的子网 ID。

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

我正在尝试使用 Terraform 模块。我知道不使用 Terraform 模块时该怎么做。

我应该如何在 VPC 中创建 EC2 实例?

【问题讨论】:

  • 您是否在同一个目录中使用这两个模块?那么,您是一次应用 Terraform 来创建两者,还是将 Terraform 应用到多个目录?
  • 我正在从 github 下载它。在我的 main.tf 中使用他们的模块

标签: amazon-web-services terraform


【解决方案1】:

我将首先说我不太相信这些模块真正提供了什么,而不是简单地自己使用这些资源,因为它们并没有真正为你做出任何有用的决定,所以我建议不要完全使用它们。

但是,如果您确实想使用它们并且在同一“级别”上使用它们(意味着单个 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 模块的 private_subnets output,它返回 VPC 中所有私有子网 ID 的列表,然后使用 element 选择第一个。如果实例模块使用一个子网 ID 列表来放入实例(循环遍历它们以在 AZ 间传播实例),那么您可以删除 element 函数。

如果您的 Terraform 位于不同的目录中(因此您为您的 VPC 申请一次,然后在另一个目录中再次申请以创建您的 EC2 实例),您需要使用 remote_state data source 访问 VPC 的输出。

【讨论】:

  • 如果有人仍然像我一样尝试使用 subnet_id 作为示例 belo 使其工作:`subnet_id = "${element(module.vpc.private_subnets, 0)}" `嗯,非常感谢非常感谢您的帮助。它确实帮助了我。一旦我不需要像创建 EC2 实例那样每次都创建 VPC,我将尝试按照您的建议使用。正如我所说,我是新手,我正在阅读文档并希望使用最佳实践。你帮了很多忙。再次感谢您。
猜你喜欢
  • 2019-11-27
  • 2020-12-17
  • 2021-04-27
  • 2021-07-01
  • 2021-05-09
  • 2020-02-12
  • 2020-08-02
  • 2020-05-06
  • 2021-07-05
相关资源
最近更新 更多