Moving networking code out into its own module
This commit is contained in:
parent
10ed1f1a98
commit
609f9b3e7b
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,11 +1,11 @@
|
|||||||
msg
|
msg
|
||||||
*.swp
|
*.swp
|
||||||
infra/secrets/
|
infra/secrets/
|
||||||
infra/.terraform
|
infra/**/.terraform/
|
||||||
infra/.terraform.lock.hcl
|
infra/**/.terraform.lock.hcl
|
||||||
infra/terraform.tfvars
|
infra/**/terraform.tfvars
|
||||||
infra/keys/
|
infra/keys/
|
||||||
infra/out.plan
|
infra/**/out.plan
|
||||||
infra/terraform.tfstate
|
infra/terraform.tfstate
|
||||||
infra/terraform.tfstate.backup
|
infra/terraform.tfstate.backup
|
||||||
playbooks/hosts.ini
|
playbooks/hosts.ini
|
||||||
|
24
infra/networking/Makefile
Normal file
24
infra/networking/Makefile
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
plan=out.plan
|
||||||
|
|
||||||
|
SHELL := /bin/bash
|
||||||
|
|
||||||
|
$(plan): *.tf
|
||||||
|
source ../secrets/set-env.sh && terraform plan -input=false -out $(plan)
|
||||||
|
|
||||||
|
push: build
|
||||||
|
source ../secrets/set-env.sh && terraform apply $(plan)
|
||||||
|
|
||||||
|
refresh:
|
||||||
|
source ../secrets/set-env.sh && terraform apply -refresh-only
|
||||||
|
|
||||||
|
test:
|
||||||
|
terraform validate
|
||||||
|
|
||||||
|
|
||||||
|
rip:
|
||||||
|
source ../secrets/set-env.sh && terraform destroy
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(plan)
|
||||||
|
|
||||||
|
.PHONY: test build clean push rip
|
24
infra/networking/backend.tf
Normal file
24
infra/networking/backend.tf
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
terraform {
|
||||||
|
required_version = ">= 0.13"
|
||||||
|
backend "s3" {
|
||||||
|
bucket = "project-athens"
|
||||||
|
key = "infra/networking/state/build.tfstate"
|
||||||
|
region = "us-west-1"
|
||||||
|
encrypt = true
|
||||||
|
}
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = "4.13.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Base config for using AWS features w/ Terraform
|
||||||
|
provider "aws" {
|
||||||
|
access_key = var.aws_key
|
||||||
|
secret_key = var.aws_secret
|
||||||
|
region = var.aws_region
|
||||||
|
max_retries = 1
|
||||||
|
}
|
||||||
|
|
8
infra/networking/gateway.tf
Normal file
8
infra/networking/gateway.tf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Used to provide internet access for instances in the VPC
|
||||||
|
resource "aws_internet_gateway" "athens_internet_gateway" {
|
||||||
|
vpc_id = aws_vpc.athens_vpc.id
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "Athens Common Internet Gateway in Olypmus"
|
||||||
|
}
|
||||||
|
}
|
23
infra/networking/route-table.tf
Normal file
23
infra/networking/route-table.tf
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# NOTE: local traffic route is implied and does not need to be specified
|
||||||
|
resource "aws_route_table" "crete_route_table" {
|
||||||
|
vpc_id = aws_vpc.athens_vpc.id
|
||||||
|
route {
|
||||||
|
cidr_block = "0.0.0.0/0"
|
||||||
|
gateway_id = aws_internet_gateway.athens_internet_gateway.id
|
||||||
|
}
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "Crete IGW Route Table"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "crete_gateway_association" {
|
||||||
|
subnet_id = aws_subnet.crete.id
|
||||||
|
route_table_id = aws_route_table.crete_route_table.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "delphi_gateway_association" {
|
||||||
|
subnet_id = aws_subnet.delphi.id
|
||||||
|
route_table_id = aws_route_table.crete_route_table.id
|
||||||
|
}
|
23
infra/networking/subnet.tf
Normal file
23
infra/networking/subnet.tf
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# This script represents the subnet structure for Crete(primary subnet)
|
||||||
|
|
||||||
|
resource "aws_subnet" "crete" {
|
||||||
|
vpc_id = aws_vpc.athens_vpc.id
|
||||||
|
# 10.0.1.0/24
|
||||||
|
cidr_block = var.crete_cidr
|
||||||
|
availability_zone = var.athens_availability_zone
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "Crete Subnet"
|
||||||
|
Description = "Main subnet for EC2 and Alpha-LB"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_subnet" "delphi" {
|
||||||
|
vpc_id = aws_vpc.athens_vpc.id
|
||||||
|
cidr_block = "10.0.2.0/24"
|
||||||
|
availability_zone = "us-west-1c"
|
||||||
|
tags = {
|
||||||
|
Name = "Delphi Subnet"
|
||||||
|
Description = "Secondary subnet for the Alpha-LB mostly"
|
||||||
|
}
|
||||||
|
}
|
7
infra/networking/terraform.tfvars
Normal file
7
infra/networking/terraform.tfvars
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# AWS Things
|
||||||
|
aws_region = "us-west-1"
|
||||||
|
|
||||||
|
athens_availability_zone = "us-west-1b"
|
||||||
|
athens_cidr = "10.0.0.0/16"
|
||||||
|
crete_cidr = "10.0.1.0/24"
|
||||||
|
|
35
infra/networking/variables.tf
Normal file
35
infra/networking/variables.tf
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# All variables that are used in various places go here
|
||||||
|
|
||||||
|
######################### General provider specific values
|
||||||
|
|
||||||
|
variable "aws_key" {
|
||||||
|
description = "Access Key for AWS operations"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_secret" {
|
||||||
|
description = "Secret Key for AWS operations"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_region" {
|
||||||
|
description = "Region where the VPC is located"
|
||||||
|
type = string
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "crete_cidr" {
|
||||||
|
description = "CIDR block for the servers themselves"
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
variable "athens_availability_zone" {
|
||||||
|
description = "Availability zone for Project Bucket"
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "athens_cidr" {
|
||||||
|
description = "VPC Subnet CIDR block"
|
||||||
|
type = string
|
||||||
|
}
|
11
infra/networking/vpc.tf
Normal file
11
infra/networking/vpc.tf
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
resource "aws_vpc" "athens_vpc" {
|
||||||
|
cidr_block = var.athens_cidr
|
||||||
|
enable_dns_support = true
|
||||||
|
enable_dns_hostnames = true
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "Project Athens VPC"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user