---
title: AWS 學習筆記
tags: 公司學習
---
## chapter 1
* AWS: 市佔最高、服務最完整 47%
* GCP: 多雲理念、容器服務最專精、台灣法規相容 7%
* AZure:原.NET體系直上、原MS方案優惠22%
* Alibaba:內需 8%
* Other: 16%
## chapter2

:::info
套用在雲端服務來看
* 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 關係介紹

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

VPC內設立一個Private subnet,並在裡面放置兩台EC2,因instances都在同一個網路空間,所以兩台EC2可以彼此溝通
* Private subnet指的是:網路沒有對外開放/封閉網路
---
#### 2. VPC內 兩個Private Subnet的溝通
兩個Private Subnet內的EC2要溝通的話,需要使用到Route Table

##### 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

#### 4. VPC內 ㄧ個Private Subnet對外的溝通
Private Subnet中的EC2連Internet時,需要透過一個建立在Public Subnet中的NAT gateway,透過它連到IGW再到Internet
:::info
(Private Subnet-EC2 ->Public Subnet-NAT gateway->Internet Gateway->Internet)
:::
當Private Subnet中EC2要連到Internet的過程:
* 透過Route Table指引
目的地:Internet
下一站:NAT gateway,幫忙導到IGW 再到Internet

---
### Security
####

當外部有請求進來時,會先經過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類似虛擬網卡

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

---
* 若有一天,EC2主機掛掉了,原本的ENI會 Detach到另一台EC2上,在網路世界裡是沒有變動的,只有在運算資源裡有變動而已。
* 精準來說,在網路區塊上,SG其實不是給EC2直接使用的,而是屬於ENI的一部分,ENI會再Attach到運算單位的一台EC2上面。

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

步驟:
##### 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終止
```
2. 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
```
2. 不論要連到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)

步驟:
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 #結束
```
:::success
成功從private subnet >NAT in public subnet > Internet
:::
#### 七. 設定 NACL、 Security Group

:::danger
##### (ㄧ) 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 結束
```
:::danger
##### (二)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 點擊
3. 3. 進到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很低
:::danger
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
4. **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
5. **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
6. **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**
7. **Step5:Add Tage**:用預設即可->Next
8. **Step6: Configure Security Group**:
用預設即可
SSh->TCP->22->Custom->0.0.0.0/0
->Review and 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)
**key pair name:**:my-ec2-keypair->**download key pair**(下載下來,需要用此pem file來驗證)-> **Launch Instances**
11. **Launch Statis**:按下View Instances
12. EC2起好後,更改EC2名稱為:ec2-ebs-demo
13. console左側點選**Elastic Block Store**的**Volumes**
兩個剛起起來的EBS Volume
一個是開機硬碟、一個是外接硬碟
##### E.驗證是否可連進去
1. 回到EC2 Console頁面,點擊上方Connect 有提示的指令可參考,複製第三項ssh連線 更改只有讀的權限
```
chmod 400 my-ec2-key-pair.pem
```
2. 打開終端機
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 Store**的**Volumes**
作為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
3. **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
4. **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
5. **Step4: Add Storage**:用預設即可->Next
6. **Step5:Add Tage**:用預設即可->Next
7. **Step6: Configure Security Group**:
用預設即可
SSh->TCP->22->Custom->0.0.0.0/0
->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
- 選my-ec2-keypair
**download key pair**(下載下來,需要用此pem file來驗證)-> **Launch Instances**
11. **Launch Statis**:按下View Instances
12. EC2起好後,更改EC2名稱為:ec2-ebs-reuse-demo
13. console左側點選**Elastic Block Store**的**Volumes**
兩個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 Store**的**Volumes**:
一個是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 Store**的**Snapshots**:
查看創建好的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 Store**的**Volumes**:點擊要刪除的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
4. ebs snapshot轉回去建立EBS Volume
a) console左側點選**Elastic Block Store**的**Snapshots**
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 Store**的**Volumes**
查看Snapshot正轉換成EBS Volume
5.將建立好的EBS Volume Attach to EC2
點擊剛建好的32GB EBS Volume,再按上方的**Action**:
**Attach Volume**:
Instance:選**ec2-ebs-snapshot-demo**(在同一個AZ所以找得到)->**Attach**
5. 測試
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實作
---