😎AWS 3 Tier架構建置(CloudFormation)-第一章:建立基本網路架構

haha1811
13 min readSep 30, 2023

--

😙使用 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架構的核心概念。這種架構包括三個主要層級:

  1. Web層:這是應用程序的前端,處理用戶的請求並提供內容。它位於公共互聯網上,因此需要良好的安全性和可擴展性。
  2. 應用程序層:這一層是應用程序的邏輯核心,處理來自Web層的請求,並執行業務邏輯。這一層通常位於一個私有網絡中。
  3. 資料庫層:這是存儲應用程序數據的地方,包括用戶資料、產品信息等。資料庫層需要高度的可用性和數據保護。

👏現在讓我們開始,首先關注建立基本網路架構的步驟。

🌳CloudFormation 簡介

🤔在我們深入了解如何使用AWS CloudFormation建立基本網路架構之前,讓我們先了解一下CloudFormation的基本概念。CloudFormation是AWS提供的一種服務,可以通過模板來定義和部署基礎架構。它的主要優勢包括自動化、可重用性和版本控制。

🌳CloudFormation 模板概述

👉AWS CloudFormation模板是一種JSON或YAML格式的文檔,用於定義AWS基礎架構的配置。模板包括各種AWS資源的定義,例如VPC、EC2實例、子網、路由表等。我們將使用這些模板來定義我們的基本網路架構。

🌳建立VPC、Subnet、Route Tables和Internet Gateways

🚀現在是時候開始建立我們的基本網路架構了。我們將通過CloudFormation模板來自動化這個過程,這將節省大量時間並確保我們的網路配置是一致的。

⚙️以下是我們需要執行的步驟:

  1. 創建VPC(Virtual Private Cloud):VPC是一個隔離的虛擬網路環境,我們將在其中建立我們的應用程序。
  2. 創建子網(Subnet):子網是VPC的一部分,我們將在不同的子網中放置不同的層級。
  3. 創建路由表(Route Tables):路由表用於指定流量的路徑,我們需要創建不同的路由表來區分不同的子網。
  4. 創建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環境。這對於避免不必要的費用和資源浪費至關重要。以下是一些步驟,幫助您安全地刪除剛剛建立的基本網路架構:

  1. 刪除CloudFormation堆疊:返回到AWS CloudFormation控制台,選擇您創建的堆疊,然後選擇”刪除”。請注意,這將刪除整個堆疊中的所有資源。
  2. 檢查VPC:確保VPC、子網、路由表和Internet Gateway已被成功刪除。您可以在VPC控制台中查看這些資源的狀態。
  3. 確認資源刪除:在刪除完成後,請仔細檢查AWS控制台,確保沒有任何未刪除的資源。

這些步驟將幫助您確保AWS賬戶保持整潔,避免不必要的費用。

🚩後續預告

後續的章節,將深入探討如何建立應用程序層,這是3-Tier架構的核心。我們將學習如何設置應用程序伺服器、自動擴展和應用程序部署。

🤝請繼續關注,我們下次見 ^_^..

--

--