Как мне сослаться на подсеть, созданную в модуле 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
}
Для ссылки на значение, созданное в модуле, вы должны выведите
значение с помощью соответствующего оператора.
Затем вы можете получить доступ к значению с помощью $ {module.NAME.OUTPUT}
.
Подробнее см .: https://www.terraform.io/intro/getting-started/modules.html
Раздел Выходы модуля
и:
https://www.terraform.io/intro/getting-started/outputs.html
Обозначайте 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"]
}
}
Вы можете получить доступ к списку подсетей через его индекс. модуль.myvpc.public_subnets[*] или module.myvpc.private_subnets[0] (для первой подсети)