首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform:如何引用vpc模块中创建的子网

Terraform:如何引用vpc模块中创建的子网
EN

Server Fault用户
提问于 2018-09-19 03:14:31
回答 3查看 3.3K关注 0票数 0

如何引用ec2模块中在vpc模块中创建的子网?

代码语言:javascript
复制
provider "aws" {
  region = "us-east-2"
}

module "myvpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "my-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["us-east-1a", "us-east-1b", "us-east-1c"]
  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"]

  assign_generated_ipv6_cidr_block = true

  enable_nat_gateway = true
  single_nat_gateway = true

  enable_s3_endpoint       = true
  enable_dynamodb_endpoint = true

  public_subnet_tags = {
    Name = "overridden-name-public"
  }

  tags = {
    Owner       = "user"
    Environment = "dev"
    Name        = "terraformtestvpc"
  }

  vpc_tags = {
    Name = "vpc-name"
  }
}

module "ssh_access_sg" {
  source = "terraform-aws-modules/security-group/aws//modules/ssh"

  name        = "ssh-access"
  description = "Security group for ssh access"
  vpc_id      = "${module.myvpc.vpc_id}"

  ingress_cidr_blocks = ["0.0.0.0/0"]
}

data "aws_ami" "amazon_linux" {
  most_recent = true

  filter {
    name = "name"

    values = [
      "amzn-ami-hvm-*-x86_64-gp2",
    ]
  }

  filter {
    name = "owner-alias"

    values = [
      "amazon",
    ]
  }
}

module "ec2" {
  source = "terraform-aws-modules/ec2-instance/aws"

  instance_count = 2

  name                        = "example-normal"
  ami                         = "${data.aws_ami.amazon_linux.id}"
  instance_type               = "t2.medium"
  subnet_id                   = "${element(module.myvpc.private_subnets, 0)}"
  vpc_security_group_ids      = ["${module.ssh_access_sg.this_security_group_id}"]
  associate_public_ip_address = true
}
EN

回答 3

Server Fault用户

发布于 2018-09-19 05:56:42

要引用在模块中创建的值,您必须使用value语句来output该值。

然后,您可以使用${module.NAME.OUTPUT}访问该值。

有关详细信息,请参阅:https://www.terraform.io/intro/getting-started/modules.html

Module Outputs和:https://www.terraform.io/intro/getting-started/outputs.html

票数 1
EN

Server Fault用户

发布于 2021-06-04 22:34:01

将VPC称为module.vpc.id

对于公共子网:将子网称为module.public.subnets

哪里是第一个子网和第二个子网等等.

对于私有子网,请将子网称为module.private.subnets

同样的想法,创建的每个子网都会被列在一个列表中,

下面是一个基于terraform的工作Instance.tf,一个模块VPC.tf:

代码语言:javascript
复制
# an example instance in the public subnet
resource "aws_instance" "public_instance" {
  ami                    = data.aws_ami.amazon_linux_2.id
  instance_type          = "t2.micro"
  subnet_id              = module.vpc.public_subnets[0]
  vpc_security_group_ids = [aws_security_group.public_instance_ssh.id]
  key_name               = "my-key"
  user_data              = <
票数 1
EN

Server Fault用户

发布于 2021-08-06 14:29:37

您可以通过它的索引访问子网列表。module.myvpc.public_subnets或module.myvpc.private_subnets0

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

https://serverfault.com/questions/931609

复制
相关文章

相似问题

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