From 64cf0d8937c23ed944e06de3144ee32826b54d2c Mon Sep 17 00:00:00 2001 From: gregory hendrickson Date: Thu, 16 Nov 2023 13:10:07 -0800 Subject: [PATCH] mv AWS -> aws/aws_simple --- AWS/ELB/main.tf | 0 AWS/VPC/main.tf | 0 AWS/main.tf | 0 AWS/terraform.tfvars | 0 aws/aws_simple/ec2/ec2.tf | 96 +++++++++++++++++++ aws/aws_simple/ec2/terraform.tfvars | 2 + aws/aws_simple/ec2/user-data.sh | 28 ++++++ aws/aws_simple/ec2/variables.tf | 13 +++ {AWS/EC2 => aws/aws_simple/efs}/main.tf | 0 {AWS/EFS => aws/aws_simple/elb}/main.tf | 0 aws/aws_simple/main.tf | 40 ++++++++ aws/aws_simple/readme.md | 15 +++ aws/aws_simple/terraform.tfvars | 3 + aws/aws_simple/variables.tf | 16 ++++ .../vpc/subnets/us-east/subnets-east.tf | 31 ++++++ .../vpc/subnets/us-east/terraform.tfvars | 10 ++ .../vpc/subnets/us-east/variables.tf | 28 ++++++ .../vpc/subnets/us-west/subnets-west.tf | 27 ++++++ .../vpc/subnets/us-west/terraform.tfvars | 10 ++ .../vpc/subnets/us-west/variables.tf | 28 ++++++ aws/aws_simple/vpc/terraform.tfvars | 2 + aws/aws_simple/vpc/variables.tf | 4 + aws/aws_simple/vpc/vpc.tf | 65 +++++++++++++ 23 files changed, 418 insertions(+) delete mode 100644 AWS/ELB/main.tf delete mode 100644 AWS/VPC/main.tf delete mode 100644 AWS/main.tf delete mode 100644 AWS/terraform.tfvars create mode 100644 aws/aws_simple/ec2/ec2.tf create mode 100644 aws/aws_simple/ec2/terraform.tfvars create mode 100644 aws/aws_simple/ec2/user-data.sh create mode 100644 aws/aws_simple/ec2/variables.tf rename {AWS/EC2 => aws/aws_simple/efs}/main.tf (100%) rename {AWS/EFS => aws/aws_simple/elb}/main.tf (100%) create mode 100644 aws/aws_simple/main.tf create mode 100644 aws/aws_simple/readme.md create mode 100644 aws/aws_simple/terraform.tfvars create mode 100644 aws/aws_simple/variables.tf create mode 100644 aws/aws_simple/vpc/subnets/us-east/subnets-east.tf create mode 100644 aws/aws_simple/vpc/subnets/us-east/terraform.tfvars create mode 100644 aws/aws_simple/vpc/subnets/us-east/variables.tf create mode 100644 aws/aws_simple/vpc/subnets/us-west/subnets-west.tf create mode 100644 aws/aws_simple/vpc/subnets/us-west/terraform.tfvars create mode 100644 aws/aws_simple/vpc/subnets/us-west/variables.tf create mode 100644 aws/aws_simple/vpc/terraform.tfvars create mode 100644 aws/aws_simple/vpc/variables.tf create mode 100644 aws/aws_simple/vpc/vpc.tf diff --git a/AWS/ELB/main.tf b/AWS/ELB/main.tf deleted file mode 100644 index e69de29..0000000 diff --git a/AWS/VPC/main.tf b/AWS/VPC/main.tf deleted file mode 100644 index e69de29..0000000 diff --git a/AWS/main.tf b/AWS/main.tf deleted file mode 100644 index e69de29..0000000 diff --git a/AWS/terraform.tfvars b/AWS/terraform.tfvars deleted file mode 100644 index e69de29..0000000 diff --git a/aws/aws_simple/ec2/ec2.tf b/aws/aws_simple/ec2/ec2.tf new file mode 100644 index 0000000..1245e58 --- /dev/null +++ b/aws/aws_simple/ec2/ec2.tf @@ -0,0 +1,96 @@ +# Define the VPC and subnets data sources +data "aws_vpc" "vpc" { + id = data.aws_subnet.subnet1.vpc_id +} + +module "vpc_subnets" { + source = "../vpc/subnets" +} + +data "aws_subnet" "subnet1" { + id = module.vpc_subnets.subnet_ids[0] +} + +data "aws_subnet" "subnet2" { + id = module.vpc_subnets.subnet_ids[1] +} + +data "aws_subnet" "subnet3" { + id = module.vpc_subnets.subnet_ids[2] +} + +data "aws_subnet" "subnet4" { + id = module.vpc_subnets.subnet_ids[3] +} + +data "aws_subnet" "subnet5" { + id = module.vpc_subnets.subnet_ids[4] +} + +data "aws_subnet" "subnet6" { + id = module.vpc_subnets.subnet_ids[5] +} + +# Create a security group for the EC2 instance +resource "aws_security_group" "instance" { + name_prefix = "instance-" + vpc_id = data.aws_vpc.vpc.id + + ingress { + from_port = 80 + to_port = 80 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + ingress { + from_port = 443 + to_port = 443 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = { + Name = "instance-security-group" + } +} + +# Define the Launch Configuration +resource "aws_launch_configuration" "lc" { + name_prefix = "lc-" + image_id = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI + instance_type = "t3.small" + security_groups = [ + aws_security_group.instance.id + ] + user_data = file("${path.module}/user-data.sh") + root_block_device { + volume_size = 20 + } +} + +# Define the Auto Scaling Group +resource "aws_autoscaling_group" "asg" { + name_prefix = "asg-" + launch_configuration = aws_launch_configuration.lc.id + vpc_zone_identifier = [ + data.aws_subnet.subnet1.id, + data.aws_subnet.subnet2.id + ] + min_size = var.min_size + max_size = var.max_size + desired_capacity = var.min_size + health_check_grace_period = 300 + health_check_type = "EC2" + termination_policies = ["OldestInstance"] + tag { + key = "Name" + value = "asg-instance" + propagate_at_launch = true + } +} + +# Output the instance public IP address +output "public_ip" { + value = aws_autoscaling_group.asg.instances[0].public_ip +} diff --git a/aws/aws_simple/ec2/terraform.tfvars b/aws/aws_simple/ec2/terraform.tfvars new file mode 100644 index 0000000..e591122 --- /dev/null +++ b/aws/aws_simple/ec2/terraform.tfvars @@ -0,0 +1,2 @@ +min_size = 1 +max_size = 10 \ No newline at end of file diff --git a/aws/aws_simple/ec2/user-data.sh b/aws/aws_simple/ec2/user-data.sh new file mode 100644 index 0000000..73a1be4 --- /dev/null +++ b/aws/aws_simple/ec2/user-data.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Install necessary packages +sudo apt-get update +sudo apt-get install -y git amazon-efs-utils vim-nox neofetch htop tmux curl wget + +# Create new user with sudo privileges +sudo useradd -m -s /bin/bash greg +sudo usermod -aG sudo greg + +# Add authorized keys for your public key +sudo mkdir -p /home/greg/.ssh +sudo touch /home/greg/.ssh/authorized_keys +sudo chmod 700 /home/greg/.ssh +sudo chmod 600 /home/greg/.ssh/authorized_keys +sudo chown -R greg:greg /home/greg/.ssh + +# Add your public key to authorized_keys +sudo echo "YOUR_PUBLIC_KEY" >> /home/greg/.ssh/authorized_keys + +# Set hostname +INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) +AVAILABILITY_ZONE=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone) +HOSTNAME="$INSTANCE_ID-$AVAILABILITY_ZONE" +sudo hostnamectl set-hostname $HOSTNAME + +# Run cloud-init.sh script +sudo sh /path/to/cloud-init.sh diff --git a/aws/aws_simple/ec2/variables.tf b/aws/aws_simple/ec2/variables.tf new file mode 100644 index 0000000..ad092af --- /dev/null +++ b/aws/aws_simple/ec2/variables.tf @@ -0,0 +1,13 @@ + +# Define variables +variable "min_size" { + type = number + description = "Minimum number of instances in the Auto Scaling Group" + default = 1 +} + +variable "max_size" { + type = number + description = "Maximum number of instances in the Auto Scaling Group" + default = 1 +} diff --git a/AWS/EC2/main.tf b/aws/aws_simple/efs/main.tf similarity index 100% rename from AWS/EC2/main.tf rename to aws/aws_simple/efs/main.tf diff --git a/AWS/EFS/main.tf b/aws/aws_simple/elb/main.tf similarity index 100% rename from AWS/EFS/main.tf rename to aws/aws_simple/elb/main.tf diff --git a/aws/aws_simple/main.tf b/aws/aws_simple/main.tf new file mode 100644 index 0000000..7c01d7a --- /dev/null +++ b/aws/aws_simple/main.tf @@ -0,0 +1,40 @@ +# Define provider +provider "aws" { + region = var.aws_region + access_key = var.aws_access_key + secret_key = var.aws_secret_key +} + +# Define modules +module "vpc_us_west" { + source = "./modules/vpc" +} + +module "subnet_us_west" { + source = "./modules/subnet" + vpc_id = module.vpc_us_west.vpc_id + region = "us-west-2" +} + +module "vpc_us_east" { + source = "./modules/vpc" + region = "us-east-1" +} + +module "subnet_us_east" { + source = "./modules/subnet" + vpc_id = module.vpc_us_east.vpc_id + region = "us-east-1" +} + +module "ec2" { + source = "./modules/ec2" +} + +module "elb" { + source = "./modules/elb" +} + +module "efs" { + source = "./modules/efs" +} diff --git a/aws/aws_simple/readme.md b/aws/aws_simple/readme.md new file mode 100644 index 0000000..dc1e334 --- /dev/null +++ b/aws/aws_simple/readme.md @@ -0,0 +1,15 @@ + + +my-terraform-project/ +├── main.tf +└── modules/ + ├── EFS/ + │ └── main.tf + ├── ELB/ + │ └── main.tf + ├── EC2/ + │ └── main.tf + ├── S3/ + │ └── main.tf + └── VPC/ + └── main.tf \ No newline at end of file diff --git a/aws/aws_simple/terraform.tfvars b/aws/aws_simple/terraform.tfvars new file mode 100644 index 0000000..0c441f7 --- /dev/null +++ b/aws/aws_simple/terraform.tfvars @@ -0,0 +1,3 @@ +aws_secret_key = "" +aws_access_key = "" +aws_region = "us-west-2" \ No newline at end of file diff --git a/aws/aws_simple/variables.tf b/aws/aws_simple/variables.tf new file mode 100644 index 0000000..37ffae0 --- /dev/null +++ b/aws/aws_simple/variables.tf @@ -0,0 +1,16 @@ + +# Define variables +variable "aws_region" { + type = string + default = "us-west-2" +} + +variable "aws_access_key" { + type = string + default = "" +} + +variable "aws_secret_key" { + type = string + default = "" +} diff --git a/aws/aws_simple/vpc/subnets/us-east/subnets-east.tf b/aws/aws_simple/vpc/subnets/us-east/subnets-east.tf new file mode 100644 index 0000000..a182a30 --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-east/subnets-east.tf @@ -0,0 +1,31 @@ + +provider "aws" { + region = "us-east-1" +} + +resource "aws_subnet" "us_east_subnet_1" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_east_subnet_1_cidr_block + availability_zone = var.us_east_subnet_1_az + tags = { + Name = "${var.region}_${var.us_east_subnet_1_az}_subnet" + } +} + +resource "aws_subnet" "us_east_subnet_2" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_east_subnet_2_cidr_block + availability_zone = var.us_east_subnet_2_az + tags = { + Name = "${var.region}_${var.us_east_subnet_2_az}_subnet" + } +} + +resource "aws_subnet" "us_east_subnet_3" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_east_subnet_3_cidr_block + availability_zone = var.us_east_subnet_3_az + tags = { + Name = "${var.region}_${var.us_east_subnet_3_az}_subnet" + } +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/subnets/us-east/terraform.tfvars b/aws/aws_simple/vpc/subnets/us-east/terraform.tfvars new file mode 100644 index 0000000..774fdef --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-east/terraform.tfvars @@ -0,0 +1,10 @@ +us_east_subnet_1_az = "us-east-1a" +us_east_subnet_1_cidr_block = "10.0.4.0/24" + +us_east_subnet_2_az = "us-east-1b" +us_east_subnet_2_cidr_block = "10.0.5.0/24" + +us_east_subnet_3_az = "us-east-1c" +us_east_subnet_3_cidr_block = "10.0.6.0/24" + + diff --git a/aws/aws_simple/vpc/subnets/us-east/variables.tf b/aws/aws_simple/vpc/subnets/us-east/variables.tf new file mode 100644 index 0000000..784dc3a --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-east/variables.tf @@ -0,0 +1,28 @@ +variable "us_east_subnet_1_az" { + default = "us-east-1a" +} + +variable "us_east_subnet_2_az" { + default = "us-east-1b" +} + +variable "us_east_subnet_3_az" { + default = "us-east-1c" +} + +variable "region" { + default = "us-east-1" +} + + +variable "us_east_subnet_1_cidr_block" { + default = "10.0.4.0/24" +} + +variable "us_east_subnet_2_cidr_block" { + default = "10.0.5.0/24" +} + +variable "us_east_subnet_3_cidr_block" { + default = "10.0.6.0/24" +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/subnets/us-west/subnets-west.tf b/aws/aws_simple/vpc/subnets/us-west/subnets-west.tf new file mode 100644 index 0000000..07281c7 --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-west/subnets-west.tf @@ -0,0 +1,27 @@ + +resource "aws_subnet" "us_west_subnet_1" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_west_subnet_1_cidr_block + availability_zone = var.us_west_subnet_1_az + tags = { + Name = "${var.region}_${var.us_west_subnet_1_az}_subnet" + } +} + +resource "aws_subnet" "us_west_subnet_2" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_west_subnet_2_cidr_block + availability_zone = var.us_west_subnet_2_az + tags = { + Name = "${var.region}_${var.us_west_subnet_2_az}_subnet" + } +} + +resource "aws_subnet" "us_west_subnet_3" { + vpc_id = aws_vpc.my_vpc.id + cidr_block = var.us_west_subnet_3_cidr_block + availability_zone = var.us_west_subnet_3_az + tags = { + Name = "${var.region}_${var.us_west_subnet_3_az}_subnet" + } +} diff --git a/aws/aws_simple/vpc/subnets/us-west/terraform.tfvars b/aws/aws_simple/vpc/subnets/us-west/terraform.tfvars new file mode 100644 index 0000000..b43cf99 --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-west/terraform.tfvars @@ -0,0 +1,10 @@ +region = "us-west-2" +us_west_subnet_1_cidr_block = "10.0.1.0/24" +us_west_subnet_1_az = "us-west-2a" + +us_west_subnet_2_cidr_block = "10.0.2.0/24" +us_west_subnet_2_az = "us-west-2b" + +us_west_subnet_3_cidr_block = "10.0.3.0/24" +us_west_subnet_3_az = "us-west-2c" + diff --git a/aws/aws_simple/vpc/subnets/us-west/variables.tf b/aws/aws_simple/vpc/subnets/us-west/variables.tf new file mode 100644 index 0000000..14cba45 --- /dev/null +++ b/aws/aws_simple/vpc/subnets/us-west/variables.tf @@ -0,0 +1,28 @@ +variable "us_west_subnet_1_cidr_block" { + default = "10.0.1.0/24" +} + +variable "us_west_subnet_2_cidr_block" { + default = "10.0.2.0/24" +} + +variable "us_west_subnet_3_cidr_block" { + default = "10.0.3.0/24" +} + + +variable "us_west_subnet_1_az" { + default = "us-west-2a" +} + +variable "us_west_subnet_2_az" { + default = "us-west-2b" +} + +variable "us_west_subnet_3_az" { + default = "us-west-2c" +} + +variable "region" { + default = "us-west-2" +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/terraform.tfvars b/aws/aws_simple/vpc/terraform.tfvars new file mode 100644 index 0000000..d0f2291 --- /dev/null +++ b/aws/aws_simple/vpc/terraform.tfvars @@ -0,0 +1,2 @@ +vpc_cidr_block = "10.0.0.0/16" + diff --git a/aws/aws_simple/vpc/variables.tf b/aws/aws_simple/vpc/variables.tf new file mode 100644 index 0000000..f8b2145 --- /dev/null +++ b/aws/aws_simple/vpc/variables.tf @@ -0,0 +1,4 @@ +variable "vpc_cidr_block" { + default = "10.0.0.0/16" +} + diff --git a/aws/aws_simple/vpc/vpc.tf b/aws/aws_simple/vpc/vpc.tf new file mode 100644 index 0000000..7072b79 --- /dev/null +++ b/aws/aws_simple/vpc/vpc.tf @@ -0,0 +1,65 @@ +#Create aws vpc +resource "aws_vpc" "my_vpc" { + cidr_block = var.vpc_cidr_block + tags = { + Name = "production-vpc" + Environment = "production" + } +} +# Create aws internet gateway +resource "aws_internet_gateway" "my_igw" { + vpc_id = aws_vpc.my_vpc.id +} + +# Create route table entries for the west subnets +resource "aws_route_table" "us_west_route_table" { + vpc_id = aws_vpc.my_vpc.id +} + +# Create route table entries for the east subnets +resource "aws_route_table" "us_east_route_table" { + vpc_id = aws_vpc.my_vpc.id +} + +resource "aws_route" "us_west_route" { + route_table_id = aws_route_table.us_west_route_table.id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.my_igw.id +} + +resource "aws_route" "us_east_route" { + route_table_id = aws_route_table.us_east_route_table.id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.my_igw.id +} + +resource "aws_route_table_association" "us_west_subnet_1_association" { + subnet_id = aws_subnet.us_west_subnet_1.id + route_table_id = aws_route_table.us_west_route_table.id +} + +resource "aws_route_table_association" "us_west_subnet_2_association" { + subnet_id = aws_subnet.us_west_subnet_2.id + route_table_id = aws_route_table.us_west_route_table.id +} + +resource "aws_route_table_association" "us_west_subnet_3_association" { + subnet_id = aws_subnet.us_west_subnet_3.id + route_table_id = aws_route_table.us_west_route_table.id +} + +resource "aws_route_table_association" "us_east_subnet_1_association" { + subnet_id = aws_subnet.us_east_subnet_1.id + route_table_id = aws_route_table.us_east_route_table.id +} + +resource "aws_route_table_association" "us_east_subnet_2_association" { + subnet_id = aws_subnet.us_east_subnet_2.id + route_table_id = aws_route_table.us_east_route_table.id +} + +resource "aws_route_table_association" "us_east_subnet_3_association" { + subnet_id = aws_subnet.us_east_subnet_3.id + route_table_id = aws_route_table.us_east_route_table.id +} +