From 3152da3f45b25b0f9965cb22e7d2f898ae7b9afa Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:31:46 +0900 Subject: [PATCH 01/22] Add module for network/vpc --- modules/aws/network/vpc/main.tf | 91 ++++++++++++++++++++++++++++ modules/aws/network/vpc/outputs.tf | 19 ++++++ modules/aws/network/vpc/variables.tf | 22 +++++++ 3 files changed, 132 insertions(+) create mode 100644 modules/aws/network/vpc/main.tf create mode 100644 modules/aws/network/vpc/outputs.tf create mode 100644 modules/aws/network/vpc/variables.tf diff --git a/modules/aws/network/vpc/main.tf b/modules/aws/network/vpc/main.tf new file mode 100644 index 0000000..7fe21f2 --- /dev/null +++ b/modules/aws/network/vpc/main.tf @@ -0,0 +1,91 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + name = "${var.project_name}-${var.env}" + vpc_name = "${local.name}-vpc" + vpc_internet_gateway_name = "${local.name}-gw" + vpc_public_subnet_name = "${local.name}-subnet-public" + vpc_public_route_table_name = "${local.name}-rt-public" + vpc_private_subnet_name = "${local.name}-subnet-private" + vpc_private_route_table_name = "${local.name}-rt-private" +} + +resource "aws_vpc" "vpc" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + + tags = merge(local.tags, { + Name = local.vpc_name + }) +} + +# public routing +resource "aws_internet_gateway" "internet_gateway" { + vpc_id = aws_vpc.vpc.id + + tags = merge(local.tags, { + Name = local.vpc_internet_gateway_name + }) + depends_on = [aws_vpc.vpc] +} + +resource "aws_subnet" "subnet_public" { + vpc_id = aws_vpc.vpc.id + cidr_block = element(var.subnets_public, count.index) + availability_zone = element(var.availability_zones, count.index) + count = length(var.subnets_public) + map_public_ip_on_launch = true + + tags = merge(local.tags, { + Name = "${local.vpc_public_subnet_name}${count.index + 1}" + }) +} + +resource "aws_route_table" "route_table_public" { + vpc_id = aws_vpc.vpc.id + + tags = merge(local.tags, { + Name = local.vpc_public_route_table_name + }) +} + +resource "aws_route" "route_public" { + route_table_id = aws_route_table.route_table_public.id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.internet_gateway.id +} + +resource "aws_route_table_association" "route_table_association_public" { + count = length(var.subnets_public) + subnet_id = element(aws_subnet.subnet_public.*.id, count.index) + route_table_id = aws_route_table.route_table_public.id +} + +# Private routing +resource "aws_subnet" "subnet_private" { + vpc_id = aws_vpc.vpc.id + cidr_block = element(var.subnets_private, count.index) + availability_zone = element(var.availability_zones, count.index) + count = length(var.subnets_private) + + tags = merge(local.tags, { + Name = "${local.vpc_private_subnet_name}${count.index + 1}" + }) +} + +resource "aws_route_table" "route_table_private" { + vpc_id = aws_vpc.vpc.id + + tags = merge(local.tags, { + Name = local.vpc_private_route_table_name + }) +} + +resource "aws_route_table_association" "route_table_association_private" { + count = length(var.subnets_private) + subnet_id = element(aws_subnet.subnet_private.*.id, count.index) + route_table_id = aws_route_table.route_table_private.id +} diff --git a/modules/aws/network/vpc/outputs.tf b/modules/aws/network/vpc/outputs.tf new file mode 100644 index 0000000..6076c50 --- /dev/null +++ b/modules/aws/network/vpc/outputs.tf @@ -0,0 +1,19 @@ +output "vpc_id" { + description = "The ID of the VPC." + value = aws_vpc.vpc.id +} + +output "subnet_public_ids" { + description = "A list of public subnet IDs." + value = aws_subnet.subnet_public[*].id +} + +output "internet_gateway_id" { + description = "The ID of the Internet Gateway for public subnets." + value = aws_internet_gateway.internet_gateway.id +} + +output "subnet_private_ids" { + description = "A list of private subnet IDs." + value = aws_subnet.subnet_private[*].id +} diff --git a/modules/aws/network/vpc/variables.tf b/modules/aws/network/vpc/variables.tf new file mode 100644 index 0000000..cbacf8a --- /dev/null +++ b/modules/aws/network/vpc/variables.tf @@ -0,0 +1,22 @@ +variable "env" { + description = "Environment name" +} + +variable "project_name" { + description = "Project name" +} + +variable "subnets_public" { + description = "List of public subnet CIDR blocks" + type = list(string) +} + +variable "subnets_private" { + description = "List of private subnet CIDR blocks" + type = list(string) +} + +variable "availability_zones" { + description = "List of availability zones" + type = list(string) +} From f2d3fa603dc5e7907ac517a876ee9c6dd39db881 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:34:48 +0900 Subject: [PATCH 02/22] Add module for network/sg --- modules/aws/network/sg/external/main.tf | 39 ++++++++++++++++++++ modules/aws/network/sg/external/outputs.tf | 4 ++ modules/aws/network/sg/external/variables.tf | 15 ++++++++ modules/aws/network/sg/internal/main.tf | 31 ++++++++++++++++ modules/aws/network/sg/internal/outputs.tf | 5 +++ modules/aws/network/sg/internal/variables.tf | 23 ++++++++++++ 6 files changed, 117 insertions(+) create mode 100644 modules/aws/network/sg/external/main.tf create mode 100644 modules/aws/network/sg/external/outputs.tf create mode 100644 modules/aws/network/sg/external/variables.tf create mode 100644 modules/aws/network/sg/internal/main.tf create mode 100644 modules/aws/network/sg/internal/outputs.tf create mode 100644 modules/aws/network/sg/internal/variables.tf diff --git a/modules/aws/network/sg/external/main.tf b/modules/aws/network/sg/external/main.tf new file mode 100644 index 0000000..156b4aa --- /dev/null +++ b/modules/aws/network/sg/external/main.tf @@ -0,0 +1,39 @@ +locals { + tags = { + Name = var.sg_name + Environment = var.env + ProjectName = var.project_name + } +} + +resource "aws_security_group" "security_group_external" { + name = local.tags.Name + description = "External security group definition." + vpc_id = var.vpc_id + + ingress { + description = "Allow HTTP inbound traffic" + from_port = 80 + to_port = 80 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + ingress { + description = "Allow HTTPS inbound traffic" + from_port = 443 + to_port = 443 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + egress { + description = "Allow all outbound traffic" + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = local.tags +} diff --git a/modules/aws/network/sg/external/outputs.tf b/modules/aws/network/sg/external/outputs.tf new file mode 100644 index 0000000..c76e418 --- /dev/null +++ b/modules/aws/network/sg/external/outputs.tf @@ -0,0 +1,4 @@ +output "sg_id" { + description = "The ID of the external security group" + value = aws_security_group.security_group_external.id +} diff --git a/modules/aws/network/sg/external/variables.tf b/modules/aws/network/sg/external/variables.tf new file mode 100644 index 0000000..5a69610 --- /dev/null +++ b/modules/aws/network/sg/external/variables.tf @@ -0,0 +1,15 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "vpc_id" { + description = "The ID of the VPC where the security group will be created" +} + +variable "sg_name" { + description = "The name of the external security group" +} diff --git a/modules/aws/network/sg/internal/main.tf b/modules/aws/network/sg/internal/main.tf new file mode 100644 index 0000000..a904fd6 --- /dev/null +++ b/modules/aws/network/sg/internal/main.tf @@ -0,0 +1,31 @@ +locals { + tags = { + Name = var.sg_name + Environment = var.env + ProjectName = var.project_name + } +} + +resource "aws_security_group" "security_group_internal" { + name = local.tags.Name + description = "Internal security group definition." + vpc_id = var.vpc_id + + ingress { + description = "Allow inbound traffic for a specific port" + protocol = "tcp" + from_port = var.sg_allowed_ingress_port + to_port = var.sg_allowed_ingress_port + security_groups = [var.sg_allowed_ingress_sg_id] + } + + egress { + description = "Allow all outbound traffic" + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = local.tags +} diff --git a/modules/aws/network/sg/internal/outputs.tf b/modules/aws/network/sg/internal/outputs.tf new file mode 100644 index 0000000..f0e60e4 --- /dev/null +++ b/modules/aws/network/sg/internal/outputs.tf @@ -0,0 +1,5 @@ +output "sg_id" { + description = "The ID of the internal security group" + value = aws_security_group.security_group_internal.id +} + diff --git a/modules/aws/network/sg/internal/variables.tf b/modules/aws/network/sg/internal/variables.tf new file mode 100644 index 0000000..ea441ca --- /dev/null +++ b/modules/aws/network/sg/internal/variables.tf @@ -0,0 +1,23 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "vpc_id" { + description = "The ID of the VPC where the security group will be created" +} + +variable "sg_name" { + description = "The name of the internal security group" +} + +variable "sg_allowed_ingress_port" { + description = "The inbound port for allowing traffic" +} + +variable "sg_allowed_ingress_sg_id" { + description = "Security group ID allowed for inbound traffic" +} From 2a4a578b25190531ca15de7f66b9d825f9217291 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:35:02 +0900 Subject: [PATCH 03/22] Add module for s3 --- modules/aws/s3/main.tf | 55 +++++++++++++++++++++++++++++++++++++ modules/aws/s3/outputs.tf | 14 ++++++++++ modules/aws/s3/variables.tf | 17 ++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 modules/aws/s3/main.tf create mode 100644 modules/aws/s3/outputs.tf create mode 100644 modules/aws/s3/variables.tf diff --git a/modules/aws/s3/main.tf b/modules/aws/s3/main.tf new file mode 100644 index 0000000..8f855ff --- /dev/null +++ b/modules/aws/s3/main.tf @@ -0,0 +1,55 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + s3_bucket_unique_name = "${var.project_name}-${var.env}-${var.s3_bucket_suffix_name}" +} + +resource "aws_s3_bucket" "s3_bucket" { + bucket = local.s3_bucket_unique_name + + # Prevent accidental deletion of this S3 bucket + lifecycle { + prevent_destroy = false + } + + tags = merge(local.tags, { + Name = "${local.s3_bucket_unique_name}-s3" + }) + + depends_on = [aws_s3_bucket.s3_bucket] +} + +resource "aws_s3_bucket_versioning" "enabled" { + bucket = aws_s3_bucket.s3_bucket.id + versioning_configuration { + status = "Enabled" + } + + depends_on = [aws_s3_bucket.s3_bucket] +} + +resource "aws_s3_bucket_server_side_encryption_configuration" "s3_bucket_server_side_encryption_configuration" { + bucket = aws_s3_bucket.s3_bucket.id + count = var.s3_create_public_bucket ? 0 : 1 + + rule { + apply_server_side_encryption_by_default { + sse_algorithm = "AES256" + } + } + + depends_on = [aws_s3_bucket.s3_bucket] +} + +resource "aws_s3_bucket_public_access_block" "s3_bucket_public_access_block" { + count = var.s3_create_public_bucket ? 0 : 1 + bucket = aws_s3_bucket.s3_bucket.id + block_public_acls = true + block_public_policy = true + ignore_public_acls = true + restrict_public_buckets = true + + depends_on = [aws_s3_bucket.s3_bucket] +} diff --git a/modules/aws/s3/outputs.tf b/modules/aws/s3/outputs.tf new file mode 100644 index 0000000..2d2d0bd --- /dev/null +++ b/modules/aws/s3/outputs.tf @@ -0,0 +1,14 @@ +output "s3_bucket_id" { + value = aws_s3_bucket.s3_bucket.id + description = "The ID of the S3 bucket." +} + +output "s3_bucket_arn" { + value = aws_s3_bucket.s3_bucket.arn + description = "The ARN of the S3 bucket." +} + +output "s3_bucket_name" { + value = aws_s3_bucket.s3_bucket.bucket + description = "The unique name of the S3 bucket." +} diff --git a/modules/aws/s3/variables.tf b/modules/aws/s3/variables.tf new file mode 100644 index 0000000..c601ae0 --- /dev/null +++ b/modules/aws/s3/variables.tf @@ -0,0 +1,17 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "s3_bucket_suffix_name" { + description = "The suffix name of s3 bucket" +} + +variable "s3_create_public_bucket" { + description = "Set to true to create a public S3 bucket, false for private." + type = bool + default = false +} From b78e9324a932645d84696256bcd8744661f47d1c Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:35:30 +0900 Subject: [PATCH 04/22] Add module for amplify --- modules/aws/amplify/main.tf | 37 ++++++++++++++++++++++++++++++++ modules/aws/amplify/outputs.tf | 9 ++++++++ modules/aws/amplify/variables.tf | 30 ++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 modules/aws/amplify/main.tf create mode 100644 modules/aws/amplify/outputs.tf create mode 100644 modules/aws/amplify/variables.tf diff --git a/modules/aws/amplify/main.tf b/modules/aws/amplify/main.tf new file mode 100644 index 0000000..f9ee21a --- /dev/null +++ b/modules/aws/amplify/main.tf @@ -0,0 +1,37 @@ +locals { + tags = { + Name = "${var.project_name}-${var.env}-${var.amplify_app_name}" + Environment = var.env + ProjectName = var.project_name + } +} + +resource "aws_amplify_app" "amplify_app" { + name = local.tags.Name + repository = var.amplify_github_repository + access_token = var.amplify_github_access_token + + tags = merge(local.tags, { + Name = "${local.tags.Name}-amplify" + }) +} + +resource "aws_amplify_branch" "amplify_branch" { + app_id = aws_amplify_app.amplify_app.id + branch_name = var.amplify_github_repository_branch_name + + tags = merge(local.tags, { + Name = "${local.tags.Name}-amplify-branch" + }) +} + +resource "aws_amplify_domain_association" "amplify_domain_association" { + app_id = aws_amplify_app.amplify_app.id + domain_name = var.amplify_domain_name + wait_for_verification = false + + sub_domain { + branch_name = aws_amplify_branch.amplify_branch.branch_name + prefix = var.amplify_github_repository_branch_name + } +} diff --git a/modules/aws/amplify/outputs.tf b/modules/aws/amplify/outputs.tf new file mode 100644 index 0000000..1851717 --- /dev/null +++ b/modules/aws/amplify/outputs.tf @@ -0,0 +1,9 @@ +output "amplify_app_id" { + description = "The ID of the AWS Amplify application." + value = aws_amplify_app.amplify_app.id +} + +output "amplify_domain_association_id" { + description = "The ID of the Amplify domain association." + value = aws_amplify_domain_association.amplify_domain_association.id +} diff --git a/modules/aws/amplify/variables.tf b/modules/aws/amplify/variables.tf new file mode 100644 index 0000000..de6f0e9 --- /dev/null +++ b/modules/aws/amplify/variables.tf @@ -0,0 +1,30 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "amplify_github_repository" { + description = "The github repo url" +} + +variable "amplify_github_access_token" { + description = "The github access token to connect github repo" +} + +variable "amplify_github_repository_branch_name" { + description = "AWS Amplify App Repo Branch Name" + default = "main" +} + +variable "amplify_app_name" { + description = "AWS Amplify App Name" +} + +variable "amplify_domain_name" { + description = "AWS Amplify Domain Name" + default = "amplifyapp.com" +} + From fe443c95f4e76e750e579ef8c8ca9bfbe69d65c7 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:35:47 +0900 Subject: [PATCH 05/22] Add module for ecr --- modules/aws/ecr/main.tf | 43 ++++++++++++++++++++++++++++++++++++ modules/aws/ecr/outputs.tf | 9 ++++++++ modules/aws/ecr/variables.tf | 11 +++++++++ 3 files changed, 63 insertions(+) create mode 100644 modules/aws/ecr/main.tf create mode 100644 modules/aws/ecr/outputs.tf create mode 100644 modules/aws/ecr/variables.tf diff --git a/modules/aws/ecr/main.tf b/modules/aws/ecr/main.tf new file mode 100644 index 0000000..355b318 --- /dev/null +++ b/modules/aws/ecr/main.tf @@ -0,0 +1,43 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + ecr_repository_name = "${var.project_name}-${var.env}-${var.ecr_container_name}" +} + +resource "aws_ecr_repository" "ecr_repository" { + name = local.ecr_repository_name + image_tag_mutability = "MUTABLE" + force_delete = true + + image_scanning_configuration { + scan_on_push = true + } + + tags = merge(local.tags, { + Name = "${local.ecr_repository_name}-ecr" + }) +} + +resource "aws_ecr_lifecycle_policy" "ecr_lifecycle_policy" { + repository = aws_ecr_repository.ecr_repository.name + + policy = jsonencode({ + rules = [ + { + rulePriority : 1, + description : "Expire untagged images older than 15 days", + selection : { + tagStatus : "untagged", + countType : "sinceImagePushed", + countUnit : "days", + countNumber : 15 + }, + action : { + type : "expire" + } + } + ] + }) +} diff --git a/modules/aws/ecr/outputs.tf b/modules/aws/ecr/outputs.tf new file mode 100644 index 0000000..1132705 --- /dev/null +++ b/modules/aws/ecr/outputs.tf @@ -0,0 +1,9 @@ +output "ecr_repository_url" { + description = "The URL of the ECR repository." + value = aws_ecr_repository.ecr_repository.repository_url +} + +output "ecr_repository_arn" { + description = "The ARN of the ECR repository" + value = aws_ecr_repository.ecr_repository.arn +} diff --git a/modules/aws/ecr/variables.tf b/modules/aws/ecr/variables.tf new file mode 100644 index 0000000..2e077b4 --- /dev/null +++ b/modules/aws/ecr/variables.tf @@ -0,0 +1,11 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "ecr_container_name" { + description = "The name of the ECS container" +} From aa381b0b535fa3346cd5cd46c95d063184c396e8 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:36:07 +0900 Subject: [PATCH 06/22] Add module for ecs/cluster --- modules/aws/ecs/cluster/main.tf | 15 +++++++++++++++ modules/aws/ecs/cluster/outputs.tf | 14 ++++++++++++++ modules/aws/ecs/cluster/variables.tf | 7 +++++++ 3 files changed, 36 insertions(+) create mode 100644 modules/aws/ecs/cluster/main.tf create mode 100644 modules/aws/ecs/cluster/outputs.tf create mode 100644 modules/aws/ecs/cluster/variables.tf diff --git a/modules/aws/ecs/cluster/main.tf b/modules/aws/ecs/cluster/main.tf new file mode 100644 index 0000000..d714fab --- /dev/null +++ b/modules/aws/ecs/cluster/main.tf @@ -0,0 +1,15 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + ecs_cluster_name = "${var.project_name}-${var.env}-cluster" +} + +resource "aws_ecs_cluster" "ecs_cluster" { + name = local.ecs_cluster_name + + tags = merge(local.tags, { + Name = local.ecs_cluster_name + }) +} diff --git a/modules/aws/ecs/cluster/outputs.tf b/modules/aws/ecs/cluster/outputs.tf new file mode 100644 index 0000000..7937a54 --- /dev/null +++ b/modules/aws/ecs/cluster/outputs.tf @@ -0,0 +1,14 @@ +output "ecs_cluster_id" { + description = "The ID of the created ECS cluster" + value = aws_ecs_cluster.ecs_cluster.id +} + +output "ecs_cluster_name" { + description = "The name of the created ECS cluster" + value = aws_ecs_cluster.ecs_cluster.name +} + +output "ecs_cluster_arn" { + description = "The ARN of the created ECS cluster" + value = aws_ecs_cluster.ecs_cluster.arn +} diff --git a/modules/aws/ecs/cluster/variables.tf b/modules/aws/ecs/cluster/variables.tf new file mode 100644 index 0000000..8d9b5c4 --- /dev/null +++ b/modules/aws/ecs/cluster/variables.tf @@ -0,0 +1,7 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} From 3199427d2ec49b54ad8ce5eb901ce7dfbde00c29 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:36:25 +0900 Subject: [PATCH 07/22] Add module for ecs/task definition --- modules/aws/ecs/td/main.tf | 98 +++++++++++++++++++++++++++++++++ modules/aws/ecs/td/outputs.tf | 14 +++++ modules/aws/ecs/td/variables.tf | 48 ++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 modules/aws/ecs/td/main.tf create mode 100644 modules/aws/ecs/td/outputs.tf create mode 100644 modules/aws/ecs/td/variables.tf diff --git a/modules/aws/ecs/td/main.tf b/modules/aws/ecs/td/main.tf new file mode 100644 index 0000000..1e4d4f8 --- /dev/null +++ b/modules/aws/ecs/td/main.tf @@ -0,0 +1,98 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + name = "${var.project_name}-${var.env}-${var.ecs_task_definition_name}" + ecs_task_execution_role_name = "${local.name}-ecsTaskExecutionRole" + ecr_permission_policy_name = "${local.name}-ecrPermissionPolicy" + ecs_task_definition_name = "${local.name}-ecsTaskDefinition" +} + +resource "aws_iam_role" "iam_role_task_execution" { + name = local.ecs_task_execution_role_name + description = "ECS Task Execution Role" + + assume_role_policy = jsonencode({ + Version = "2012-10-17", + Statement = [ + { + Action = "sts:AssumeRole", + Effect = "Allow", + Sid = "" + Principal = { + Service = "ecs-tasks.amazonaws.com", + }, + }, + ], + }) + + tags = merge(local.tags, { + Name = local.ecs_task_execution_role_name + }) +} + +resource "aws_iam_policy" "iam_policy_ecr" { + name = local.ecr_permission_policy_name + description = "ECR permissions policy" + + policy = jsonencode({ + Version = "2012-10-17", + Statement = [ + { + Action = [ + "ecr:GetAuthorizationToken", + "ecr:BatchCheckLayerAvailability", + "ecr:BatchGetImage", + "ecr:CompleteLayerUpload", + "ecr:GetDownloadUrlForLayer", + "ecr:InitiateLayerUpload", + "ecr:PutImage", + "ecr:UploadLayerPart", + ], + Effect = "Allow", + Resource = "*", + } + ], + }) + + tags = merge(local.tags, { + Name = local.ecr_permission_policy_name + }) +} + +resource "aws_iam_role_policy_attachment" "esc_task_execution_role_ecr_policy_attachment" { + policy_arn = aws_iam_policy.iam_policy_ecr.arn + role = aws_iam_role.iam_role_task_execution.name +} + +resource "aws_ecs_task_definition" "ecs_task_definition" { + family = local.ecs_task_definition_name + network_mode = "awsvpc" + requires_compatibilities = ["FARGATE"] + cpu = var.ecs_container_cpu + memory = var.ecs_container_memory + execution_role_arn = aws_iam_role.iam_role_task_execution.arn + task_role_arn = aws_iam_role.iam_role_task_execution.arn + container_definitions = jsonencode( + [{ + name = var.ecs_container_name + image = var.ecs_container_image + essential = true + command = [], + volumes = [], + mountPoints = [], + environment = var.ecs_container_environments + secret = var.ecs_container_secrets + portMappings = [{ + protocol = "tcp" + containerPort = var.ecs_container_port + hostPort = var.ecs_container_port + }] + }] + ) + + tags = merge(local.tags, { + Name = local.ecs_task_definition_name + }) +} diff --git a/modules/aws/ecs/td/outputs.tf b/modules/aws/ecs/td/outputs.tf new file mode 100644 index 0000000..f9ecbf3 --- /dev/null +++ b/modules/aws/ecs/td/outputs.tf @@ -0,0 +1,14 @@ +output "ecs_task_execution_role_arn" { + description = "The ARN of the created IAM role for ECS task execution" + value = aws_iam_role.iam_role_task_execution.arn +} + +output "ecr_permission_policy_arn" { + description = "The ARN of the IAM policy for ECR permissions" + value = aws_iam_policy.iam_policy_ecr.arn +} + +output "ecs_task_definition_arn" { + description = "The ARN of the ECS task definition" + value = aws_ecs_task_definition.ecs_task_definition.arn +} diff --git a/modules/aws/ecs/td/variables.tf b/modules/aws/ecs/td/variables.tf new file mode 100644 index 0000000..a6c67fc --- /dev/null +++ b/modules/aws/ecs/td/variables.tf @@ -0,0 +1,48 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "ecs_task_definition_name" { + description = "The name of the ECS task definition" +} + +variable "ecs_container_cpu" { + description = "The CPU units for the ECS container" +} + +variable "ecs_container_memory" { + description = "The memory for the ECS container" +} + +variable "ecs_container_name" { + description = "The name of the ECS container" +} + +variable "ecs_container_image" { + description = "The Docker image for the ECS container" +} + +variable "ecs_container_environments" { + description = "A list of environment variables for the ECS task container" + type = list(object({ + name = string + value = string + })) +} + +variable "ecs_container_secrets" { + description = "A list of secrets to pass to the ECS task container." + type = list(object({ + name = string + value = optional(string) + valueFrom = optional(string) + })) +} + +variable "ecs_container_port" { + description = "The port to expose on the ECS container" +} From 64f992951df2ae217df020d48407dd9e606610e4 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:36:38 +0900 Subject: [PATCH 08/22] Add module for ecs/service --- modules/aws/ecs/service/main.tf | 92 ++++++++++++++++++++++++++++ modules/aws/ecs/service/outputs.tf | 9 +++ modules/aws/ecs/service/variables.tf | 50 +++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 modules/aws/ecs/service/main.tf create mode 100644 modules/aws/ecs/service/outputs.tf create mode 100644 modules/aws/ecs/service/variables.tf diff --git a/modules/aws/ecs/service/main.tf b/modules/aws/ecs/service/main.tf new file mode 100644 index 0000000..9235ba5 --- /dev/null +++ b/modules/aws/ecs/service/main.tf @@ -0,0 +1,92 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + name = "${var.project_name}-${var.env}-${var.ecs_service_name}" + ecs_service_name = "${local.name}-service" + ecs_security_group_name = "${local.name}-sg-ecs" + ecs_auto_scaling_target_name = "${local.name}-ecs-auto_scaling_target" +} + +module "sg_ecs" { + source = "../../network/sg/internal" + env = var.env + project_name = var.project_name + sg_name = local.ecs_security_group_name + vpc_id = var.vpc_id + sg_allowed_ingress_port = var.ecs_container_port + sg_allowed_ingress_sg_id = var.lb_security_group_id +} + +resource "aws_ecs_service" "ecs_service" { + name = local.ecs_service_name + cluster = var.ecs_cluster_id + task_definition = var.ecs_task_definition_arn + launch_type = "FARGATE" + desired_count = 1 + deployment_minimum_healthy_percent = 0 # optional for autoscaling + deployment_maximum_percent = 200 # optional for autoscaling + + network_configuration { + subnets = var.vpc_subnet_public_ids + security_groups = [module.sg_ecs.sg_id] + assign_public_ip = true + } + + load_balancer { + target_group_arn = var.lb_target_group_arn + container_name = var.ecs_container_name + container_port = var.ecs_container_port + } + + lifecycle { + ignore_changes = [task_definition, desired_count] + } + + tags = merge(local.tags, { + Name = local.ecs_service_name + }) +} + +resource "aws_appautoscaling_target" "appautoscaling_target" { + min_capacity = 1 + max_capacity = 4 + resource_id = "service/${var.ecs_cluster_name}/${aws_ecs_service.ecs_service.name}" + service_namespace = "ecs" + scalable_dimension = "ecs:service:DesiredCount" + + tags = merge(local.tags, { + Name = local.ecs_auto_scaling_target_name + }) +} + +resource "aws_appautoscaling_policy" "appautoscaling_policy_memory" { + name = "memory-autoscaling" + policy_type = "TargetTrackingScaling" + resource_id = aws_appautoscaling_target.appautoscaling_target.resource_id + scalable_dimension = aws_appautoscaling_target.appautoscaling_target.scalable_dimension + service_namespace = aws_appautoscaling_target.appautoscaling_target.service_namespace + + target_tracking_scaling_policy_configuration { + predefined_metric_specification { + predefined_metric_type = "ECSServiceAverageMemoryUtilization" + } + target_value = 60 + } +} + +resource "aws_appautoscaling_policy" "appautoscaling_policy_cpu" { + name = "cpu-autoscaling" + policy_type = "TargetTrackingScaling" + resource_id = aws_appautoscaling_target.appautoscaling_target.resource_id + scalable_dimension = aws_appautoscaling_target.appautoscaling_target.scalable_dimension + service_namespace = aws_appautoscaling_target.appautoscaling_target.service_namespace + + target_tracking_scaling_policy_configuration { + predefined_metric_specification { + predefined_metric_type = "ECSServiceAverageCPUUtilization" + } + target_value = 60 + } +} diff --git a/modules/aws/ecs/service/outputs.tf b/modules/aws/ecs/service/outputs.tf new file mode 100644 index 0000000..122fb9d --- /dev/null +++ b/modules/aws/ecs/service/outputs.tf @@ -0,0 +1,9 @@ +output "ecs_service_arn" { + description = "The ID of the ECS service" + value = aws_ecs_service.ecs_service.id +} + +output "ecs_security_group_id" { + description = "The ID of the security group associated with the ECS service" + value = module.sg_ecs.sg_id +} diff --git a/modules/aws/ecs/service/variables.tf b/modules/aws/ecs/service/variables.tf new file mode 100644 index 0000000..cc24955 --- /dev/null +++ b/modules/aws/ecs/service/variables.tf @@ -0,0 +1,50 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "vpc_id" { + description = "The ID of the VPC" +} + +variable "vpc_subnet_public_ids" { + description = "List of public subnet IDs for ecs service" + type = list(string) +} + +variable "ecs_cluster_id" { + description = "The ECS cluster ID" +} + +variable "ecs_cluster_name" { + description = "The ECS cluster name" + type = string +} + +variable "ecs_service_name" { + description = "The name of the ECS service" +} + +variable "ecs_container_name" { + description = "The name of the ECS container" +} + +variable "ecs_container_port" { + description = "Port to allow inbound traffic to the ECS container" + type = number +} + +variable "ecs_task_definition_arn" { + description = "The ARN of the ECS task definition" +} + +variable "lb_security_group_id" { + description = "The security group ID for the load balancer" +} + +variable "lb_target_group_arn" { + description = "The ARN of the load balancer target group" +} From 60efbfe88b90ef8f7a051892f1d76c7b0019bec2 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:36:50 +0900 Subject: [PATCH 09/22] Add module for alb --- modules/aws/alb/main.tf | 94 ++++++++++++++++++++++++++++++++++++ modules/aws/alb/outputs.tf | 29 +++++++++++ modules/aws/alb/variables.tf | 34 +++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 modules/aws/alb/main.tf create mode 100644 modules/aws/alb/outputs.tf create mode 100644 modules/aws/alb/variables.tf diff --git a/modules/aws/alb/main.tf b/modules/aws/alb/main.tf new file mode 100644 index 0000000..b82a929 --- /dev/null +++ b/modules/aws/alb/main.tf @@ -0,0 +1,94 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + + name = "${var.project_name}-${var.env}-${var.lb_name}" + lb_name = local.name + lb_target_group_name = local.name + lb_http_listener_name = "${local.lb_name}-lb-listener-http" + lb_https_listener_name = "${local.lb_name}-lb-listener-https" + lb_security_group_name = "${local.name}-sg-lb" +} + +module "sg_lg" { + source = "../network/sg/external" + env = var.env + project_name = var.project_name + sg_name = local.lb_security_group_name + vpc_id = var.vpc_id +} + +resource "aws_lb" "lb" { + name = local.lb_name + internal = false + load_balancer_type = "application" + security_groups = [module.sg_lg.sg_id] + subnets = var.vpc_subnet_public_ids + ip_address_type = "ipv4" # fargate managed ec2 + enable_cross_zone_load_balancing = true + + tags = merge(local.tags, { + Name = "${local.lb_name}-lb" + }) +} + +resource "aws_lb_target_group" "lb_target_group" { + name = local.lb_target_group_name + port = var.lb_target_group_port + protocol = "HTTP" + vpc_id = var.vpc_id + target_type = "ip" + + health_check { + enabled = true + healthy_threshold = "3" + unhealthy_threshold = "2" + interval = "30" + matcher = "200,301" + timeout = "5" + path = coalesce(var.lb_target_group_healthcheck_path, "/") + port = "traffic-port" + } + + tags = merge(local.tags, { + Name = "${local.lb_target_group_name}-lb-target-group" + }) +} + +resource "aws_lb_listener" "lb_listener_http" { + load_balancer_arn = aws_lb.lb.arn + port = 80 + protocol = "HTTP" + + default_action { + type = "redirect" + redirect { + port = "443" + protocol = "HTTPS" + status_code = "HTTP_301" + } + } + + tags = merge(local.tags, { + Name = local.lb_http_listener_name + }) +} + +resource "aws_lb_listener" "lb_listener_https" { + load_balancer_arn = aws_lb.lb.id + port = 443 + protocol = "HTTPS" + ssl_policy = "ELBSecurityPolicy-2016-08" + certificate_arn = var.acm_certificate_arn + + default_action { + target_group_arn = aws_lb_target_group.lb_target_group.arn + type = "forward" + } + + tags = merge(local.tags, { + Name = local.lb_https_listener_name + }) +} diff --git a/modules/aws/alb/outputs.tf b/modules/aws/alb/outputs.tf new file mode 100644 index 0000000..9bb099a --- /dev/null +++ b/modules/aws/alb/outputs.tf @@ -0,0 +1,29 @@ +output "lb_dns_name" { + description = "The DNS name of the load balancer." + value = aws_lb.lb.dns_name +} + +output "lb_zone_id" { + description = "The Zone ID of the load balancer." + value = aws_lb.lb.zone_id +} + +output "lb_target_group_arn" { + description = "The ARN of the target group of the load balancer." + value = aws_lb_target_group.lb_target_group.arn +} + +output "lb_security_group_id" { + description = "The ID of the security group associated with the AWS LB" + value = module.sg_lg.sg_id +} + +output "lb_listener_http_arn" { + description = "The ARN of the HTTP listener on the load balancer" + value = aws_lb_listener.lb_listener_http.arn +} + +output "lb_listener_https_arn" { + description = "The ARN of the HTTPS listener on the load balancer" + value = aws_lb_listener.lb_listener_https.arn +} diff --git a/modules/aws/alb/variables.tf b/modules/aws/alb/variables.tf new file mode 100644 index 0000000..52fe25b --- /dev/null +++ b/modules/aws/alb/variables.tf @@ -0,0 +1,34 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "vpc_id" { + description = "The ID of the VPC" +} + +variable "vpc_subnet_public_ids" { + description = "List of public subnet IDs for the load balancer" + type = list(string) +} + +variable "lb_name" { + description = "The name of the load balancer" +} + + +variable "lb_target_group_port" { + description = "The port for the load balancer target group" + type = number +} + +variable "lb_target_group_healthcheck_path" { + description = "The path used for health checks in the load balancer target group" +} + +variable "acm_certificate_arn" { + description = "The ARN of the ACM certificate for HTTPS" +} From 9d821b81f07dfc772e6521a3993d7a0177938ba1 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:37:09 +0900 Subject: [PATCH 10/22] Add module for acm --- modules/aws/domain/acm/main.tf | 47 +++++++++++++++++++++++++++++ modules/aws/domain/acm/outputs.tf | 4 +++ modules/aws/domain/acm/variables.tf | 16 ++++++++++ 3 files changed, 67 insertions(+) create mode 100644 modules/aws/domain/acm/main.tf create mode 100644 modules/aws/domain/acm/outputs.tf create mode 100644 modules/aws/domain/acm/variables.tf diff --git a/modules/aws/domain/acm/main.tf b/modules/aws/domain/acm/main.tf new file mode 100644 index 0000000..ad5de39 --- /dev/null +++ b/modules/aws/domain/acm/main.tf @@ -0,0 +1,47 @@ + +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } +} + +data "aws_route53_zone" "route53_zone" { + name = var.route53_domain_name + private_zone = false +} + +resource "aws_acm_certificate" "acm_certificate" { + domain_name = var.route53_sub_domain_name + validation_method = "DNS" + + lifecycle { + create_before_destroy = true + } + + tags = merge(local.tags, { + Name = "${var.route53_sub_domain_name}-acm" + }) +} + +resource "aws_route53_record" "route53_record_cert_validation" { + for_each = { + for dvo in aws_acm_certificate.acm_certificate.domain_validation_options : dvo.domain_name => { + name = dvo.resource_record_name + record = dvo.resource_record_value + type = dvo.resource_record_type + } + } + + allow_overwrite = true + name = each.value.name + records = [each.value.record] + ttl = 60 + type = each.value.type + zone_id = data.aws_route53_zone.route53_zone.zone_id +} + +resource "aws_acm_certificate_validation" "acm_certificate_validation" { + certificate_arn = aws_acm_certificate.acm_certificate.arn + validation_record_fqdns = [for record in aws_route53_record.route53_record_cert_validation : record.fqdn] +} diff --git a/modules/aws/domain/acm/outputs.tf b/modules/aws/domain/acm/outputs.tf new file mode 100644 index 0000000..3acc02c --- /dev/null +++ b/modules/aws/domain/acm/outputs.tf @@ -0,0 +1,4 @@ +output "acm_certificate_arn" { + description = "The ARN of the AWS ACM certificate" + value = aws_acm_certificate.acm_certificate.arn +} diff --git a/modules/aws/domain/acm/variables.tf b/modules/aws/domain/acm/variables.tf new file mode 100644 index 0000000..a9c799f --- /dev/null +++ b/modules/aws/domain/acm/variables.tf @@ -0,0 +1,16 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "route53_domain_name" { + description = "The domain name for the Route 53 hosted zone to be imported" +} + +variable "route53_sub_domain_name" { + description = "The subdomain name for the Route 53 record" +} + From af8a587c86f98d28a13caa380c53546c4b1cb330 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:37:21 +0900 Subject: [PATCH 11/22] Add module for route53 --- modules/aws/domain/route53/main.tf | 17 +++++++++++++++++ modules/aws/domain/route53/outputs.tf | 14 ++++++++++++++ modules/aws/domain/route53/variables.tf | 15 +++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 modules/aws/domain/route53/main.tf create mode 100644 modules/aws/domain/route53/outputs.tf create mode 100644 modules/aws/domain/route53/variables.tf diff --git a/modules/aws/domain/route53/main.tf b/modules/aws/domain/route53/main.tf new file mode 100644 index 0000000..ce05ddf --- /dev/null +++ b/modules/aws/domain/route53/main.tf @@ -0,0 +1,17 @@ + +data "aws_route53_zone" "route53_zone" { + name = var.route53_domain_name + private_zone = false +} + +resource "aws_route53_record" "route53_record" { + name = var.route53_sub_domain_name + zone_id = data.aws_route53_zone.route53_zone.zone_id + type = "A" + + alias { + name = var.route53_alias_target_domain_name + zone_id = var.route53_alias_target_zone_id + evaluate_target_health = true + } +} diff --git a/modules/aws/domain/route53/outputs.tf b/modules/aws/domain/route53/outputs.tf new file mode 100644 index 0000000..da3ddc4 --- /dev/null +++ b/modules/aws/domain/route53/outputs.tf @@ -0,0 +1,14 @@ +output "route53_record_name" { + description = "The name of the Route 53 record" + value = aws_route53_record.route53_record.name +} + +output "route53_record_type" { + description = "The type of the Route 53 record" + value = aws_route53_record.route53_record.type +} + +output "route53_record_zone_id" { + description = "The zone ID of the Route 53 record" + value = aws_route53_record.route53_record.zone_id +} diff --git a/modules/aws/domain/route53/variables.tf b/modules/aws/domain/route53/variables.tf new file mode 100644 index 0000000..01a9868 --- /dev/null +++ b/modules/aws/domain/route53/variables.tf @@ -0,0 +1,15 @@ +variable "route53_domain_name" { + description = "The domain name for the Route 53 hosted zone to be imported" +} + +variable "route53_sub_domain_name" { + description = "The subdomain name for the Route 53 record" +} + +variable "route53_alias_target_domain_name" { + description = "The target domain name for the alias" +} + +variable "route53_alias_target_zone_id" { + description = "The target Route 53 hosted zone ID for the alias" +} From 2dff58d213321e1066a33b0a45ec54fcb849a9e3 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:37:34 +0900 Subject: [PATCH 12/22] Add module for resource group --- modules/aws/rg/main.tf | 31 +++++++++++++++++++++++++++++++ modules/aws/rg/outputs.tf | 4 ++++ modules/aws/rg/variables.tf | 7 +++++++ 3 files changed, 42 insertions(+) create mode 100644 modules/aws/rg/main.tf create mode 100644 modules/aws/rg/outputs.tf create mode 100644 modules/aws/rg/variables.tf diff --git a/modules/aws/rg/main.tf b/modules/aws/rg/main.tf new file mode 100644 index 0000000..d00d6b6 --- /dev/null +++ b/modules/aws/rg/main.tf @@ -0,0 +1,31 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + rg_name = "${var.project_name}-${var.env}-rg" +} + +resource "aws_resourcegroups_group" "resourcegroups_group" { + name = local.rg_name + + resource_query { + query = jsonencode({ + ResourceTypeFilters = ["AWS::AllSupported"], + TagFilters = [ + { + Key = "Environment", + Values = [var.env] + }, + { + Key = "ProjectName", + Values = [var.project_name] + } + ] + }) + } + + tags = merge(local.tags, { + Name = local.rg_name + }) +} diff --git a/modules/aws/rg/outputs.tf b/modules/aws/rg/outputs.tf new file mode 100644 index 0000000..be1ec1c --- /dev/null +++ b/modules/aws/rg/outputs.tf @@ -0,0 +1,4 @@ +output "resource_group_id" { + description = "The ID of the AWS Resource Group." + value = aws_resourcegroups_group.resourcegroups_group.id +} diff --git a/modules/aws/rg/variables.tf b/modules/aws/rg/variables.tf new file mode 100644 index 0000000..8d9b5c4 --- /dev/null +++ b/modules/aws/rg/variables.tf @@ -0,0 +1,7 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} From f72a6c043af53400d836b1a947732791e2c07398 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:38:43 +0900 Subject: [PATCH 13/22] Add module for asm --- modules/aws/asm/main.tf | 19 +++++++++++++++++++ modules/aws/asm/outputs.tf | 15 +++++++++++++++ modules/aws/asm/variables.tf | 22 ++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 modules/aws/asm/main.tf create mode 100644 modules/aws/asm/outputs.tf create mode 100644 modules/aws/asm/variables.tf diff --git a/modules/aws/asm/main.tf b/modules/aws/asm/main.tf new file mode 100644 index 0000000..251ebb6 --- /dev/null +++ b/modules/aws/asm/main.tf @@ -0,0 +1,19 @@ +locals { + tags = { + Name = "${var.project_name}-${var.env}-${var.asm_secret_name}" + Environment = var.env + ProjectName = var.project_name + } +} + +resource "aws_secretsmanager_secret" "secretsmanager_secret" { + name = local.tags.Name + recovery_window_in_days = 0 + + tags = local.tags +} + +resource "aws_secretsmanager_secret_version" "secretsmanager_secret_version" { + secret_id = aws_secretsmanager_secret.secretsmanager_secret.id + secret_string = jsonencode(var.asm_secret_data) +} diff --git a/modules/aws/asm/outputs.tf b/modules/aws/asm/outputs.tf new file mode 100644 index 0000000..9f07c77 --- /dev/null +++ b/modules/aws/asm/outputs.tf @@ -0,0 +1,15 @@ + +output "asm_secret_arn" { + description = "The ARN of the AWS Secrets Manager secret" + value = aws_secretsmanager_secret.secretsmanager_secret.arn +} + +output "asm_secret_name" { + description = "The name of the AWS Secrets Manager secret" + value = aws_secretsmanager_secret.secretsmanager_secret.name +} + +output "asm_secret_version_id" { + description = "The ID of the AWS Secrets Manager Secret Version" + value = aws_secretsmanager_secret_version.secretsmanager_secret_version.id +} diff --git a/modules/aws/asm/variables.tf b/modules/aws/asm/variables.tf new file mode 100644 index 0000000..e57c69e --- /dev/null +++ b/modules/aws/asm/variables.tf @@ -0,0 +1,22 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "asm_secret_name" { + description = "The name of the AWS Secrets Manager secret" +} + +variable "asm_secret_data" { + description = "A map of secret data to store in AWS Secrets Manager" + type = map(string) + default = { + username = "default_username" + password = "default_password" + } + sensitive = true +} + From 9fcbf3d514128c8db752f084ff762b6b7e5afc84 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:38:52 +0900 Subject: [PATCH 14/22] Add module for rds --- modules/aws/rds/main.tf | 52 +++++++++++++++++++++++++++++++ modules/aws/rds/outputs.tf | 9 ++++++ modules/aws/rds/variables.tf | 60 ++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 modules/aws/rds/main.tf create mode 100644 modules/aws/rds/outputs.tf create mode 100644 modules/aws/rds/variables.tf diff --git a/modules/aws/rds/main.tf b/modules/aws/rds/main.tf new file mode 100644 index 0000000..09e264d --- /dev/null +++ b/modules/aws/rds/main.tf @@ -0,0 +1,52 @@ +locals { + tags = { + Environment = var.env + ProjectName = var.project_name + } + name = "${var.project_name}-${var.env}" + rds_subnet_group_name = "${local.name}-rds-subnet-group" + rds_security_group_name = "${local.name}-sg-rds" + rds_primary_instance_name = "${local.name}-rds-primary" + rds_replica_instance_name = "${local.name}-rds-replica" +} + +module "sg_rds" { + source = "../network/sg/internal" + env = var.env + project_name = var.project_name + sg_name = local.rds_security_group_name + vpc_id = var.vpc_id + sg_allowed_ingress_port = var.rds_port + sg_allowed_ingress_sg_id = var.ecs_security_group_id // Allow only ecs service +} + +resource "aws_db_subnet_group" "db_subnet_group" { + name = local.rds_subnet_group_name + subnet_ids = var.vpc_subnet_private_ids + + tags = merge(local.tags, { + Name = local.rds_subnet_group_name + }) +} + +resource "aws_db_instance" "db_instance_primary" { + identifier = local.rds_primary_instance_name + allocated_storage = var.rds_allocated_storage + engine = var.rds_engine + engine_version = var.rds_engine_version + instance_class = var.rds_instance_class + db_name = var.rds_dbname + username = var.rds_username + password = var.rds_password + skip_final_snapshot = true + storage_encrypted = true + db_subnet_group_name = aws_db_subnet_group.db_subnet_group.name + vpc_security_group_ids = [module.sg_rds.sg_id] + multi_az = var.rds_allow_multi_az + backup_retention_period = 5 + + tags = merge(local.tags, { + Name = local.rds_primary_instance_name + }) +} + diff --git a/modules/aws/rds/outputs.tf b/modules/aws/rds/outputs.tf new file mode 100644 index 0000000..55b7902 --- /dev/null +++ b/modules/aws/rds/outputs.tf @@ -0,0 +1,9 @@ +output "rds_instance_primary_endpoint" { + description = "The endpoint URL of the primary RDS instance." + value = aws_db_instance.db_instance_primary.endpoint +} + +output "rds_security_group_id" { + description = "The ID of the security group associated with the RDS instance." + value = module.sg_rds.sg_id +} diff --git a/modules/aws/rds/variables.tf b/modules/aws/rds/variables.tf new file mode 100644 index 0000000..ea87ceb --- /dev/null +++ b/modules/aws/rds/variables.tf @@ -0,0 +1,60 @@ +variable "env" { + description = "The environment name" +} + +variable "project_name" { + description = "The project name" +} + +variable "vpc_id" { + description = "The ID of the VPC" +} + +variable "vpc_subnet_private_ids" { + description = "List of private subnet IDs for RDS instance" + type = list(string) +} + +variable "ecs_security_group_id" { + description = "The security group ID for the ECS service." +} + +variable "rds_engine" { + description = "The RDS database engine (e.g., mysql, postgres, etc.)." +} + +variable "rds_engine_version" { + description = "The version of the RDS database engine." +} + +variable "rds_instance_class" { + description = "The instance class for the RDS instance (e.g., db.t2.micro)." +} + +variable "rds_allocated_storage" { + description = "The amount of allocated storage for the RDS instance." + type = number +} + +variable "rds_port" { + description = "The port number to allow for RDS security group ingress." +} + +variable "rds_dbname" { + description = "The name of the RDS database." +} + +variable "rds_username" { + description = "The username for accessing the RDS database." +} + +variable "rds_password" { + description = "The password for accessing the RDS database." + sensitive = true +} + +variable "rds_allow_multi_az" { + description = "Whether to allow Multi-AZ deployment for the RDS instance" + type = bool + default = false +} \ No newline at end of file From cb05b89a3316ebaf3ec51e11607766fdc914a95c Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:37:48 +0900 Subject: [PATCH 15/22] Add module for ecs-app-stack --- modules/aws/ecs-app-stack/main.tf | 70 ++++++++++++++++++++++++++ modules/aws/ecs-app-stack/outputs.tf | 7 +++ modules/aws/ecs-app-stack/variables.tf | 20 ++++++++ 3 files changed, 97 insertions(+) create mode 100644 modules/aws/ecs-app-stack/main.tf create mode 100644 modules/aws/ecs-app-stack/outputs.tf create mode 100644 modules/aws/ecs-app-stack/variables.tf diff --git a/modules/aws/ecs-app-stack/main.tf b/modules/aws/ecs-app-stack/main.tf new file mode 100644 index 0000000..17db1f3 --- /dev/null +++ b/modules/aws/ecs-app-stack/main.tf @@ -0,0 +1,70 @@ +### Create ecr +module "ecs_ecr" { + source = "../ecr" + env = var.env + project_name = var.project_name + ecr_container_name = var.ecs_container_name +} + +### Create acm ssl/tls certificate for load balancer +module "ecs_acm" { + source = "../domain/acm" + env = var.env + project_name = var.project_name + route53_domain_name = var.apex_domain_name + route53_sub_domain_name = var.ecs_sub_domain_name +} + +### Create load balancer for ecs service +module "ecs_lb" { + source = "../alb" + env = var.env + project_name = var.project_name + vpc_id = var.vpc_id + vpc_subnet_public_ids = var.subnet_public_ids + lb_name = var.ecs_service_name + lb_target_group_port = var.ecs_container_port + lb_target_group_healthcheck_path = var.ecs_container_health_url + acm_certificate_arn = module.ecs_acm.acm_certificate_arn +} + +### Create task definition for ecs service +module "ecs_td" { + source = "../ecs/td" + env = var.env + project_name = var.project_name + ecs_task_definition_name = var.ecs_service_name + ecs_container_cpu = var.ecs_container_cpu + ecs_container_memory = var.ecs_container_memory + ecs_container_name = var.ecs_container_name + ecs_container_image = "${module.ecs_ecr.ecr_repository_url}:latest" + ecs_container_port = var.ecs_container_port + ecs_container_environments = var.ecs_container_environments + ecs_container_secrets = var.ecs_container_secrets +} + +### Create ecs service +module "ecs_service" { + source = "../ecs/service" + env = var.env + project_name = var.project_name + vpc_id = var.vpc_id + vpc_subnet_public_ids = var.subnet_public_ids + ecs_service_name = var.ecs_service_name + ecs_container_name = var.ecs_container_name + ecs_container_port = var.ecs_container_port + ecs_cluster_id = var.ecs_cluster_id + ecs_cluster_name = var.ecs_cluster_name + lb_security_group_id = module.ecs_lb.lb_security_group_id + lb_target_group_arn = module.ecs_lb.lb_target_group_arn + ecs_task_definition_arn = module.ecs_td.ecs_task_definition_arn +} + +### Create route53 for the load balancer +module "ecs_route53" { + source = "../domain/route53" + route53_domain_name = var.apex_domain_name + route53_sub_domain_name = var.ecs_sub_domain_name + route53_alias_target_domain_name = module.ecs_lb.lb_dns_name + route53_alias_target_zone_id = module.ecs_lb.lb_zone_id +} diff --git a/modules/aws/ecs-app-stack/outputs.tf b/modules/aws/ecs-app-stack/outputs.tf new file mode 100644 index 0000000..4362abe --- /dev/null +++ b/modules/aws/ecs-app-stack/outputs.tf @@ -0,0 +1,7 @@ +output "route53_record_name" { + value = module.ecs_route53.route53_record_name +} + +output "ecs_security_group_id" { + value = module.ecs_service.ecs_security_group_id +} diff --git a/modules/aws/ecs-app-stack/variables.tf b/modules/aws/ecs-app-stack/variables.tf new file mode 100644 index 0000000..a79d9d4 --- /dev/null +++ b/modules/aws/ecs-app-stack/variables.tf @@ -0,0 +1,20 @@ +variable "env" {} +variable "project_name" {} + +variable "vpc_id" {} +variable "subnet_public_ids" {} +variable "subnet_private_ids" {} + +variable "apex_domain_name" {} +variable "ecs_cluster_name" {} +variable "ecs_cluster_id" {} + +variable "ecs_service_name" {} +variable "ecs_sub_domain_name" {} +variable "ecs_container_cpu" {} +variable "ecs_container_memory" {} +variable "ecs_container_name" {} +variable "ecs_container_port" {} +variable "ecs_container_health_url" {} +variable "ecs_container_environments" {} +variable "ecs_container_secrets" {} From 21e82e94eb35dccd12b40fb7f25628c0ff36e209 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:41:33 +0900 Subject: [PATCH 16/22] Add CI/CD workflow to generate Release Pull Request to production --- .github/pr-template/main | 5 ++++ .github/workflows/create-pr-to-production.yml | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 .github/pr-template/main create mode 100644 .github/workflows/create-pr-to-production.yml diff --git a/.github/pr-template/main b/.github/pr-template/main new file mode 100644 index 0000000..e843d25 --- /dev/null +++ b/.github/pr-template/main @@ -0,0 +1,5 @@ +Release to Production {{ .Year }}-{{ .Month }}-{{ .Date }} {{ .Hour }}:{{ .Minute }} +# Pull Requests +{{ range $i, $pull := .Pulls }} +* {{ $pull.Title }} (#{{ $pull.Number }}) @{{ $pull.User.Login }} +{{- end }} \ No newline at end of file diff --git a/.github/workflows/create-pr-to-production.yml b/.github/workflows/create-pr-to-production.yml new file mode 100644 index 0000000..d09340c --- /dev/null +++ b/.github/workflows/create-pr-to-production.yml @@ -0,0 +1,26 @@ +name: Generate Release Pull Request to production + +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + gh-release-pr-generator: + name: gh-release-pr-generator + runs-on: ubuntu-20.04 + env: + TZ: Asia/Tokyo + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v4 + with: + go-version: ^1.17.1 + - name: Install gh-release-pr-generator + run: go install github.com/nekonenene/gh-release-pr-generator@latest + - name: Run gh-release-pr-generator + run: gh-release-pr-generator --token ${{ secrets.GITHUB_TOKEN }} --repo-owner ${{ github.repository_owner }} --repo-name ${{ github.event.repository.name }} --dev-branch main --prod-branch production -template-path .github/pr-template/main From 5b7ba055a592569646c39566555f876d976e7382 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:46:26 +0900 Subject: [PATCH 17/22] Add project specific common setup --- projects/my-project/common/main.tf | 100 ++++++++++++++++++++++++ projects/my-project/common/outputs.tf | 7 ++ projects/my-project/common/variables.tf | 29 +++++++ 3 files changed, 136 insertions(+) create mode 100644 projects/my-project/common/main.tf create mode 100644 projects/my-project/common/outputs.tf create mode 100644 projects/my-project/common/variables.tf diff --git a/projects/my-project/common/main.tf b/projects/my-project/common/main.tf new file mode 100644 index 0000000..eaeb4cb --- /dev/null +++ b/projects/my-project/common/main.tf @@ -0,0 +1,100 @@ +## Create a vpc +module "vpc" { + source = "../../../modules/aws/network/vpc" + env = var.env + project_name = var.project_name + subnets_public = var.network_subnets_public + subnets_private = var.network_subnets_private + availability_zones = var.network_availability_zones +} + +## Create random password for db +resource "random_password" "password" { + length = 16 + special = true + override_special = "!#$%^&*()_=?~" +} + +## Create cluster for ecs services +module "cluster" { + source = "../../../modules/aws/ecs/cluster" + env = var.env + project_name = var.project_name +} + +## Create ecs for backend service +module "ecs-app-stack-backend" { + source = "../../../modules/aws/ecs-app-stack" + env = var.env + project_name = var.project_name + vpc_id = module.vpc.vpc_id + subnet_public_ids = module.vpc.subnet_public_ids + subnet_private_ids = module.vpc.subnet_private_ids + apex_domain_name = var.apex_domain_name + ecs_cluster_id = module.cluster.ecs_cluster_id + ecs_cluster_name = module.cluster.ecs_cluster_name + ecs_service_name = var.ecs_backend_service_name + ecs_sub_domain_name = var.ecs_backend_sub_domain_name + ecs_container_cpu = var.ecs_backend_container_cpu + ecs_container_memory = var.ecs_backend_container_memory + ecs_container_name = var.ecs_backend_container_name + ecs_container_port = var.ecs_backend_container_port + ecs_container_health_url = var.ecs_backend_container_health_url + ecs_container_environments = [ + { + name = "API_SERVER_PORT" + value = var.ecs_backend_container_port + }, + { + name = "API_BASE_PATH" + value = var.ecs_backend_container_base_url + }, + ] + ecs_container_secrets = [ + { + name = "DATABASE_URL" + value = "${var.rds_provider}://${var.rds_username}:${random_password.password.result}@${var.rds_engine}:${var.rds_port}/${var.rds_dbname}" + }, + ] +} + +## Create RDS primary and replica +module "rds" { + source = "../../../modules/aws/rds" + env = var.env + project_name = var.project_name + vpc_id = module.vpc.vpc_id + vpc_subnet_private_ids = module.vpc.subnet_private_ids + ecs_security_group_id = module.ecs-app-stack-backend.ecs_security_group_id + rds_engine = var.rds_engine + rds_engine_version = var.rds_engine_version + rds_instance_class = var.rds_instance_class + rds_allocated_storage = var.rds_allocated_storage + rds_port = var.rds_port + rds_dbname = var.rds_dbname + rds_username = var.rds_username + rds_password = random_password.password.result + rds_allow_multi_az = var.rds_allow_multi_az +} + +## Create Secret manager for storing db credentials +module "asm_rds" { + source = "../../../modules/aws/asm" + env = var.env + project_name = var.project_name + asm_secret_name = "db-credentials" + asm_secret_data = { + dbname = var.rds_dbname + username = var.rds_username + password = random_password.password.result + engine = var.rds_engine + primary_endpoint = module.rds.rds_instance_primary_endpoint + } +} + +## Create resource group +module "rg" { + source = "../../../modules/aws/rg" + env = var.env + project_name = var.project_name +} diff --git a/projects/my-project/common/outputs.tf b/projects/my-project/common/outputs.tf new file mode 100644 index 0000000..f7b79e3 --- /dev/null +++ b/projects/my-project/common/outputs.tf @@ -0,0 +1,7 @@ +output "vpc_id" { + value = module.vpc.vpc_id +} + +output "route53_record_name_backend" { + value = module.ecs-app-stack-backend.route53_record_name +} diff --git a/projects/my-project/common/variables.tf b/projects/my-project/common/variables.tf new file mode 100644 index 0000000..ecae053 --- /dev/null +++ b/projects/my-project/common/variables.tf @@ -0,0 +1,29 @@ +variable "env" {} +variable "project_name" {} + +variable "network_subnets_public" {} +variable "network_subnets_private" {} +variable "network_availability_zones" {} + +variable "apex_domain_name" {} + +# backend +variable "ecs_backend_service_name" {} +variable "ecs_backend_sub_domain_name" {} +variable "ecs_backend_container_cpu" {} +variable "ecs_backend_container_memory" {} +variable "ecs_backend_container_name" {} +variable "ecs_backend_container_port" {} +variable "ecs_backend_container_base_url" {} +variable "ecs_backend_container_health_url" {} + +# rds +variable "rds_provider" {} +variable "rds_engine" {} +variable "rds_engine_version" {} +variable "rds_instance_class" {} +variable "rds_allocated_storage" {} +variable "rds_port" {} +variable "rds_dbname" {} +variable "rds_username" {} +variable "rds_allow_multi_az" {} From f2c575cea99b8bac6a611539fb952825e7014571 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:47:07 +0900 Subject: [PATCH 18/22] Add project staging environment setup --- projects/my-project/staging/backend.conf | 3 ++ projects/my-project/staging/main.tf | 36 ++++++++++++++++++++ projects/my-project/staging/outputs.tf | 7 ++++ projects/my-project/staging/terraform.tfvars | 28 +++++++++++++++ projects/my-project/staging/variables.tf | 30 ++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 projects/my-project/staging/backend.conf create mode 100644 projects/my-project/staging/main.tf create mode 100644 projects/my-project/staging/outputs.tf create mode 100644 projects/my-project/staging/terraform.tfvars create mode 100644 projects/my-project/staging/variables.tf diff --git a/projects/my-project/staging/backend.conf b/projects/my-project/staging/backend.conf new file mode 100644 index 0000000..a37a31e --- /dev/null +++ b/projects/my-project/staging/backend.conf @@ -0,0 +1,3 @@ +region = "ap-northeast-1" +bucket = "my-project-stg-terraform-state" +key = "terraform.tfstate" diff --git a/projects/my-project/staging/main.tf b/projects/my-project/staging/main.tf new file mode 100644 index 0000000..5c3eb77 --- /dev/null +++ b/projects/my-project/staging/main.tf @@ -0,0 +1,36 @@ +terraform { + backend "s3" { + encrypt = true + } +} + +provider "aws" { + region = var.region +} + +module "staging" { + source = "../common" + env = var.env + project_name = var.project_name + network_subnets_public = var.network_subnets_public + network_subnets_private = var.network_subnets_private + network_availability_zones = var.network_availability_zones + apex_domain_name = var.apex_domain_name + ecs_backend_service_name = var.ecs_backend_service_name + ecs_backend_sub_domain_name = var.ecs_backend_sub_domain_name + ecs_backend_container_cpu = var.ecs_backend_container_cpu + ecs_backend_container_memory = var.ecs_backend_container_memory + ecs_backend_container_name = var.ecs_backend_container_name + ecs_backend_container_port = var.ecs_backend_container_port + ecs_backend_container_base_url = var.ecs_backend_container_base_url + ecs_backend_container_health_url = var.ecs_backend_container_health_url + rds_provider = var.rds_provider + rds_engine = var.rds_engine + rds_engine_version = var.rds_engine_version + rds_instance_class = var.rds_instance_class + rds_allocated_storage = var.rds_allocated_storage + rds_port = var.rds_port + rds_dbname = var.rds_dbname + rds_username = var.rds_username + rds_allow_multi_az = var.rds_allow_multi_az +} diff --git a/projects/my-project/staging/outputs.tf b/projects/my-project/staging/outputs.tf new file mode 100644 index 0000000..feaad87 --- /dev/null +++ b/projects/my-project/staging/outputs.tf @@ -0,0 +1,7 @@ +output "vpc_id" { + value = module.staging.vpc_id +} + +output "route53_record_name_backend" { + value = module.staging.route53_record_name_backend +} diff --git a/projects/my-project/staging/terraform.tfvars b/projects/my-project/staging/terraform.tfvars new file mode 100644 index 0000000..f416a74 --- /dev/null +++ b/projects/my-project/staging/terraform.tfvars @@ -0,0 +1,28 @@ +region = "ap-northeast-1" +env = "stg" +project_name = "my-project" + +network_subnets_public = ["10.0.1.0/24", "10.0.2.0/24"] +network_subnets_private = ["10.0.3.0/24", "10.0.4.0/24"] +network_availability_zones = ["ap-northeast-1a", "ap-northeast-1c"] + +apex_domain_name = "vote.app" + +ecs_backend_service_name = "backend" +ecs_backend_sub_domain_name = "backend.staging.vote.app" +ecs_backend_container_cpu = 256 +ecs_backend_container_memory = 512 +ecs_backend_container_name = "backend" +ecs_backend_container_port = 3000 +ecs_backend_container_base_url = "/api" +ecs_backend_container_health_url = "/api/health" + +rds_provider = "postgresql" +rds_engine = "postgres" +rds_engine_version = "15.3" +rds_instance_class = "db.t3.micro" +rds_allocated_storage = 20 +rds_port = 5432 +rds_dbname = "postgresdb" +rds_username = "stg_dbadmin" +rds_allow_multi_az = false diff --git a/projects/my-project/staging/variables.tf b/projects/my-project/staging/variables.tf new file mode 100644 index 0000000..e9bfad1 --- /dev/null +++ b/projects/my-project/staging/variables.tf @@ -0,0 +1,30 @@ +variable "env" {} +variable "project_name" {} +variable "region" {} + +variable "network_subnets_public" {} +variable "network_subnets_private" {} +variable "network_availability_zones" {} + +variable "apex_domain_name" {} + +# backend +variable "ecs_backend_service_name" {} +variable "ecs_backend_sub_domain_name" {} +variable "ecs_backend_container_cpu" {} +variable "ecs_backend_container_memory" {} +variable "ecs_backend_container_name" {} +variable "ecs_backend_container_port" {} +variable "ecs_backend_container_base_url" {} +variable "ecs_backend_container_health_url" {} + +# rds +variable "rds_provider" {} +variable "rds_engine" {} +variable "rds_engine_version" {} +variable "rds_instance_class" {} +variable "rds_allocated_storage" {} +variable "rds_port" {} +variable "rds_dbname" {} +variable "rds_username" {} +variable "rds_allow_multi_az" {} From 88564819a542f49836f169536fbae643c096cf7c Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:47:21 +0900 Subject: [PATCH 19/22] Add project production environment setup --- projects/my-project/production/backend.conf | 3 ++ projects/my-project/production/main.tf | 36 +++++++++++++++++++ projects/my-project/production/outputs.tf | 7 ++++ .../my-project/production/terraform.tfvars | 28 +++++++++++++++ projects/my-project/production/variables.tf | 30 ++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 projects/my-project/production/backend.conf create mode 100644 projects/my-project/production/main.tf create mode 100644 projects/my-project/production/outputs.tf create mode 100644 projects/my-project/production/terraform.tfvars create mode 100644 projects/my-project/production/variables.tf diff --git a/projects/my-project/production/backend.conf b/projects/my-project/production/backend.conf new file mode 100644 index 0000000..4785ac5 --- /dev/null +++ b/projects/my-project/production/backend.conf @@ -0,0 +1,3 @@ +region = "ap-northeast-1" +bucket = "my-project-prod-terraform-state" +key = "terraform.tfstate" diff --git a/projects/my-project/production/main.tf b/projects/my-project/production/main.tf new file mode 100644 index 0000000..5566e3b --- /dev/null +++ b/projects/my-project/production/main.tf @@ -0,0 +1,36 @@ +terraform { + backend "s3" { + encrypt = true + } +} + +provider "aws" { + region = var.region +} + +module "production" { + source = "../common" + env = var.env + project_name = var.project_name + network_subnets_public = var.network_subnets_public + network_subnets_private = var.network_subnets_private + network_availability_zones = var.network_availability_zones + apex_domain_name = var.apex_domain_name + ecs_backend_service_name = var.ecs_backend_service_name + ecs_backend_sub_domain_name = var.ecs_backend_sub_domain_name + ecs_backend_container_cpu = var.ecs_backend_container_cpu + ecs_backend_container_memory = var.ecs_backend_container_memory + ecs_backend_container_name = var.ecs_backend_container_name + ecs_backend_container_port = var.ecs_backend_container_port + ecs_backend_container_base_url = var.ecs_backend_container_base_url + ecs_backend_container_health_url = var.ecs_backend_container_health_url + rds_provider = var.rds_provider + rds_engine = var.rds_engine + rds_engine_version = var.rds_engine_version + rds_instance_class = var.rds_instance_class + rds_allocated_storage = var.rds_allocated_storage + rds_port = var.rds_port + rds_dbname = var.rds_dbname + rds_username = var.rds_username + rds_allow_multi_az = var.rds_allow_multi_az +} diff --git a/projects/my-project/production/outputs.tf b/projects/my-project/production/outputs.tf new file mode 100644 index 0000000..8fcf5aa --- /dev/null +++ b/projects/my-project/production/outputs.tf @@ -0,0 +1,7 @@ +output "vpc_id" { + value = module.production.vpc_id +} + +output "route53_record_name_backend" { + value = module.production.route53_record_name_backend +} diff --git a/projects/my-project/production/terraform.tfvars b/projects/my-project/production/terraform.tfvars new file mode 100644 index 0000000..18e982f --- /dev/null +++ b/projects/my-project/production/terraform.tfvars @@ -0,0 +1,28 @@ +region = "ap-northeast-1" +env = "prod" +project_name = "my-project" + +network_subnets_public = ["10.0.1.0/24", "10.0.2.0/24"] +network_subnets_private = ["10.0.3.0/24", "10.0.4.0/24"] +network_availability_zones = ["ap-northeast-1a", "ap-northeast-1c"] + +apex_domain_name = "vote.app" + +ecs_backend_service_name = "backend" +ecs_backend_sub_domain_name = "backend.production.vote.app" +ecs_backend_container_cpu = 256 +ecs_backend_container_memory = 512 +ecs_backend_container_name = "backend" +ecs_backend_container_port = 3000 +ecs_backend_container_base_url = "/api" +ecs_backend_container_health_url = "/api/health" + +rds_provider = "postgresql" +rds_engine = "postgres" +rds_engine_version = "15.3" +rds_instance_class = "db.t3.micro" +rds_allocated_storage = 20 +rds_port = 5432 +rds_dbname = "postgresdb" +rds_username = "prod_dbadmin" +rds_allow_multi_az = false diff --git a/projects/my-project/production/variables.tf b/projects/my-project/production/variables.tf new file mode 100644 index 0000000..e9bfad1 --- /dev/null +++ b/projects/my-project/production/variables.tf @@ -0,0 +1,30 @@ +variable "env" {} +variable "project_name" {} +variable "region" {} + +variable "network_subnets_public" {} +variable "network_subnets_private" {} +variable "network_availability_zones" {} + +variable "apex_domain_name" {} + +# backend +variable "ecs_backend_service_name" {} +variable "ecs_backend_sub_domain_name" {} +variable "ecs_backend_container_cpu" {} +variable "ecs_backend_container_memory" {} +variable "ecs_backend_container_name" {} +variable "ecs_backend_container_port" {} +variable "ecs_backend_container_base_url" {} +variable "ecs_backend_container_health_url" {} + +# rds +variable "rds_provider" {} +variable "rds_engine" {} +variable "rds_engine_version" {} +variable "rds_instance_class" {} +variable "rds_allocated_storage" {} +variable "rds_port" {} +variable "rds_dbname" {} +variable "rds_username" {} +variable "rds_allow_multi_az" {} From b48f242d40fc8e94f331ac920e9ac883ff72117d Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:48:46 +0900 Subject: [PATCH 20/22] Add CI/CD workflow for applying terraform operations --- .github/workflows/terraform_production.yml | 84 ++++++++++++++++++++++ .github/workflows/terraform_staging.yml | 80 +++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 .github/workflows/terraform_production.yml create mode 100644 .github/workflows/terraform_staging.yml diff --git a/.github/workflows/terraform_production.yml b/.github/workflows/terraform_production.yml new file mode 100644 index 0000000..aa24fb8 --- /dev/null +++ b/.github/workflows/terraform_production.yml @@ -0,0 +1,84 @@ +name: Terraform Apply For Production + +on: + push: + branches: + - production + pull_request: + branches: + - production + - main + +permissions: + contents: write + pull-requests: write + +jobs: + terraform: + runs-on: ubuntu-latest + if: > + !(github.event_name == 'pull_request' + && github.base_ref != 'production') + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + INFRACOST_API_KEY: ${{ secrets.INFRACOST_API_KEY }} + defaults: + run: + working-directory: projects/my-project/production + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v1 + + - name: Setup Infracost + uses: infracost/actions/setup@v2 + with: + api-key: ${{ env.INFRACOST_API_KEY }} + + - name: Extract AWS Region from backend.conf + id: extract-region + run: | + region=$(grep -oP 'region\s*=\s*"\K[^"]+' backend.conf) + echo "AWS_REGION=$region" >> $GITHUB_ENV + + - name: Configure AWS CLI + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_REGION }} + + - name: Terraform Init + run: terraform init -backend-config="backend.conf" + + - name: Terraform Validate + run: terraform validate -no-color + + - name: Terraform Plan + run: terraform plan -out tfplan.binary -no-color + + - name: Terraform show + run: terraform show -json tfplan.binary > plan.json -no-color + + - name: Generate Infracost + run: | + infracost breakdown --path plan.json \ + --format json \ + --out-file /tmp/infracost.json + + - name: Post Infracost comment + if: github.event_name == 'pull_request' + run: | + infracost comment github --path /tmp/infracost.json \ + --repo $GITHUB_REPOSITORY \ + --github-token ${{github.token}} \ + --pull-request ${{github.event.pull_request.number}} \ + --behavior update + + - name: Terraform Apply on Push to production + if: github.event_name == 'push' + run: terraform apply -auto-approve -no-color diff --git a/.github/workflows/terraform_staging.yml b/.github/workflows/terraform_staging.yml new file mode 100644 index 0000000..f2dd2ff --- /dev/null +++ b/.github/workflows/terraform_staging.yml @@ -0,0 +1,80 @@ +name: Terraform Apply For staging + +on: + push: + branches: + - main + pull_request: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + terraform: + runs-on: ubuntu-latest + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + INFRACOST_API_KEY: ${{ secrets.INFRACOST_API_KEY }} + defaults: + run: + working-directory: projects/my-project/staging + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v1 + + - name: Setup Infracost + uses: infracost/actions/setup@v2 + with: + api-key: ${{ env.INFRACOST_API_KEY }} + + - name: Extract AWS Region from backend.conf + id: extract-region + run: | + region=$(grep -oP 'region\s*=\s*"\K[^"]+' backend.conf) + echo "AWS_REGION=$region" >> $GITHUB_ENV + + - name: Configure AWS CLI + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_REGION }} + + - name: Terraform Init + run: terraform init -backend-config="backend.conf" + + - name: Terraform Validate + run: terraform validate -no-color + + - name: Terraform Plan + run: terraform plan -out tfplan.binary -no-color + + - name: Terraform show + run: terraform show -json tfplan.binary > plan.json -no-color + + - name: Generate Infracost + run: | + infracost breakdown --path plan.json \ + --format json \ + --out-file /tmp/infracost.json + + - name: Post Infracost comment + if: github.event_name == 'pull_request' + run: | + infracost comment github --path /tmp/infracost.json \ + --repo $GITHUB_REPOSITORY \ + --github-token ${{github.token}} \ + --pull-request ${{github.event.pull_request.number}} \ + --behavior update + + - name: Terraform Apply on Push to main + if: github.event_name == 'push' + run: terraform apply -auto-approve -no-color From 57d9ec5e9b665430359cc5e122c07d783d751725 Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:50:42 +0900 Subject: [PATCH 21/22] Add architecture design --- design.png | Bin 0 -> 219974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 design.png diff --git a/design.png b/design.png new file mode 100644 index 0000000000000000000000000000000000000000..fa72b53c0d390d73eba36f1c65cc92d49ab35dc3 GIT binary patch literal 219974 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 IdDGkf14P;oqyPW_ literal 0 HcmV?d00001 From 7daf30ef4fc0dbace95591a5658eb258c50cd8fa Mon Sep 17 00:00:00 2001 From: Nitin Garg Date: Fri, 20 Oct 2023 22:50:53 +0900 Subject: [PATCH 22/22] Add readme documentation --- .gitignore | 22 ++++++++++++++++ README.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c27517 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Local .terraform directories +**/.terraform/ + +# .tfstate files +*.tfstate +*.tfstate.* + +# .tfplan files +*.tfplan + +# Crash log files +crash.log + +# .tfvars files that are meant to be customized +*.auto.tfvars +*.auto.tfvars.json + +# Local .git directories +**/.git/ + +# Lock file +.terraform.lock.* diff --git a/README.md b/README.md index 92fdb11..0f500c2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,72 @@ -# infra-terraform-aws -Terraform code to setup AWS infra +# Terraform AWS infra + +## Architecture Design + +![design](design.png) + +## Setup + +- To download `terraform`, please follow steps mentioned [here](https://spacelift.io/blog/how-to-install-terraform). Make sure you set the environment variable(s). +- Verify if `terraform` has been installed and configure by executing `terraform -v`. +- Install `AWS CLI` from [here](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). +- Verify if `AWS CLI` has been installed and configued by executing `aws --version`. +- Log in to `AWS Web Console` + - If user exists, then go to `IAM` -> `Users` -> `` -> `Security Credential` -> `Access keys` -> `Create access key` and note down `Access Key ID` and `Secret Access Key`. + - If user doesn't exist then create a user with `programmatic access` to AWS and note down `Access Key ID` and `Secret Access Key`. +- Next step is to configure these credentials in the `AWS CLI` by executing `aws configure`. Enter `Access Key ID` and `Secret Access Key`, keep everything else default. + +## Usages + +- Go to `projects\my-project\staging` directory. +- Execute `terraform init -backend-config="backend.conf"` command to prepare working directory. +- Execute `terraform plan` to show changes which are required to be performed. +- Execute `terraform apply` to create or update infrastructure. +- Please check other below mentioned commands to be executed: + +``` +Usage: terraform [global options] [args] + +The available commands for execution are listed below. +The primary workflow commands are given first, followed by +less common or more advanced commands. + +Main commands: + init Prepare your working directory for other commands + validate Check whether the configuration is valid + plan Show changes required by the current configuration + apply Create or update infrastructure + destroy Destroy previously-created infrastructure + +All other commands: + console Try Terraform expressions at an interactive command prompt + fmt Reformat your configuration in the standard style + force-unlock Release a stuck lock on the current workspace + get Install or upgrade remote Terraform modules + graph Generate a Graphviz graph of the steps in an operation + import Associate existing infrastructure with a Terraform resource + login Obtain and save credentials for a remote host + logout Remove locally-stored credentials for a remote host + metadata Metadata related commands + output Show output values from your root module + providers Show the providers required for this configuration + refresh Update the state to match remote systems + show Show the current state or a saved plan + state Advanced state management + taint Mark a resource instance as not fully functional + untaint Remove the 'tainted' state from a resource instance + version Show the current Terraform version + workspace Workspace management + +Global options (use these before the subcommand, if any): + -chdir=DIR Switch to a different working directory before executing the + given subcommand. + -help Show this help output, or the help for a specified subcommand. + -version An alias for the "version" subcommand. +``` + +## Infracost + +- To download `infracost`, please follow the instructions mentioned [here](https://www.infracost.io/docs/). +- Go to `projects\my-project\staging` directory. +- Execute `infracost breakdown --path .` to see the cost. +- Please refer official document for more detailed commands.