chapter 1

  • AWS: 市佔最高、服務最完整 47%
  • GCP: 多雲理念、容器服務最專精、台灣法規相容 7%
  • AZure:原.NET體系直上、原MS方案優惠22%
  • Alibaba:內需 8%
  • Other: 16%

chapter2

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

套用在雲端服務來看

  • SaaS (Software as a Service):直接可以使用服務
  • PaaS (Platform as a Service) :提供作業系統,可將程式碼部署上去
  • IaaS (Infrastructre as a Service):雲端商會提供基礎建設服務

AWS 四大服務:

  • compute
  • storage
  • network
  • auth

compute 運算

  • Elastic Beanstalk: 提供作業系統 可跑程式碼
  • EC2:Elastic Compute Cloud /instance虛擬機
  • Scaling:增減虛擬機資源
  • Load Balancing:分散流量來源與目的
  • Failover:流量從壞掉的主機導向正常的虛擬機

storage 儲存

  • S3
  • RDS:資料庫
  • EBS: Elastic Block Storage 作為EC2外接儲存空間
  • Backup:備份
  • Scaling

Network 網路

  • Route 53 :處理DNS相關
  • Log:網路流量紀錄
  • Security:管理誰可以進出空間

Auth權限

  • Security: 安全管理機制

chapter3

ㄧ. VPC基礎設施 - Region/AZ vs VPC/Subnet 關係介紹

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • Region:一個Region上會建立多個AZ
  • AZ(Availability Zones): 一個AZ上會有多個Data center
  • Data center:實體資料中心
  • VPC:虛擬網路區域,管理網路流通
  • Subnet:更小區塊的虛擬網路區域
    1. 一個Subnet會對到一個AZ。
    2. 不同Subnet可能會對到同一個AZ
  • HA(High Availability)高可用性:
    1. 將程式部署到不同的AZ上
    2. 同時確認部署的程式在不同的Subnet中也對應到不同的AZ

二. VPC架構 - Routes & Security

Routes

1. VPC內 一個Private Subnet內的溝通

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

VPC內設立一個Private subnet,並在裡面放置兩台EC2,因instances都在同一個網路空間,所以兩台EC2可以彼此溝通

  • Private subnet指的是:網路沒有對外開放/封閉網路

2. VPC內 兩個Private Subnet的溝通

兩個Private Subnet內的EC2要溝通的話,需要使用到Route Table

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Route Table
  • 每個Subnet都會配一個Route Table
  • Route Table功用:指引網路流量,該怎麼走、到哪
  • Route Table兩大重要設定為:目的地IP(最終目的地)、下一站(下一站要先去哪)

以圖示為例來理解Route Table兩大設定,當兩個Private Subnet中的EC2要溝通時,Route Table的目的地就是另一個Private Subnet中的EC2,但中間會先經過的Local為下一站。


3. VPC內 ㄧ個Public Subnet對外的溝通

Public Subnet的目的是連到外面的Internet
當Public Subnet中EC2要連到Internet的過程:

  • 透過Public Subnet 的Route Table指引
    目的地:Internet
    下一站:Internet Gateway(IGW)中繼站,幫忙導到Internet

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

4. VPC內 ㄧ個Private Subnet對外的溝通

Private Subnet中的EC2連Internet時,需要透過一個建立在Public Subnet中的NAT gateway,透過它連到IGW再到Internet

(Private Subnet-EC2 ->Public Subnet-NAT gateway->Internet Gateway->Internet)

當Private Subnet中EC2要連到Internet的過程:

  • 透過Route Table指引
    目的地:Internet
    下一站:NAT gateway,幫忙導到IGW 再到Internet

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


Security

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

當外部有請求進來時,會先經過NACL、Security Group再到EC2

  • NACL:隸屬於Subnet階層,會來規範什麼請求可以進出這個Subnet。每一次進出都要驗證
  • Security Group:給EC2用的,類似防火牆。stateful驗證過就不會在驗證一次。

三.VPC架構 - SG vs ENI vs EC2關係介紹

SG底層包的是ENI
  • 概念上Security Group為EC2外層保護膜,實際上SG裡面是ENI(Elastic Network Interface),ENI類似虛擬網卡

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

ENI與EC2的關係

大致區分為Network與Compute兩大區塊。
ENI 臨時attach到一台EC2,意思為把虛擬網卡裝在虛擬機上

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


  • 若有一天,EC2主機掛掉了,原本的ENI會 Detach到另一台EC2上,在網路世界裡是沒有變動的,只有在運算資源裡有變動而已。
  • 精準來說,在網路區塊上,SG其實不是給EC2直接使用的,而是屬於ENI的一部分,ENI會再Attach到運算單位的一台EC2上面。
    Image Not Showing Possible Reasons
    • The image file may be corrupted
    • The server hosting the image is unavailable
    • The image path is incorrect
    • The image format is not supported
    Learn More →

四. 實作Publice Subnet to the Internet(IGW)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

步驟:

A. 建立VPC
  1. AWS Management Console 搜尋 VPC
  2. 點選Your VPCs->Create VPC
  3. Name tag: vpc-01(自訂)
    IPv4 CIDR block: 10.1.0.0/16 (給個網路空間)
  4. 其他用預設->Create->建立完成
B. 建立Public Subnet (這邊先建立Subnet)
  1. 點選Subnet(左側)->Create Subnet
  2. Name tag: public-subnet(等等將它public)
    VPC: vpc-001(選剛剛建立好的)
    Availability Zone: 選任一個
    VPC CIDRs: 10.1.0.0/16上面會顯示VPC的網路空間位置
    IPv4 CIDR block: 10.1.1.0/24(要比上面小VPC CIDRs)
    -> create->subnet創建完成
C.將建立好的Subnet 變成Public
  1. 點選Internet Gateways(左側)->Create Internet Gateway
  2. Name tag: my-igw ->Create
  3. 狀態是detached表示尚未被任一VPC使用,點選上方Action->Attach to VPC->選擇創建好的vpc-001->attach
  4. 查看狀態為Attach時,表示IGW已經被VPC所使用
  5. 點選Subnet(左側)->點選剛剛創建的public subnet下方的Route Table->再點選Route Table的連結(ex:Route Table:rtb-042065)
  6. 進入到Route Table的介面(此位置為剛建好Subnet使用的route table)->
    Name改為:public-route-table
  7. 改完後點選下方的Routes,目的地會顯示10.1.0.0/16(這是整個VPC的位置)旁邊的local指的是所有網路都會透過這個中繼站。
  8. 點選Edit route->Add Route->
    Destibation:0.0.0.0/0
    Target:選擇剛創建的Internet Gateway->Save route(當要去internet時,就會導到剛剛建立的IGW)
    已成功建立好public subnet=subnet+igw
D.在subnet內建立一台EC2
  1. 點選上方Service,搜尋EC2

  2. 點選左方Instance-> Launch Instance

  3. Step1:choose an Amazon Machine Image
    點選『Amazon Linux2 AMI(HVM),SSD Volumn Type』(第一個)

  4. Step2:Choose an Instance Type:用預設即可->Next

  5. Step3:Configure Instance Details:
    Network:選剛剛建立的VPC-001
    Subnet:選擇Public Subnet
    Auto-assign Public IP: Enable (會需要Public IP所以Enable)
    ->Next

  6. Step4: Add Storage:用預設即可->Next

  7. Step5:Add Tage:用預設即可->Next

  8. Step6: Configure Security Group:
    Add Route->All ICMP-IPv4(可以允許去ping這台主機) Source:Anywhere(允許任何地方都可ping這台)->Rwview ans Launch

  9. Step7 Review Instance Launch:點選Launch

  10. Select an existing key pair or create a new key pair:
    創新的create a new key pair(key pair將用來連進去EC2)
    name:vpc-ex2-002->download key pair(下載下來,需要用此pem file來驗證)-> Launch Instances

  11. Launch Statis:按下View Instances

  12. EC2起好後,更改EC2名稱為:public-ec2
    現在EC2已經在public Subnet裡面了
    下面description中:可看到的Subnet ID就是 Public Subnet

E.驗證是否可連進去
  1. 打開終端機 看能不能ping剛剛建立的EC2
    copy EC2的 IPv4 Public IP (在 instance 的 console中下方 Description中查找)
    並輸入下列指令
ping 3.21.106.235 (此ip為示範)
#成功連進去後 輸入control C終止
  1. ping成功後,用SSH連進去

在instance的console頁面 點選上方的Connect 裡面有提示指令 跟著做

#先到下載pem file的目錄位置
cd Downloads/

#確認目錄底下有pem file
ls -l | grep vpc-ec2-002

#更改不要有write的權限
chmod 400 vpc-ec2-002.pem

# 更改後 再輸入下列指令 會發現只剩下讀的權限
ls -l | grep vpc-ec2-002

# 連SSH
ssh -i "vpc-ec2-002.pem" ec2-user@3.21.106.235 (指令從connect to your instance 直接複製,此為示範)

#此指令意思為SSH帶著pem file 用ec2-user這個帳號進去,目的地是這個instance的public IP(簡單來說就是user用憑證方式連進public subnet中這台ec2)

#連進去後 使用者名稱會顯示此台EC2的Private IP

# 測試從EC2能不能連去外網在連進來
ping 8.8.8.8
# 8.8.8.8 這個IP位置是 Google DNS Server的位置 如果有網路 基本上都會連得到
# 如果有回應 表示EC2成功連到外面的網路囉
Control C #結束

五. 實作Private Subnet to Public Subnet (同一個VPC下跨subnet的溝通)

A. 建立Private Subnet創立之前 先去新增一個route table給private subnet用
  1. 點擊左側 Route Table
  2. create route table
  3. name: private-subnet-route-table
    vpc:選擇剛剛建立的vpc-001
    ->create
    回到Subnet console(左側)
B. 建立第一個Private Subnet
  1. Create Subnet
  2. name tag: private subnet-01
    vpc:選擇vpc-001
    AZ:任選一個
    IPv4 CIDR block: 10.1.2.0/24->create
  3. 創立完成後,點擊Subnet Console頁面下方的Route Table->點擊 Edit route table association
    Edit route table association:
    Route Table ID:選剛剛建立的Private-subnet-route-table(目前destination只有local)->Save
C.private subnet建立完成,接下來放一台EC2進去
  1. 點擊左側Instance console-> Launch Instance

  2. Step1:choose an Amazon Machine Image
    點選『Amazon Linux2 AMI(HVM),SSD Volumn Type』(第一個)

  3. Step2:Choose an Instance Type:用預設即可->Next

  4. Step3:Configure Instance Details:
    Network:選剛剛建立的VPC-001
    Subnet:選擇Private-Subnet-01
    Auto-assign Public IP: Disable (private subnet 所以選Disable)
    ->Next

  5. Step4: Add Storage:用預設即可->Next

  6. Step5:Add Tage:用預設即可->Next

  7. Step6: Configure Security Group:
    Add Route->
    Type:All ICMP-IPv4(可以允許去ping這台主機) Source:Anywhere(允許任何地方都可ping這台)->Review and Launch

  8. Step7 Review Instance Launch:點選Launch

  9. Select an existing key pair or create a new key pair:
    choose an existing key pair: 選擇剛建立的vpc-ec2-002 這個pem file
    打勾:I acknowledge that I have to
    -> Launch Instances

  10. Launch Statis:按下View Instances

  11. EC2起好後,更改EC2名稱為:private-ec2-01
    現在EC2已經在public Subnet裡面了

D. 現在要從外部Internet連到Public ec2 再連到Private Ec2裡
  1. 終端機,確認位置是在本機電腦的位置,如果不是
exit
  1. 不論要連到public subnet 或是private subnet,都要讓SSH帶著Pem File一起走
ssh-add -k vpc-ec-002(Pem File名稱)
# 這樣pem file會打上ssh的內部設定

ssh-add -L
# 確認pem file已經寫入ssh裡(有顯示pem file的檔名)

ssh -A ec2-user-@3.21.106.235

#@+EC2 Public IP
# 觸發SSH Agent Forwarding功能(會帶著pem file走)
# 現在在piblic 的ec2,下一步連到private ec2

ssh 10.1.2.21
#ssh + private ec2的 private IPs
#使用者有有顯示private ip就表示成功連線了
# 測試 可否從現在的private subnet 連到另一個subnet ec2裡?

ping 10.1.1.237
#ping+ public ec2的private ip
#有回應 表示同一vpc下的subnet是可互通的
control c 結束

六.Private Subnet to the Internet(NAT)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

步驟:

  1. 先進入public subnet的ec2
  2. 再連到private subnet的ec2
A. 終端機連線到public subnet ec2
#先連進去public instance(@+ec2 的public ip)
ssh -A ec2-user@3.21.106.235
B. 從public subnet ec2連到private subnet ec2
#再進到private instance的ec2
ssh 10.1.2.21
#ssh + private ec2的 private IPs
#使用者有有顯示private ip就表示成功連線了
C. 測試private subnet ec2能不能連出去
# 測試從EC2能不能連去外網再連進來
ping 8.8.8.8
# 8.8.8.8 這個IP位置是 Google DNS Server的位置 如果有網路 基本上都會連得到

#顯示卡住 代表沒法走到Internet
Control C #終止
D. 建立NAT Gateway (建一條路來連囉)
  1. 點擊console左側 NAT Gateways
  2. Create NAT Gateway
    subnet:選擇public subnet(把NAT Gateway 放在subnet裡面)
    Elastic IP Allocation ID:點擊Allocate Elastic IP address
    (某種public ip address給這個NAT Gateway 這樣在public subnet的NAT Gateway才能跟外界溝通)
    ->create a NAT Gateway
  3. 服務起好後,給NAT Gateway取名為:my-nat
E. Private Subnet的網路導到NAT Gateway
  1. 點擊console左側 Subnet
  2. 點擊private Subnet
  3. 點擊下方的Route Table
    再點擊 Route Table:rtb-02b36996
  4. 進入Route Tbale 後,點擊Route
    點擊Edit Route
  5. Edit Route:(外面的請求都導到NAT Gateway)
    Destination:0.0.0.0/0
    Target:選NAT Gateway->剛建立的my-nat
    -> save routes
    建立完成
F.終端機測試

確認使用者為private subnet 的ec2

ping 8.8.8.8

#有回應 表示成功連到外面網路

#表示在private subnet ec2可以連到外面

control c #結束

成功從private subnet >NAT in public subnet > Internet

七. 設定 NACL、 Security Group

(ㄧ) NACL設定

NACL是VPC內的服務
Security Group 是EC2內的服務

A.終端機ping public subnet ec2

ping public subnet ec2
console 選instance->
public ec2->下方IPv4 public ip

ping 3.21.106.235(示範_輸入public ec2_IPv4 public ip)

連線成功
control c

B.NACL 設定:取消Inbound Rule外部進來請求
  1. 左側 vpc dashboard 點擊 NACL ACLs
    可看到目前ACL給兩個subnet使用(public & private subnet)
  2. 點擊下方 Inbound Rules
    點擊Edit Inbound Rules
    取消允許所有的連線 按X
    -> Save
    這樣所有外部進來的請求都會被擋
C.終端機測試

如果NACL設定成功 等等ping 要被擋住

ping 3.21.106.235(示範_輸入public ec2_IPv4 public ip)

# 顯示timeout 表示進不去 驗證了NACL是進入subnet的第一要素
D.NACL 設定:允許全部Inbound Rule外部進來請求
  1. 回到console頁面點擊下方 Inbound Rules
    點擊Edit Inbound Rules(把rule加回來)
    Rule:100(隨意取)
    Type:ALL Traffic
    Protocol:ALL
    Port range:ALL
    Source:0.0.0.0/0
    Allow/Deny:ALLOW
    ->Save
E.終端機測試
ping 3.21.106.235(示範_輸入public ec2_IPv4 public ip)

#有回應表示成功
contril c 結束
F. NACL 設定:取消全部Outbound Rule外部進來請求
  1. 回到console頁面 點擊下方 Outbound Rules
    點擊Edit Inbound Rules
    取消允許所有的連線 按X
    -> Save
    這樣所有外部出去的請求都會被擋
G.終端機測試
ping 3.21.106.235(示範_輸入public ec2_IPv4 public ip)

# timeout 表示失敗 儘管NACL Inbound Rule允許進入 但是outbound Rule不允許出去 一樣會無回應
contril c #結束
H. NACL 設定:允許全部Outbound Rule外部進來請求
  1. 回到console頁面點擊下方 Outbound Rules
    點擊Edit Inbound Rules(把rule加回來)
    Rule:200 (隨意取)
    Type:ALL Traffic
    Protocol:ALL
    Port range:ALL
    Source:0.0.0.0/0
    Allow/Deny:ALLOW
    ->Save
I.終端機測試
ping 3.21.106.235(示範_輸入public ec2_IPv4 public ip)

#有回應表示成功
contril c 結束
(二)Security Group設定

NACL是VPC內的服務
Security Group 是EC2內的服務

A.Security Group設定:ec2不給ping
  1. 點選左側instance,在點擊public ec2
  2. 下方security groups 點擊設定
  3. 進到security group console頁面
    下方Inbound rules (目前有允許所有人可以ping ex:All ICMP 0.0.0.0/0 )點擊Edit Inbound Rules
    Delete兩個All ICMP-IPv4(不給ping)
    ->save rules
B.終端機測試
ping 3.21.106.235 #(public ec2的 Ipv4 publuc ip)

# timeout 無回應
control c 結束
C.Security Group設定:加入Inbound Rule
  1. 點選左側instance,在點擊public ec2
  2. 下方security groups 點擊
    1. 進到security group console頁面
      下方Inbound rules
      點擊Edit Inbound Rules
      Type:Custom ICMP- IPv4
      Protocol: All
      Port range:All
      Source:Anywhere (任何人都可以來)
      ->save rules
D.終端機測試
ping 3.21.106.235 #(public ec2的 Ipv4 publuc ip)

# SG允許進去 有回應了
control c 結束
E.Security Group設定:取消Outbound Rules

Outbound Rules預設讓所有人進去

  1. 進到security group console頁面
  2. 下方Outbound rules
    點擊Edit Inbound Rules
    Delete (All traffic)(不讓任何人出去)
    ->save rules
F.終端機測試
ping 3.21.106.235 #(public ec2的 Ipv4 publuc ip)

# 有回應 仍然可以ping儘管SG不允許Outbound Rules
control c 結束

Security Group 是Stateful 一旦曾經進來是允許的會記住,出去就不擋

G.Security Group設定:加回Outbound Rules
  1. 進到security group console頁面
  2. 下方Outbound rules
    點擊Edit Inbound Rules
    點擊Add Rule
    Type:All traffic
    Protocol: All
    Port range:All
    Source:Anywhere (任何人都可)
    ->save rules

八.VPC清理資源

A.清理EC2
  1. 到EC2 console(左側instances)
  2. 創建的private/public subnet都點起來
  3. 點擊console頁 上方Actions->Instance State-> Terminate
  4. 完成後 ec2的狀態會變成Terminated
B.清理VPC:先清NAT Gateway
  1. 到NAT Gateways(左側點擊)
  2. 創建的NAT Gateway點起來
    它其實也是一台AWS後面建立的ec2
  3. 點擊console頁 上方Actions->Delete NAT Gateway
  4. 完成後 NAT Gateway的狀態會變成Deleted
C.再清理建給NAT Gateway的EIP
  1. 點擊左側Elastic Ips
  2. 創建的EIP點起來
  3. 點擊console頁 上方Actions->Release addresses->release
  4. 頁面清空表示完成
D.清理VPC
  1. 點擊左側Your VPCs
  2. 創建的VPC點起來
  3. 點擊console頁 上方Actions->Delete VPC->close
  4. 頁面清空表示完成

chapter4 EC2運算資源

一.EC2重點架構

EC2內部的重要元件介紹:
  1. Amazon Machine Image(AMI):類似模板概念,主要決定作業系統(operation system)、細部的設定之後談

  2. Instance Metadata:透過AMI起EC2產生Instance層面的資料:Instance ID、Hostname

  3. Instance Type:決定要用多少資源

    • vCPU: virtual CPU
    • Memory:記憶體
    • Instance Storage:儲存空間(本地儲存空間,會隨著ec2刪除而不見、不適合放永久資訊、可進行高I/O工作)
    • Network Speed:決定這台EC2可負荷多大的網路流量
  4. 其他細項之後講

EC2連接外部的子服務介紹:
  1. Network網路:建立EC2時會配給它一個或多個虛擬網卡,EC2在網路架構中的角色是由ENI來決定,看ENI放到哪個SG,Subnet,NACL

  2. Permission權限:IAM Role不能直接被EC2使用,需要透過Instance Profile,將IAM Role轉成EC2可以使用的形式,藉此規範EC2可以使用哪些權限、哪些AWS的服務

  3. External Storage外部儲存空間:Elastic Block Storage(EBS)不會隨著EC2刪除而消失,可以儲放永久資料

二.EC2儲存資源:Instance Storage VS. Elastic Block Storage

  • 起一台EC2,裡面的Instance Storage跟Instance都會在同一台Host主機
  • 透過網路連接,可以接一台外接硬碟EBS(Elastic Block Storage) Volume
  • EC2 Instance 跟EBS Volume 會在同一個AZ中
  • EBS Volume 透過EBS Snapshot備份,採用漸進式incremental備份(上次備份到的部分 下次不會重複備份 只會加上新的部分)
  • EBS Snapshote跟EC2 Instance會在同一個Region

EC2 Instance Storage

  • EC2 Instance Storage跟instance在同一台Host主機中,所以有很高的I/O處理能力
  • EC2 Instance Storag缺點是ephemeral短暫存在,ec2刪除,Instance Storag也一起刪除
  • EC2 Instance Storag沒有備份功能,就算沒有刪除ec2 instance,只要它所在的實體主機的儲存硬碟故障,資料也會全部不見。Durability很低

Durability:資料可以承擔故障的能力

EBS volume

  • 較低的I/O處理能力,因它與EC2之間是連這內部網路的,有時間消耗
  • 是persistent,即便ec2的刪除不影響
  • 備份功能很好,當創造一個EBS volume時,aws會自動在同一個az中,起多台的nodes,來組成一個EBS volume,這樣就算有一個儲存硬碟壞掉,資料也不怕遺失,有較高的Durability
  • EBS Snapshot:就算az中的資料中心都壞了,資料還是會保持在同一個region底下的EBS snapshot

三. EBS Type介紹

EBS 比起EC2 instance storage來說,I/O功能弱,所以AWS提供4種類型,依照需求使用

IOPS(I/O per second):每秒可處理的I/O請求次數
IO packet size:每次處理一個I/O請求時,packet size有多大
Throughput:每秒可處理的I/O資料總量
Throughput=IOPS x IO packet size

ex:io1的throughout
64000 X 16 X 1024=1048576000 bytes
轉成kb->1048576000/1024=102400kb
轉成mb->102400/1024=1000

1kb=1024 bytes


SSD針對次數高但量小的使用情境
HDD針對次數少但量大的使用情境

HDD下的sc1,st1重要的是throughput:目的是在每秒處理最大的資料總量,考慮花費cp高。在看throughput時優先看HDD

SDD下的io1跟gp2主要看IOPS針對每秒內處理最多的I/O請求次數,如果重IOPS又有預算,可以直上SSD

使用情境:
SSD:io1->資料庫:資料量小但請求次數多
SSD:gp2->開機硬碟:開機速度快/aws預設開機設定
HDD:st1->影音串流:請求頻率不高但每秒處理量大
HDD:sc1->資料封存:使用頻率低 保存花費低

HDD 便宜大流量
SSD 高貴快手速

SSD 重要的效能是IOPS
HDd 重要的效能是Throughput
EBS attach ec2時,兩者的交結點,才是最後EBS的整體效能表現
EBS Type+EC2的Type=final EBS performance

四.EC2搭配EBS實作 1/1

步驟:

A. 用VPC Wizard 建立環境
  1. AWS Management Console 搜尋 VPC
  2. 點選上方 Launch VPC Wizard(他可以快速建環境)
    step 1 點選左邊 VPC with a Single Public Subnet->select
    step 2:
    • vpc name:ec2-demo-vpc->create vpc
  3. VPC建立好了
  4. 點選左側Subnets 可以看到剛剛建立的public subnet可以使用
B.在subnet內建立一台EC2
  1. 點選上方services回到Management Console頁面,搜尋EC2
  2. 點選左方Instance-> Launch Instance
  3. Step1:choose an Amazon Machine Image這邊要決定作業系統
    左側選擇:Community AMIs

operating system:

  • Amazon Linux打勾(沒額外需求,建議選Linux跟雲端環境最相容)

Architecture:

  • 64-bit(x86)打勾

Root device type(開機硬碟)

  • EBS
點完後 右邊的列表擇一選即可

這邊示範選第一個amzn-ami-hvm-2018.03.0.20200602-1_64-gp2

  1. Step2:Choose an Instance Type:
    上方過濾器選擇:General purpose
    在AMI已經決定開機硬碟要用EBS
    下方的Instance Storage(GB)代表要選擇-額外的硬碟只支援EBS還是要同時支持Instance Store,這邊著重EBS Only
    EBS-optimized available:ebs的效能是由ebs type 跟ec2 type,如果ec2這邊選擇Yes,那跟ebs之間就有專屬網路,可發揮ebs volume最大效能
    小結:
    family:General purpose
    type:t3a.nano(AWS統整後給的名稱 考照時要背orz)
    vCPUs:2
    Memory(GiB):0.5
    Instance Storage(GB):EBS only
    EBS-optimized available:Yes
    Network Performance(虛擬網卡): Up to 5 Gigabit(可以承擔到5GB的流量)
    IPv6 Support: Yes
    -> Next:Configure Instance Details

  2. Step3:Configure Instance Details:
    Number of Instances(一次起幾個Instance):1
    Network:選剛剛建立的ec2-semo-vpc
    Subnet:選擇Public Subnet
    Auto-assign Public IP: Enable (會需要Public IP所以Enable)
    ->Next

  3. Step4: Add Storage:用預設即可->Next
    這邊可以看到Root開機硬碟
    volume type:預設是給general purpose 也可以往更高規格選,Magnetic是舊版,這邊用general purpose
    Delete on Termination:這邊打勾,因為是root
    把ec2刪除時,要不要保留這個ebs。
    打勾代表跟著EC2一起刪除
    不打勾代表獨立於EC2生命週期,EC2刪除 這個還是在,不受影響
    點擊Add New Volume
    **Volume Type: **EBS
    Device:/dev/sdb (預設)
    Snapshot::(預設)
    Size(Gib)::32
    數字越大IOPS越大,這邊的最大值是16384->IOPS:16000,數字再大IOPS會顯示Null。
    Volume Type::General Purpose SSD(gp2)
    IOPS::100/3000(100是基準點 3000是aws額外提供可以瞬間達到3000)
    Throughput::N/A
    Delete on Termination:不勾
    -> Next:Add Tags

  4. Step5:Add Tage:用預設即可->Next

  5. Step6: Configure Security Group:
    用預設即可
    SSh->TCP->22->Custom->0.0.0.0/0
    ->Review and Launch

  6. Step7 Review Instance Launch:點選Launch

  7. Select an existing key pair or create a new key pair:
    創新的create a new key pair(key pair將用來連進去EC2)
    key pair name::my-ec2-keypair->download key pair(下載下來,需要用此pem file來驗證)-> Launch Instances

  8. Launch Statis:按下View Instances

  9. EC2起好後,更改EC2名稱為:ec2-ebs-demo

  10. console左側點選Elastic Block StoreVolumes
    兩個剛起起來的EBS Volume
    一個是開機硬碟、一個是外接硬碟

E.驗證是否可連進去
  1. 回到EC2 Console頁面,點擊上方Connect 有提示的指令可參考,複製第三項ssh連線 更改只有讀的權限
chmod 400 my-ec2-key-pair.pem
  1. 打開終端機
    cd+下載key pair位置
#先到下載pem file的目錄位置
cd ~/Downloads/ (這邊要看你的位置)
#確認目錄底下有pem file
ls -l | grep.pem

#更改不要有write的權限
chmod 400 my-ec2-key-pair.pem

# 更改後 再輸入下列指令 會發現只剩下讀r的權限
ls -l | grep .pem

#回到ec2介面connect 複製指令
# 連SSH
ssh -i "my-ec2-keypair.pem" ec2-user@ec2-34-223-83-38.us-west-2.compute.amazonaws.com(指令從connect to your instance 直接複製,此為示範)

#詢問hostname不認識,要不要繼續,打yes
#此指令意思為SSH帶著pem file 用ec2-user這個帳號進去,目的地是這個instance的public IP(簡單來說就是user用憑證方式連進public subnet中這台ec2)

#連進去後 使用者名稱會顯示此台EC2的Private IP
#去看這台ec2擁有的ebs

lsblk-p 
#-p可以看到完整路徑
#可以看到有一台ebs被mount在根目錄

圖示為terminal畫面,匡起來分別為兩台ebs


黃色那台還沒mount 複製ebs名稱 打下面指令

#去看個硬碟空間的格式化狀態如何
sudo file -s /dev/nvme1n1
# 如果顯示:data表示還沒被格式化 所以作業系統還不行去使用

# 所以來格式化它 打下面指令 後面加上ebs volume名稱
sudo mkfs -t xfs /dev/nvme1n1
#若出現 mkfs.xfs No such file or directory表示還沒安裝此套件
#安裝 (xfsprogs為套件名稱)
sudo yum install xfsprogs

#安裝好再輸入指令 來格式化
sudo mkfs -t xfs /dev/nvme1n1

#再輸入指令+硬碟名稱(/dev/nvme1n1)
sudo file -s dev/nvme1n1
#可以看到不是data,而是XFS filesystem data,表示硬碟空間已經格式化,可被作業系統給使用

ebs mount格式化完成 可被作業系統使用
將ebs mount到某個資料夾
1.創建資料夾
2.資料夾mount到硬碟上
#創資料夾 指令:mkdir+資料夾名稱
mkdir my_data

#mount 指令(sudo mount)+硬碟名稱+folder名稱
sudo mount /dev/nvme1n1 my_data

#查看有沒有成功mount
lsblk-p 

3.資料存到資料夾中
#先進到資料夾裡
cd my_data/

#看目前硬碟使用狀況
df -h

如圖示 硬碟空間有32G 目前只使用65mb


透過指令 創造假檔案 取名為fake_file

sudo fallocat -l 1G fake_file 

再打上指令看目前硬碟使用狀況 會看到已經使用1G的空間了

df -h

ls -lh
#看到fake file在目錄底下佔了1G的空間

五. EC2搭配EBS實作 2/2

A.測試EC2 stop再start後 EBS volune的資料還保留

  1. 到EC2 console介面,點擊上方Action->Instance State-> Stop
    p.s 只有使用ebs volume當root volume才有stop功能
  2. EC2 stop後,再重新啟動,點擊上方Action->Instance State-> Start
    p.s 當EC2 Stop 再重新Start,所拿到的虛擬機可能不是同一台
  3. 測試
    點選connect 複製ssh指令
#(此為示範)
ssh -i "my-ec2-krypair.pem" ec2-user@ec2-44-227-242-90.us-west-2.compute.amazonaws.com 

#進到ec2後
lsblk-p
#目前只有根目錄mount
#要將ebs mount到資料夾

#查看東西
ls
#裡面有my_data資料夾

#mountu 起來 +ebs名稱 +資料夾名稱
sudo mount /dev/nvme1n1 my_data

lsblk-p
#mount 成功

#查看my_data資料夾中有沒有之前建立的檔案
ls my_data
#裡面有之前建立的fake_file

#查看更詳細內容
ls -lh my_data/
#裡面的fake_file 1G確實是之前建立的

由此可見 EC2 Stop再Start,EBS volume的資料都還在不受影響

B.測試EC2 terminate後 EBS volune的資料還保留

  1. 到EC2 console介面,點擊上方Action->Instance State-> Terminate
    測試EC2刪除後,EBS Volume的資料是否還會保留?
  2. 點擊左側Elatic Block StoreVolumes
    作為root storage的ebs已經刪除
    剩下額外加上的EBS Voulme
C.建立新的EC2

  1. 點選左側Instances->Launch Instances
  2. Step1:choose an Amazon Machine Image這邊要決定作業系統
    左側選擇:Community AMIs

operating system:

  • Amazon Linux打勾(沒額外需求,建議選Linux跟雲端環境最相容)

Architecture:

  • 64-bit(x86)打勾

Root device type(開機硬碟)

  • EBS
點完後 右邊的列表擇一選即可

這邊示範選第一個amzn-ami-hvm-2018.03.0.20200602-1_64-gp2

  1. Step2:Choose an Instance Type:
    family:General purpose
    type:t3a.nano
    vCPUs:2
    Memory(GiB):0.5
    Instance Storage(GB):EBS only
    EBS-optimized available:Yes
    Network Performance(虛擬網卡): Up to 5 Gigabit(可以承擔到5GB的流量)
    IPv6 Support: Yes
    -> Next:Configure Instance Details
  2. Step3:Configure Instance Details:
    Number of Instances(一次起幾個Instance):1
    Network:選建立的ec2-demo-vpc
    Subnet:選擇Public Subnet
    Auto-assign Public IP: Enable (會需要Public IP所以Enable)
    ->Next
  3. Step4: Add Storage:用預設即可->Next
  4. Step5:Add Tage:用預設即可->Next
  5. Step6: Configure Security Group:
    用預設即可
    SSh->TCP->22->Custom->0.0.0.0/0
    ->Review and Launch
  6. Step7 Review Instance Launch:點選Launch
  7. Select an existing key pair or create a new key pair:
    • choose an existing key pair
    • 選my-ec2-keypair

download key pair(下載下來,需要用此pem file來驗證)-> Launch Instances

  1. Launch Statis:按下View Instances
  2. EC2起好後,更改EC2名稱為:ec2-ebs-reuse-demo
  3. console左側點選Elastic Block StoreVolumes
    兩個EBS Volume
    一個是剛起起來的開機硬碟、一個是之前建立的外接硬碟

D.新的EC2 attach EBS volume

  1. 承上,點擊32GB的ebs,再按上方的Action
    Attach Volume:
    Instance:選ec2-ebs-reuse-demo那個
    ->Attach
E. 測試
  1. 回到Instance console 頁面 參考connect 指令
  2. terminal 打指令
#連線到EC2
ssh -i "vpc-ec2-002.pem" ec2-user@3.21.106.235 

#查看有哪些ebs volume
lsblk -p
# 32G ebs還沒mount

#創新資料夾
mkdir my data_02

#mount 起來 +硬碟名稱+資料夾名稱
sudo mount /dev/nvme1n1 my data_02

#查看ebs volume 
lsblk -p
#mount 成功

#查看這個ebs裡面有沒有知其創造的fake file如果有表示是同一個ebs
#指令+mountpoint
ls -lh /home/ec2-user/my_data_02
#有fake file 表示ebs 生命週期與ec2是隔開的

六.EBS Snapshot備份建立與使用

A.將EBS轉成EBS Snapshot

Snapshot是以region為單位

  1. 點選左側Elastic Block StoreVolumes:
    一個是ec2用的root volume(8G)
    另一個是ebs volume (32G)
  2. 點選ebs volume (32G) 在點擊上方Actions->Create Snapshot->
  3. Create Snapshot:
    Description: mysnapshot in us-west-2
    ->Create Snapshot
    p.s 點擊右上方查看region(示範中點擊Oregon)為US West (Oregon) us-west-2 寫進Description中
  4. 點擊左側Elastic Block StoreSnapshots**:
    查看創建好的EBS Snapshot 細部沒有顯示AZ 因EBS Snapshot是以Region為單位
B.用Snapshot還原資料

步驟為:刪除ec2->刪除ebs->創ec2->ebs snapshot要跟ec2同一個AZ->驗證

  1. 刪除ec2
    點擊要刪除的EC2,點擊上方Action->Instance State->Terminate

  2. 刪除ebs
    點擊左側Elastic Block StoreVolumes:點擊要刪除的EBS,在點擊上方Action->Delete Volume
    模擬現在資料如果沒有備份 或是資料中心壞了,資料就是整個不見,但是有ebs snapshot就可以還原資料

  3. 創ec2

點擊左側Instances:Launch Instance

Step1:choose an Amazon Machine Image
左側選擇:Community AMIs

operating system:

  • Amazon Linux打勾

Architecture:

  • 64-bit(x86)打勾

Root device type(開機硬碟)

  • EBS
點完後 右邊的列表擇一選即可

這邊示範選第一個amzn-ami-hvm-2018.03.0.20200602-1_64-gp2

Step2:Choose an Instance Type:
family:General purpose
type:t3a.nano
vCPUs:2
Memory(GiB):0.5
Instance Storage(GB):EBS only
EBS-optimized available:Yes
Network Performance(虛擬網卡): Up to 5 Gigabit
IPv6 Support: Yes
-> Next:Configure Instance Details

Step3:Configure Instance Details:
Number of Instances:1(不改)
Network:選建立好的ec2-demo-vpc(不改)
Subnet:選擇Public Subnet(不改)
Auto-assign Public IP:**Enable **(會需要Public IP所以Enable)
-> Next
Step4: Add Storage:用預設即可->Next
Step5:Add Tage:用預設即可->Next
Step6: Configure Security Group:
用預設即可->Next
Step7 Review Instance Launch:點選Launch
Select an existing key pair or create a new key pair:
Choose an existing key pair
key pair name::my-ec2-keypair->download key pair-> Launch Instances

EC2起好後,更改EC2名稱為:ec2-ebs-snapshot-
demo

  1. ebs snapshot轉回去建立EBS Volume
    a) console左側點選Elastic Block StoreSnapshots
    b) 點擊Snapshot->點擊上方Action->Create Volumes->
    c)Create Volumes:
    Volume Type:General Purpose SSD(gp2)
    Size(GiB):32
    AZ:必須跟ec2 instance在同一個AZ:us-west-2d(選跟ec2一樣的)
    ->Create Volume

點擊左側Elastic Block StoreVolumes
查看Snapshot正轉換成EBS Volume

5.將建立好的EBS Volume Attach to EC2

點擊剛建好的32GB EBS Volume,再按上方的Action
Attach Volume:
Instance:選ec2-ebs-snapshot-demo(在同一個AZ所以找得到)->Attach

  1. 測試
    a) 回到Instance console 頁面 參考connect 指令
    b) terminal 打指令 貼上ssh那行指令
#連線到EC2
ssh -i "vpc-ec2-002.pem" ec2-user@3.21.106.235 

#進去ec2後 查看有哪些ebs volume
lsblk -p
# 32G ebs還沒mount

#創新資料夾
mkdir my data_03

#mount 起來 +硬碟名稱+資料夾名稱
sudo mount /dev/nvme1n1 my data_03

#查看ebs volume 
lsblk -p
#mount 成功

#查看這個ebs裡面有沒有之前創造的fake file如果有表示是同一個ebs
#指令+mountpoint
ls -lh /home/ec2-user/my_data_03
#有fake file 表示ebs snapshot轉換過來的ebs 內容物跟之前一樣不變

七.ec2資源清理

  • 刪除ec2
  • 刪除ebs shapshot
  • 刪除ebs volume
  • 刪除keypair
  • 刪除vpc

1. 刪除ec2
Instance console點擊欲刪除ec2 instance->Action->Instance State->Terminate
2. 刪除ebs shapshot
左側Elastic Block Sotre的Snapshot console->點擊欲刪除的Snapshot->Actions->Delete
3. 刪除ebs volume
左側Elastic Block Sotre的Volumes console->點擊欲刪除的Volume ->Actions->Delete Volume
4. 刪除keypair
左側Network&Security的Key Pairs點擊欲刪除的Key Pairs(my-ec2-key-pair)->Actions->Delete
以上為EC2服務上得資源清除 接下來到VPC
5. 刪除vpc
左側Your VPCs->點擊欲刪除的VPC->Actions->Delete VPC

八.EC2-AMI架構介紹

AMI:Amazon Machine Image
用來創造EC2 Instance的模板
AMI組成:

  • operation system
  • Root Device Storage:instance storage或是 ebs
  • Block Device Mapping:連結外部Stotage(root device storage以外的storage,連結到外部硬碟時,需要透過這個當媒介)
  • Launch Permissions

九.AMI實作

vpc-vpc wizard-sinlge and public subnet

chapter5 S3儲存資源

一.

二.

三.

四.

五.

chapter6 RDS資料庫儲存資源

一.

二.

三.

四.

五.

六.

七.

八.

chapter7 IAM 權限管理

一.

Policy

IAM底下的Policy 主要規範誰可以用 或 哪些資源可以被使用,又分為:
Identity-based policy
Resource-based policy

Identity-based policy

  • 一個Identity-based policy有多個statements
  • 一個statements只歸屬於一個policy
  • statement更細部規定可以只用哪些aws服務,其中重要的要素為:
    1. effect(allow/deny):要開放權限還是阻擋權限
    2. action:允許服務到什麼動作
    3. resource: aws service(ex.s3 bucket, RDS instance)

User

套用給誰
每個policy可以給不同user使用
一個user與可以同時擁有不同的policy

Group

一個group裡面可涵蓋多個user
一個user也可以存在多個group中
一個policy可以被多個group使用
一個group可以套用多個policy

Role

一個policy可以給不同role使用
一個role可以套用多個不同的policy
role是:不是user不是登入帳號來使用服務,像是其他aws service(ec2 instance)


Resource-based policy

  • 一個Resource-based policy有多個statements
  • 一個statements只屬於一個policy
  • statement更細部規定可以只用哪些aws服務,其中重要的要素為:
    1. effect(allow/deny):要開放權限還是阻擋權限
    2. action:允許服務到什麼動作
    3. resource(self): aws service(ex.s3 bucket, RDS instance)
    4. proincipal: 服務套用給誰(statement level)

二.

三.

四.

五.

六.

七.

八.

chapter8實作