From 9b0f250e580b234d45ba863637d4b9fa1c9b38e1 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Wed, 20 Jul 2022 10:08:55 +0000 Subject: [PATCH 01/38] changed the aws AMI id --- .../terraform-manifests/.ec2-instance.tf.swp | Bin 0 -> 12288 bytes .../terraform-manifests/ec2-instance.tf | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/.ec2-instance.tf.swp diff --git a/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/.ec2-instance.tf.swp b/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/.ec2-instance.tf.swp new file mode 100644 index 0000000000000000000000000000000000000000..4e12b912be08c3c6c40585ea78622e7493ca2edc GIT binary patch literal 12288 zcmeI2J#Q015Qf)u6afUHA8bnQY@dnZ6d;i(C`gHd5&~tkzS~Py@qJ`>FCRpNioX!V z&!C})f`XO;(SZ>EgLmz-6Da5?P-dmqcb>VMdFSaY&!F@4(JJ-BNZ?!(;^U_;gZG~= zHx5G~R2&7BRmP|Oc61qZ=c1t34f?%cc0R;=q0XH$xg4H%|C{f@hY2tNCcp%k025#WOn?b60Vco% z{tbZ_f@rc1z2%NdMfa%bqA=63DVj*iOw-vx5`mx-r|H~m)KAmdes7S@%O}uv-%+O=@CKJ5gED zq+`*d^~qBU!y?`l!n+<9An$kD$r~Hw7%;{s8>1zCl?{u-AHk5NZ-?lWi{tJ@F{mlRX literal 0 HcmV?d00001 diff --git a/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/ec2-instance.tf b/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/ec2-instance.tf index 406cd47a..2c9aec44 100644 --- a/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/ec2-instance.tf +++ b/02-Terraform-Basics/02-02-Terraform-Command-Basics/terraform-manifests/ec2-instance.tf @@ -16,6 +16,6 @@ provider "aws" { # Resource Block resource "aws_instance" "ec2demo" { - ami = "ami-0533f2ba8a1995cf9" # Amazon Linux in us-east-1, update as per your region + ami = "ami-0cff7528ff583bf9a" # Amazon Linux in us-east-1, update as per your region instance_type = "t2.micro" } From e5e820c3d3f598bd6b54c38064704489ff05100a Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Tue, 26 Jul 2022 01:38:21 -0500 Subject: [PATCH 02/38] Update c1-versions.tf changing the terraform version --- .../terraform-manifests/c1-versions.tf | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf index 1c975de3..725a3b0d 100644 --- a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf +++ b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf @@ -1,18 +1,17 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_versioin = "~>1.2.0" required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "4.23.0" } - } -} -# Provider Block -provider "aws" { - region = "us-east-1" + } } +provider "aws" { + region = "us-east-1" + /* Note-1: AWS Credentials Profile (profile = "default") configured on your local desktop terminal $HOME/.aws/credentials From 0594a0c506c37b4bd18b58fbc9d9bd6ce76dd0e2 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Wed, 27 Jul 2022 09:47:06 +0000 Subject: [PATCH 03/38] added the missing braces --- .../terraform-manifests/c1-versions.tf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf index 725a3b0d..16ecbf52 100644 --- a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf +++ b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf @@ -11,7 +11,8 @@ terraform { provider "aws" { region = "us-east-1" - + profile = "default" +} /* Note-1: AWS Credentials Profile (profile = "default") configured on your local desktop terminal $HOME/.aws/credentials From 7bd8af1543edf03ac25440b1dbef5091eeba3974 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Wed, 27 Jul 2022 09:48:22 +0000 Subject: [PATCH 04/38] added the missing braces --- .../terraform-manifests/c1-versions.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf index 16ecbf52..196337e8 100644 --- a/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf +++ b/03-Terraform-Settings-Providers-Resources/terraform-manifests/c1-versions.tf @@ -1,6 +1,6 @@ # Terraform Block terraform { - required_versioin = "~>1.2.0" + required_version = "~>1.2.0" required_providers { aws = { source = "hashicorp/aws" From fddf333c8ffc6f38802f44868c2e26cc931a9223 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:45:09 -0500 Subject: [PATCH 05/38] Update c2-variables.tf my variables --- .../terraform-manifests/c2-variables.tf | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c2-variables.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c2-variables.tf index 786f7843..42c74c63 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c2-variables.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c2-variables.tf @@ -1,23 +1,25 @@ # Input Variables # AWS Region variable "aws_region" { - description = "Region in which AWS Resources to be created" + description = "Region of aws resources" type = string default = "us-east-1" -} +} # AWS EC2 Instance Type variable "instance_type" { - description = "EC2 Instnace Type" + description = "EC2 instance type" type = string - default = "t3.micro" + default = "t2.micro" + + } # AWS EC2 Instance Key Pair + variable "instance_keypair" { - description = "AWS EC2 Key Pair that need to be associated with EC2 Instance" + description = "aws keypair to login" type = string - default = "terraform-key" + default = "myterraformkeypair" + } - - From e53ca3adcd3d6b946251c4ef4535002c1d32f243 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:46:32 -0500 Subject: [PATCH 06/38] Update c3-ec2securitygroups.tf mysg --- .../c3-ec2securitygroups.tf | 73 +++++++++---------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c3-ec2securitygroups.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c3-ec2securitygroups.tf index 077c3c40..42bb1cf7 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c3-ec2securitygroups.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c3-ec2securitygroups.tf @@ -1,56 +1,55 @@ -# Create Security Group - SSH Traffic -resource "aws_security_group" "vpc-ssh" { - name = "vpc-ssh" - description = "Dev VPC SSH" +resource "aws_security_group" "allow_ssh" { + name = "allow_ssh" + description = "Allow ssh into instance" + ingress { - description = "Allow Port 22" - from_port = 22 - to_port = 22 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] + description = "TLS from 22" + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + # ipv6_cidr_blocks = [aws_vpc.main.ipv6_cidr_block] } egress { - description = "Allow all ip and ports outbound" - from_port = 0 - to_port = 0 - protocol = "-1" - cidr_blocks = ["0.0.0.0/0"] + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] } tags = { - Name = "vpc-ssh" + Name = "allow ssh traffic" } } -# Create Security Group - Web Traffic -resource "aws_security_group" "vpc-web" { - name = "vpc-web" - description = "Dev VPC Web" +# allow web traffic + + + +resource "aws_security_group" "allow_web" { + name = "allow_web" + description = "Allow http traffic into instance" + ingress { - description = "Allow Port 80" - from_port = 80 - to_port = 80 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] + description = "allow traffic from web" + from_port = 80 + to_port = 80 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + # ipv6_cidr_blocks = [aws_vpc.main.ipv6_cidr_block] } - ingress { - description = "Allow Port 443" - from_port = 443 - to_port = 443 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] - } + egress { - description = "Allow all ip and ports outbound" - from_port = 0 - to_port = 0 - protocol = "-1" - cidr_blocks = ["0.0.0.0/0"] + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] } tags = { Name = "vpc-web" } } - From 4bc2c60311637f3313adf76f62c7131fec92109e Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:47:03 -0500 Subject: [PATCH 07/38] Update c4-ami-datasource.tf mydatasources --- .../terraform-manifests/c4-ami-datasource.tf | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf index cf1e87a6..9f393261 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf @@ -1,21 +1,25 @@ -# Get latest AMI ID for Amazon Linux2 OS -data "aws_ami" "amzlinux2" { +data "aws_ami" "amz_linux2" { most_recent = true + name_regex = "^myami-\\d{3}" owners = ["amazon"] + filter { name = "name" - values = ["amzn2-ami-hvm-*-gp2"] + values = ["amzn2-ami-kernel-5.10-hvm-*-gp2"] } + filter { name = "root-device-type" values = ["ebs"] } + filter { name = "virtualization-type" values = ["hvm"] } - filter { + filter { name = "architecture" values = ["x86_64"] } -} \ No newline at end of file +} + From a496910d97b0c8d675cf1c4a3b88d9200958cbd0 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:47:43 -0500 Subject: [PATCH 08/38] Update c5-ec2instance.tf i changed the sg names --- .../terraform-manifests/c5-ec2instance.tf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c5-ec2instance.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c5-ec2instance.tf index 8c74dfab..541ec467 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c5-ec2instance.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c5-ec2instance.tf @@ -1,11 +1,10 @@ -# EC2 Instance resource "aws_instance" "myec2vm" { - ami = data.aws_ami.amzlinux2.id + ami = data.aws_ami.amz_linux2.id instance_type = var.instance_type user_data = file("${path.module}/app1-install.sh") key_name = var.instance_keypair - vpc_security_group_ids = [ aws_security_group.vpc-ssh.id, aws_security_group.vpc-web.id ] + vpc_security_group_ids = [ aws_security_group.allow_ssh.id, aws_security_group.allow_web.id ] tags = { - "Name" = "EC2 Demo 2" + "Name" = "MyDemoEC2" } } From 159012d660cfa9d885472b75819424bab6db9292 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:48:20 -0500 Subject: [PATCH 09/38] Update c6-outputs.tf my output values --- .../terraform-manifests/c6-outputs.tf | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c6-outputs.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c6-outputs.tf index 70c4061b..ed5ec627 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c6-outputs.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c6-outputs.tf @@ -1,13 +1,11 @@ -# Terraform Output Values - -# EC2 Instance Public IP output "instance_publicip" { - description = "EC2 Instance Public IP" - value = aws_instance.myec2vm.public_ip + description = "ec2 instance public ip" + value = aws_instance.myec2vm.public_ip + } -# EC2 Instance Public DNS output "instance_publicdns" { - description = "EC2 Instance Public DNS" - value = aws_instance.myec2vm.public_dns + description = "ec2 instance public ip" + value = aws_instance.myec2vm.public_dns + } From 2b25f61fd4f6612e5c31ae20a232fb5b00442b88 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:49:48 -0500 Subject: [PATCH 10/38] Update c1-versions.tf changed the terraform version. --- .../terraform-manifests/c1-versions.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c1-versions.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c1-versions.tf index 9a8bf6ce..f23f4bb8 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c1-versions.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c1-versions.tf @@ -1,6 +1,6 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.0" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" From 9081eda70490c83510980368b5b337a8f2c03646 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Wed, 27 Jul 2022 12:54:10 +0000 Subject: [PATCH 11/38] changed the regex name --- .../terraform-manifests/.terraform.lock.hcl | 22 +++++++++++++++++++ .../terraform-manifests/c4-ami-datasource.tf | 1 - 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 04-Terraform-Variables-and-Datasources/terraform-manifests/.terraform.lock.hcl diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/.terraform.lock.hcl b/04-Terraform-Variables-and-Datasources/terraform-manifests/.terraform.lock.hcl new file mode 100644 index 00000000..c51eb535 --- /dev/null +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/.terraform.lock.hcl @@ -0,0 +1,22 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.75.2" + constraints = "~> 3.0" + hashes = [ + "h1:x0gluX9ZKEmz+JJW3Ut5GgWDFOq/lhs2vkqJ+xt57zs=", + "zh:0e75fb14ec42d69bc46461dd54016bb2487d38da324222cec20863918b8954c4", + "zh:30831a1fe29f005d8b809250b43d09522288db45d474c9d238b26f40bdca2388", + "zh:36163d625ab2999c9cd31ef2475d978f9f033a8dfa0d585f1665f2d6492fac4b", + "zh:48ec39685541e4ddd8ddd196e2cfb72516b87f471d86ac3892bc11f83c573199", + "zh:707b9c8775efd6962b6226d914ab25f308013bba1f68953daa77adca99ff6807", + "zh:72bd9f4609a827afa366c6f119c7dec7d73a35d712dad1457c0497d87bf8d160", + "zh:930e3ae3d0cb152e17ee5a8aee5cb47f7613d6421bc7c22e7f50c19da484a100", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:a19bf49b80101a0f0272b994153eeff8f8c206ecc592707bfbce7563355b6882", + "zh:a34b5d2bbaf52285b0c9a8df6258f4789f4d927ff777e126bdc77e7887abbeaa", + "zh:caad6fd5e79eae33e6d74e38c3b15c28a5482f2a1a8ca46cc1ee70089de61adb", + "zh:f2eae988635030de9a088f8058fbcd91e2014a8312a48b16bfd09a9d69d9d6f7", + ] +} diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf b/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf index 9f393261..944af7b3 100644 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/c4-ami-datasource.tf @@ -1,6 +1,5 @@ data "aws_ami" "amz_linux2" { most_recent = true - name_regex = "^myami-\\d{3}" owners = ["amazon"] filter { From 4c819d5fd0eba15bc72a1683db254afebee0254c Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:55:34 -0500 Subject: [PATCH 12/38] Add files via upload added my public key --- .../private-key/myterraformkeypair.pem | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/myterraformkeypair.pem diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/myterraformkeypair.pem b/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/myterraformkeypair.pem new file mode 100644 index 00000000..70b92437 --- /dev/null +++ b/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/myterraformkeypair.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA1mVD/8s7q/+3C3FhGomwWqxFDW/Q0yd3jH99Jk51kXYOK8jV +TxCGzM8LfXg4ExerHMtz7T4aKRMh2I+1ff+yXTRylsbrGeS3ufkvguNx2t8WVeR3 +BEJ/t2xkkFzuvCL8wWXp6HiKjUxeDcQrIL1+voPQ1SgvHzW0bC+E6p5oMjcJkqaY +D21wZvLCViZu7VDySq7R3vmKeNjhxM+UUmk3zg7F3rL1QxpuE1vssgZ+8hCEZbaW +6NgyL/G9wJ5dR/4oUSpRFJFdv6y2NtZ80G+SQYejVnZ/J5fi5voljUFs4Y5sbHtH +plk0CMVPE/U963EK9hZg6M6aYNZ1A+8E/pIqPQIDAQABAoIBADB4yqvtZftYIClN +I/gdAyss4ZvNGPh0Ztn0BPaBLKGLgF6z1E5A3Uk20lE2ue7PHhevg/EyZjW9JpzQ +uObYxZm+/t1J8eNzy3oXdX9xLs+eOm2G7sWex0NQFVhyOmN8wYp0ITM29ZRGnMkd +/eY0EZC/OprGsAitWrJO+A0XbVVUpAQpfV84zGDKHUAarbcMFKsoPhMbm+9PsrCe +GgXGKqe45GB1+8aiCwgQJff2hcbI3s/RvCt0/NT4JPDS0HEyTYubxlmW7styHxE9 +s/uD7BtmL2aOhSVysc+iSZxsY56RTCKKqWktTgJGWbCJs1lQv1m9Mna+qGns52wu ++xxOm8ECgYEA+faRU4HehmwWOayjOwE7Ok2YnQOj/+5ckuQ96AqoITrIApXDp3bI +pZTrveqs8JuUOsnBLUBrKKud8v/GWHphvK/A3cOgiIQNjVUZafWfs4oO/rpP2YgC +PgbGnnx1KvQ00bxFKCpKXixg3k75BXhu72Qah/tztek1lf9pLqT8MtECgYEA25LL +3StvyXQflkF4C3Ik5Kn71kqN9/XfDHl6Y6F5CKbOyVfbNMUMfTbWXGx/GrqmI/eN +4uzOrzDt8WdMjPMFZxaMKVzFWzIacVZQQaNnpELyc9cV8d6L3EvSIWAizK7gTe1p +YtFPT8cihxObsX6rOaRSriqeaPU/TKQ+8V3tY60CgYAs9tKrj+gEjDrvQwPV4GHU +GhNC413D8w/KCK6uKASYfadu95vLaw2q44AImMdlPMdMT/ClADqGhWCTTrlSPymH +tKHgAonFJOP/MXix29JPjJ0n60Hj4phsqfFenwrAoE9EDzbtg7X+/MKsGs6m0kQ6 +Yep33Z6x8XKHOfukvV70kQKBgHyUjZavTn2+pS1beAEGgmg7CehL5MELf8JUKlzd +AQ8nlawnbPhD1RI2SumlpXhE7n75tkdKlPpRiK+vLH/MYwRahqvxNwjHJLmpf1++ +ls9cLLQNFSZmXnRfkJnfMd9wWVPdoC2xFI7vLWf2eB/8/ql10nN/OuHSRFf32L6Z +zFcBAoGBAN6jcUyoeFH8s6vE1jw8uxWsA8+UiBtDuXp33FkaI3ZzjFCK2oAbAoCU +ZT4IFxFiiKKEAtmt7ecgT6KUQj6a21zspSH6JCIFHtEFrNS6oLSGwdizeS385LAK +31fwk/U1tJQYxlXiwquXQltcXbdgEyiHTiyxRGmz1QzQE9QF5hKe +-----END RSA PRIVATE KEY----- \ No newline at end of file From 6afdffa086b145db6faf293307959f84aa407b7c Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Wed, 27 Jul 2022 07:56:10 -0500 Subject: [PATCH 13/38] Delete terraform-key.pem deleting the old key file --- .../private-key/terraform-key.pem | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/terraform-key.pem diff --git a/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/terraform-key.pem b/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/terraform-key.pem deleted file mode 100644 index fab1eb2a..00000000 --- a/04-Terraform-Variables-and-Datasources/terraform-manifests/private-key/terraform-key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAnzQtbXStFNU4znotckbPpAbQvymSYBvIRhObDObmhZLzs/Qm -lm57HBU18NcdAeEmKjHyu/2CI4Wwor3TJ+LTKHIldHmCt+26dSN5889Km99Af674 -nuPg9fTt8IXhY83aO0AeEnFivC+lk9+6Xezv7J7Llsmyx3kvUGE4uUEPNPuNcjdU -OrSlQ/Th9FPWBsTL8wLQCfQaPIQhZT8fXnvNGViTpZ/YqcoKGmkXcMl/+Pi0Xccs -ID3Egl18sV5uWr6T1DSMqhhwWYbl+IagZYUeKQ6Lg5znAtnX2/OHhDep6pGcf+aE -jbRkhQWgfLIVYhNXkAGxdxBEA2fQO0wvnaKI6wIDAQABAoIBABmUZqApmQ253LDA -TMEJw58VQUEVyuEKVbl8uPLvvqZDoEiPuAt/oOQ4PDyAM7bzmBA7ikbOSrSubF0Z -pu3HsinTfVUjmO84kTb1Bkk4S0KUMmbRlDzjXGfofLqiqD5C+wd+G9bWxQh7l10V -G3qv8TTRpuCJc+I9BG8jz9tkKq9WYtnGKXktVIAmEXK+ein8A5yj+szV1CyP0y6Y -6D1KApk+o1hLEXCBxaK6JgD4elJWgU0jCIhRFZzae93yozNIfJc2WZfPc8Ro6GBa -8H57q3E241P7S65VewhZlln9AUcRFYc587ohcCIW8mOWQ8NA3IMP+oVxa2p334Ll -duhR2jECgYEAyf7a1/+/c82B+ENyo53Y5CK2UM28oOJjiyCaWG2Dxj6V2+ZSXPrS -YTo43L9XiqT0Ry2eHjb4pJDsEeW5FnaDFO6NVUP+vfzaqWtozQmVAl3GQybbSh6g -+KJoEQff2Obadp9ZVhLFTiBedvGqPD43hs7jtmk5RfMjpLOvidfe+/UCgYEAycSJ -etYYHMMQm2NgX1/4dcbgOiu33N+x1H7LaXuvJMaZw0wB7fUyu65CAexEanDtiKs3 -jVG4tAzdMmHg7VxKR7eiCvQaSlxdWdcWtL2eFVq2TaQeowbpJUtsR0h6W0vpaN9A -VYW/oAH4fzQskwmWSlBMxB/Ie14hBCBckTXSRV8CgYEAql6WXpCK/jVbZfYdfvrn -sKPGeijM7DWGGBaLmAHmnxKyeyKsXVgAkZj11NpeD8ZJcq97Kajb1pGVSxMjJVsX -/FOoST5sYfoew76gSi/GypQlYQYo9z8WLh9s/tBRcTRlFqAYTYzPdbG/ezshhmZD -lyRw0620bNdCPOyBJhY5MPECgYA/3tFOazuSz0UQi3LUfkLetagBghlf+AgJJmIp -8BdPYvcF1ae+tiHrO4x1o188+qaW3uxk9fusM25KJqXXPaHd9gl7wi4YYAjFCcuM -R4IlbGPNTCjOnr9rKOcL4aup/uvSYOmyqPYyJq2NRuzdVumWeLj0VMNYGkIFVmE3 -LnxzrQKBgG5loEjdSKt40YOMXtYvUYUKDGvWgoQEb0hj3OqiBXz+w4YD3/iX7dbQ -qra1gCxE42Z9beiBiti6zi6zGcoVj/pfNUoyxTLMSwaytbF+g1u6ksXcmC9PXcmk -kJDR0DJcm/rcL8tp3PKo22GDB7sobm9gk5je6y8z+dQs3SQbWzb0 ------END RSA PRIVATE KEY----- \ No newline at end of file From f0f42add2ddde48c8d984a2cb44009a0a8eb8ab7 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 01:35:33 -0500 Subject: [PATCH 14/38] adding my changes and changed the private key --- .../terraform-manifests/c2-variables.tf | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c2-variables.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c2-variables.tf index 8b8486e4..d53106ba 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c2-variables.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c2-variables.tf @@ -1,35 +1,39 @@ + # Input Variables # AWS Region variable "aws_region" { - description = "Region in which AWS Resources to be created" + description = "Region of aws resources" type = string default = "us-east-1" -} +} # AWS EC2 Instance Type variable "instance_type" { - description = "EC2 Instnace Type" + description = "EC2 instance type" type = string - default = "t3.micro" + default = "t2.micro" + + } # AWS EC2 Instance Key Pair + variable "instance_keypair" { - description = "AWS EC2 Key Pair that need to be associated with EC2 Instance" + description = "aws keypair to login" type = string - default = "terraform-key" + default = "NewTerraformkey" + } -# AWS EC2 Instance Type - List variable "instance_type_list" { - description = "EC2 Instance Type" + description = "instance type while using list" type = list(string) - default = ["t3.micro", "t3.small", "t3.large"] + default = [ "t3.micro" , "t2.small"] + } -# AWS EC2 Instance Type - Map variable "instance_type_map" { - description = "EC2 Instance Type" + description = "instance type while using list" type = map(string) default = { "dev" = "t3.micro" From c3ce00af02b57f092f02d47fb5aa47db029a44c7 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 01:48:49 -0500 Subject: [PATCH 15/38] updated the output block --- .../terraform-manifests/c6-outputs.tf | 49 ++++++++----------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf index 17b70589..21a76ce9 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf @@ -1,40 +1,31 @@ -# Terraform Output Values -/* Concepts Covered -1. For Loop with List -2. For Loop with Map -3. For Loop with Map Advanced -4. Legacy Splat Operator (latest) - Returns List -5. Latest Generalized Splat Operator - Returns the List -*/ - -# Output - For Loop with List +#outputs output "for_output_list" { - description = "For Loop with List" + description = "for loop with list" value = [for instance in aws_instance.myec2vm: instance.public_dns] } -# Output - For Loop with Map -output "for_output_map1" { - description = "For Loop with Map" + + + + + + + +#output for loop with map +output "for_output_map" { + description = "for loop with map" value = {for instance in aws_instance.myec2vm: instance.id => instance.public_dns} } -# Output - For Loop with Map Advanced -output "for_output_map2" { - description = "For Loop with Map - Advanced" + +# output for loop with map advanced +output "for_output_map" { + description = "for loop with map advanced" value = {for c, instance in aws_instance.myec2vm: c => instance.public_dns} } -# Output Legacy Splat Operator (Legacy) - Returns the List -/* -output "legacy_splat_instance_publicdns" { - description = "Legacy Splat Operator" - value = aws_instance.myec2vm.*.public_dns +#output with generalized splat operator +output "for_output_map" { + description = "for loop with map advanced" + value =aws_instance.myec2vm[*].public_dns } -*/ - -# Output Latest Generalized Splat Operator - Returns the List -output "latest_splat_instance_publicdns" { - description = "Generalized latest Splat Operator" - value = aws_instance.myec2vm[*].public_dns -} \ No newline at end of file From 5a65c9919ee637669d18caefcefc7e2f55510544 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 01:52:09 -0500 Subject: [PATCH 16/38] updated terraform version --- .../terraform-manifests/c1-versions.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf index 9a8bf6ce..f23f4bb8 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf @@ -1,6 +1,6 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.0" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" From 8b9ee11c2c7743348b868832c87099b5719ccafb Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 01:54:14 -0500 Subject: [PATCH 17/38] updated the output block names two or more blocks were having the same output name. change to resolve the ambiguity. --- .../terraform-manifests/c6-outputs.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf index 21a76ce9..d9c9a021 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf @@ -19,13 +19,13 @@ output "for_output_map" { # output for loop with map advanced -output "for_output_map" { +output "for_output_map_advanced" { description = "for loop with map advanced" value = {for c, instance in aws_instance.myec2vm: c => instance.public_dns} } #output with generalized splat operator -output "for_output_map" { +output "for_generalized_splat" { description = "for loop with map advanced" value =aws_instance.myec2vm[*].public_dns } From 544dab9e5352357984f27562efc9647a9405eb2a Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 01:57:40 -0500 Subject: [PATCH 18/38] changed the provider version --- .../terraform-manifests/c1-versions.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf index f23f4bb8..eb6d4ae3 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25.0" } } } From 3f920cf2700f875e546582278cc9bb6ca93117db Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 02:11:19 -0500 Subject: [PATCH 19/38] added my private key file --- .../private-key/NewTerraformkey.pem | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/private-key/NewTerraformkey.pem diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/private-key/NewTerraformkey.pem b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/private-key/NewTerraformkey.pem new file mode 100644 index 00000000..ff94b1ad --- /dev/null +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/private-key/NewTerraformkey.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAuRFMMAgYbGs+oEsFqNOIVWYvI6OKBHi7/OekHqP8uM6QO4yB +uOcnNTHU56xpq+h+sL506GGaB5gRsI04zuYN5Z8fT/Y2Yth0Lb2qyA2VwlSckQD4 +gjsA8qpV7tfkUyWbMWstAS6HSIspIE+h79h/Q5upxHs88jk+3ksMogB2xasjdAyj +etF43hizcN9rzUwnx7QjVVI2IrSYo67iBGPdf8/OaisCyHHnYNZZxmq7xD5UOKAK +R8xJLJcNkolB/91cWU4GINr6laL1Pudbax4Qw1G7Ct/38p39bFyVlbM0upCloYiK +UYfoFJE/I19mZhnEylbEAKQhSFTq3WrMng47rwIDAQABAoIBAHi4XdhfD395nYp2 +JaTxB1edplY7EYbFMutQNvB9zBbJN7CAgQYaUqsSbG0LPIsUx7+HHT+Qmyck/TUL +iej8jEgiugww8V0dEPvdYw/IPM5c3xx/Y5uf3YhtsExyq8/JEij0XpEMxtZ9YEBh +caLAuJNjcSRnt2PSD751ejIa118snKRvHKFqRCkv5pLhA7iKhXTWw1q7kCwlSOH7 +VqYbEFI4v1wiF8VfszLA1Ih1+rSnTAraj8QPuWSz9fCvd7FixU5Dugv4Uqvob9kb +tAOIqVSYf8QpjxY8eWaiu+lndyrEqQ2P0Tc7/y9kijC+fM9fCZab6LoDjdaxL4t6 +SJg80KECgYEA7MLca5V73QJ6AS0vuHD5gcv++duEQJztUbv89dERVzImX7LolvzH +Q6NMh/BX052IwdR6zaCDWn5f9rUCKqfsOrHRksb++EZX6N5LVHtsqsgCU5DCh1Ba +xmua2eV+lTpv6+FL2qMql1UoZ44/r7ycm/45DwkyUq2jomQzDNhx8AkCgYEAyBsZ +Vi54XhLnT9wjmDx80WoL/cOig7XqaQHBOZi988YarH92tiZI5SRVWrusobBkcClA +u0Q0mW2waJPvW3YbtEQDpAOHoUYcyL+J7Hj6DiZRtqmSA0bS42993tOsCdPSR6YA +yV1Y9BOL/vdEo9wRKRlO7Doj/vPN5+DRA2mlS/cCgYEArY32GCMfBhavqrcd+R1P +uTb5tNyWqOqgCL8+Ik/cX0fS22oBl9S6mTlWe3vSVbxwKG4Ci0Nzpl1nKSjs6qnn +v+rjjq2y7/pYrMpu/AHx2Yr+MZW3E4vyzurIO5xAW1HYA1hGy4G6Ue7JzId45fDj ++HG2D/CU5AiHIB5FUdBETUkCgYEAiOlBpJ2W7YaxjQppsDdyjzWnjrDT+Jn3EHGK +6wV+sdPRXES5zFbVeTIq1DGkI9y0W6leCMLZ2kAaevL8ye89dVEzzHw9yDJYb2Hd +1FXRgOzm67uJk4RZthMKY/MfunmbXjpOP3gG7LiTCJfV9ucTNrOCNE5zYnUdZJGF +cHhQCHECgYB6Dnf7FkWy2YRJmgjPEARDcdVii+BJFkWcT89YNZiO4WEF0YZOXKyu +u7tplMsQSz8OwN4vPtcNLqNRrtHTiWjeMfnc+3BUTAZe5yrIbqqDtle4s5CHTcU+ +hZZTOqDeVahqh9R0/4ptoW0YTqW9Z2CzHg4MmF7+dQ5Kszo5dK2JUg== +-----END RSA PRIVATE KEY----- \ No newline at end of file From c6d4a255b9fa365fc021acfa0786c90b804f6975 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 02:13:42 -0500 Subject: [PATCH 20/38] playing with maps and list --- .../terraform-manifests/c5-ec2instance.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf index 0edc0218..3f50a806 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf @@ -1,9 +1,9 @@ # EC2 Instance resource "aws_instance" "myec2vm" { ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type +# instance_type = var.instance_type #instance_type = var.instance_type_list[1] # For List - #nstance_type = var.instance_type_map["prod"] # For Map + instance_type = var.instance_type_map["prod"] # For Map user_data = file("${path.module}/app1-install.sh") key_name = var.instance_keypair vpc_security_group_ids = [ aws_security_group.vpc-ssh.id, aws_security_group.vpc-web.id ] @@ -23,4 +23,4 @@ change, resulting in more remote object changes than intended. - Even the subnet_ids should be pre-defined or we need to get them again using for_each or for using various datasources - Using for_each gives the same flexibility without the extra churn. -*/ \ No newline at end of file +*/ From 281b65d4b4aaa391e55a7e31249bdd45e13f4d3f Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Sat, 6 Aug 2022 02:17:28 -0500 Subject: [PATCH 21/38] switched the instance type --- .../terraform-manifests/c5-ec2instance.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf index 3f50a806..ed1cd11f 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c5-ec2instance.tf @@ -1,9 +1,9 @@ # EC2 Instance resource "aws_instance" "myec2vm" { ami = data.aws_ami.amzlinux2.id -# instance_type = var.instance_type + instance_type = var.instance_type #instance_type = var.instance_type_list[1] # For List - instance_type = var.instance_type_map["prod"] # For Map +# instance_type = var.instance_type_map["prod"] # For Map user_data = file("${path.module}/app1-install.sh") key_name = var.instance_keypair vpc_security_group_ids = [ aws_security_group.vpc-ssh.id, aws_security_group.vpc-web.id ] From bab2154a0d6502a0b22cf0fb805c848a0af764cb Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 08:11:04 -0500 Subject: [PATCH 22/38] changed the output.tf file --- .../terraform-manifests/c6-outputs.tf | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf index 689af9f3..7eaaa05a 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf @@ -2,25 +2,12 @@ # EC2 Instance Public IP with TOSET -output "instance_publicip" { - description = "EC2 Instance Public IP" - #value = aws_instance.myec2vm.*.public_ip # Legacy Splat - #value = aws_instance.myec2vm[*].public_ip # Latest Splat - value = toset([for instance in aws_instance.myec2vm: instance.public_ip]) -} # EC2 Instance Public DNS with TOSET -output "instance_publicdns" { - description = "EC2 Instance Public DNS" - #value = aws_instance.myec2vm[*].public_dns # Legacy Splat - #value = aws_instance.myec2vm[*].public_dns # Latest Splat - value = toset([for instance in aws_instance.myec2vm: instance.public_dns]) -} + # EC2 Instance Public DNS with TOMAP -output "instance_publicdns2" { - value = tomap({for az, instance in aws_instance.myec2vm: az => instance.public_dns}) -} + /* From 94176516ad7d61791e3998bc06f6ab5a4ba36b6f Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 08:12:23 -0500 Subject: [PATCH 23/38] changed the version number --- .../terraform-manifests/c1-versions.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c1-versions.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c1-versions.tf index 9a8bf6ce..0f40c6c6 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c1-versions.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c1-versions.tf @@ -1,10 +1,10 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25.0" } } } From 4e81e50d5c8101facd746d1c8a7bcf6a17d43c66 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 10:55:46 -0500 Subject: [PATCH 24/38] used 'for' in outputs block --- .../terraform-manifests/c6-outputs.tf | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf index 7eaaa05a..3be140d4 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf @@ -1,15 +1,14 @@ # Terraform Output Values - - +output "public_ip" { + description = "Public Ip of instances" + value = [for instance in aws_instance.myec2vm: instance.public_ip] +} # EC2 Instance Public IP with TOSET # EC2 Instance Public DNS with TOSET # EC2 Instance Public DNS with TOMAP - - - /* # Additional Important Note about OUTPUTS when for_each used 1. The [*] and .* operators are intended for use with lists only. From 5b193fcbf55eb37271883f301228a0d6ed20d271 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 11:04:42 -0500 Subject: [PATCH 25/38] using tomap function --- .../terraform-manifests/c6-outputs.tf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf index 3be140d4..d5f1926f 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf @@ -9,6 +9,10 @@ output "public_ip" { # EC2 Instance Public DNS with TOMAP +output "public_dns" { + description = "Public dns of instances" + value = {for az,instance in aws_instance.myec2vm: az => instance.public_dns } +} /* # Additional Important Note about OUTPUTS when for_each used 1. The [*] and .* operators are intended for use with lists only. From 3c198c5d69eec74741a1bb394318827e6f5fae06 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 11:51:32 -0500 Subject: [PATCH 26/38] instance type offerings --- .../terraform-manifests/c1-versions.tf | 4 ++-- ...get-instancetype-supported-per-az-in-a-region.tf | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c1-versions.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c1-versions.tf index 2e0bbdac..632156fa 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c1-versions.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c1-versions.tf @@ -1,10 +1,10 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.6" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25.0" } } } diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v1-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v1-get-instancetype-supported-per-az-in-a-region.tf index 0417f2a4..a5265b6d 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v1-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v1-get-instancetype-supported-per-az-in-a-region.tf @@ -4,17 +4,18 @@ data "aws_ec2_instance_type_offerings" "my_ins_type1" { name = "instance-type" values = ["t3.micro"] } + filter { name = "location" - #values = ["us-east-1a"] - values = ["us-east-1e"] + values = ["us-east-1a"] + # values = ["us-east-1a"] } + location_type = "availability-zone" } - - # Output -output "output_v1_1" { + +output "output_v1" { value = data.aws_ec2_instance_type_offerings.my_ins_type1.instance_types + } - From 1076bbc53acca43d017bbd15acf59a392c1cffd6 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 12:11:31 -0500 Subject: [PATCH 27/38] semi dynamic version --- ...stancetype-supported-per-az-in-a-region.tf | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf index 45c13aaa..bb7eb7bc 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf @@ -1,32 +1,38 @@ # Check if that respective Instance Type is supported in that Specific Region in list of availability Zones # Get the List of Availability Zones in a Particular region where that respective Instance Type is supported # Datasource +# Datasource data "aws_ec2_instance_type_offerings" "my_ins_type2" { - for_each = toset([ "us-east-1a", "us-east-1b", "us-east-1e" ]) + for_each = toset(["us-east-1a","us-east-1b","us-east-1e"]) filter { name = "instance-type" values = ["t3.micro"] } + filter { name = "location" values = [each.key] + } + location_type = "availability-zone" } +# Output #Output-1 # Important Note: Once for_each is set, its attributes must be accessed on specific instances output "output_v2_1" { - #value = data.aws_ec2_instance_type_offerings.my_ins_type1.instance_types - value = toset([for t in data.aws_ec2_instance_type_offerings.my_ins_type2: t.instance_types]) + value = [for t in data.aws_ec2_instance_type_offerings.my_ins_type2: t.instance_types] + } + #Output-2 # Create a Map with Key as Availability Zone and value as Instance Type supported -output "output_v2_2" { - value = { - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type2: az => details.instance_types - } -} +# output "output_v2_2" { +# value = { +# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type2: az => details.instance_types +# } +# } From 1ffb88bb528e252fed26cf4ea548735c24c94eb3 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sat, 6 Aug 2022 12:16:42 -0500 Subject: [PATCH 28/38] minor changes --- ...v2-get-instancetype-supported-per-az-in-a-region.tf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf index bb7eb7bc..a4525578 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v2-get-instancetype-supported-per-az-in-a-region.tf @@ -30,9 +30,9 @@ output "output_v2_1" { #Output-2 # Create a Map with Key as Availability Zone and value as Instance Type supported -# output "output_v2_2" { -# value = { -# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type2: az => details.instance_types -# } -# } +output "output_v2_2" { + value = { + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type2: az => details.instance_types +} +} From 714c1634be0706808da0c9832f1c30966fcc2ad2 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 10:07:58 -0500 Subject: [PATCH 29/38] changed the v3 version --- .../c2-v3-get-instancetype-supported-per-az-in-a-region.tf | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index ab01fdea..f7e68b21 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -11,20 +11,21 @@ data "aws_availability_zones" "my_azones" { # Check if that respective Instance Type is supported in that Specific Region in list of availability Zones # Get the List of Availability Zones in a Particular region where that respective Instance Type is supported # Datasource-2 -data "aws_ec2_instance_type_offerings" "my_ins_type" { +data "aws_ec2_instance_type_offerings" "my_ins_type3" { for_each = toset(data.aws_availability_zones.my_azones.names) filter { name = "instance-type" values = ["t3.micro"] } + filter { name = "location" values = [each.key] + } + location_type = "availability-zone" } - - # Output-1 # Basic Output: All Availability Zones mapped to Supported Instance Types output "output_v3_1" { From 415f524d9b408a242a838a1e25254860e4555553 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 10:10:25 -0500 Subject: [PATCH 30/38] changed the v3 version --- ...stancetype-supported-per-az-in-a-region.tf | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index f7e68b21..40089545 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -34,28 +34,28 @@ output "output_v3_1" { } } -# Output-2 -# Filtered Output: Exclude Unsupported Availability Zones -output "output_v3_2" { - value = { - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: - az => details.instance_types if length(details.instance_types) != 0 } -} +# # Output-2 +# # Filtered Output: Exclude Unsupported Availability Zones +# output "output_v3_2" { +# value = { +# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: +# az => details.instance_types if length(details.instance_types) != 0 } +# } -# Output-3 -# Filtered Output: with Keys Function - Which gets keys from a Map -# This will return the list of availability zones supported for a instance type -output "output_v3_3" { - value = keys({ - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: - az => details.instance_types if length(details.instance_types) != 0 }) -} +# # Output-3 +# # Filtered Output: with Keys Function - Which gets keys from a Map +# # This will return the list of availability zones supported for a instance type +# output "output_v3_3" { +# value = keys({ +# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: +# az => details.instance_types if length(details.instance_types) != 0 }) +# } -# Output-4 (additional learning) -# Filtered Output: As the output is list now, get the first item from list (just for learning) -output "output_v3_4" { - value = keys({ - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: - az => details.instance_types if length(details.instance_types) != 0 })[0] -} +# # Output-4 (additional learning) +# # Filtered Output: As the output is list now, get the first item from list (just for learning) +# output "output_v3_4" { +# value = keys({ +# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: +# az => details.instance_types if length(details.instance_types) != 0 })[0] +# } From 2b7e5d50445da8eabf071eeb91f30320f60c6ff9 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 10:11:41 -0500 Subject: [PATCH 31/38] changed the v3 version --- .../c2-v3-get-instancetype-supported-per-az-in-a-region.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index 40089545..ce10875a 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -30,7 +30,7 @@ data "aws_ec2_instance_type_offerings" "my_ins_type3" { # Basic Output: All Availability Zones mapped to Supported Instance Types output "output_v3_1" { value = { - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: az => details.instance_types + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type3: az => details.instance_types } } From ebaed085504583af73b43cc4f486ce16ed1ab727 Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 11:13:22 -0500 Subject: [PATCH 32/38] changed the v3 version --- ...3-get-instancetype-supported-per-az-in-a-region.tf | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index ce10875a..c2741506 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -36,11 +36,12 @@ output "output_v3_1" { # # Output-2 # # Filtered Output: Exclude Unsupported Availability Zones -# output "output_v3_2" { -# value = { -# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: -# az => details.instance_types if length(details.instance_types) != 0 } -# } +output "output_v3_2" { + value = { + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type3: + az => details.instance_types if length(details.instance_types) != 0 + } +} # # Output-3 # # Filtered Output: with Keys Function - Which gets keys from a Map From d113edc34771ac12e26646bcd6d198b798fd033d Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 11:21:42 -0500 Subject: [PATCH 33/38] changed the v3 version --- ...3-get-instancetype-supported-per-az-in-a-region.tf | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index c2741506..35e47407 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -46,11 +46,12 @@ output "output_v3_2" { # # Output-3 # # Filtered Output: with Keys Function - Which gets keys from a Map # # This will return the list of availability zones supported for a instance type -# output "output_v3_3" { -# value = keys({ -# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: -# az => details.instance_types if length(details.instance_types) != 0 }) -# } +output "output_v3_3" { + value = keys({ + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type3: + az => details.instance_types if length(details.instance_types) != 0 + }) +} # # Output-4 (additional learning) From bdb75bc764e4503b874c92086ac86639b5d3119b Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 11:25:12 -0500 Subject: [PATCH 34/38] added version 4 output --- ...v3-get-instancetype-supported-per-az-in-a-region.tf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index 35e47407..5a896221 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -56,8 +56,8 @@ output "output_v3_3" { # # Output-4 (additional learning) # # Filtered Output: As the output is list now, get the first item from list (just for learning) -# output "output_v3_4" { -# value = keys({ -# for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: -# az => details.instance_types if length(details.instance_types) != 0 })[0] -# } +output "output_v3_4" { + value = keys({ + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: + az => details.instance_types if length(details.instance_types) != 0 })[0] +} From 236fafa5ac832b9981b90cc68c5a2d743c744ebe Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Sun, 7 Aug 2022 12:03:32 -0500 Subject: [PATCH 35/38] updated the v4 output block --- .../c2-v3-get-instancetype-supported-per-az-in-a-region.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf index 5a896221..7cdc5a53 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-03-Utility-Project/terraform-manifests/c2-v3-get-instancetype-supported-per-az-in-a-region.tf @@ -58,6 +58,6 @@ output "output_v3_3" { # # Filtered Output: As the output is list now, get the first item from list (just for learning) output "output_v3_4" { value = keys({ - for az, details in data.aws_ec2_instance_type_offerings.my_ins_type: + for az, details in data.aws_ec2_instance_type_offerings.my_ins_type3: az => details.instance_types if length(details.instance_types) != 0 })[0] } From 8bddb636441e77edfba39d6596406c5517c5e993 Mon Sep 17 00:00:00 2001 From: Hemanth Kumar M S Date: Tue, 23 Aug 2022 10:32:37 -0500 Subject: [PATCH 36/38] changed the code Previously the code was according to ec2 version 2.17 but I've used the latest ec2 module version 4.1.4 --- .../c7-04-ec2instance-private.tf | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf index 720ecc87..89976f0b 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf @@ -1,24 +1,36 @@ # AWS EC2 Instance Terraform Module # EC2 Instances that will be created in VPC Private Subnets +locals { + multiple_instances = { + one = { + instance_type = var.instance_type + subnet_id = element(module.vpc.private_subnets, 0) + + } + + two = { + instance_type = var.instance_type + # availability_zone = element(module.vpc.azs, 2) + subnet_id = element(module.vpc.private_subnets, 1) + } + } +} + module "ec2_private" { - depends_on = [ module.vpc ] # VERY VERY IMPORTANT else userdata webserver provisioning will fail - source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - # insert the 10 required variables here - name = "${var.environment}-vm" + source = "terraform-aws-modules/ec2-instance/aws" + version = "4.1.4" + + for_each = local.multiple_instances + + name = "${var.environment}-vm-${each.key}" + ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - key_name = var.instance_keypair - #monitoring = true - vpc_security_group_ids = [module.private_sg.this_security_group_id] - #subnet_id = module.vpc.public_subnets[0] - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1] - ] - instance_count = var.private_instance_count - user_data = file("${path.module}/app1-install.sh") - tags = local.common_tags -} + instance_type = each.value.instance_type + # availability_zone = each.value.availability_zone + subnet_id = each.value.subnet_id + vpc_security_group_ids = [module.security_group.security_group_id] + + tags = local.tags +} From 4e2829185acf90b2f29121aa0ed633a56300a42e Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Fri, 9 Sep 2022 09:42:02 -0500 Subject: [PATCH 37/38] changed the files --- .../terraform-manifests/c1-versions.tf | 6 +- .../c10-02-ALB-application-loadbalancer.tf | 66 ++++---- ...03-ALB-application-loadbalancer-outputs.tf | 21 ++- .../c7-01-ec2instance-variables.tf | 2 +- .../c7-04-ec2instance-private.tf | 3 + .../c9-nullresource-provisioners.tf | 6 +- .../README.md | 91 ----------- .../terraform-manifests/.terraform.lock.hcl | 58 ------- .../terraform-manifests/app1-install.sh | 12 -- .../terraform-manifests/c1-versions.tf | 24 --- .../c10-acm-certificatemanager.tf | 23 --- .../c11-ALB-Application-loadbalancer.tf | 106 ------------- .../c12-route53-dnsregistration.tf | 12 -- .../c13-autoscaling-launchconfiguration.tf | 147 ------------------ .../terraform-manifests/c14-o1-asg-outputs.tf | 12 -- .../terraform-manifests/c14-o2-alb-outputs.tf | 59 ------- .../terraform-manifests/c14-outputs.tf | 133 ---------------- .../terraform-manifests/c2-variables.tf | 103 ------------ .../terraform-manifests/c3-local-values.tf | 10 -- .../terraform-manifests/c4-vpc.tf | 42 ----- .../c5-ec2securitygroup.tf | 51 ------ .../terraform-manifests/c6-ami-datasource.tf | 21 --- .../terraform-manifests/c7-ec2instance.tf | 41 ----- .../terraform-manifests/c8-elasticip.tf | 7 - .../c9-nullresource-provisioners.tf | 26 ---- .../private-key/terraform-key.pem | 27 ---- .../terraform-manifests/terraform.tfvars | 26 ---- .../terraform-manifests/app2-install.sh | 4 +- .../terraform-manifests/c1-versions.tf | 6 +- .../c10-02-ALB-application-loadbalancer.tf | 117 +++++++------- ...03-ALB-application-loadbalancer-outputs.tf | 21 ++- .../c11-acm-certificatemanager.tf | 20 --- .../c12-route53-dnsregistration.tf | 11 -- .../c6-02-datasource-route53-zone.tf | 16 -- .../c7-01-ec2instance-variables.tf | 2 +- .../c7-02-ec2instance-outputs.tf | 20 ++- .../c7-04-ec2instance-private-app1.tf | 55 ++++--- .../c7-05-ec2instance-private-app2.tf | 54 ++++--- .../c9-nullresource-provisioners.tf | 6 +- .../creation-time-vpc-id.txt | 2 +- .../destroy-time-prov.txt | 2 +- 41 files changed, 222 insertions(+), 1249 deletions(-) delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/README.md delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/.terraform.lock.hcl delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/app1-install.sh delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c1-versions.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c10-acm-certificatemanager.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c11-ALB-Application-loadbalancer.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c12-route53-dnsregistration.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c13-autoscaling-launchconfiguration.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o1-asg-outputs.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o2-alb-outputs.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-outputs.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c2-variables.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c3-local-values.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c4-vpc.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c5-ec2securitygroup.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c6-ami-datasource.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c7-ec2instance.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c8-elasticip.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c9-nullresource-provisioners.tf delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/private-key/terraform-key.pem delete mode 100644 10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/terraform.tfvars diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c1-versions.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c1-versions.tf index 7f8e9927..651e89f1 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c1-versions.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c1-versions.tf @@ -1,14 +1,14 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.6" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25" } null = { source = "hashicorp/null" - version = "~> 3.0" + version = "~> 3.1.1" } } } diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-02-ALB-application-loadbalancer.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-02-ALB-application-loadbalancer.tf index 9987234c..3e9433f1 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-02-ALB-application-loadbalancer.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-02-ALB-application-loadbalancer.tf @@ -1,27 +1,19 @@ -# Terraform AWS Application Load Balancer (ALB) module "alb" { source = "terraform-aws-modules/alb/aws" - version = "5.16.0" + version = "7.0.0" + # insert the 4 required variables here + + name = "${local.name}-alb" - name = "${local.name}-alb" load_balancer_type = "application" - vpc_id = module.vpc.vpc_id - subnets = [ - module.vpc.public_subnets[0], - module.vpc.public_subnets[1] - ] - security_groups = [module.loadbalancer_sg.this_security_group_id] - # Listeners - http_tcp_listeners = [ - { - port = 80 - protocol = "HTTP" - target_group_index = 0 # App1 TG associated to this listener - } - ] - # Target Groups - target_groups = [ - # App1 Target Group - TG Index = 0 + + vpc_id = module.vpc.vpc_id + subnets = module.vpc.public_subnets + security_groups = [module.loadbalancer_sg.this_security_group_id] + + + + target_groups = [ { name_prefix = "app1-" backend_protocol = "HTTP" @@ -33,26 +25,36 @@ module "alb" { interval = 30 path = "/app1/index.html" port = "traffic-port" - healthy_threshold = 3 + healthy_threshold = 5 unhealthy_threshold = 3 timeout = 6 protocol = "HTTP" matcher = "200-399" } protocol_version = "HTTP1" - # App1 Target Group - Targets targets = { - my_app1_vm1 = { - target_id = module.ec2_private.id[0] - port = 80 - }, - my_app1_vm2 = { - target_id = module.ec2_private.id[1] + my_ec2 = { + target_id = module.ec2_private.id port = 80 } } - tags =local.common_tags # Target Group Tags - } + tags = local.common_tags + } ] - tags = local.common_tags # ALB Tags -} + + + + http_tcp_listeners = [ + { + port = 80 + protocol = "HTTP" + target_group_index = 0 + } + ] + + tags = { + Environment = var.environment + } + + +} \ No newline at end of file diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf index 2db1d52e..ad64eb25 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf @@ -1,27 +1,26 @@ -# Terraform AWS Application Load Balancer (ALB) Outputs -output "this_lb_id" { +output "lb_id" { description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_id + value = module.alb.lb_id } -output "this_lb_arn" { +output "lb_arn" { description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_arn + value = module.alb.lb_arn } -output "this_lb_dns_name" { +output "lb_dns_name" { description = "The DNS name of the load balancer." - value = module.alb.this_lb_dns_name + value = module.alb.lb_dns_name } -output "this_lb_arn_suffix" { +output "lb_arn_suffix" { description = "ARN suffix of our load balancer - can be used with CloudWatch." - value = module.alb.this_lb_arn_suffix + value = module.alb.lb_arn_suffix } -output "this_lb_zone_id" { +output "lb_zone_id" { description = "The zone_id of the load balancer to assist with creating DNS records." - value = module.alb.this_lb_zone_id + value = module.alb.lb_zone_id } output "http_tcp_listener_arns" { diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-01-ec2instance-variables.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-01-ec2instance-variables.tf index 5067bec2..35247a60 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-01-ec2instance-variables.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-01-ec2instance-variables.tf @@ -12,7 +12,7 @@ variable "instance_type" { variable "instance_keypair" { description = "AWS EC2 Key pair that need to be associated with EC2 Instance" type = string - default = "terraform-key" + default = "NewTerraformkey" } # AWS EC2 Private Instance Count diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf index 720ecc87..4313c217 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf @@ -16,6 +16,9 @@ module "ec2_private" { module.vpc.private_subnets[0], module.vpc.private_subnets[1] ] + + # just checking my new branch + instance_count = var.private_instance_count user_data = file("${path.module}/app1-install.sh") tags = local.common_tags diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c9-nullresource-provisioners.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c9-nullresource-provisioners.tf index a4b0bcdf..d7e90b11 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c9-nullresource-provisioners.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c9-nullresource-provisioners.tf @@ -7,18 +7,18 @@ resource "null_resource" "name" { host = aws_eip.bastion_eip.public_ip user = "ec2-user" password = "" - private_key = file("private-key/terraform-key.pem") + private_key = file("private-key/NewTerraformkey.pem") } ## File Provisioner: Copies the terraform-key.pem file to /tmp/terraform-key.pem provisioner "file" { source = "private-key/terraform-key.pem" - destination = "/tmp/terraform-key.pem" + destination = "/tmp/NewTerraformkey.pem" } ## Remote Exec Provisioner: Using remote-exec provisioner fix the private key permissions on Bastion Host provisioner "remote-exec" { inline = [ - "sudo chmod 400 /tmp/terraform-key.pem" + "sudo chmod 400 /tmp/NewTerraformkey.pem" ] } ## Local Exec Provisioner: local-exec provisioner (Creation-Time Provisioner - Triggered during Create Resource) diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/README.md b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/README.md deleted file mode 100644 index e68810c5..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# EC2 Demo 13 - Autoscaling with Target Tracking Policy - -## Step-01: Introduction -### V1-Terraform-Manifests: LC & ASG & TTSP & ALB & Notifications -#### Module-1: ASG & LC & ALB -- Create Launch Configuration -- Create Autoscaling Group -- Map it with ALB (Application Load Balancer) - -#### Module-2: - TTSP (Target Tracking Scaling Policies) -- Create `Resource: aws_autoscaling_policy` -- ASGAverageCPUUtilization -- ALBRequestCountPerTarget -- Terraform Import for `ALBRequestCountPerTarget` Resource Label finding -#### Module-3: Autoscaling Notifications -- Create SNS Topic `aws_sns_topic` -- Create SNS Topic Subscription `aws_sns_topic_subscription` -- Create Autoscaling Notification Resource `aws_autoscaling_notification` -#### Module-4: Scheduled Actions -- Create a scheduled action to `increase capacity at 7am` -- Create a scheduled action to `decrease capacity at 5pm` -```t -# Import State -$ terraform import aws_autoscaling_schedule.resource-name auto-scaling-group-name/scheduled-action-name -terraform import aws_autoscaling_schedule.capacity_increase_during_business_hours myapp1-asg-20210329100544375800000007/capacity_increase_during_business_hours --> using terraform import get values for recurrence argument (cron format) - -# UTC Timezone converter -https://www.worldtimebuddy.com/utc-to-est-converter -``` - -### Module-5: Changes to ASG -- Change Desired capacity to 3 `desired_capacity = 3` and test -- Any change to ASG, do a instance refresh -- Instance Refresh is not available in this ASG module, we will learn this during Launch Template + ASG with Resources -```t - instance_refresh { - strategy = "Rolling" - preferences { - min_healthy_percentage = 50 - } - triggers = ["tag"] - } -``` - -## Module-6: Change to Launch Configuration -- What happens? -- In next scale-in event changes will be adjusted [or] if instance refresh present and configured in this module it updates ASG with new LC ID, instance refresh should kick in. -- We will test this with next scale-in event - Run postman runner test -- Lets see that practically - - - - -## Step-02: ASG with ELB with Simple Scaling -### V2-Terraform-Manifests: Simple Scaling -- Implement Simple Scaling - -### V3-Terraform-Manifests: Step Scaling & - - -### V5-Terraform-Manifests: Lifecycle Hooks - -### V6-Terraform-Manifests: Modify LC and ASG - -### V7-Terraform-Manifests: Monitoring - -### Instance Refresh - - - - - - -## Step-02: Get Resource LABEL for TTS Policy ALBRequestCount policy - -``` -``` -$ terraform import aws_autoscaling_policy.test-policy asg-name/policy-name - -terraform import aws_autoscaling_policy.dkalyan-test-policy myapp1-asg-20210329045302504300000007/TP1 -``` - -``` - -## References -- [Data Source: aws_subnet_ids](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnet_ids) -- [Resource: aws_autoscaling_policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_policy) -- [Resource: aws_autoscaling_notification](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_notification) -- [Resource: aws_autoscaling_schedule](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_schedule) -- [Pre-defined Metrics - Autoscaling](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PredefinedMetricSpecification.html) diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/.terraform.lock.hcl b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/.terraform.lock.hcl deleted file mode 100644 index c9fb10f6..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/.terraform.lock.hcl +++ /dev/null @@ -1,58 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/aws" { - version = "3.34.0" - constraints = ">= 2.41.0, >= 2.42.0, >= 2.53.0, >= 2.54.0, >= 2.65.0, >= 2.70.0, ~> 3.0" - hashes = [ - "h1:2xGmnG7UF0iScMGVWBazSYk1sRatXeZYgCGjdGm4A+w=", - "zh:003272229bd19bb63d6e77bc3d684268c417a151dfaee01c40b40e21cdd8bb0f", - "zh:103cacc1f3d97dfb7e9dd1e1905b075f92d9bd8aed434f811e8111788b648a57", - "zh:63a43c6e5fb2e5ad59ea068bede5c6bb54358affd32163d72785473a15440427", - "zh:6648af39a318c85eb336e2fb3ec1a01c5ffe8d75cc51686c37e892dd6f6a8974", - "zh:71ac8f6d5d61e5dee90099fd4fc1bb5bcd8ccb674eb6e7cd58d20757f7cecd12", - "zh:73baae4aa5bc0af12917e3bb17e1086050d25cdf7ba604f7fc422653c99f884c", - "zh:7d920ac05c45e77c59c49e0dd0cb010d64202c5a2fdfde6d9efe3dc61e396c97", - "zh:8a495e49f8fcbe276a74911f9ca48381533686ff71a9d4f7027bb9109769b639", - "zh:8ab9769581dfc1675c645e33e7ab8fea6ad1acc9e232eeda823070447e5ecaf1", - "zh:a170ecc560d49c251f4bebb6d6a82ff3637ae16a0f779a53489d4a64ddd1ee6a", - "zh:d9178201057b62666691ec206d1fbe09965bcfea532085b4e31f46073bf5898f", - ] -} - -provider "registry.terraform.io/hashicorp/null" { - version = "3.0.0" - constraints = ">= 2.0.0, ~> 3.0.0" - hashes = [ - "h1:V1tzrSG6t3e7zWvUwRbGbhsWU2Jd/anrJpOl9XM+R/8=", - "zh:05fb7eab469324c97e9b73a61d2ece6f91de4e9b493e573bfeda0f2077bc3a4c", - "zh:1688aa91885a395c4ae67636d411475d0b831e422e005dcf02eedacaafac3bb4", - "zh:24a0b1292e3a474f57c483a7a4512d797e041bc9c2fbaac42fe12e86a7fb5a3c", - "zh:2fc951bd0d1b9b23427acc93be09b6909d72871e464088171da60fbee4fdde03", - "zh:6db825759425599a326385a68acc6be2d9ba0d7d6ef587191d0cdc6daef9ac63", - "zh:85985763d02618993c32c294072cc6ec51f1692b803cb506fcfedca9d40eaec9", - "zh:a53186599c57058be1509f904da512342cfdc5d808efdaf02dec15f0f3cb039a", - "zh:c2e07b49b6efa676bdc7b00c06333ea1792a983a5720f9e2233db27323d2707c", - "zh:cdc8fe1096103cf5374751e2e8408ec4abd2eb67d5a1c5151fe2c7ecfd525bef", - "zh:dbdef21df0c012b0d08776f3d4f34eb0f2f229adfde07ff252a119e52c0f65b7", - ] -} - -provider "registry.terraform.io/hashicorp/random" { - version = "3.1.0" - constraints = ">= 2.0.0" - hashes = [ - "h1:rKYu5ZUbXwrLG1w81k7H3nce/Ys6yAxXhWcbtk36HjY=", - "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", - "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", - "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", - "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", - "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", - "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", - "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", - "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", - "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", - "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", - "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", - ] -} diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/app1-install.sh b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/app1-install.sh deleted file mode 100644 index f697dd1d..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/app1-install.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash -# Instance Identity Metadata Reference - https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html -sudo yum update -y -sudo yum install -y httpd -sudo systemctl enable httpd -sudo service httpd start -sudo echo '

Welcome to StackSimplify - APP-1

' | sudo tee /var/www/html/index.html -sudo mkdir /var/www/html/app1 -sudo echo '

Welcome to Stack Simplify - APP-1

Terraform Demo

Application Version: V1

' | sudo tee /var/www/html/app1/index.html -sudo curl http://169.254.169.254/latest/dynamic/instance-identity/document -o /var/www/html/app1/metadata.html - - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c1-versions.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c1-versions.tf deleted file mode 100644 index 106411f3..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c1-versions.tf +++ /dev/null @@ -1,24 +0,0 @@ -# Terraform Block -terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx - required_providers { - aws = { - source = "hashicorp/aws" - version = "~> 3.0" - } - null = { - source = "hashicorp/null" - version = "~> 3.0.0" - } - } -} - -# Provider Block -provider "aws" { - region = var.aws_region - profile = "default" -} -/* -Note-1: AWS Credentials Profile (profile = "default") configured on your local desktop terminal -$HOME/.aws/credentials -*/ diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c10-acm-certificatemanager.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c10-acm-certificatemanager.tf deleted file mode 100644 index d13cb296..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c10-acm-certificatemanager.tf +++ /dev/null @@ -1,23 +0,0 @@ -# Get DNS information from AWS Route53 -data "aws_route53_zone" "mydomain" { - name = "devopsincloud.com" -} - -# ACM Module - To create and Verify SSL Certificates -module "acm" { - source = "terraform-aws-modules/acm/aws" - version = "~> 2.0" - - domain_name = trimsuffix(data.aws_route53_zone.mydomain.name, ".") - zone_id = data.aws_route53_zone.mydomain.id - subject_alternative_names = [ - "apps.devopsincloud.com", - "app1.devopsincloud.com", - "app2.devopsincloud.com", - "default.devopsincloud.com", - "custom-header.devopsincloud.com", - "redirects1.devopsincloud.com", - "lb-to-db1.devopsincloud.com", - "asg-lc2.devopsincloud.com", - ] -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c11-ALB-Application-loadbalancer.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c11-ALB-Application-loadbalancer.tf deleted file mode 100644 index ef8ed947..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c11-ALB-Application-loadbalancer.tf +++ /dev/null @@ -1,106 +0,0 @@ -# Terraform AWS Application Load Balancer (ALB) -module "alb" { - source = "terraform-aws-modules/alb/aws" - version = "5.12.0" - - name = "alb-basic" - load_balancer_type = "application" - vpc_id = module.vpc.vpc_id - subnets = [ - module.vpc.public_subnets[0], - module.vpc.public_subnets[1], - module.vpc.public_subnets[2] - ] - security_groups = [module.loadbalancer_sg.this_security_group_id] - # HTTP Listener - HTTP to HTTPS Redirect - http_tcp_listeners = [ - { - port = 80 - protocol = "HTTP" - action_type = "redirect" - redirect = { - port = "443" - protocol = "HTTPS" - status_code = "HTTP_301" - } - } - ] - - - - - # Target Groups - target_groups = [ - { - name_prefix = "app1-" - backend_protocol = "HTTP" - backend_port = 80 - target_type = "instance" - deregistration_delay = 10 - health_check = { - enabled = true - interval = 30 - path = "/app1/index.html" - port = "traffic-port" - healthy_threshold = 3 - unhealthy_threshold = 3 - timeout = 6 - protocol = "HTTP" - matcher = "200-399" - } - }, - ] - - - tags = local.common_tags - - - - # HTTPS Listener - https_listeners = [ - { - port = 443 - protocol = "HTTPS" - certificate_arn = module.acm.this_acm_certificate_arn - action_type = "fixed-response" - fixed_response = { - content_type = "text/plain" - message_body = "Fixed message - for Root Context" - status_code = "200" - } - }, - ] - - # HTTPS Listener Rules - https_listener_rules = [ - # Rule-1: /app1* should go to App1 EC2 Instances - { - https_listener_index = 0 - actions = [ - { - type = "forward" - target_group_index = 0 - } - ] - conditions = [{ - path_patterns = ["/*"] - }] - }, - ] -} - -/* -- IMPORTANT NOTE -- -As on Today, Target Group Attachments Not Supported -https://github.com/terraform-aws-modules/terraform-aws-alb -With that said, to register EC2 Instances to ALB TG, we need to use -Terraform resource "aws_alb_target_group_attachment" -*/ -/* -# App1 - aws_alb_target_group_attachment -resource "aws_alb_target_group_attachment" "app1_alb_target_group_attachment_80" { - count = length(module.ec2_private_app1.id) - target_group_arn = module.alb.target_group_arns[0] - target_id = module.ec2_private_app1.id[count.index] - port = 80 -} -*/ diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c12-route53-dnsregistration.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c12-route53-dnsregistration.tf deleted file mode 100644 index 4adfee6b..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c12-route53-dnsregistration.tf +++ /dev/null @@ -1,12 +0,0 @@ -## DNS Registration - apps.devopsincloud.com -resource "aws_route53_record" "apps_dns" { - zone_id = data.aws_route53_zone.mydomain.id - name = "asg-lc2.devopsincloud.com" - type = "A" - - alias { - name = module.alb.this_lb_dns_name - zone_id = module.alb.this_lb_zone_id - evaluate_target_health = true - } -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c13-autoscaling-launchconfiguration.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c13-autoscaling-launchconfiguration.tf deleted file mode 100644 index a29a2954..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c13-autoscaling-launchconfiguration.tf +++ /dev/null @@ -1,147 +0,0 @@ -# Autoscaling with Launch Configuration - Both created at a time -module "autoscaling" { - source = "terraform-aws-modules/autoscaling/aws" - version = "3.9.0" - - name = "myasg-with-alb" - - # Launch configuration - # - # launch_configuration = "my-existing-launch-configuration" # Use the existing launch configuration - # create_lc = false # disables creation of launch configuration - lc_name = "myasg-lc1" - - image_id = data.aws_ami.amzlinux2.id - instance_type = "t3.micro" - security_groups = [module.private_sg.this_security_group_id] - #load_balancers = [module.alb.this_lb_id] - for ELB-CLB - target_group_arns = module.alb.target_group_arns # FOR ALB TG - key_name = var.instance_keypair - user_data = file("${path.module}/app1-install.sh") - - # Optionl - For additional mount points in VM - ebs_block_device = [ - { - device_name = "/dev/xvdz" - volume_type = "gp2" - volume_size = "5" - delete_on_termination = true - }, - ] - - root_block_device = [ - { - volume_size = "10" - volume_type = "gp2" - }, - ] - - # Auto scaling group - asg_name = "myapp1-asg" - vpc_zone_identifier = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1], - module.vpc.private_subnets[2] - ] - health_check_type = "EC2" - desired_capacity = 2 - min_size = 2 - max_size = 10 - wait_for_capacity_timeout = 0 - - tags = [ - { - key = "Environment" - value = "dev" - propagate_at_launch = true - }, - { - key = "Project" - value = "megasecret" - propagate_at_launch = true - }, - ] -} - -###### Target Tracking Scaling Policies ###### -# TTS - Scaling Policy-1: Based on CPU Utilization -# Define Autoscaling Policies and Associate them to Autoscaling Group -resource "aws_autoscaling_policy" "avg_cpu_policy_greater_than_xx" { - name = "avg-cpu-policy-greater-than-xx" - policy_type = "TargetTrackingScaling" # Important Note: The policy type, either "SimpleScaling", "StepScaling" or "TargetTrackingScaling". If this value isn't provided, AWS will default to "SimpleScaling." - autoscaling_group_name = module.autoscaling.this_autoscaling_group_id - estimated_instance_warmup = 180 # defaults to ASG default cooldown 300 seconds if not set - # CPU Utilization is above 50 - target_tracking_configuration { - predefined_metric_specification { - predefined_metric_type = "ASGAverageCPUUtilization" - } - target_value = 50.0 - } - -} - -# TTS - Scaling Policy-2: Based on ALB Target Requests -resource "aws_autoscaling_policy" "alb_target_requests_greater_than_yy" { - name = "alb-target-requests-greater-than-yy" - policy_type = "TargetTrackingScaling" # Important Note: The policy type, either "SimpleScaling", "StepScaling" or "TargetTrackingScaling". If this value isn't provided, AWS will default to "SimpleScaling." - autoscaling_group_name = module.autoscaling.this_autoscaling_group_id - estimated_instance_warmup = 120 # defaults to ASG default cooldown 300 seconds if not set - # Number of requests > 10 completed per target in an Application Load Balancer target group. - target_tracking_configuration { - predefined_metric_specification { - predefined_metric_type = "ALBRequestCountPerTarget" - resource_label = "${module.alb.this_lb_arn_suffix}/${module.alb.target_group_arn_suffixes[0]}" - } - target_value = 10.0 - } -} - -# Autoscaling Notifications -## SNS - Topic -resource "aws_sns_topic" "myasg_sns_topic" { - name = "myasg-sns-topic" -} - -## SNS - Subscription -resource "aws_sns_topic_subscription" "myasg_sns_topic_subscription" { - topic_arn = aws_sns_topic.myasg_sns_topic.arn - protocol = "email" - endpoint = "stacksimplify@gmail.com" -} - -## Create Autoscaling Notification Resource -resource "aws_autoscaling_notification" "myasg_notifications" { - group_names = [module.autoscaling.this_autoscaling_group_id] - notifications = [ - "autoscaling:EC2_INSTANCE_LAUNCH", - "autoscaling:EC2_INSTANCE_TERMINATE", - "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", - "autoscaling:EC2_INSTANCE_TERMINATE_ERROR", - ] - topic_arn = aws_sns_topic.myasg_sns_topic.arn -} - -## Create Scheduled Actions -### Create Scheduled Action-1: Increase capacity during business hours -resource "aws_autoscaling_schedule" "increase_capacity_7am" { - scheduled_action_name = "increase-capacity-7am" - min_size = 2 - max_size = 10 - desired_capacity = 8 - start_time = "2021-03-30T11:00:00Z" # Time should be provided in UTC Timezone (11am UTC = 7AM EST) - recurrence = "00 09 * * *" - autoscaling_group_name = module.autoscaling.this_autoscaling_group_id -} -### Create Scheduled Action-2: Decrease capacity during business hours -resource "aws_autoscaling_schedule" "decrease_capacity_5pm" { - scheduled_action_name = "decrease-capacity-5pm" - min_size = 2 - max_size = 10 - desired_capacity = 2 - start_time = "2021-03-30T21:00:00Z" # Time should be provided in UTC Timezone (9PM UTC = 5PM EST) - recurrence = "00 21 * * *" - autoscaling_group_name = module.autoscaling.this_autoscaling_group_id -} - - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o1-asg-outputs.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o1-asg-outputs.tf deleted file mode 100644 index 62df6bf6..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o1-asg-outputs.tf +++ /dev/null @@ -1,12 +0,0 @@ -# Launch configuration -output "this_launch_configuration_id" { - description = "The ID of the launch configuration" - value = module.autoscaling.this_launch_configuration_id -} - -# Autoscaling group -output "this_autoscaling_group_id" { - description = "The autoscaling group id" - value = module.autoscaling.this_autoscaling_group_id -} - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o2-alb-outputs.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o2-alb-outputs.tf deleted file mode 100644 index 4b1ec4d9..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-o2-alb-outputs.tf +++ /dev/null @@ -1,59 +0,0 @@ -output "this_lb_id" { - description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_id -} - -output "this_lb_arn" { - description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_arn -} - -output "this_lb_dns_name" { - description = "The DNS name of the load balancer." - value = module.alb.this_lb_dns_name -} - -output "this_lb_arn_suffix" { - description = "ARN suffix of our load balancer - can be used with CloudWatch." - value = module.alb.this_lb_arn_suffix -} - -output "this_lb_zone_id" { - description = "The zone_id of the load balancer to assist with creating DNS records." - value = module.alb.this_lb_zone_id -} - -output "http_tcp_listener_arns" { - description = "The ARN of the TCP and HTTP load balancer listeners created." - value = module.alb.http_tcp_listener_arns -} - -output "http_tcp_listener_ids" { - description = "The IDs of the TCP and HTTP load balancer listeners created." - value = module.alb.http_tcp_listener_ids -} - -output "https_listener_arns" { - description = "The ARNs of the HTTPS load balancer listeners created." - value = module.alb.https_listener_arns -} - -output "https_listener_ids" { - description = "The IDs of the load balancer listeners created." - value = module.alb.https_listener_ids -} - -output "target_group_arns" { - description = "ARNs of the target groups. Useful for passing to your Auto Scaling group." - value = module.alb.target_group_arns -} - -output "target_group_arn_suffixes" { - description = "ARN suffixes of our target groups - can be used with CloudWatch." - value = module.alb.target_group_arn_suffixes -} - -output "target_group_names" { - description = "Name of the target group. Useful for passing to your CodeDeploy Deployment Group." - value = module.alb.target_group_names -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-outputs.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-outputs.tf deleted file mode 100644 index a6456be1..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c14-outputs.tf +++ /dev/null @@ -1,133 +0,0 @@ -/* -# Output Values -### VPC Output Values -# VPC -output "vpc_id" { - description = "The ID of the VPC" - value = module.vpc.vpc_id -} -# CIDR blocks -output "vpc_cidr_block" { - description = "The CIDR block of the VPC" - value = module.vpc.vpc_cidr_block -} -# Subnets -output "private_subnets" { - description = "List of IDs of private subnets" - value = module.vpc.private_subnets -} -output "public_subnets" { - description = "List of IDs of public subnets" - value = module.vpc.public_subnets -} -# NAT gateways -output "nat_public_ips" { - description = "List of public Elastic IPs created for AWS NAT Gateway" - value = module.vpc.nat_public_ips -} -# AZs -output "azs" { - description = "A list of availability zones spefified as argument to this module" - value = module.vpc.azs -} - -### EC2 Security Group Output Values -# Private EC2 Instances Security Group Outputs -output "private_sg_group_id" { - description = "The ID of the security group" - value = module.private_sg.this_security_group_id -} -output "private_sg_group_vpc_id" { - description = "The VPC ID" - value = module.private_sg.this_security_group_vpc_id -} -output "private_sg_group_name" { - description = "The name of the security group" - value = module.private_sg.this_security_group_name -} - -# Public Bastion Host Security Group Outputs -output "public_bastion_sg_group_id" { - description = "The ID of the security group" - value = module.public_bastion_sg.this_security_group_id -} -output "ssh_sg_group_vpc_id" { - description = "The VPC ID" - value = module.public_bastion_sg.this_security_group_vpc_id -} -output "ssh_sg_group_name" { - description = "The name of the security group" - value = module.public_bastion_sg.this_security_group_name -} - -### EC2 Instance Output Values -# Private EC2 Instances -output "ec2_private_instance_ids" { - description = "List of IDs of instances" - value = module.ec2_private_app1.id -} -output "ec2_private_ip" { - description = "List of private ip address assigned to the instances" - value = module.ec2_private_app1.private_ip -} - -# Public EC2 Instances - Bastion Host -output "ec2_bastion_public_instance_ids" { - description = "List of IDs of instances" - value = module.ec2_public.id -} -output "ec2_bastion_public_ip" { - description = "List of Public ip address assigned to the instances" - value = module.ec2_public.public_ip -} - -# ALB Application Load Balancer Outputs -# https://github.com/terraform-aws-modules/terraform-aws-alb/blob/master/examples/complete-alb/outputs.tf -output "alb_dns_name" { - description = "The DNS name of the load balancer." - value = module.alb.this_lb_dns_name -} - -output "alb_http_tcp_listener_arns" { - description = "The ARN of the TCP and HTTP load balancer listeners created." - value = module.alb.http_tcp_listener_arns -} - - -# Route53 Zone Outputs -output "route53_domain" { - value = data.aws_route53_zone.mydomain.name -} - -# ACM Outputs -output "this_acm_certificate_arn" { - description = "The ARN of the certificate" - value = module.acm.this_acm_certificate_arn -} - -output "this_acm_certificate_domain_validation_options" { - description = "A list of attributes to feed into other resources to complete certificate validation. Can have more than one element, e.g. if SANs are defined. Only set if DNS-validation was used." - value = module.acm.this_acm_certificate_domain_validation_options -} - -output "this_acm_certificate_validation_emails" { - description = "A list of addresses that received a validation E-Mail. Only set if EMAIL-validation was used." - value = module.acm.this_acm_certificate_validation_emails -} - -output "validation_route53_record_fqdns" { - description = "List of FQDNs built using the zone domain and name." - value = module.acm.validation_route53_record_fqdns -} - -output "distinct_domain_names" { - description = "List of distinct domains names used for the validation." - value = module.acm.distinct_domain_names -} - -output "validation_domains" { - description = "List of distinct domain validation options. This is useful if subject alternative names contain wildcards." - value = module.acm.validation_domains -} - -*/ diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c2-variables.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c2-variables.tf deleted file mode 100644 index f0de1c7b..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c2-variables.tf +++ /dev/null @@ -1,103 +0,0 @@ -# Input Variables - -# AWS Region -variable "aws_region" { - description = "Region in which AWS Resources to be created" - type = string - default = "us-east-1" -} - -# Environment Variable -variable "environment" { - description = "Environment Variable used as a prefix" - type = string - default = "dev" -} - -# Application Name -variable "business_divsion" { - description = "Business Division in the large organization this Infrastructure belongs" - type = string - default = "HR-Team" -} - -# VPC Variables -variable "vpc_name" { - description = "VPC Name" - type = string - default = "myvpc" -} - -variable "vpc_cidr_block" { - description = "VPC CIDR Block" - type = string - default = "10.0.0.0/16" -} - -variable "vpc_availability_zones" { - description = "VPC Availability Zones" - type = list(string) - default = ["us-east-1a", "us-east-1b", "us-east-1c"] -} - -variable "vpc_public_subnets" { - description = "VPC Public Subnets" - type = list(string) - default = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] -} - -variable "vpc_private_subnets" { - description = "VPC Private Subnets" - type = list(string) - default = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] -} - -variable "vpc_database_subnets" { - description = "VPC Database Subnets" - type = list(string) - default = ["10.0.151.0/24", "10.0.152.0/24", "10.0.153.0/24"] -} - -variable "vpc_create_database_subnet_group" { - description = "VPC Create Database Subnet Group" - type = bool - default = true -} - -variable "vpc_create_database_subnet_route_table" { - description = "VPC Create Database Subnet Route Table" - type = bool - default = true -} - - -variable "vpc_enable_nat_gateway" { - description = "Enable NAT Gateways for Private Subnets Outbound Communication" - type = bool - default = true -} - -variable "vpc_single_nat_gateway" { - description = "Enable only single NAT Gateway in one Availability Zone to save costs during our demos" - type = bool - default = true -} - -# EC2 Instance Variables - -# AWS EC2 Instance Type -variable "instance_type" { - description = "EC2 Instance Type" - type = string - default = "t3.micro" -} - -# AWS EC2 Instance Key Pair -variable "instance_keypair" { - description = "AWS EC2 Key pair that need to be associated with EC2 Instance" - type = string - default = "terraform-key" -} - - - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c3-local-values.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c3-local-values.tf deleted file mode 100644 index a34ca566..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c3-local-values.tf +++ /dev/null @@ -1,10 +0,0 @@ -# Define Local Values in Terraform -locals { - owners = var.business_divsion - environment = var.environment - name = "${var.environment}-${var.vpc_name}" - common_tags = { - owners = local.owners - environment = local.environment - } -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c4-vpc.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c4-vpc.tf deleted file mode 100644 index 4c92d72f..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c4-vpc.tf +++ /dev/null @@ -1,42 +0,0 @@ -# Create VPC Terraform Module -module "vpc" { - source = "terraform-aws-modules/vpc/aws" - version = "2.77.0" - - # VPC Basic Details - name = local.name - cidr = var.vpc_cidr_block - azs = var.vpc_availability_zones - public_subnets = var.vpc_public_subnets - private_subnets = var.vpc_private_subnets - - # Database Subnets - database_subnets = var.vpc_database_subnets - create_database_subnet_group = var.vpc_create_database_subnet_group - create_database_subnet_route_table = var.vpc_create_database_subnet_route_table - # create_database_internet_gateway_route = true - # create_database_nat_gateway_route = true - - # NAT Gateways - Outbound Communication - enable_nat_gateway = var.vpc_enable_nat_gateway - single_nat_gateway = var.vpc_single_nat_gateway - - # VPC DNS Parameters - enable_dns_hostnames = true - enable_dns_support = true - - - tags = local.common_tags - vpc_tags = local.common_tags - - # Additional Tags to Subnets - public_subnet_tags = { - Type = "Public Subnets" - } - private_subnet_tags = { - Type = "Private Subnets" - } - database_subnet_tags = { - Type = "Private Database Subnets" - } -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c5-ec2securitygroup.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c5-ec2securitygroup.tf deleted file mode 100644 index 8e8f2313..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c5-ec2securitygroup.tf +++ /dev/null @@ -1,51 +0,0 @@ -# AWS EC2 Security Group Terraform Module -# Security Group for Private EC2 Instances -module "private_sg" { - source = "terraform-aws-modules/security-group/aws" - version = "~> 3" - - name = "private-sg" - description = "Security group with HTTP & SSH ports open for everybody (IPv4 CIDR), egress ports are all world open" - vpc_id = module.vpc.vpc_id - ingress_rules = ["ssh-tcp", "http-80-tcp", "http-8080-tcp"] - ingress_cidr_blocks = ["0.0.0.0/0"] - egress_rules = ["all-all"] - tags = local.common_tags -} - -# Security Group for Public Bastion Host -module "public_bastion_sg" { - source = "terraform-aws-modules/security-group/aws" - version = "~> 3" - - name = "public-bastion-sg" - description = "Security group with SSH port open for everybody (IPv4 CIDR), egress ports are all world open" - vpc_id = module.vpc.vpc_id - # Ingress Rules & CIDR Block - ingress_rules = ["ssh-tcp"] - ingress_cidr_blocks = ["0.0.0.0/0"] - # Egress Rule - all-all open - egress_rules = ["all-all"] - tags = local.common_tags -} - -# Security Group for Public Load Balancer -module "loadbalancer_sg" { - source = "terraform-aws-modules/security-group/aws" - version = "~> 3" - - - name = "loadbalancer-sg" - description = "Security group with HTTP port open for everybody (IPv4 CIDR), egress ports are all world open" - vpc_id = module.vpc.vpc_id - - # Ingress Rules & CIDR Block - ingress_rules = ["http-80-tcp", "https-443-tcp"] - ingress_cidr_blocks = ["0.0.0.0/0"] - # Egress Rule - all-all open - egress_rules = ["all-all"] - tags = local.common_tags -} - - - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c6-ami-datasource.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c6-ami-datasource.tf deleted file mode 100644 index c292b608..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c6-ami-datasource.tf +++ /dev/null @@ -1,21 +0,0 @@ -# Get latest AMI ID for Amazon Linux2 OS -data "aws_ami" "amzlinux2" { - most_recent = true - owners = [ "amazon" ] - filter { - name = "name" - values = [ "amzn2-ami-hvm-*-gp2" ] - } - filter { - name = "root-device-type" - values = [ "ebs" ] - } - filter { - name = "virtualization-type" - values = [ "hvm" ] - } - filter { - name = "architecture" - values = [ "x86_64" ] - } -} diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c7-ec2instance.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c7-ec2instance.tf deleted file mode 100644 index da736a60..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c7-ec2instance.tf +++ /dev/null @@ -1,41 +0,0 @@ -# AWS EC2 Instance Terraform Module -/* -# EC2 Instances that will be created in VPC Private Subnets -# App1 - EC2 Instances -module "ec2_private_app1" { - source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - name = "${var.environment}-app1" - ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - user_data = file("${path.module}/app1-install.sh") - key_name = var.instance_keypair - vpc_security_group_ids = [module.private_sg.this_security_group_id] - instance_count = 1 - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1], - module.vpc.private_subnets[2] - ] - tags = local.common_tags -} -*/ - - - - -# Bastion Host - EC2 Instance that will be created in VPC Public Subnet -module "ec2_public" { - source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - # insert the 10 required variables here - name = "${var.environment}-BastionHost" - ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - key_name = var.instance_keypair - subnet_id = module.vpc.public_subnets[0] - vpc_security_group_ids = [module.public_bastion_sg.this_security_group_id] - instance_count = 1 - tags = local.common_tags -} - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c8-elasticip.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c8-elasticip.tf deleted file mode 100644 index 2461500b..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c8-elasticip.tf +++ /dev/null @@ -1,7 +0,0 @@ -# Create Elastic IP for Bastion Host -resource "aws_eip" "bastion_eip" { - depends_on = [module.ec2_public] - instance = module.ec2_public.id[0] - vpc = true - tags = local.common_tags -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c9-nullresource-provisioners.tf b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c9-nullresource-provisioners.tf deleted file mode 100644 index 0c297ba5..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/c9-nullresource-provisioners.tf +++ /dev/null @@ -1,26 +0,0 @@ -# Create a Null Resource and Provisioners -resource "null_resource" "name" { - depends_on = [module.ec2_public, aws_eip.bastion_eip] - # Connection Block for Provisioners to connect to EC2 Instance - connection { - type = "ssh" - host = aws_eip.bastion_eip.public_ip - user = "ec2-user" - password = "" - private_key = file("private-key/terraform-key.pem") - } - - # Copies the terraform-key.pem file to /home/ec2-user/terraform-key.pem - provisioner "file" { - source = "private-key/terraform-key.pem" - destination = "/home/ec2-user/terraform-key.pem" - } - -# Using remote-exec provisioner fix the private key permissions - provisioner "remote-exec" { - inline = [ - "sudo chmod 400 /home/ec2-user/terraform-key.pem" - ] - } -} - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/private-key/terraform-key.pem b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/private-key/terraform-key.pem deleted file mode 100644 index fab1eb2a..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/private-key/terraform-key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAnzQtbXStFNU4znotckbPpAbQvymSYBvIRhObDObmhZLzs/Qm -lm57HBU18NcdAeEmKjHyu/2CI4Wwor3TJ+LTKHIldHmCt+26dSN5889Km99Af674 -nuPg9fTt8IXhY83aO0AeEnFivC+lk9+6Xezv7J7Llsmyx3kvUGE4uUEPNPuNcjdU -OrSlQ/Th9FPWBsTL8wLQCfQaPIQhZT8fXnvNGViTpZ/YqcoKGmkXcMl/+Pi0Xccs -ID3Egl18sV5uWr6T1DSMqhhwWYbl+IagZYUeKQ6Lg5znAtnX2/OHhDep6pGcf+aE -jbRkhQWgfLIVYhNXkAGxdxBEA2fQO0wvnaKI6wIDAQABAoIBABmUZqApmQ253LDA -TMEJw58VQUEVyuEKVbl8uPLvvqZDoEiPuAt/oOQ4PDyAM7bzmBA7ikbOSrSubF0Z -pu3HsinTfVUjmO84kTb1Bkk4S0KUMmbRlDzjXGfofLqiqD5C+wd+G9bWxQh7l10V -G3qv8TTRpuCJc+I9BG8jz9tkKq9WYtnGKXktVIAmEXK+ein8A5yj+szV1CyP0y6Y -6D1KApk+o1hLEXCBxaK6JgD4elJWgU0jCIhRFZzae93yozNIfJc2WZfPc8Ro6GBa -8H57q3E241P7S65VewhZlln9AUcRFYc587ohcCIW8mOWQ8NA3IMP+oVxa2p334Ll -duhR2jECgYEAyf7a1/+/c82B+ENyo53Y5CK2UM28oOJjiyCaWG2Dxj6V2+ZSXPrS -YTo43L9XiqT0Ry2eHjb4pJDsEeW5FnaDFO6NVUP+vfzaqWtozQmVAl3GQybbSh6g -+KJoEQff2Obadp9ZVhLFTiBedvGqPD43hs7jtmk5RfMjpLOvidfe+/UCgYEAycSJ -etYYHMMQm2NgX1/4dcbgOiu33N+x1H7LaXuvJMaZw0wB7fUyu65CAexEanDtiKs3 -jVG4tAzdMmHg7VxKR7eiCvQaSlxdWdcWtL2eFVq2TaQeowbpJUtsR0h6W0vpaN9A -VYW/oAH4fzQskwmWSlBMxB/Ie14hBCBckTXSRV8CgYEAql6WXpCK/jVbZfYdfvrn -sKPGeijM7DWGGBaLmAHmnxKyeyKsXVgAkZj11NpeD8ZJcq97Kajb1pGVSxMjJVsX -/FOoST5sYfoew76gSi/GypQlYQYo9z8WLh9s/tBRcTRlFqAYTYzPdbG/ezshhmZD -lyRw0620bNdCPOyBJhY5MPECgYA/3tFOazuSz0UQi3LUfkLetagBghlf+AgJJmIp -8BdPYvcF1ae+tiHrO4x1o188+qaW3uxk9fusM25KJqXXPaHd9gl7wi4YYAjFCcuM -R4IlbGPNTCjOnr9rKOcL4aup/uvSYOmyqPYyJq2NRuzdVumWeLj0VMNYGkIFVmE3 -LnxzrQKBgG5loEjdSKt40YOMXtYvUYUKDGvWgoQEb0hj3OqiBXz+w4YD3/iX7dbQ -qra1gCxE42Z9beiBiti6zi6zGcoVj/pfNUoyxTLMSwaytbF+g1u6ksXcmC9PXcmk -kJDR0DJcm/rcL8tp3PKo22GDB7sobm9gk5je6y8z+dQs3SQbWzb0 ------END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/terraform.tfvars b/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/terraform.tfvars deleted file mode 100644 index 4c4c4134..00000000 --- a/10-ALB-Path-Based-Routing/terraform-manifests/14-ALB-Autoscaling-with-Launch-Configuration/terraform-manifests/terraform.tfvars +++ /dev/null @@ -1,26 +0,0 @@ -# Generic Variables -aws_region = "us-east-1" -environment = "stag" -business_divsion = "HR-Team" - -# VPC Variables -vpc_name = "myvpc" -vpc_cidr_block = "10.0.0.0/16" -vpc_availability_zones = ["us-east-1a", "us-east-1b", "us-east-1c"] -vpc_public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] -vpc_private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] -vpc_database_subnets= ["10.0.151.0/24", "10.0.152.0/24", "10.0.153.0/24"] -vpc_create_database_subnet_group = true -vpc_create_database_subnet_route_table = true -vpc_enable_nat_gateway = true -vpc_single_nat_gateway = true - -# EC2 Instance Variables -instance_type = "t3.micro" -instance_keypair = "terraform-key" - - - - - - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/app2-install.sh b/10-ALB-Path-Based-Routing/terraform-manifests/app2-install.sh index 805d4bea..3354004a 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/app2-install.sh +++ b/10-ALB-Path-Based-Routing/terraform-manifests/app2-install.sh @@ -5,8 +5,8 @@ sudo yum install -y httpd sudo systemctl enable httpd sudo service httpd start sudo echo '

Welcome to StackSimplify - APP-2

' | sudo tee /var/www/html/index.html -sudo mkdir /var/www/html/app2 -sudo echo '

Welcome to Stack Simplify - APP-2

Terraform Demo

Application Version: V1

' | sudo tee /var/www/html/app2/index.html +sudo mkdir /var/www/html/app1 +sudo echo '

Welcome to Stack Simplify - APP-2

Terraform Demo

Application Version: V1

' | sudo tee /var/www/html/app1/index.html sudo curl http://169.254.169.254/latest/dynamic/instance-identity/document -o /var/www/html/app2/metadata.html diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c1-versions.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c1-versions.tf index 7f8e9927..651e89f1 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c1-versions.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c1-versions.tf @@ -1,14 +1,14 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.6" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25" } null = { source = "hashicorp/null" - version = "~> 3.0" + version = "~> 3.1.1" } } } diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c10-02-ALB-application-loadbalancer.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c10-02-ALB-application-loadbalancer.tf index 830cf1c0..62ccc13c 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c10-02-ALB-application-loadbalancer.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c10-02-ALB-application-loadbalancer.tf @@ -1,33 +1,19 @@ -# Terraform AWS Application Load Balancer (ALB) module "alb" { source = "terraform-aws-modules/alb/aws" - version = "5.16.0" + version = "7.0.0" + # insert the 4 required variables here + + name = "${local.name}-alb" - name = "${local.name}-alb" load_balancer_type = "application" - vpc_id = module.vpc.vpc_id - subnets = [ - module.vpc.public_subnets[0], - module.vpc.public_subnets[1] - ] - security_groups = [module.loadbalancer_sg.this_security_group_id] - # Listeners - # HTTP Listener - HTTP to HTTPS Redirect - http_tcp_listeners = [ - { - port = 80 - protocol = "HTTP" - action_type = "redirect" - redirect = { - port = "443" - protocol = "HTTPS" - status_code = "HTTP_301" - } - } - ] - # Target Groups - target_groups = [ - # App1 Target Group - TG Index = 0 + + vpc_id = module.vpc.vpc_id + subnets = module.vpc.public_subnets + security_groups = [module.loadbalancer_sg.this_security_group_id] + + + + target_groups = [ { name_prefix = "app1-" backend_protocol = "HTTP" @@ -39,27 +25,25 @@ module "alb" { interval = 30 path = "/app1/index.html" port = "traffic-port" - healthy_threshold = 3 + healthy_threshold = 5 unhealthy_threshold = 3 timeout = 6 protocol = "HTTP" matcher = "200-399" } protocol_version = "HTTP1" - # App1 Target Group - Targets targets = { - my_app1_vm1 = { + app1_vm1 = { target_id = module.ec2_private_app1.id[0] port = 80 }, - my_app1_vm2 = { + app1_vm2 = { target_id = module.ec2_private_app1.id[1] port = 80 } } - tags =local.common_tags # Target Group Tags - }, - # App2 Target Group - TG Index = 1 + tags = local.common_tags + }, { name_prefix = "app2-" backend_protocol = "HTTP" @@ -71,73 +55,98 @@ module "alb" { interval = 30 path = "/app2/index.html" port = "traffic-port" - healthy_threshold = 3 + healthy_threshold = 5 unhealthy_threshold = 3 timeout = 6 protocol = "HTTP" matcher = "200-399" } protocol_version = "HTTP1" - # App2 Target Group - Targets targets = { - my_app2_vm1 = { + app2_vm1 = { target_id = module.ec2_private_app2.id[0] port = 80 }, - my_app2_vm2 = { + app2_vm2 = { target_id = module.ec2_private_app2.id[1] port = 80 } + } - tags =local.common_tags # Target Group Tags - } + tags = local.common_tags + } ] - # HTTPS Listener + + # HTTP Listener - HTTP to HTTPS Redirect + http_tcp_listeners = [ + { + port = 80 + protocol = "HTTP" + action_type = "redirect" + redirect = { + port = "443" + protocol = "HTTPS" + status_code = "HTTP_301" + } + } + ] +# https listeners https_listeners = [ - # HTTPS Listener Index = 0 for HTTPS 443 { port = 443 protocol = "HTTPS" - certificate_arn = module.acm.this_acm_certificate_arn + certificate_arn = module.acm.acm_certificate_arn action_type = "fixed-response" fixed_response = { content_type = "text/plain" - message_body = "Fixed Static message - for Root Context" + message_body = "Fixed message - for root context" status_code = "200" } - }, + + } ] + https_listener_rules = [ - # HTTPS Listener Rules - https_listener_rules = [ - # Rule-1: /app1* should go to App1 EC2 Instances - { + # app1 listener rule + { https_listener_index = 0 + actions = [ + { type = "forward" target_group_index = 0 } ] + conditions = [{ path_patterns = ["/app1*"] }] }, - # Rule-2: /app2* should go to App2 EC2 Instances - { + # app2 listener rule + { https_listener_index = 0 + actions = [ + { type = "forward" target_group_index = 1 } ] + conditions = [{ path_patterns = ["/app2*"] }] - }, - ] + } + + + ] + + tags = { + Environment = var.environment + } + - tags = local.common_tags # ALB Tags -} +} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf index 2db1d52e..ad64eb25 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c10-03-ALB-application-loadbalancer-outputs.tf @@ -1,27 +1,26 @@ -# Terraform AWS Application Load Balancer (ALB) Outputs -output "this_lb_id" { +output "lb_id" { description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_id + value = module.alb.lb_id } -output "this_lb_arn" { +output "lb_arn" { description = "The ID and ARN of the load balancer we created." - value = module.alb.this_lb_arn + value = module.alb.lb_arn } -output "this_lb_dns_name" { +output "lb_dns_name" { description = "The DNS name of the load balancer." - value = module.alb.this_lb_dns_name + value = module.alb.lb_dns_name } -output "this_lb_arn_suffix" { +output "lb_arn_suffix" { description = "ARN suffix of our load balancer - can be used with CloudWatch." - value = module.alb.this_lb_arn_suffix + value = module.alb.lb_arn_suffix } -output "this_lb_zone_id" { +output "lb_zone_id" { description = "The zone_id of the load balancer to assist with creating DNS records." - value = module.alb.this_lb_zone_id + value = module.alb.lb_zone_id } output "http_tcp_listener_arns" { diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c11-acm-certificatemanager.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c11-acm-certificatemanager.tf index 50fe5ef7..e69de29b 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c11-acm-certificatemanager.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c11-acm-certificatemanager.tf @@ -1,20 +0,0 @@ -# ACM Module - To create and Verify SSL Certificates -module "acm" { - source = "terraform-aws-modules/acm/aws" - version = "2.14.0" - - domain_name = trimsuffix(data.aws_route53_zone.mydomain.name, ".") - zone_id = data.aws_route53_zone.mydomain.zone_id - - subject_alternative_names = [ - "*.devopsincloud.com" - ] - tags = local.common_tags -} - -# Output ACM Certificate ARN -output "this_acm_certificate_arn" { - description = "The ARN of the certificate" - value = module.acm.this_acm_certificate_arn -} - diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c12-route53-dnsregistration.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c12-route53-dnsregistration.tf index ae2492e7..e69de29b 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c12-route53-dnsregistration.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c12-route53-dnsregistration.tf @@ -1,11 +0,0 @@ -# DNS Registration -resource "aws_route53_record" "apps_dns" { - zone_id = data.aws_route53_zone.mydomain.zone_id - name = "apps.devopsincloud.com" - type = "A" - alias { - name = module.alb.this_lb_dns_name - zone_id = module.alb.this_lb_zone_id - evaluate_target_health = true - } -} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c6-02-datasource-route53-zone.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c6-02-datasource-route53-zone.tf index a30979d5..e69de29b 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c6-02-datasource-route53-zone.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c6-02-datasource-route53-zone.tf @@ -1,16 +0,0 @@ -# Get DNS information from AWS Route53 -data "aws_route53_zone" "mydomain" { - name = "devopsincloud.com" -} - -# Output MyDomain Zone ID -output "mydomain_zoneid" { - description = "The Hosted Zone id of the desired Hosted Zone" - value = data.aws_route53_zone.mydomain.zone_id -} - -# Output MyDomain name -output "mydomain_name" { - description = " The Hosted Zone name of the desired Hosted Zone." - value = data.aws_route53_zone.mydomain.name -} diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c7-01-ec2instance-variables.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c7-01-ec2instance-variables.tf index 5067bec2..35247a60 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c7-01-ec2instance-variables.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c7-01-ec2instance-variables.tf @@ -12,7 +12,7 @@ variable "instance_type" { variable "instance_keypair" { description = "AWS EC2 Key pair that need to be associated with EC2 Instance" type = string - default = "terraform-key" + default = "NewTerraformkey" } # AWS EC2 Private Instance Count diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c7-02-ec2instance-outputs.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c7-02-ec2instance-outputs.tf index 7391ccea..c49d34a7 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c7-02-ec2instance-outputs.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c7-02-ec2instance-outputs.tf @@ -13,28 +13,36 @@ output "ec2_bastion_public_ip" { value = module.ec2_public.public_ip } -# App1 - Private EC2 Instances +#App1 output values + +# Private EC2 Instances ## ec2_private_instance_ids -output "app1_ec2_private_instance_ids" { +output "ec2_app1_private_instance_ids" { description = "List of IDs of instances" value = module.ec2_private_app1.id } ## ec2_private_ip -output "app1_ec2_private_ip" { +output "ec2_app1_private_ip" { description = "List of private IP addresses assigned to the instances" value = module.ec2_private_app1.private_ip } -# App2 - Private EC2 Instances + + + +# ------------------------------------------------------------------------------------ +#App 2 output values + ## ec2_private_instance_ids -output "app2_ec2_private_instance_ids" { +output "ec2_app2_private_instance_ids" { description = "List of IDs of instances" value = module.ec2_private_app2.id } ## ec2_private_ip -output "app2_ec2_private_ip" { +output "ec2_app2_private_ip" { description = "List of private IP addresses assigned to the instances" value = module.ec2_private_app2.private_ip } + diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c7-04-ec2instance-private-app1.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c7-04-ec2instance-private-app1.tf index 66d888d4..bcebfa84 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c7-04-ec2instance-private-app1.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c7-04-ec2instance-private-app1.tf @@ -1,24 +1,39 @@ # AWS EC2 Instance Terraform Module -# EC2 Instances that will be created in VPC Private Subnets for App1 -module "ec2_private_app1" { - depends_on = [ module.vpc ] # VERY VERY IMPORTANT else userdata webserver provisioning will fail - source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - # insert the 10 required variables here - name = "${var.environment}-app1" - ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - key_name = var.instance_keypair - #monitoring = true - vpc_security_group_ids = [module.private_sg.this_security_group_id] - #subnet_id = module.vpc.public_subnets[0] - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1] - ] - instance_count = var.private_instance_count - user_data = file("${path.module}/app1-install.sh") - tags = local.common_tags +# EC2 Instances that will be created in VPC Private Subnets +locals { + multiple_instances = { + one = { + instance_type = var.instance_type + subnet_id = element(module.vpc.private_subnets, 0) + + } + + two = { + instance_type = var.instance_type + # availability_zone = element(module.vpc.azs, 2) + subnet_id = element(module.vpc.private_subnets, 1) + } + } } +module "ec2_private" { + depends_on = [ + module.vpc + ] + source = "terraform-aws-modules/ec2-instance/aws" + version = "4.1.4" + + for_each = local.multiple_instances + + name = "${var.environment}-app1" + ami = data.aws_ami.amzlinux2.id + instance_type = each.value.instance_type + # availability_zone = each.value.availability_zone + subnet_id = each.value.subnet_id + vpc_security_group_ids = [module.security_group.security_group_id] + + + user_data = file("${path.module}/app1-install.sh") + tags = local.tags +} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c7-05-ec2instance-private-app2.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c7-05-ec2instance-private-app2.tf index 66da349a..d56ca902 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c7-05-ec2instance-private-app2.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c7-05-ec2instance-private-app2.tf @@ -1,24 +1,40 @@ # AWS EC2 Instance Terraform Module -# EC2 Instances that will be created in VPC Private Subnets for App2 +# EC2 Instances that will be created in VPC Private Subnets +locals { + multiple_instances = { + one = { + instance_type = var.instance_type + subnet_id = element(module.vpc.private_subnets, 0) + + } + + two = { + instance_type = var.instance_type + # availability_zone = element(module.vpc.azs, 2) + subnet_id = element(module.vpc.private_subnets, 1) + } + } +} + module "ec2_private_app2" { - depends_on = [ module.vpc ] # VERY VERY IMPORTANT else userdata webserver provisioning will fail + depends_on = [ + module.vpc + ] source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - # insert the 10 required variables here - name = "${var.environment}-app2" - ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - key_name = var.instance_keypair - #monitoring = true - vpc_security_group_ids = [module.private_sg.this_security_group_id] - #subnet_id = module.vpc.public_subnets[0] - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1] - ] - instance_count = var.private_instance_count - user_data = file("${path.module}/app2-install.sh") - tags = local.common_tags -} + version = "4.1.4" + + for_each = local.multiple_instances + name = "${var.environment}-app2" + ami = data.aws_ami.amzlinux2.id + instance_type = each.value.instance_type + # availability_zone = each.value.availability_zone + subnet_id = each.value.subnet_id + vpc_security_group_ids = [module.security_group.security_group_id] + key_name = var.instance_keypair + + + user_data = file("${path.module}/app2-install.sh") + tags = local.tags +} \ No newline at end of file diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/c9-nullresource-provisioners.tf b/10-ALB-Path-Based-Routing/terraform-manifests/c9-nullresource-provisioners.tf index a4b0bcdf..d7e90b11 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/c9-nullresource-provisioners.tf +++ b/10-ALB-Path-Based-Routing/terraform-manifests/c9-nullresource-provisioners.tf @@ -7,18 +7,18 @@ resource "null_resource" "name" { host = aws_eip.bastion_eip.public_ip user = "ec2-user" password = "" - private_key = file("private-key/terraform-key.pem") + private_key = file("private-key/NewTerraformkey.pem") } ## File Provisioner: Copies the terraform-key.pem file to /tmp/terraform-key.pem provisioner "file" { source = "private-key/terraform-key.pem" - destination = "/tmp/terraform-key.pem" + destination = "/tmp/NewTerraformkey.pem" } ## Remote Exec Provisioner: Using remote-exec provisioner fix the private key permissions on Bastion Host provisioner "remote-exec" { inline = [ - "sudo chmod 400 /tmp/terraform-key.pem" + "sudo chmod 400 /tmp/NewTerraformkey.pem" ] } ## Local Exec Provisioner: local-exec provisioner (Creation-Time Provisioner - Triggered during Create Resource) diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/creation-time-vpc-id.txt b/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/creation-time-vpc-id.txt index 088352cc..899483f3 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/creation-time-vpc-id.txt +++ b/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/creation-time-vpc-id.txt @@ -1 +1 @@ -VPC created on Tue Apr 20 13:59:45 IST 2021 and VPC ID: vpc-0325dc1acd7eec103 +VPC created on Mon Apr 19 15:00:57 IST 2021 and VPC ID: vpc-0124fbdd659d7c887 diff --git a/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/destroy-time-prov.txt b/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/destroy-time-prov.txt index 66233f53..688585a8 100644 --- a/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/destroy-time-prov.txt +++ b/10-ALB-Path-Based-Routing/terraform-manifests/local-exec-output-files/destroy-time-prov.txt @@ -1 +1 @@ -Destroy time prov Tue Apr 20 14:11:11 IST 2021 +Destroy time prov Mon Apr 19 15:08:50 IST 2021 From 8f584bc41584ddefa527a79f716fc821474ee52e Mon Sep 17 00:00:00 2001 From: Hemanthkumar Malakavaripallisudharshan Date: Fri, 9 Sep 2022 09:49:06 -0500 Subject: [PATCH 38/38] saving files --- .../terraform-manifests/app1-install.sh | 4 +- .../terraform-manifests/c1-versions.tf | 3 ++ .../terraform-manifests/c6-outputs.tf | 6 +++ .../terraform-manifests/c6-outputs.tf | 7 +++ .../v1-vpc-module/c1-versions.tf | 2 +- .../v1-vpc-module/c3-vpc.tf | 48 +++++------------- .../v2-vpc-module-standardized/c1-versions.tf | 2 +- .../terraform-manifests/c1-versions.tf | 6 +-- .../c5-02-securitygroup-outputs.tf | 35 +++++++------ .../c5-03-securitygroup-bastionsg.tf | 21 +++++--- .../c5-04-securitygroup-privatesg.tf | 9 ++-- .../c7-02-ec2instance-outputs.tf | 4 +- .../c7-04-ec2instance-private.tf | 15 +++--- .../terraform-manifests/c8-elasticip.tf | 13 ++--- .../c9-nullresource-provisioners.tf | 44 ++++++++--------- .../ec2instance.auto.tfvars | 2 +- .../private-key/terraform-key.pem | 27 ---------- .../c7-04-ec2instance-private.tf | 49 +++++++++++-------- 18 files changed, 136 insertions(+), 161 deletions(-) delete mode 100644 07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/private-key/terraform-key.pem diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/app1-install.sh b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/app1-install.sh index f697dd1d..e12199a9 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/app1-install.sh +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/app1-install.sh @@ -4,9 +4,9 @@ sudo yum update -y sudo yum install -y httpd sudo systemctl enable httpd sudo service httpd start -sudo echo '

Welcome to StackSimplify - APP-1

' | sudo tee /var/www/html/index.html +sudo echo '

Welcome to Speakup - APP-1

' | sudo tee /var/www/html/index.html sudo mkdir /var/www/html/app1 -sudo echo '

Welcome to Stack Simplify - APP-1

Terraform Demo

Application Version: V1

' | sudo tee /var/www/html/app1/index.html +sudo echo '

Welcome to Mindtree - APP-1

Terraform Demo

Application Version: V1

' | sudo tee /var/www/html/app1/index.html sudo curl http://169.254.169.254/latest/dynamic/instance-identity/document -o /var/www/html/app1/metadata.html diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf index eb6d4ae3..ee3245fb 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c1-versions.tf @@ -12,7 +12,10 @@ terraform { # Provider Block provider "aws" { region = var.aws_region + } + + /* Note-1: AWS Credentials Profile (profile = "default") configured on your local desktop terminal $HOME/.aws/credentials diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf index d9c9a021..42880bbf 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-01-MetaArgument-Count-For-Loops-Lists-Maps/terraform-manifests/c6-outputs.tf @@ -4,6 +4,12 @@ output "for_output_list" { value = [for instance in aws_instance.myec2vm: instance.public_dns] } +output "for_PublicIP" { + description = "for loop with list" + value = [for instance in aws_instance.myec2vm: instance.public_ip] +} + + diff --git a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf index d5f1926f..86890bc4 100644 --- a/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf +++ b/05-Terraform-Loops-MetaArguments-SplatOperator/05-02-MetaArgument-for_each/terraform-manifests/c6-outputs.tf @@ -24,3 +24,10 @@ to get the output for a list want to handle type conversion we can use "tomap" function too */ + + +resource "aws_instance" "example" { + ami = "adsjflasjdf" + instance_type = "t2.micro" + +} \ No newline at end of file diff --git a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c1-versions.tf b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c1-versions.tf index 42575a16..312761d4 100644 --- a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c1-versions.tf +++ b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c1-versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25.0" } } } diff --git a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c3-vpc.tf b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c3-vpc.tf index 5085adec..fc0a7024 100644 --- a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c3-vpc.tf +++ b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v1-vpc-module/c3-vpc.tf @@ -1,53 +1,29 @@ # Create VPC Terraform Module module "vpc" { source = "terraform-aws-modules/vpc/aws" - version = "2.78.0" - # version = "~> 2.78" + version = "3.14.2" - # VPC Basic Details - name = "vpc-dev" - cidr = "10.0.0.0/16" - azs = ["us-east-1a", "us-east-1b"] + name = "vpc-dev" + cidr = "10.10.0.0/16" # 10.0.0.0/8 is reserved for EC2-Classic + + azs = ["us-east-1a","us-east-1b"] private_subnets = ["10.0.1.0/24", "10.0.2.0/24"] public_subnets = ["10.0.101.0/24", "10.0.102.0/24"] - # Database Subnets - create_database_subnet_group = true - create_database_subnet_route_table= true - database_subnets = ["10.0.151.0/24", "10.0.152.0/24"] - #create_database_nat_gateway_route = true - #create_database_internet_gateway_route = true + # creating data base subnetsd + create_database_subnet_group= true + create_database_subnet_route_table= true + database_subnets = ["10.0.151.0/24", "10.0.152.0/24"] - # NAT Gateways - Outbound Communication - enable_nat_gateway = true + enable_nat_gateway =true single_nat_gateway = true - # VPC DNS Parameters + enable_dns_hostnames = true enable_dns_support = true - - public_subnet_tags = { - Type = "public-subnets" - } - - private_subnet_tags = { - Type = "private-subnets" - } - - database_subnet_tags = { - Type = "database-subnets" - } - - tags = { - Owner = "kalyan" - Environment = "dev" - } - - vpc_tags = { - Name = "vpc-dev" - } } + diff --git a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v2-vpc-module-standardized/c1-versions.tf b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v2-vpc-module-standardized/c1-versions.tf index a305835c..312761d4 100644 --- a/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v2-vpc-module-standardized/c1-versions.tf +++ b/06-AWS-VPC/06-02-AWS-VPC-using-Terraform/terraform-manifests/v2-vpc-module-standardized/c1-versions.tf @@ -4,7 +4,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25.0" } } } diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c1-versions.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c1-versions.tf index 7f8e9927..651e89f1 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c1-versions.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c1-versions.tf @@ -1,14 +1,14 @@ # Terraform Block terraform { - required_version = "~> 0.14" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx + required_version = "~> 1.2.6" # which means any version equal & above 0.14 like 0.15, 0.16 etc and < 1.xx required_providers { aws = { source = "hashicorp/aws" - version = "~> 3.0" + version = "~> 4.25" } null = { source = "hashicorp/null" - version = "~> 3.0" + version = "~> 3.1.1" } } } diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-02-securitygroup-outputs.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-02-securitygroup-outputs.tf index ce756305..07449481 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-02-securitygroup-outputs.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-02-securitygroup-outputs.tf @@ -2,39 +2,46 @@ # Public Bastion Host Security Group Outputs ## public_bastion_sg_group_id -output "public_bastion_sg_group_id" { +output "public_security_group_id" { description = "The ID of the security group" - value = module.public_bastion_sg.this_security_group_id + value = module.Public-bastion-sg.security_group_id } - ## public_bastion_sg_group_vpc_id -output "public_bastion_sg_group_vpc_id" { +output "Public_security_group_vpc_id" { description = "The VPC ID" - value = module.public_bastion_sg.this_security_group_vpc_id + value = module.Public-bastion-sg.security_group_vpc_id } +output "public_security_group_owner_id" { + description = "The owner ID" + value = module.Public-bastion-sg.security_group_owner_id +} ## public_bastion_sg_group_name -output "public_bastion_sg_group_name" { +output "public_security_group_name" { description = "The name of the security group" - value = module.public_bastion_sg.this_security_group_name + value = module.Public-bastion-sg.security_group_name } + + + # Private EC2 Instances Security Group Outputs + ## private_sg_group_id -output "private_sg_group_id" { +output "private_security_group_id" { description = "The ID of the security group" - value = module.private_sg.this_security_group_id + value = module.private_sg.security_group_id } - ## private_sg_group_vpc_id -output "private_sg_group_vpc_id" { +output "private_security_group_vpc_id" { description = "The VPC ID" - value = module.private_sg.this_security_group_vpc_id + value = module.private_sg.security_group_vpc_id } ## private_sg_group_name -output "private_sg_group_name" { + +output "private_security_group_name" { description = "The name of the security group" - value = module.private_sg.this_security_group_name + value = module.private_sg.security_group_name } diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-03-securitygroup-bastionsg.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-03-securitygroup-bastionsg.tf index e8c2a767..145a9f4f 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-03-securitygroup-bastionsg.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-03-securitygroup-bastionsg.tf @@ -1,16 +1,21 @@ # AWS EC2 Security Group Terraform Module # Security Group for Public Bastion Host -module "public_bastion_sg" { +module "Public-bastion-sg" { source = "terraform-aws-modules/security-group/aws" - version = "3.18.0" - + version = "4.9.0" + name = "public-bastion-sg" - description = "Security Group with SSH port open for everybody (IPv4 CIDR), egress ports are all world open" + description = " Sg for bastion hosts with SSH port open for everybody." vpc_id = module.vpc.vpc_id - # Ingress Rules & CIDR Blocks - ingress_rules = ["ssh-tcp"] + + #opening ingress traffic from the outside world ingress_cidr_blocks = ["0.0.0.0/0"] - # Egress Rule - all-all open + ingress_rules = ["ssh-tcp"] + #egress traffic. Allowing all traffic + + egress_rules = ["all-all"] + tags = local.common_tags -} + +} \ No newline at end of file diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-04-securitygroup-privatesg.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-04-securitygroup-privatesg.tf index 0351a7ca..f3e465c3 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-04-securitygroup-privatesg.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c5-04-securitygroup-privatesg.tf @@ -8,10 +8,11 @@ module "private_sg" { description = "Security Group with HTTP & SSH port open for entire VPC Block (IPv4 CIDR), egress ports are all world open" vpc_id = module.vpc.vpc_id # Ingress Rules & CIDR Blocks - ingress_rules = ["ssh-tcp", "http-80-tcp"] - ingress_cidr_blocks = [module.vpc.vpc_cidr_block] + ingress_rules = ["ssh-tcp","http-80-tcp"] + ingress_cidr_blocks=module.vpc.vpc_cidr_block # Egress Rule - all-all open - egress_rules = ["all-all"] + egress_rules = ["all-all"] + tags = local.common_tags + } - diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-02-ec2instance-outputs.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-02-ec2instance-outputs.tf index e9fb5216..fae4c752 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-02-ec2instance-outputs.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-02-ec2instance-outputs.tf @@ -4,13 +4,13 @@ ## ec2_bastion_public_instance_ids output "ec2_bastion_public_instance_ids" { description = "List of IDs of instances" - value = module.ec2_public.id + value = module.Public-bastion-sg.id } ## ec2_bastion_public_ip output "ec2_bastion_public_ip" { description = "List of public IP addresses assigned to the instances" - value = module.ec2_public.public_ip + value = module.Public-bastion-sg.public_ip } # Private EC2 Instances diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-04-ec2instance-private.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-04-ec2instance-private.tf index 720ecc87..9c65a1b5 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-04-ec2instance-private.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c7-04-ec2instance-private.tf @@ -1,24 +1,21 @@ # AWS EC2 Instance Terraform Module # EC2 Instances that will be created in VPC Private Subnets module "ec2_private" { - depends_on = [ module.vpc ] # VERY VERY IMPORTANT else userdata webserver provisioning will fail + depends_on = [module.vpc] source = "terraform-aws-modules/ec2-instance/aws" version = "2.17.0" # insert the 10 required variables here - name = "${var.environment}-vm" + name = "${var.environment}-privatevm" + instance_count = var.private_instance_count ami = data.aws_ami.amzlinux2.id instance_type = var.instance_type key_name = var.instance_keypair #monitoring = true - vpc_security_group_ids = [module.private_sg.this_security_group_id] - #subnet_id = module.vpc.public_subnets[0] - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1] - ] - instance_count = var.private_instance_count + subnet_ids = module.vpc.private_subnets + vpc_security_group_ids = [module.public_bastion_sg.this_security_group_id] user_data = file("${path.module}/app1-install.sh") tags = local.common_tags } + diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c8-elasticip.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c8-elasticip.tf index 07fe130b..503e33eb 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c8-elasticip.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c8-elasticip.tf @@ -1,16 +1,9 @@ # Create Elastic IP for Bastion Host # Resource - depends_on Meta-Argument -resource "aws_eip" "bastion_eip" { - depends_on = [ module.ec2_public, module.vpc ] +resource "aws_eip" "ec2_public_eip" { + depends_on =[module.ec2_public,module.vpc] instance = module.ec2_public.id[0] vpc = true tags = local.common_tags - -## Local Exec Provisioner: local-exec provisioner (Destroy-Time Provisioner - Triggered during deletion of Resource) - provisioner "local-exec" { - command = "echo Destroy time prov `date` >> destroy-time-prov.txt" - working_dir = "local-exec-output-files/" - when = destroy - #on_failure = continue - } } + diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c9-nullresource-provisioners.tf b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c9-nullresource-provisioners.tf index a4b0bcdf..626d341a 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c9-nullresource-provisioners.tf +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/c9-nullresource-provisioners.tf @@ -1,42 +1,40 @@ # Create a Null Resource and Provisioners resource "null_resource" "name" { - depends_on = [module.ec2_public] - # Connection Block for Provisioners to connect to EC2 Instance + depends_on=[module.ec2_public] + connection { type = "ssh" - host = aws_eip.bastion_eip.public_ip - user = "ec2-user" - password = "" - private_key = file("private-key/terraform-key.pem") - } + user = "root" + password = "${var.root_password}" + host = aws_eip.ec2_public_eip.public_ip + private_key = file("private-key/NewTerraformkey.pem") + } -## File Provisioner: Copies the terraform-key.pem file to /tmp/terraform-key.pem - provisioner "file" { - source = "private-key/terraform-key.pem" - destination = "/tmp/terraform-key.pem" + # ... + provisioner "file" { + source = "private-key/NewTerraformkey.pem" + destination = "/tmp/NewTerraformkey.pem" } -## Remote Exec Provisioner: Using remote-exec provisioner fix the private key permissions on Bastion Host - provisioner "remote-exec" { + + provisioner "remote-exec" { inline = [ - "sudo chmod 400 /tmp/terraform-key.pem" + "sudo chmod 400 /tmp/NewTerraformkey.pem" ] } -## Local Exec Provisioner: local-exec provisioner (Creation-Time Provisioner - Triggered during Create Resource) + provisioner "local-exec" { - command = "echo VPC created on `date` and VPC ID: ${module.vpc.vpc_id} >> creation-time-vpc-id.txt" - working_dir = "local-exec-output-files/" - #on_failure = continue - } -## Local Exec Provisioner: local-exec provisioner (Destroy-Time Provisioner - Triggered during deletion of Resource) -/* provisioner "local-exec" { command = "echo Destroy time prov `date` >> destroy-time-prov.txt" working_dir = "local-exec-output-files/" when = destroy #on_failure = continue } - */ - + } + +## File Provisioner: Copies the terraform-key.pem file to /tmp/terraform-key.pem +## Remote Exec Provisioner: Using remote-exec provisioner fix the private key permissions on Bastion Host +## Local Exec Provisioner: local-exec provisioner (Creation-Time Provisioner - Triggered during Create Resource) +## Local Exec Provisioner: local-exec provisioner (Destroy-Time Provisioner - Triggered during deletion of Resource) # Creation Time Provisioners - By default they are created during resource creations (terraform apply) # Destory Time Provisioners - Will be executed during "terraform destroy" command (when = destroy) \ No newline at end of file diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/ec2instance.auto.tfvars b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/ec2instance.auto.tfvars index 2d1c0446..b0cc92a3 100644 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/ec2instance.auto.tfvars +++ b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/ec2instance.auto.tfvars @@ -1,4 +1,4 @@ # EC2 Instance Variables instance_type = "t3.micro" -instance_keypair = "terraform-key" +instance_keypair = "NewTerraformkey" private_instance_count = 2 diff --git a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/private-key/terraform-key.pem b/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/private-key/terraform-key.pem deleted file mode 100644 index fab1eb2a..00000000 --- a/07-AWS-EC2Instance-and-SecurityGroups/terraform-manifests/private-key/terraform-key.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAnzQtbXStFNU4znotckbPpAbQvymSYBvIRhObDObmhZLzs/Qm -lm57HBU18NcdAeEmKjHyu/2CI4Wwor3TJ+LTKHIldHmCt+26dSN5889Km99Af674 -nuPg9fTt8IXhY83aO0AeEnFivC+lk9+6Xezv7J7Llsmyx3kvUGE4uUEPNPuNcjdU -OrSlQ/Th9FPWBsTL8wLQCfQaPIQhZT8fXnvNGViTpZ/YqcoKGmkXcMl/+Pi0Xccs -ID3Egl18sV5uWr6T1DSMqhhwWYbl+IagZYUeKQ6Lg5znAtnX2/OHhDep6pGcf+aE -jbRkhQWgfLIVYhNXkAGxdxBEA2fQO0wvnaKI6wIDAQABAoIBABmUZqApmQ253LDA -TMEJw58VQUEVyuEKVbl8uPLvvqZDoEiPuAt/oOQ4PDyAM7bzmBA7ikbOSrSubF0Z -pu3HsinTfVUjmO84kTb1Bkk4S0KUMmbRlDzjXGfofLqiqD5C+wd+G9bWxQh7l10V -G3qv8TTRpuCJc+I9BG8jz9tkKq9WYtnGKXktVIAmEXK+ein8A5yj+szV1CyP0y6Y -6D1KApk+o1hLEXCBxaK6JgD4elJWgU0jCIhRFZzae93yozNIfJc2WZfPc8Ro6GBa -8H57q3E241P7S65VewhZlln9AUcRFYc587ohcCIW8mOWQ8NA3IMP+oVxa2p334Ll -duhR2jECgYEAyf7a1/+/c82B+ENyo53Y5CK2UM28oOJjiyCaWG2Dxj6V2+ZSXPrS -YTo43L9XiqT0Ry2eHjb4pJDsEeW5FnaDFO6NVUP+vfzaqWtozQmVAl3GQybbSh6g -+KJoEQff2Obadp9ZVhLFTiBedvGqPD43hs7jtmk5RfMjpLOvidfe+/UCgYEAycSJ -etYYHMMQm2NgX1/4dcbgOiu33N+x1H7LaXuvJMaZw0wB7fUyu65CAexEanDtiKs3 -jVG4tAzdMmHg7VxKR7eiCvQaSlxdWdcWtL2eFVq2TaQeowbpJUtsR0h6W0vpaN9A -VYW/oAH4fzQskwmWSlBMxB/Ie14hBCBckTXSRV8CgYEAql6WXpCK/jVbZfYdfvrn -sKPGeijM7DWGGBaLmAHmnxKyeyKsXVgAkZj11NpeD8ZJcq97Kajb1pGVSxMjJVsX -/FOoST5sYfoew76gSi/GypQlYQYo9z8WLh9s/tBRcTRlFqAYTYzPdbG/ezshhmZD -lyRw0620bNdCPOyBJhY5MPECgYA/3tFOazuSz0UQi3LUfkLetagBghlf+AgJJmIp -8BdPYvcF1ae+tiHrO4x1o188+qaW3uxk9fusM25KJqXXPaHd9gl7wi4YYAjFCcuM -R4IlbGPNTCjOnr9rKOcL4aup/uvSYOmyqPYyJq2NRuzdVumWeLj0VMNYGkIFVmE3 -LnxzrQKBgG5loEjdSKt40YOMXtYvUYUKDGvWgoQEb0hj3OqiBXz+w4YD3/iX7dbQ -qra1gCxE42Z9beiBiti6zi6zGcoVj/pfNUoyxTLMSwaytbF+g1u6ksXcmC9PXcmk -kJDR0DJcm/rcL8tp3PKo22GDB7sobm9gk5je6y8z+dQs3SQbWzb0 ------END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf index 4313c217..8d6a7853 100644 --- a/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf +++ b/09-AWS-ALB-Application-LoadBalancer-Basic/terraform-manifests/c7-04-ec2instance-private.tf @@ -1,27 +1,36 @@ # AWS EC2 Instance Terraform Module # EC2 Instances that will be created in VPC Private Subnets +locals { + multiple_instances = { + one = { + instance_type = var.instance_type + subnet_id = element(module.vpc.private_subnets, 0) + + } + + two = { + instance_type = var.instance_type + # availability_zone = element(module.vpc.azs, 2) + subnet_id = element(module.vpc.private_subnets, 1) + } + } +} + module "ec2_private" { - depends_on = [ module.vpc ] # VERY VERY IMPORTANT else userdata webserver provisioning will fail - source = "terraform-aws-modules/ec2-instance/aws" - version = "2.17.0" - # insert the 10 required variables here - name = "${var.environment}-vm" - ami = data.aws_ami.amzlinux2.id - instance_type = var.instance_type - key_name = var.instance_keypair - #monitoring = true - vpc_security_group_ids = [module.private_sg.this_security_group_id] - #subnet_id = module.vpc.public_subnets[0] - subnet_ids = [ - module.vpc.private_subnets[0], - module.vpc.private_subnets[1] - ] + source = "terraform-aws-modules/ec2-instance/aws" + version = "4.1.4" - # just checking my new branch + for_each = local.multiple_instances - instance_count = var.private_instance_count - user_data = file("${path.module}/app1-install.sh") - tags = local.common_tags -} + name = "${var.environment}-vm-${each.key}" + + ami = data.aws_ami.amzlinux2.id + instance_type = each.value.instance_type + # availability_zone = each.value.availability_zone + subnet_id = each.value.subnet_id + vpc_security_group_ids = [module.security_group.security_group_id] + + tags = local.tags +} \ No newline at end of file