AWS 3 Tier Architecture
使用說明
建置架構

目錄結構
three_tier
├── main.tf                      
└── vpc                                
     ├── igw.tf                 
     ├── route_Private.tf                 
     ├── route_Public.tf 
     ├── subnet_Private.tf                 
     ├── subnet_Public.tf   
     ├── variable.tf                                     
     └── versions.tf             
組態檔內容
main.tf
 #Define provider
 terraform {
   required_providers {
     aws = {
       source  = "hashicorp/aws"
       version = "~> 4.16"
     }
   }
 
   required_version = ">= 1.2.0"
 }
 
 provider "aws" {
   region = "us-east-1"
 }
 
 # 這里可以定義主模塊的其他資源和配置
 # 例如,你可以在這里定義 EC2 實例、RDS 資料庫  等其他 AWS 資源
 
 # 引用 vpc 子模塊
 module "vpc" {
   source = "./vpc" # 指定 vpc 子模塊的路徑。
 }
variables.tf
    ##########################
    ##### VPC CIDR Block #####
    ##########################
    variable "vpc_cidr" {
      default     = "10.0.0.0/16"
      description = "VPC_cidr block"
      type        = string
    }
    
    ##################
    ##### Subnet #####
    ##################
    variable "public-subnet1" {
      default     = "10.0.1.0/24"
      description = "public-subnet-A"
      type        = string
    }
    
    variable "public-subnet2" {
      default     = "10.0.2.0/24"
      description = "public-subnet-B"
      type        = string
    }
    
    variable "private-subnet1" {
      default     = "10.0.3.0/24"
      description = "private-subnet-A"
      type        = string
    }
    
    variable "private-subnet2" {
      default     = "10.0.4.0/24"
      description = "private-subnet-B"
      type        = string
    }
vpc.tf
    #VPC
    resource "aws_vpc" "vpc-block" {
      cidr_block           = var.vpc_cidr
      enable_dns_support   = true
      enable_dns_hostnames = true
    
      tags = {
        Name = "tf-test-vpc"
      }
    }
    
    ## output
    output "vpc_id" {
      value = aws_vpc.vpc-block.tags["Name"]
    }
subnet_Public.tf
    #2 Public Subnets
    resource "aws_subnet" "public-subnet1" {
      tags = {
        Name = "tf-test-PublicSubnet-A" # 子網的名稱
      }
      vpc_id            = aws_vpc.vpc-block.id
      cidr_block        = var.public-subnet1
      availability_zone = "us-east-1a"
    }
    
    resource "aws_subnet" "public-subnet2" {
      tags = {
        Name = "tf-test-PublicSubnet-B" # 子網的名稱
      }
      vpc_id            = aws_vpc.vpc-block.id
      cidr_block        = var.public-subnet2
      availability_zone = "us-east-1b"
    }
    
    ## Output
    output "public-subnet1_name" {
      value = aws_subnet.public-subnet1.tags["Name"]
    }
    
    output "public-subnet2_name" {
      value = aws_subnet.public-subnet2.tags["Name"]
    }
subnet_Private.tf
    # Private Subnets
    resource "aws_subnet" "private-subnet1" {
      tags = {
        Name = "tf-test-PrivateSubnet-A" # 子網的名稱
      }
      vpc_id            = aws_vpc.vpc-block.id
      cidr_block        = var.private-subnet1
      availability_zone = "us-east-1a"
    }
    
    resource "aws_subnet" "private-subnet2" {
      tags = {
        Name = "tf-test-PrivateSubnet-B" # 子網的名稱
      }
      vpc_id            = aws_vpc.vpc-block.id
      cidr_block        = var.private-subnet2
      availability_zone = "us-east-1b"
    }
    
    ## Output
    output "private-subnet1_name" {
      value = aws_subnet.private-subnet1.tags["Name"]
    }
    
    output "private-subnet2_name" {
      value = aws_subnet.private-subnet2.tags["Name"]
    }
route_Public.tf
# route_Public.tf
#######################
##### Route Table #####
#######################
# 創建公共路由表
resource "aws_route_table" "public-subnet-route-table" {
  vpc_id = aws_vpc.vpc-block.id
  tags = {
    Name = "tf-test-Route-Public"
  }
}
# 添加路由規則
resource "aws_route" "public-subnet-default-route" {
  route_table_id         = aws_route_table.public-subnet-route-table.id
  destination_cidr_block = "0.0.0.0/0"                 # 所有流量
  gateway_id             = aws_internet_gateway.igw.id # 通過 Internet Gateway 出去
}
###################################
##### Route table association #####
###################################
# 將子網與路由表關聯
resource "aws_route_table_association" "public-subnet1-route-table-association" {
  subnet_id      = aws_subnet.public-subnet1.id
  route_table_id = aws_route_table.public-subnet-route-table.id
}
resource "aws_route_table_association" "public-subnet2-route-table-association" {
  subnet_id      = aws_subnet.public-subnet2.id
  route_table_id = aws_route_table.public-subnet-route-table.id
}
route_Private.tf
    #######################
    ##### Route Table #####
    #######################
    
    resource "aws_route_table" "private-route-table" {
      vpc_id = aws_vpc.vpc-block.id
    
      tags = {
        Name = "tf-test-Route-Private"
      }
    }
    
    ###################################
    ##### Route table association #####
    ###################################
    
    # 將子網與路由表關聯
    resource "aws_route_table_association" "private-subnet1-route-table-association" {
      subnet_id      = aws_subnet.private-subnet1.id
      route_table_id = aws_route_table.private-route-table.id
    }
    
    resource "aws_route_table_association" "private-subnet2-route-table-association" {
      subnet_id      = aws_subnet.private-subnet2.id
      route_table_id = aws_route_table.private-route-table.id
    }
igw.tf
   #Internet Gateway
   
   resource "aws_internet_gateway" "gw" {
     vpc_id = aws_vpc.vpc-block.id
   
     tags = {
       Name = "main"
     }
   }