--- title: AWS 學習筆記 tags: 公司學習 --- ## chapter 1 * AWS: 市佔最高、服務最完整 47% * GCP: 多雲理念、容器服務最專精、台灣法規相容 7% * AZure:原.NET體系直上、原MS方案優惠22% * Alibaba:內需 8% * Other: 16% ## chapter2 ![](https://i.imgur.com/WPdcFBJ.png) :::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 關係介紹 ![](https://i.imgur.com/NE2XRYg.png) * 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內的溝通 ![](https://i.imgur.com/96NVwTm.png) VPC內設立一個Private subnet,並在裡面放置兩台EC2,因instances都在同一個網路空間,所以兩台EC2可以彼此溝通 * Private subnet指的是:網路沒有對外開放/封閉網路 --- #### 2. VPC內 兩個Private Subnet的溝通 兩個Private Subnet內的EC2要溝通的話,需要使用到Route Table ![](https://i.imgur.com/C0AcAVQ.png) ##### 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 ![](https://i.imgur.com/omK0Zo0.png) #### 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 ![](https://i.imgur.com/mzGZeIU.png) --- ### Security #### ![](https://i.imgur.com/bYoWtdv.png) 當外部有請求進來時,會先經過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類似虛擬網卡 ![](https://i.imgur.com/krtYcFz.png) ##### ENI與EC2的關係 大致區分為Network與Compute兩大區塊。 ENI 臨時attach到一台EC2,意思為把虛擬網卡裝在虛擬機上 ![](https://i.imgur.com/7OeqnIq.png) --- * 若有一天,EC2主機掛掉了,原本的ENI會 Detach到另一台EC2上,在網路世界裡是沒有變動的,只有在運算資源裡有變動而已。 * 精準來說,在網路區塊上,SG其實不是給EC2直接使用的,而是屬於ENI的一部分,ENI會再Attach到運算單位的一台EC2上面。 ![](https://i.imgur.com/k5yR6nO.png) #### 四. 實作Publice Subnet to the Internet(IGW) ![](https://i.imgur.com/omK0Zo0.png) 步驟: ##### 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的溝通) ![](https://i.imgur.com/U7LkwtS.png) ##### 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) ![](https://i.imgur.com/mzGZeIU.png) 步驟: 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 ![](https://i.imgur.com/1HwE8DA.png) :::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重點架構 ![](https://i.imgur.com/WQSHM2i.png) ##### 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 ![](https://i.imgur.com/Wq029Ao.png) * 起一台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 ![](https://i.imgur.com/r1SS6HT.png) #### 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種類型,依照需求使用 ![](https://i.imgur.com/0opaAVV.png) **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 高貴快手速 ![](https://i.imgur.com/P0zs12N.png) 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 ![](https://i.imgur.com/GjRwFEK.png) 黃色那台還沒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 ``` ![](https://i.imgur.com/RN7sTIm.png) ###### 3.資料存到資料夾中 ``` #先進到資料夾裡 cd my_data/ #看目前硬碟使用狀況 df -h ``` 如圖示 硬碟空間有32G 目前只使用65mb ![](https://i.imgur.com/vwxMfRh.png) 透過指令 創造假檔案 取名為fake_file ``` sudo fallocat -l 1G fake_file ``` 再打上指令看目前硬碟使用狀況 會看到已經使用1G的空間了 ``` df -h ``` ![](https://i.imgur.com/IS5NxAt.png) ``` ls -lh #看到fake file在目錄底下佔了1G的空間 ``` ![](https://i.imgur.com/3sg0Ts8.png) #### 五. EC2搭配EBS實作 2/2 ##### A.測試EC2 stop再start後 EBS volune的資料還保留 ![](https://i.imgur.com/5yjt60m.png) 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的資料還保留 ![](https://i.imgur.com/bcJpQVR.png) 1. 到EC2 console介面,點擊上方**Action**->**Instance State**-> **Terminate** 測試EC2刪除後,EBS Volume的資料是否還會保留? 2. 點擊左側**Elatic Block Store**的**Volumes** 作為root storage的ebs已經刪除 剩下額外加上的EBS Voulme ##### C.建立新的EC2 ![](https://i.imgur.com/14uSNDl.png) 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 ![](https://i.imgur.com/uMKAvsU.png) 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為單位** ![](https://i.imgur.com/fiAZpsT.png) 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實作 ---