😙使用 CloudFormation 快速建置 VPC、Subnet、Route Tables 和 Internet Gateways 說明。(DB Tier 等在後面章節練習DB建置時會帶到)
🌳構建可擴展的AWS 3-Tier架構:第一章 — 建立基本網路架構
🌱歡迎來到本系列文章,我們將深入探討如何使用AWS CloudFormation手動構建一個強大的3-Tier架構,這個架構將提供高可用性和可擴展性,是許多現代應用程序的理想基礎。在本章中,我們將重點關注建立基本網路架構,這是整個3-Tier架構的第一步。
🌳引言
🚠現代應用程序越來越依賴於雲端基礎架構,以實現高度可用性和效能。AWS(Amazon Web Services)提供了一個強大的平台,可以幫助我們實現這些目標。3-Tier架構是一種經典的應用程序架構,它將應用程序分為Web層、應用程序層和資料庫層,每一層都有不同的功能。在本文中,我們將使用AWS CloudFormation來手動構建這個3-Tier架構的基本網路部分。
🌳AWS 3-Tier 架構概述
🧐在深入研究如何建立基本網路架構之前,讓我們先簡要回顧一下AWS 3-Tier架構的核心概念。這種架構包括三個主要層級:
- Web層:這是應用程序的前端,處理用戶的請求並提供內容。它位於公共互聯網上,因此需要良好的安全性和可擴展性。
- 應用程序層:這一層是應用程序的邏輯核心,處理來自Web層的請求,並執行業務邏輯。這一層通常位於一個私有網絡中。
- 資料庫層:這是存儲應用程序數據的地方,包括用戶資料、產品信息等。資料庫層需要高度的可用性和數據保護。
👏現在讓我們開始,首先關注建立基本網路架構的步驟。
🌳CloudFormation 簡介
🤔在我們深入了解如何使用AWS CloudFormation建立基本網路架構之前,讓我們先了解一下CloudFormation的基本概念。CloudFormation是AWS提供的一種服務,可以通過模板來定義和部署基礎架構。它的主要優勢包括自動化、可重用性和版本控制。
🌳CloudFormation 模板概述
👉AWS CloudFormation模板是一種JSON或YAML格式的文檔,用於定義AWS基礎架構的配置。模板包括各種AWS資源的定義,例如VPC、EC2實例、子網、路由表等。我們將使用這些模板來定義我們的基本網路架構。
🌳建立VPC、Subnet、Route Tables和Internet Gateways
🚀現在是時候開始建立我們的基本網路架構了。我們將通過CloudFormation模板來自動化這個過程,這將節省大量時間並確保我們的網路配置是一致的。
⚙️以下是我們需要執行的步驟:
- 創建VPC(Virtual Private Cloud):VPC是一個隔離的虛擬網路環境,我們將在其中建立我們的應用程序。
- 創建子網(Subnet):子網是VPC的一部分,我們將在不同的子網中放置不同的層級。
- 創建路由表(Route Tables):路由表用於指定流量的路徑,我們需要創建不同的路由表來區分不同的子網。
- 創建Internet Gateway:Internet Gateway允許VPC中的實例訪問公共互聯網。
在接下來的段落中,我們將逐步指導您完成這些步驟,並提供CloudFormation模板示例。
🌳驗證基本網路架構
最後,在我們完成基本網路架構的建立後,我們將學習如何驗證它是否正常運作。這是確保我們的基礎設施設置正確的關鍵步驟。
👉接下來,我們將開始實際操作,建立VPC、子網、路由表和Internet Gateway。讓我們開始吧!
1、編輯執行 CloudFormation 所需 yaml 檔:
# Lab VPC with 2 public + 2 private subnets
# Route Public + Route Private
# IGW for Public + Public Subnet
Resources:
###########
# VPC with Internet Gateway
###########
# Create VPC
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: haha-test-VPC
# Create Internet Gateways (IGW)
IGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: haha-test-IGW
# VPC↔IGW Connect
VPCtoIGWConnection:
Type: AWS::EC2::VPCGatewayAttachment
DependsOn:
- IGW
- VPC
Properties:
InternetGatewayId: !Ref IGW
VpcId: !Ref VPC
###########
# Public Route Table
###########
PublicRouteTable:
Type: AWS::EC2::RouteTable
DependsOn: VPC
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: haha-test-Public-Route
PublicRoute:
Type: AWS::EC2::Route
DependsOn:
- PublicRouteTable
- VPCtoIGWConnection
Properties:
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref IGW
RouteTableId: !Ref PublicRouteTable
###########
# Private Route Table
###########
PrivateRouteTable:
Type: AWS::EC2::RouteTable
DependsOn: VPC
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: haha-test-Private-Route
###########
# Public Subnets x 2
###########
PublicSubnet1:
Type: AWS::EC2::Subnet
DependsOn: VPC
Properties:
VpcId: !Ref VPC
MapPublicIpOnLaunch: true
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select
- 0
- !GetAZs
Ref: AWS::Region
Tags:
- Key: Name
Value: haha-test-PublicSubnet-1
PublicSubnet2:
Type: AWS::EC2::Subnet
DependsOn: VPC
Properties:
VpcId: !Ref VPC
MapPublicIpOnLaunch: true
CidrBlock: 10.0.2.0/24
AvailabilityZone: !Select
- 1
- !GetAZs
Ref: AWS::Region
Tags:
- Key: Name
Value: haha-test-PublicSubnet-2
PublicRouteTableAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
DependsOn:
- PublicRouteTable
- PublicSubnet1
Properties:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet1
PublicRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
DependsOn:
- PublicRouteTable
- PublicSubnet2
Properties:
RouteTableId: !Ref PublicRouteTable
SubnetId: !Ref PublicSubnet2
###########
# Private Subnets x 2
###########
PrivateSubnet1:
Type: AWS::EC2::Subnet
DependsOn: VPC
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.3.0/24
AvailabilityZone: !Select
- 0
- !GetAZs
Ref: AWS::Region
Tags:
- Key: Name
Value: haha-test-PrivateSubnet-1
PrivateSubnet2:
Type: AWS::EC2::Subnet
DependsOn: VPC
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.4.0/24
AvailabilityZone: !Select
- 1
- !GetAZs
Ref: AWS::Region
Tags:
- Key: Name
Value: haha-test-PrivateSubnet-2
PrivateRouteTableAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
DependsOn:
- PrivateRouteTable
- PrivateSubnet1
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet1
PrivateRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
DependsOn:
- PrivateRouteTable
- PrivateSubnet2
Properties:
RouteTableId: !Ref PrivateRouteTable
SubnetId: !Ref PrivateSubnet2
📝上面這些語法內容都在同一個檔案內,例如:haha-test-lab1.yaml。
2、建置 S3 Bucket 存放 yaml 檔:
3、執行 CloudFormation Stack 快速建置AWS資源:
🧐進到 AWS Consloe 畫面確認建置成功的資源:
🗑️清理您的環境
在您成功建立了基本網路架構之後,請不要忘記清理您的AWS環境。這對於避免不必要的費用和資源浪費至關重要。以下是一些步驟,幫助您安全地刪除剛剛建立的基本網路架構:
- 刪除CloudFormation堆疊:返回到AWS CloudFormation控制台,選擇您創建的堆疊,然後選擇”刪除”。請注意,這將刪除整個堆疊中的所有資源。
- 檢查VPC:確保VPC、子網、路由表和Internet Gateway已被成功刪除。您可以在VPC控制台中查看這些資源的狀態。
- 確認資源刪除:在刪除完成後,請仔細檢查AWS控制台,確保沒有任何未刪除的資源。
這些步驟將幫助您確保AWS賬戶保持整潔,避免不必要的費用。
🚩後續預告
後續的章節,將深入探討如何建立應用程序層,這是3-Tier架構的核心。我們將學習如何設置應用程序伺服器、自動擴展和應用程序部署。
🤝請繼續關注,我們下次見 ^_^..