diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2462613 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +aws/aws_simple/.terraform.lock.hcl +aws/aws_simple/.terraform/modules/modules.json +aws/aws_simple/terraform.tfstate.backup +aws/aws_simple/terraform.tfstate +aws/aws_simple/.terraform/providers/registry.terraform.io/hashicorp/aws/5.25.0/linux_amd64/terraform-provider-aws_v5.25.0_x5 diff --git a/aws/aws_simple/ec2/variables.tf b/aws/aws_simple/ec2/variables.tf deleted file mode 100644 index ad092af..0000000 --- a/aws/aws_simple/ec2/variables.tf +++ /dev/null @@ -1,13 +0,0 @@ - -# 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/aws_simple/main.tf b/aws/aws_simple/main.tf index 7c01d7a..ecd4bc0 100644 --- a/aws/aws_simple/main.tf +++ b/aws/aws_simple/main.tf @@ -1,34 +1,43 @@ # 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" { +module "vpc_us" { source = "./modules/vpc" + + us_east_subnet_1_id = module.subnets_us_east.us_east_subnet_1_id + us_east_subnet_2_id = module.subnets_us_east.us_east_subnet_2_id + us_east_subnet_3_id = module.subnets_us_east.us_east_subnet_3_id + + us_west_subnet_1_id = module.subnets_us_west.us_west_subnet_1_id + us_west_subnet_2_id = module.subnets_us_west.us_west_subnet_2_id + us_west_subnet_3_id = module.subnets_us_west.us_west_subnet_3_id } -module "subnet_us_west" { - source = "./modules/subnet" - vpc_id = module.vpc_us_west.vpc_id - region = "us-west-2" +module "subnets_us_west" { + source = "./modules/vpc/subnets/us-west" + vpc_id = module.vpc_us.vpc_id } -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 "subnets_us_east" { + source = "./modules/vpc/subnets/us-east" + vpc_id = module.vpc_us.vpc_id } module "ec2" { source = "./modules/ec2" + + us_east_subnet_1_id = module.subnets_us_east.us_east_subnet_1_id + us_east_subnet_2_id = module.subnets_us_east.us_east_subnet_2_id + us_east_subnet_3_id = module.subnets_us_east.us_east_subnet_3_id + + us_west_subnet_1_id = module.subnets_us_west.us_west_subnet_1_id + us_west_subnet_2_id = module.subnets_us_west.us_west_subnet_2_id + us_west_subnet_3_id = module.subnets_us_west.us_west_subnet_3_id + + vpc_id = module.vpc_us.vpc_id } module "elb" { diff --git a/aws/aws_simple/ec2/ec2.tf b/aws/aws_simple/modules/ec2/ec2.tf similarity index 67% rename from aws/aws_simple/ec2/ec2.tf rename to aws/aws_simple/modules/ec2/ec2.tf index 1245e58..96743ff 100644 --- a/aws/aws_simple/ec2/ec2.tf +++ b/aws/aws_simple/modules/ec2/ec2.tf @@ -1,40 +1,36 @@ # Define the VPC and subnets data sources data "aws_vpc" "vpc" { - id = data.aws_subnet.subnet1.vpc_id -} - -module "vpc_subnets" { - source = "../vpc/subnets" + id = var.vpc_id } data "aws_subnet" "subnet1" { - id = module.vpc_subnets.subnet_ids[0] + id = var.us_east_subnet_1_id } data "aws_subnet" "subnet2" { - id = module.vpc_subnets.subnet_ids[1] + id = var.us_east_subnet_2_id } data "aws_subnet" "subnet3" { - id = module.vpc_subnets.subnet_ids[2] + id = var.us_east_subnet_3_id } data "aws_subnet" "subnet4" { - id = module.vpc_subnets.subnet_ids[3] + id = var.us_west_subnet_1_id } data "aws_subnet" "subnet5" { - id = module.vpc_subnets.subnet_ids[4] + id = var.us_west_subnet_2_id } data "aws_subnet" "subnet6" { - id = module.vpc_subnets.subnet_ids[5] + id = var.us_west_subnet_3_id } # Create a security group for the EC2 instance resource "aws_security_group" "instance" { name_prefix = "instance-" - vpc_id = data.aws_vpc.vpc.id + vpc_id = var.vpc_id ingress { from_port = 80 @@ -73,9 +69,23 @@ resource "aws_launch_configuration" "lc" { resource "aws_autoscaling_group" "asg" { name_prefix = "asg-" launch_configuration = aws_launch_configuration.lc.id + depends_on = [ + var.vpc_id, + aws_launch_configuration.lc, + data.aws_subnet.subnet1, + data.aws_subnet.subnet2, + data.aws_subnet.subnet3, + data.aws_subnet.subnet4, + data.aws_subnet.subnet5, + data.aws_subnet.subnet6 + ] vpc_zone_identifier = [ data.aws_subnet.subnet1.id, - data.aws_subnet.subnet2.id + data.aws_subnet.subnet2.id, + data.aws_subnet.subnet3.id, + data.aws_subnet.subnet4.id, + data.aws_subnet.subnet5.id, + data.aws_subnet.subnet6.id ] min_size = var.min_size max_size = var.max_size @@ -90,7 +100,8 @@ resource "aws_autoscaling_group" "asg" { } } -# Output the instance public IP address -output "public_ip" { - value = aws_autoscaling_group.asg.instances[0].public_ip +data "aws_instances" "asg_instances" { + instance_tags = { + "aws:autoscaling:groupName" = aws_autoscaling_group.asg.name + } } diff --git a/aws/aws_simple/modules/ec2/outputs.tf b/aws/aws_simple/modules/ec2/outputs.tf new file mode 100644 index 0000000..d5f2320 --- /dev/null +++ b/aws/aws_simple/modules/ec2/outputs.tf @@ -0,0 +1,4 @@ +# output "public_ips" { +# description = "Public IP addresses of the instances in the Auto Scaling group" +# value = [for i in data.aws_instances.asg_instances.ids : aws_instance[i].public_ip] +# } \ No newline at end of file diff --git a/aws/aws_simple/ec2/terraform.tfvars b/aws/aws_simple/modules/ec2/terraform.tfvars similarity index 100% rename from aws/aws_simple/ec2/terraform.tfvars rename to aws/aws_simple/modules/ec2/terraform.tfvars diff --git a/aws/aws_simple/ec2/user-data.sh b/aws/aws_simple/modules/ec2/user-data.sh similarity index 56% rename from aws/aws_simple/ec2/user-data.sh rename to aws/aws_simple/modules/ec2/user-data.sh index 73a1be4..bb81c28 100644 --- a/aws/aws_simple/ec2/user-data.sh +++ b/aws/aws_simple/modules/ec2/user-data.sh @@ -16,7 +16,8 @@ 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 +sudo echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCdOF80z0piQEnYzNCu2OGvOJdm7+3wfDuiC+Jzi8VbSC5VW4iJAQXOuDNGLzyqNi6uMjI77xpEL6Xzn29uJiQti6Y/LxhOZwNNIQiGUpFco1wkBYeBFbtgHQxsMLwumrxQGEj2fyCiSrACAPyy/l1fP4mlN7abBGD5aozBrYKxXPS/kfwO5nsWmw27RgTzfHJzie2dUU3ew/kd7td3wEdWrRXq8wNbu+yvAyiog54huUUWmYZwY3QVwXr6R1wsVudawM6BEl45QFq+hdB4t83azHG94XLy2NCAncohdU7zP40nsbvIDyh+4wIKeU90z6TLrXfHUYuBT6/ky7qOFm/Ym1QG4zCDz3jin8Qoa31PGaObzj/zoMJXgOXKcp16W0j9SZAenvnSfuWUEfBR1yBRR0T5Wg5v1vi7KGBTATaz8el802uliL+yZbGtMbNpAPGR5nK5C4yorf8yVYvIgo/LJaWCDND2O1e2mdut1WyRmvIwMnq7PFZT8zAsgGXfhDM= greg@ligma +" >> /home/greg/.ssh/authorized_keys # Set hostname INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) @@ -25,4 +26,4 @@ HOSTNAME="$INSTANCE_ID-$AVAILABILITY_ZONE" sudo hostnamectl set-hostname $HOSTNAME # Run cloud-init.sh script -sudo sh /path/to/cloud-init.sh +# sudo sh /path/to/cloud-init.sh diff --git a/aws/aws_simple/modules/ec2/variables.tf b/aws/aws_simple/modules/ec2/variables.tf new file mode 100644 index 0000000..6092172 --- /dev/null +++ b/aws/aws_simple/modules/ec2/variables.tf @@ -0,0 +1,49 @@ + +# 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 +} + + +variable "us_east_subnet_1_id" { + description = "The ID of the first US East subnet" + type = string +} + +variable "us_east_subnet_2_id" { + description = "The ID of the second US East subnet" + type = string +} + +variable "us_east_subnet_3_id" { + description = "The ID of the third US East subnet" + type = string +} + +variable "us_west_subnet_1_id" { + description = "The ID of the first US West subnet" + type = string +} + +variable "us_west_subnet_2_id" { + description = "The ID of the second US West subnet" + type = string +} + +variable "us_west_subnet_3_id" { + description = "The ID of the third US West subnet" + type = string +} + +variable "vpc_id" { + description = "The ID of the VPC" + type = string +} \ No newline at end of file diff --git a/aws/aws_simple/efs/main.tf b/aws/aws_simple/modules/efs/main.tf similarity index 100% rename from aws/aws_simple/efs/main.tf rename to aws/aws_simple/modules/efs/main.tf diff --git a/aws/aws_simple/elb/main.tf b/aws/aws_simple/modules/elb/main.tf similarity index 100% rename from aws/aws_simple/elb/main.tf rename to aws/aws_simple/modules/elb/main.tf diff --git a/aws/aws_simple/modules/vpc/outputs.tf b/aws/aws_simple/modules/vpc/outputs.tf new file mode 100644 index 0000000..87ef5aa --- /dev/null +++ b/aws/aws_simple/modules/vpc/outputs.tf @@ -0,0 +1,3 @@ +output "vpc_id" { + value = aws_vpc.vpc_us.id +} diff --git a/aws/aws_simple/modules/vpc/subnets/us-east/outputs.tf b/aws/aws_simple/modules/vpc/subnets/us-east/outputs.tf new file mode 100644 index 0000000..71f3ecd --- /dev/null +++ b/aws/aws_simple/modules/vpc/subnets/us-east/outputs.tf @@ -0,0 +1,16 @@ +# In your vpc/subnets/us-east module + +output "us_east_subnet_1_id" { + description = "The ID of the first US East subnet" + value = aws_subnet.us_east_subnet_1.id +} + +output "us_east_subnet_2_id" { + description = "The ID of the second US East subnet" + value = aws_subnet.us_east_subnet_2.id +} + +output "us_east_subnet_3_id" { + description = "The ID of the third US East subnet" + value = aws_subnet.us_east_subnet_3.id +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/subnets/us-east/subnets-east.tf b/aws/aws_simple/modules/vpc/subnets/us-east/subnets-east.tf similarity index 77% rename from aws/aws_simple/vpc/subnets/us-east/subnets-east.tf rename to aws/aws_simple/modules/vpc/subnets/us-east/subnets-east.tf index a182a30..dea401b 100644 --- a/aws/aws_simple/vpc/subnets/us-east/subnets-east.tf +++ b/aws/aws_simple/modules/vpc/subnets/us-east/subnets-east.tf @@ -1,31 +1,36 @@ - provider "aws" { - region = "us-east-1" + region = var.region } resource "aws_subnet" "us_east_subnet_1" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.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" } + + depends_on = [var.vpc_id] } resource "aws_subnet" "us_east_subnet_2" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.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" } + + depends_on = [var.vpc_id] } resource "aws_subnet" "us_east_subnet_3" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.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" } + + depends_on = [var.vpc_id] } \ No newline at end of file diff --git a/aws/aws_simple/vpc/subnets/us-east/terraform.tfvars b/aws/aws_simple/modules/vpc/subnets/us-east/terraform.tfvars similarity index 100% rename from aws/aws_simple/vpc/subnets/us-east/terraform.tfvars rename to aws/aws_simple/modules/vpc/subnets/us-east/terraform.tfvars diff --git a/aws/aws_simple/vpc/subnets/us-east/variables.tf b/aws/aws_simple/modules/vpc/subnets/us-east/variables.tf similarity index 84% rename from aws/aws_simple/vpc/subnets/us-east/variables.tf rename to aws/aws_simple/modules/vpc/subnets/us-east/variables.tf index 784dc3a..06b49e1 100644 --- a/aws/aws_simple/vpc/subnets/us-east/variables.tf +++ b/aws/aws_simple/modules/vpc/subnets/us-east/variables.tf @@ -25,4 +25,9 @@ variable "us_east_subnet_2_cidr_block" { variable "us_east_subnet_3_cidr_block" { default = "10.0.6.0/24" +} + +variable "vpc_id" { + description = "The ID of the VPC" + type = string } \ No newline at end of file diff --git a/aws/aws_simple/modules/vpc/subnets/us-west/outputs.tf b/aws/aws_simple/modules/vpc/subnets/us-west/outputs.tf new file mode 100644 index 0000000..9fa8450 --- /dev/null +++ b/aws/aws_simple/modules/vpc/subnets/us-west/outputs.tf @@ -0,0 +1,16 @@ +# In your vpc/subnets/us-east module + +output "us_west_subnet_1_id" { + description = "The ID of the first US East subnet" + value = aws_subnet.us_west_subnet_1.id +} + +output "us_west_subnet_2_id" { + description = "The ID of the second US East subnet" + value = aws_subnet.us_west_subnet_2.id +} + +output "us_west_subnet_3_id" { + description = "The ID of the third US East subnet" + value = aws_subnet.us_west_subnet_3.id +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/subnets/us-west/subnets-west.tf b/aws/aws_simple/modules/vpc/subnets/us-west/subnets-west.tf similarity index 86% rename from aws/aws_simple/vpc/subnets/us-west/subnets-west.tf rename to aws/aws_simple/modules/vpc/subnets/us-west/subnets-west.tf index 07281c7..fc69355 100644 --- a/aws/aws_simple/vpc/subnets/us-west/subnets-west.tf +++ b/aws/aws_simple/modules/vpc/subnets/us-west/subnets-west.tf @@ -1,6 +1,5 @@ - resource "aws_subnet" "us_west_subnet_1" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.vpc_id cidr_block = var.us_west_subnet_1_cidr_block availability_zone = var.us_west_subnet_1_az tags = { @@ -9,7 +8,7 @@ resource "aws_subnet" "us_west_subnet_1" { } resource "aws_subnet" "us_west_subnet_2" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.vpc_id cidr_block = var.us_west_subnet_2_cidr_block availability_zone = var.us_west_subnet_2_az tags = { @@ -18,7 +17,7 @@ resource "aws_subnet" "us_west_subnet_2" { } resource "aws_subnet" "us_west_subnet_3" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = var.vpc_id cidr_block = var.us_west_subnet_3_cidr_block availability_zone = var.us_west_subnet_3_az tags = { diff --git a/aws/aws_simple/vpc/subnets/us-west/terraform.tfvars b/aws/aws_simple/modules/vpc/subnets/us-west/terraform.tfvars similarity index 99% rename from aws/aws_simple/vpc/subnets/us-west/terraform.tfvars rename to aws/aws_simple/modules/vpc/subnets/us-west/terraform.tfvars index b43cf99..d8d98e3 100644 --- a/aws/aws_simple/vpc/subnets/us-west/terraform.tfvars +++ b/aws/aws_simple/modules/vpc/subnets/us-west/terraform.tfvars @@ -7,4 +7,3 @@ 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/modules/vpc/subnets/us-west/variables.tf similarity index 84% rename from aws/aws_simple/vpc/subnets/us-west/variables.tf rename to aws/aws_simple/modules/vpc/subnets/us-west/variables.tf index 14cba45..2bc6502 100644 --- a/aws/aws_simple/vpc/subnets/us-west/variables.tf +++ b/aws/aws_simple/modules/vpc/subnets/us-west/variables.tf @@ -25,4 +25,9 @@ variable "us_west_subnet_3_az" { variable "region" { default = "us-west-2" +} + +variable "vpc_id" { + description = "The ID of the VPC" + type = string } \ No newline at end of file diff --git a/aws/aws_simple/modules/vpc/terraform.tfvars b/aws/aws_simple/modules/vpc/terraform.tfvars new file mode 100644 index 0000000..009494e --- /dev/null +++ b/aws/aws_simple/modules/vpc/terraform.tfvars @@ -0,0 +1,8 @@ +vpc_cidr_block = "10.0.0.0/16" + +us_east_subnet_1_id = "" +us_east_subnet_2_id = "" +us_east_subnet_3_id = "" +us_west_subnet_1_id = "" +us_west_subnet_2_id = "" +us_west_subnet_3_id = "" \ No newline at end of file diff --git a/aws/aws_simple/modules/vpc/variables.tf b/aws/aws_simple/modules/vpc/variables.tf new file mode 100644 index 0000000..248726f --- /dev/null +++ b/aws/aws_simple/modules/vpc/variables.tf @@ -0,0 +1,33 @@ +variable "vpc_cidr_block" { + default = "10.0.0.0/16" +} + +variable "us_east_subnet_1_id" { + description = "The ID of the first US East subnet" + type = string +} + +variable "us_east_subnet_2_id" { + description = "The ID of the second US East subnet" + type = string +} + +variable "us_east_subnet_3_id" { + description = "The ID of the third US East subnet" + type = string +} + +variable "us_west_subnet_1_id" { + description = "The ID of the first US West subnet" + type = string +} + +variable "us_west_subnet_2_id" { + description = "The ID of the second US West subnet" + type = string +} + +variable "us_west_subnet_3_id" { + description = "The ID of the third US West subnet" + type = string +} \ No newline at end of file diff --git a/aws/aws_simple/vpc/vpc.tf b/aws/aws_simple/modules/vpc/vpc.tf similarity index 77% rename from aws/aws_simple/vpc/vpc.tf rename to aws/aws_simple/modules/vpc/vpc.tf index 7072b79..b81b126 100644 --- a/aws/aws_simple/vpc/vpc.tf +++ b/aws/aws_simple/modules/vpc/vpc.tf @@ -1,24 +1,24 @@ #Create aws vpc -resource "aws_vpc" "my_vpc" { +resource "aws_vpc" "vpc_us" { cidr_block = var.vpc_cidr_block tags = { - Name = "production-vpc" + Name = "vpc_us" Environment = "production" } } # Create aws internet gateway resource "aws_internet_gateway" "my_igw" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = aws_vpc.vpc_us.id } # Create route table entries for the west subnets resource "aws_route_table" "us_west_route_table" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = aws_vpc.vpc_us.id } # Create route table entries for the east subnets resource "aws_route_table" "us_east_route_table" { - vpc_id = aws_vpc.my_vpc.id + vpc_id = aws_vpc.vpc_us.id } resource "aws_route" "us_west_route" { @@ -34,32 +34,32 @@ resource "aws_route" "us_east_route" { } resource "aws_route_table_association" "us_west_subnet_1_association" { - subnet_id = aws_subnet.us_west_subnet_1.id + subnet_id = var.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 + subnet_id = var.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 + subnet_id = var.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 + subnet_id = var.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 + subnet_id = var.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 + subnet_id = var.us_east_subnet_3_id route_table_id = aws_route_table.us_east_route_table.id } diff --git a/aws/aws_simple/terraform.tfvars b/aws/aws_simple/terraform.tfvars index 0c441f7..7bfa3a2 100644 --- a/aws/aws_simple/terraform.tfvars +++ b/aws/aws_simple/terraform.tfvars @@ -1,3 +1,3 @@ -aws_secret_key = "" +aws_secret_key = "" aws_access_key = "" -aws_region = "us-west-2" \ No newline at end of file +aws_region = "us-west-2" diff --git a/aws/aws_simple/vpc/terraform.tfvars b/aws/aws_simple/vpc/terraform.tfvars deleted file mode 100644 index d0f2291..0000000 --- a/aws/aws_simple/vpc/terraform.tfvars +++ /dev/null @@ -1,2 +0,0 @@ -vpc_cidr_block = "10.0.0.0/16" - diff --git a/aws/aws_simple/vpc/variables.tf b/aws/aws_simple/vpc/variables.tf deleted file mode 100644 index f8b2145..0000000 --- a/aws/aws_simple/vpc/variables.tf +++ /dev/null @@ -1,4 +0,0 @@ -variable "vpc_cidr_block" { - default = "10.0.0.0/16" -} -