Terraform: Как ссылаться на подсеть, созданную в модуле vpc

Как мне сослаться на подсеть, созданную в модуле vpc в модуле ec2?

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
}
0
задан 6 August 2019 в 03:46
3 ответа

Для ссылки на значение, созданное в модуле, вы должны выведите значение с помощью соответствующего оператора.

Затем вы можете получить доступ к значению с помощью $ {module.NAME.OUTPUT} .

Подробнее см .: https://www.terraform.io/intro/getting-started/modules.html

Раздел Выходы модуля и: https://www.terraform.io/intro/getting-started/outputs.html

1
ответ дан 4 December 2019 в 15:50

Обозначайте VPC как module.vpc.id

Для общедоступных подсетей: ссылайтесь на подсеть как module.public.subnets[0]

Где [0] — первая подсеть, [1] — вторая подсеть и т. д.

Для частных подсетей» ссылайтесь на подсеть как module.private.subnets[0]

и та же идея, каждая созданная подсеть будет в списке как [0],[1],[2]...

Найти ниже рабочий Instance.tf на основе модуля терраформирования VPC.tf:

# 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              = <<EOF
                            #!/bin/bash
                            yum update -y
                            EOF 
  tags = {
    Name = "Public Server"
  }
}

resource "aws_security_group" "public_instance_ssh" {
  name        = "Public-instance"
  description = "expose SSH"
  vpc_id      = module.vpc.vpc_id
  ingress {
    protocol        = "tcp"
    from_port       = 22
    to_port         = 22
    cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
    protocol    = "-1"
    from_port   = 0
    to_port     = 0
    cidr_blocks = ["0.0.0.0/0"]
  }
}
# AMI of the latest Amazon Linux 2 
data "aws_ami" "amazon_linux_2" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "architecture"
    values = ["x86_64"]
  }
  filter {
    name   = "root-device-type"
    values = ["ebs"]
  }
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*"]
  }
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
  filter {
    name   = "block-device-mapping.volume-type"
    values = ["gp2"]
  }
}
0
ответ дан 4 June 2021 в 22:34

Вы можете получить доступ к списку подсетей через его индекс. модуль.myvpc.public_subnets[*] или module.myvpc.private_subnets[0] (для первой подсети)

0
ответ дан 6 August 2021 в 14:29

Теги

Похожие вопросы