examples: creating VPCs and subnets across two regions
This example demonstrates both creating a network architecture *and* the use of data resources to minimize the number of variables needed for a child module by discovering additional data automatically.
This commit is contained in:
parent
94c45c67cd
commit
0e3256b6f4
|
@ -0,0 +1,3 @@
|
|||
terraform.tfstate
|
||||
terraform.tfstate.backup
|
||||
.terraform/*
|
|
@ -0,0 +1,11 @@
|
|||
# AWS Networking Example
|
||||
|
||||
This example creates AWS VPC resources, making a VPC in each of two regions and
|
||||
then two subnets in each VPC in two different availability zones.
|
||||
|
||||
This example also demonstrates the use of modules to create several copies of
|
||||
the same resource set with different arguments. The child modules in this
|
||||
directory are:
|
||||
|
||||
* `region`: container module for all of the network resources within a region. This is instantiated once per region.
|
||||
* `subnet`: represents a subnet within a given availability zone. This is instantiated twice per region, using the first two availability zones supported within the target AWS account.
|
|
@ -0,0 +1,27 @@
|
|||
variable "region_numbers" {
|
||||
default = {
|
||||
us-east-1 = 1
|
||||
us-west-1 = 2
|
||||
us-west-2 = 3
|
||||
eu-west-1 = 4
|
||||
}
|
||||
}
|
||||
|
||||
variable "az_numbers" {
|
||||
default = {
|
||||
a = 1
|
||||
b = 2
|
||||
c = 3
|
||||
d = 4
|
||||
e = 5
|
||||
f = 6
|
||||
g = 7
|
||||
h = 8
|
||||
i = 9
|
||||
j = 10
|
||||
k = 11
|
||||
l = 12
|
||||
m = 13
|
||||
n = 14
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
../numbering/variables.tf
|
|
@ -0,0 +1,11 @@
|
|||
output "vpc_id" {
|
||||
value = "${aws_vpc.main.id}"
|
||||
}
|
||||
|
||||
output "primary_subnet_id" {
|
||||
value = "${module.primary_subnet.subnet_id}"
|
||||
}
|
||||
|
||||
output "secondary_subnet_id" {
|
||||
value = "${module.secondary_subnet.subnet_id}"
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
resource "aws_security_group" "region" {
|
||||
name = "region"
|
||||
description = "Open access within this region"
|
||||
vpc_id = "${aws_vpc.main.id}"
|
||||
|
||||
ingress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = -1
|
||||
cidr_blocks = ["${aws_vpc.main.cidr_block}"]
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_security_group" "internal-all" {
|
||||
name = "internal-all"
|
||||
description = "Open access within the full internal network"
|
||||
vpc_id = "${aws_vpc.main.id}"
|
||||
|
||||
ingress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = -1
|
||||
cidr_blocks = ["${var.base_cidr_block}"]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
data "aws_availability_zones" "all" {
|
||||
}
|
||||
|
||||
module "primary_subnet" {
|
||||
source = "../subnet"
|
||||
vpc_id = "${aws_vpc.main.id}"
|
||||
availability_zone = "${data.aws_availability_zones.all.names[0]}"
|
||||
}
|
||||
|
||||
module "secondary_subnet" {
|
||||
source = "../subnet"
|
||||
vpc_id = "${aws_vpc.main.id}"
|
||||
availability_zone = "${data.aws_availability_zones.all.names[1]}"
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
variable "region" {
|
||||
description = "The name of the AWS region to set up a network within"
|
||||
}
|
||||
|
||||
variable "base_cidr_block" {}
|
||||
|
||||
provider "aws" {
|
||||
region = "${var.region}"
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
resource "aws_vpc" "main" {
|
||||
cidr_block = "${cidrsubnet(var.base_cidr_block, 4, lookup(var.region_numbers, var.region))}"
|
||||
}
|
||||
|
||||
resource "aws_internet_gateway" "main" {
|
||||
vpc_id = "${aws_vpc.main.id}"
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
module "us-east-1" {
|
||||
source = "./region"
|
||||
region = "us-east-1"
|
||||
base_cidr_block = "${var.base_cidr_block}"
|
||||
}
|
||||
|
||||
module "us-west-2" {
|
||||
source = "./region"
|
||||
region = "us-west-2"
|
||||
base_cidr_block = "${var.base_cidr_block}"
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
../numbering/variables.tf
|
|
@ -0,0 +1,3 @@
|
|||
output "subnet_id" {
|
||||
value = "${aws_subnet.main.id}"
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
resource "aws_security_group" "az" {
|
||||
name = "az-${data.aws_availability_zone.target.name}"
|
||||
description = "Open access within the AZ ${data.aws_availability_zone.target.name}"
|
||||
vpc_id = "${var.vpc_id}"
|
||||
|
||||
ingress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = -1
|
||||
cidr_blocks = ["${aws_subnet.main.cidr_block}"]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
resource "aws_subnet" "main" {
|
||||
cidr_block = "${cidrsubnet(data.aws_vpc.target.cidr_block, 4, lookup(var.az_numbers, data.aws_availability_zone.target.name_suffix))}"
|
||||
vpc_id = "${var.vpc_id}"
|
||||
}
|
||||
|
||||
resource "aws_route_table" "main" {
|
||||
vpc_id = "${var.vpc_id}"
|
||||
}
|
||||
|
||||
resource "aws_route_table_association" "main" {
|
||||
subnet_id = "${aws_subnet.main.id}"
|
||||
route_table_id = "${aws_route_table.main.id}"
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
variable "vpc_id" {}
|
||||
|
||||
variable "availability_zone" {}
|
||||
|
||||
data "aws_availability_zone" "target" {
|
||||
name = "${var.availability_zone}"
|
||||
}
|
||||
|
||||
data "aws_vpc" "target" {
|
||||
id = "${var.vpc_id}"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
variable "base_cidr_block" {
|
||||
default = "10.0.0.0/12"
|
||||
}
|
Loading…
Reference in New Issue