diff --git a/01_05_base/.terraform.lock.hcl b/01_05_base/.terraform.lock.hcl new file mode 100644 index 0000000..0635f5d --- /dev/null +++ b/01_05_base/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.53.0" + hashes = [ + "h1:w/1Yp1xSRLy5vOodhc/Wy6zrZM5T+2pXCOfYu5H/FFc=", + "zh:35a77c79170b0cf3fb7eb835f3ce0b715aeeceda0a259e96e49fed5a30cf6646", + "zh:519d5470a932b1ec9a0fe08876c5e0f0f84f8e506b652c051e4ab708be081e89", + "zh:58cfa5b454602d57c47acd15c2ad166a012574742cdbcf950787ce79b6510218", + "zh:5fc3c0162335a730701c0175809250233f45f1021da8fa52c73635e4c08372d8", + "zh:6790f9d6261eb4bd5cdd7cd9125f103befce2ba127f9ba46eef83585b86e1d11", + "zh:76e1776c3bf9568d520f78419ec143c081f653b8df4fb22577a8c4a35d3315f9", + "zh:ca8ed88d0385e45c35223ace59b1bf77d81cd2154d5416e63a3dddaf0def30e6", + "zh:d002562c4a89a9f1f6cd8d854fad3c66839626fc260e5dde5267f6d34dbd97a4", + "zh:da5e47fb769e90a2f16c90fd0ba95d62da3d76eb006823664a5c6e96188731b0", + "zh:dfe7f33ec252ea550e090975a5f10940c27302bebb5559957957937b069646ea", + "zh:fa91574605ddce726e8a4e421297009a9dabe023106e139ac46da49c8285f2fe", + ] +} diff --git a/01_05_base/main.tf b/01_05_base/main.tf index e8f85d8..03b9f39 100644 --- a/01_05_base/main.tf +++ b/01_05_base/main.tf @@ -1,3 +1,12 @@ +# ////////////////////////////// +# BACKEND +# ////////////////////////////// +terraform { + backend "s3" { + default="red30-tfstate" + } +} + # ////////////////////////////// # VARIABLES # ////////////////////////////// @@ -5,7 +14,9 @@ variable "aws_access_key" {} variable "aws_secret_key" {} -variable "ssh_key_name" {} +variable "ssh_key_name" { + default = "tf_key" +} variable "private_key_path" {} @@ -102,7 +113,7 @@ resource "aws_security_group" "sg-nodejs-instance" { } } -# INSTANCE +# INSTANCE1 resource "aws_instance" "nodejs1" { ami = data.aws_ami.aws-linux.id instance_type = "t2.micro" @@ -116,6 +127,24 @@ resource "aws_instance" "nodejs1" { user = "ec2-user" private_key = file(var.private_key_path) } + +} + +# INSTANCE2 +resource "aws_instance" "nodejs2" { + ami = data.aws_ami.aws-linux.id + instance_type = "t2.micro" + subnet_id = aws_subnet.subnet1.id + vpc_security_group_ids = [aws_security_group.sg-nodejs-instance.id] + key_name = var.ssh_key_name + + connection { + type = "ssh" + host = self.public_ip + user = "ec2-user" + private_key = file(var.private_key_path) + } + } diff --git a/01_05_base/terraform.exe b/01_05_base/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/01_05_base/terraform.exe differ diff --git a/01_05_base/tfp1 b/01_05_base/tfp1 new file mode 100644 index 0000000..8785b6b Binary files /dev/null and b/01_05_base/tfp1 differ diff --git a/02_01_variables/.terraform.lock.hcl b/02_01_variables/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/02_01_variables/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/02_01_variables/main.tf b/02_01_variables/main.tf index ff9d644..31d9093 100644 --- a/02_01_variables/main.tf +++ b/02_01_variables/main.tf @@ -1,12 +1,15 @@ # ////////////////////////////// # VARIABLES # ////////////////////////////// +variable "deploy_environment" { +default = "DEV" +} variable "aws_access_key" {} variable "aws_secret_key" {} variable "region" { - default = "us-east-2" + default = "us-east-1" } variable "vpc_cidr" { @@ -59,7 +62,7 @@ variable "environment_instance_settings" { }, "PROD" = { instance_type = "t2.micro", - monitoring = true + monitoring = false } } } @@ -141,14 +144,26 @@ resource "aws_security_group" "sg-nodejs-instance" { # INSTANCE resource "aws_instance" "nodejs1" { ami = data.aws_ami.aws-linux.id - instance_type = var.environment_instance_type["DEV"] - //instance_type = var.environment_instance_settings["PROD"].instance_type + //instance_type = var.environment_instance_type["DEV"] + instance_type = var.environment_instance_settings[var.deploy_environment].instance_type subnet_id = aws_subnet.subnet1.id vpc_security_group_ids = [aws_security_group.sg-nodejs-instance.id] - monitoring = var.environment_instance_settings["PROD"].monitoring + monitoring = var.environment_instance_settings[var.deploy_environment].monitoring + + tags = {Environment = var.deploy_environment} - tags = {Environment = var.environment_list[0]} +} +resource "aws_instance" "Shana" { + ami = data.aws_ami.aws-linux.id + //instance_type = var.environment_instance_type["DEV"] + instance_type = var.environment_instance_settings[var.deploy_environment].instance_type + subnet_id = aws_subnet.subnet1.id + vpc_security_group_ids = [aws_security_group.sg-nodejs-instance.id] + + monitoring = var.environment_instance_settings[var.deploy_environment].monitoring + + tags = {Environment = var.deploy_environment} } diff --git a/02_01_variables/terraform.tfvars.backup b/02_01_variables/terraform.tfvars.backup deleted file mode 100644 index af8b4ef..0000000 --- a/02_01_variables/terraform.tfvars.backup +++ /dev/null @@ -1,3 +0,0 @@ -aws_access_key = "" - -aws_secret_key = "" \ No newline at end of file diff --git a/02_02-07_variables/.terraform.lock.hcl b/02_02-07_variables/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/02_02-07_variables/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/02_02-07_variables/main.tf b/02_02-07_variables/main.tf index e2bea6c..a0e0bc5 100644 --- a/02_02-07_variables/main.tf +++ b/02_02-07_variables/main.tf @@ -182,4 +182,8 @@ data "aws_ami" "aws-linux" { # ////////////////////////////// output "instance-dns" { value = aws_instance.nodejs1.public_dns +} + +output "private-dns" { + value= aws_instance.nodejs1.private_dns } \ No newline at end of file diff --git a/02_02-07_variables/terraform copy.exe b/02_02-07_variables/terraform copy.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/02_02-07_variables/terraform copy.exe differ diff --git a/02_02-07_variables/terraform.exe b/02_02-07_variables/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/02_02-07_variables/terraform.exe differ diff --git a/02_02-07_variables/terraform.tfvars copy.backup b/02_02-07_variables/terraform.tfvars copy.backup new file mode 100644 index 0000000..b2e0363 --- /dev/null +++ b/02_02-07_variables/terraform.tfvars copy.backup @@ -0,0 +1,13 @@ +# MAC/LINUX +# aws ec2 create-key-pair --key-name tf_key --query 'KeyMaterial' --output text > tf_key.pem +### +# WINDOWS +# aws ec2 create-key-pair --key-name tf_key --query 'KeyMaterial' --output text | out-file -encoding ascii -filepath tf_key.pem + +aws_access_key = "" + +aws_secret_key = "" + +ssh_key_name = "" + +private_key_path = "" \ No newline at end of file diff --git a/02_02-07_variables/terraform.tfvars.backup b/02_02-07_variables/terraform.tfvars.backup index af8b4ef..d8c8f99 100644 --- a/02_02-07_variables/terraform.tfvars.backup +++ b/02_02-07_variables/terraform.tfvars.backup @@ -1,3 +1,7 @@ aws_access_key = "" -aws_secret_key = "" \ No newline at end of file +aws_secret_key = "" + +ssh_key_name = "" + +private_key_path = "" \ No newline at end of file diff --git a/02_08-09_expressions_functions/.terraform.lock.hcl b/02_08-09_expressions_functions/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/02_08-09_expressions_functions/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/02_08-09_expressions_functions/main.tf b/02_08-09_expressions_functions/main.tf index e2bea6c..ad4c467 100644 --- a/02_08-09_expressions_functions/main.tf +++ b/02_08-09_expressions_functions/main.tf @@ -6,7 +6,7 @@ variable "aws_access_key" {} variable "aws_secret_key" {} variable "region" { - default = "us-east-2" + default = "us-east-1" } variable "vpc_cidr" { @@ -19,7 +19,7 @@ variable "subnet1_cidr" { variable "environment_list" { type = list(string) - default = ["DEV","QA","STAGE","PROD"] + default = ["DEV","QA","STAGE",""] } variable "environment_map" { diff --git a/02_08-09_expressions_functions/terraform.exe b/02_08-09_expressions_functions/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/02_08-09_expressions_functions/terraform.exe differ diff --git a/02_08-09_expressions_functions/terraform.tfvars copy.backup b/02_08-09_expressions_functions/terraform.tfvars copy.backup new file mode 100644 index 0000000..b2e0363 --- /dev/null +++ b/02_08-09_expressions_functions/terraform.tfvars copy.backup @@ -0,0 +1,13 @@ +# MAC/LINUX +# aws ec2 create-key-pair --key-name tf_key --query 'KeyMaterial' --output text > tf_key.pem +### +# WINDOWS +# aws ec2 create-key-pair --key-name tf_key --query 'KeyMaterial' --output text | out-file -encoding ascii -filepath tf_key.pem + +aws_access_key = "" + +aws_secret_key = "" + +ssh_key_name = "" + +private_key_path = "" \ No newline at end of file diff --git a/02_10_count/.terraform.lock.hcl b/02_10_count/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/02_10_count/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/02_10_count/main.tf b/02_10_count/main.tf index f96932b..9b17e50 100644 --- a/02_10_count/main.tf +++ b/02_10_count/main.tf @@ -9,6 +9,7 @@ variable "iam_accounts" { type = set(string) } + variable "region" { default = "us-east-2" } @@ -143,8 +144,8 @@ resource "aws_security_group" "sg-nodejs-instance" { } # INSTANCE -resource "aws_instance" "nodejs1" { - //count = 4 +resource "aws_instance" "node_instances" { + count = 4 ami = data.aws_ami.aws-linux.id instance_type = var.environment_instance_settings["PROD"].instance_type @@ -156,6 +157,12 @@ resource "aws_instance" "nodejs1" { tags = {Environment = var.environment_list[0]} } +resource "aws_iam_user" "iam-users" { + for_each = var.iam_accounts + name=each.key + +} + # ////////////////////////////// # DATA @@ -186,5 +193,5 @@ data "aws_ami" "aws-linux" { # OUTPUT # ////////////////////////////// output "instance-dns" { - value = aws_instance.nodejs1.public_dns + value = aws_instance.node_instances.*.public_dns } \ No newline at end of file diff --git a/02_10_count/terraform.exe b/02_10_count/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/02_10_count/terraform.exe differ diff --git a/02_11-12_modules/.terraform.lock.hcl b/02_11-12_modules/.terraform.lock.hcl new file mode 100644 index 0000000..d9ffcb1 --- /dev/null +++ b/02_11-12_modules/.terraform.lock.hcl @@ -0,0 +1,21 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + constraints = ">= 3.15.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/02_11-12_modules/main.tf b/02_11-12_modules/main.tf index f58a102..8c955c0 100644 --- a/02_11-12_modules/main.tf +++ b/02_11-12_modules/main.tf @@ -64,7 +64,7 @@ module "vpc" { name = "frontend-vpc" cidr = "10.0.0.0/16" - azs = ["us-east-2a", "us-east-2b", "us-east-2c"] + azs = ["us-east-1a", "us-east-1c"] private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] diff --git a/03_02-03_remotestate/.terraform.lock.hcl b/03_02-03_remotestate/.terraform.lock.hcl new file mode 100644 index 0000000..d9ffcb1 --- /dev/null +++ b/03_02-03_remotestate/.terraform.lock.hcl @@ -0,0 +1,21 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + constraints = ">= 3.15.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_02-03_remotestate/commands.txt b/03_02-03_remotestate/commands.txt deleted file mode 100644 index 39d0f1c..0000000 --- a/03_02-03_remotestate/commands.txt +++ /dev/null @@ -1,7 +0,0 @@ -terraform init \ - -backend-config="bucket=red30-tfstate" \ - -backend-config="key=red30/ecommerceapp/app.state" \ - -backend-config="region=us-east-2" \ - -backend-config="dynamodb_table=red30-tfstatelock" \ - -backend-config="access_key={ACCESS_KEY}" \ - -backend-config="secret_key={SECRET_KEY}" diff --git a/03_02-03_remotestate/main.tf b/03_02-03_remotestate/main.tf index 20cf33f..e4f9293 100644 --- a/03_02-03_remotestate/main.tf +++ b/03_02-03_remotestate/main.tf @@ -45,7 +45,7 @@ module "vpc" { cidr = "10.0.0.0/16" - azs = ["us-east-2a", "us-east-2b", "us-east-2c"] + azs = ["us-east-2a"] private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] diff --git a/03_02-03_remotestate/remote_resources/.terraform.lock.hcl b/03_02-03_remotestate/remote_resources/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/03_02-03_remotestate/remote_resources/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_02-03_remotestate/remote_resources/s3_backend.tf b/03_02-03_remotestate/remote_resources/s3_backend.tf index 0f0f424..54982bc 100644 --- a/03_02-03_remotestate/remote_resources/s3_backend.tf +++ b/03_02-03_remotestate/remote_resources/s3_backend.tf @@ -6,12 +6,12 @@ variable "aws_access_key" {} variable "aws_secret_key" {} variable "bucket_name" { - default = "red30-tfstate" + default = "red824-tfstate" } # ////////////////////////////// -# PROVIDER -# ////////////////////////////// +# PROVIDERs +# //////////////////////////////////////////////////////////////// provider "aws" { access_key = var.aws_access_key secret_key = var.aws_secret_key @@ -28,11 +28,10 @@ data "aws_iam_user" "terraform" { # ////////////////////////////// # S3 BUCKET # ////////////////////////////// -resource "aws_s3_bucket" "red30-tfremotestate" { +resource "aws_s3_bucket" "red824-tfstate" { bucket = var.bucket_name force_destroy = true acl = "private" - versioning { enabled = true } @@ -56,15 +55,15 @@ resource "aws_s3_bucket" "red30-tfremotestate" { EOF } -resource "aws_s3_bucket_public_access_block" "red30-tfremotestate" { - bucket = aws_s3_bucket.red30-tfremotestate.id +resource "aws_s3_bucket_public_access_block" "red824-tfstate" { + bucket = aws_s3_bucket.red824-tfstate.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true } - +//testingbranches # ////////////////////////////// # DYNAMODB TABLE # ////////////////////////////// diff --git a/03_02-03_remotestate/terraform.tfvars.backup b/03_02-03_remotestate/terraform.tfvars.backup deleted file mode 100644 index af8b4ef..0000000 --- a/03_02-03_remotestate/terraform.tfvars.backup +++ /dev/null @@ -1,3 +0,0 @@ -aws_access_key = "" - -aws_secret_key = "" \ No newline at end of file diff --git a/03_04_complex/.terraform.lock.hcl b/03_04_complex/.terraform.lock.hcl new file mode 100644 index 0000000..2e50929 --- /dev/null +++ b/03_04_complex/.terraform.lock.hcl @@ -0,0 +1,21 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + constraints = ">= 3.15.0, >= 3.24.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_04_complex/terraform.exe b/03_04_complex/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/03_04_complex/terraform.exe differ diff --git a/03_05-06_multi_environment/environments/0_development/.terraform.lock.hcl b/03_05-06_multi_environment/environments/0_development/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/03_05-06_multi_environment/environments/0_development/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_05-06_multi_environment/environments/0_development/development.auto.tfvars.backup b/03_05-06_multi_environment/environments/0_development/development.auto.tfvars.backup deleted file mode 100644 index 1fbb207..0000000 --- a/03_05-06_multi_environment/environments/0_development/development.auto.tfvars.backup +++ /dev/null @@ -1,13 +0,0 @@ -aws_access_key = "" - -aws_secret_key = "" - -region = "" - -env_instance_type = "t2.micro" - -env_instance_tags = { - "environment" = "development" -} - -env_instance_count = 1 \ No newline at end of file diff --git a/03_05-06_multi_environment/environments/0_development/terraform.exe b/03_05-06_multi_environment/environments/0_development/terraform.exe new file mode 100644 index 0000000..c14a27d Binary files /dev/null and b/03_05-06_multi_environment/environments/0_development/terraform.exe differ diff --git a/03_05-06_multi_environment/manifests/.terraform.lock.hcl b/03_05-06_multi_environment/manifests/.terraform.lock.hcl new file mode 100644 index 0000000..f217af5 --- /dev/null +++ b/03_05-06_multi_environment/manifests/.terraform.lock.hcl @@ -0,0 +1,21 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + constraints = ">= 3.24.0, >= 3.28.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_07_custommodule/.terraform.lock.hcl b/03_07_custommodule/.terraform.lock.hcl new file mode 100644 index 0000000..6c905fc --- /dev/null +++ b/03_07_custommodule/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.54.0" + hashes = [ + "h1:iebn8r+2luD3RwWwj3W2NSozlEkKC7NFUqU203tVsK8=", + "zh:06c2dfbbf8ca2bea50444c26c5159763fe9cbe92553c13a208b4df1035368f35", + "zh:2ea54ab59a3a4cf455a1f1589778ca0721ed5d6ad681d64cfa7f2036dcc6df61", + "zh:30719cb435dac60fa69564e2ce221d589be3a974daed966f88fae88782db3a67", + "zh:8b13e240955bd9181dd5d0081bbc7c03200b4493e2e9f52a783c5e1582e16311", + "zh:99b344ab400300309e27dea4195671d1b021dee44758d0a97236f171b8395cbf", + "zh:bc0d72a343b161c3b47ce78760b9deae0d9339e279c3be35a2e9f148c09c4688", + "zh:d905eaa3c074131d8e7e5207a3c9ddab73c32a792dcd97a1c9d52a2a9753c1b7", + "zh:dddc2752b9d6846eaef3b2e2486f8789df91d16794e7aae03c9d5d6cb1bc10eb", + "zh:ed1bee76d38117594f336bd2656135c7f85b4a1af3ff65d2a3e59a8107b9219a", + "zh:f1f1a0bebd03e479b072dde9831f573070f6deada2972f5b966dd4858b99a8c2", + "zh:f91a6dfbc46d523d5f90ae84ac6ee6bf0aa2b1ced9a55f6142669849d3608998", + ] +} diff --git a/03_07_custommodule/terraform.tfvars.backup b/03_07_custommodule/terraform.tfvars.backup deleted file mode 100644 index d4e057a..0000000 --- a/03_07_custommodule/terraform.tfvars.backup +++ /dev/null @@ -1,5 +0,0 @@ -aws_access_key = "" - -aws_secret_key = "" - -region = "" \ No newline at end of file diff --git a/04_02_jenkins/Jenkinsfile b/04_02_jenkins/Jenkinsfile index 80bd5b7..c68a568 100644 --- a/04_02_jenkins/Jenkinsfile +++ b/04_02_jenkins/Jenkinsfile @@ -2,17 +2,17 @@ node { stage('Clone') { // for display purposes // Clone the configurations repository cleanWs() - git 'https://github.com/LinkedInLearning/advanced-terraform-2823489.git' + git 'https://github.com/ahmedlotfy700/advanced-terraform-2823489.git' } stage('Download') { // Download Terraform - sh label: '', script: 'curl https://releases.hashicorp.com/terraform/0.12.29/terraform_0.12.29_linux_amd64.zip \ - --output terraform_0.12.29_darwin_amd64.zip \ - && unzip terraform_0.12.29_darwin_amd64.zip' + sh label: '', script: 'curl https://releases.hashicorp.com/terraform/1.0.5/terraform_1.0.5_windows_amd64.zip \ + --output terraform_1.0.5_windows_amd64.zip \ + && unzip terraform_1.0.5_windows_amd64.zip' } stage('Backend-Init') { // Initialize the Terraform configuration - dir('03_01_remotestate/remote_resources') { + dir('03_02-03_remotestate/remote_resources') { sh script: '../../terraform init -input=false' } @@ -21,7 +21,7 @@ node { // Create Terraform plan for backend resources withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate/remote_resources') { + dir('03_02-03_remotestate/remote_resources') { sh script: '../../terraform plan \ -out backend.tfplan \ -var="aws_access_key=$aws_access_key" \ @@ -32,7 +32,7 @@ node { stage('Backend-Apply') { withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate/remote_resources') { + dir('03_02-03_remotestate/remote_resources') { sh script: '../../terraform apply backend.tfplan' } } @@ -40,9 +40,9 @@ node { stage('Config-Init') { withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate') { - sh script: '../terraform init \ - -backend-config="bucket=red30-tfstate" \ + dir('03_02-03_remotestate') { + sh script: '../terraform init \ + -backend-config="bucket=red824-tfstate" \ -backend-config="key=red30/ecommerceapp/app.state" \ -backend-config="region=us-east-2" \ -backend-config="dynamodb_table=red30-tfstatelock" \ @@ -55,7 +55,7 @@ node { // Generate Terraform plan withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate') { + dir('03_02-03_remotestate') { sh script: '../terraform plan \ -out s1.tfplan \ -var="aws_access_key=$aws_access_key" \ @@ -67,7 +67,7 @@ node { // Apply the configuration withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate') { + dir('03_02-03_remotestate') { sh script: '../terraform apply s1.tfplan' } } @@ -76,13 +76,13 @@ node { input 'Destroy?' withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { - dir('03_01_remotestate') { + dir('03_02-03_remotestate') { sh script: '../terraform destroy \ -auto-approve \ -var="aws_access_key=$aws_access_key" \ -var="aws_secret_key=$aws_secret_key"' } - dir('03_01_remotestate/remote_resources') { + dir('03_02-03_remotestate/remote_resources') { sh script: '../../terraform destroy \ -auto-approve \ -var="aws_access_key=$aws_access_key" \ diff --git a/04_02_jenkins/companypipline b/04_02_jenkins/companypipline new file mode 100644 index 0000000..f2f9b23 --- /dev/null +++ b/04_02_jenkins/companypipline @@ -0,0 +1,93 @@ +node { + stage('Clone') { // for display purposes + // Clone the configurations repository + cleanWs() + git 'https://github.com/ahmedlotfy700/advanced-terraform-2823489.git' + } + stage('Download') { + // Download Terraform + sh label: '', script: 'curl https://releases.hashicorp.com/terraform/1.0.5/terraform_1.0.5_windows_amd64.zip \ + --output terraform_1.0.5_windows_amd64.zip \ + && unzip terraform_1.0.5_windows_amd64.zip' + } + stage('Backend-Init') { + // Initialize the Terraform configuration + dir('03_02-03_remotestate/remote_resources') { + sh script: '../../terraform init -input=false' + } + + } + stage('Backend-Plan') { + // Create Terraform plan for backend resources + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { + dir('03_02-03_remotestate/remote_resources') { + sh script: '../../terraform plan \ + -out backend.tfplan \ + -var="aws_access_key=$aws_access_key" \ + -var="aws_secret_key=$aws_secret_key"' + } + } + } + stage('Backend-Apply') { + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { + dir('03_02-03_remotestate/remote_resources') { + sh script: '../../terraform apply backend.tfplan' + } + } + } + stage('Init') { + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { + dir('01_05_base') { + sh script: '../terraform init \ + -backend-config="bucket=red824-tfstate" \ + -backend-config="key=red30/ecommerceapp/app.state" \ + -backend-config="region=us-east-2" \ + -backend-config="dynamodb_table=red824-tfstatelock" \ + -backend-config="access_key=$aws_access_key" \ + -backend-config="secret_key=$aws_secret_key"' + } + } + } + stage('Config-Plan') { + // Generate Terraform plan + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key'), + file(credentialsId: 'tf_key', variable: 'private_key_path')] + ) { + dir('01_05_base') { + sh script: '../terraform plan \ + -out s1.tfplan \ + -var="aws_access_key=$aws_access_key" \ + -var="aws_secret_key=$aws_secret_key" \ + -var="private_key_path=$tf_key"' + } + } + } + stage('Config-Apply') { + // Apply the configuration + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key')]) { + dir('01_05_base') { + sh script: '../terraform apply s1.tfplan' + } + } + } + stage('Destroy'){ + input 'Destroy?' + withCredentials([string(credentialsId: 'AWS_ACCESS_KEY', variable: 'aws_access_key'), + string(credentialsId: 'AWS_SECRET_KEY', variable: 'aws_secret_key'), + file(credentialsId: 'tf_key', variable: 'private_key_path')]) + { + dir('01_05_base') { + sh script: '../terraform destroy \ + -auto-approve \ + -var="aws_access_key=$aws_access_key" \ + -var="aws_secret_key=$aws_secret_key" \ + -var="private_key_path=$tf_key"' + } + } + } +} \ No newline at end of file diff --git a/04_03_terraform_cloud/instance.tf b/04_03_terraform_cloud/instance.tf index 2fa3684..88a676f 100644 --- a/04_03_terraform_cloud/instance.tf +++ b/04_03_terraform_cloud/instance.tf @@ -14,5 +14,5 @@ module "ec2_cluster" { vpc_security_group_ids = [aws_security_group.sg_frontend.id] subnet_id = module.vpc.public_subnets[1] - tags = var.instance_tags + } \ No newline at end of file diff --git a/04_04_terraform_cloud_cli/backend.tf b/04_04_terraform_cloud_cli/backend.tf index 1119b39..f7192be 100644 --- a/04_04_terraform_cloud_cli/backend.tf +++ b/04_04_terraform_cloud_cli/backend.tf @@ -1,9 +1,10 @@ terraform { backend "remote" { - organization = "red30" + organization = "ahmedlotfy700" workspaces { name = "cli-workspace" } } } +//test \ No newline at end of file diff --git a/04_04_terraform_cloud_cli/terraform.tfvars.backup b/04_04_terraform_cloud_cli/terraform.tfvars.backup index d4e057a..9feabc7 100644 --- a/04_04_terraform_cloud_cli/terraform.tfvars.backup +++ b/04_04_terraform_cloud_cli/terraform.tfvars.backup @@ -2,4 +2,7 @@ aws_access_key = "" aws_secret_key = "" -region = "" \ No newline at end of file +region ="us-east-2" + +profile = "terraform" +\\\\\\\\\test \\\\ \ No newline at end of file diff --git a/04_05_terraform_cloud_vcs/variables.tf b/04_05_terraform_cloud_vcs/variables.tf index 06a0e24..6a652d0 100644 --- a/04_05_terraform_cloud_vcs/variables.tf +++ b/04_05_terraform_cloud_vcs/variables.tf @@ -17,10 +17,10 @@ variable "instance_count" { variable "instance_tags" { type = map default = { - "environment" = "dev" + "environment" = "staging" } } -# ////////////////////////////// +# ///////////////////////////////// # OUTPUT # ////////////////////////////// output "instance-ip" {