iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

昨天設定好網路,今天我們要來啟動機器了!

EC2 的全名是 Elastic Compute Cloud,我們可以在裡面開各種 CPU、不同大小的記憶體及硬碟的機器,在 EC2 開啟的機器稱為 EC2 instance。

首先進到 EC2 的 Instances 頁面:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671ICzC2c74Fa.png

點選右上角 Launch instances,設定 EC2 instance 名稱:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671k1lXBmJ2dU.png

接著選擇作業系統,這邊我們用 Ubuntu Server 22.04 LTS,使用預設 64-bit (x86) 架構:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671p0gdqMT1rK.png

接下來要設定 EC2 instance type。

EC2 instance 有多種 type,不同 type 會有各自不同的 CPU、記憶體、儲存空間及網路組合,依據適用情境大致分為 General Purpose(一般用途)、Compute Optimized(運算優化)、Memory Optimized(記憶體優化)等等。這些 type 用像 m5a 這樣的名稱表示,第一個字母代表它是一般用途、運算優化還是記憶體優化等等類型,數字表示第幾代的機器(通常都會用能用到的最新的),最後一個字母表示硬體 CPU 架構不一定會有。可以到 官方執行個體類型頁面 查有哪些 type、它們的硬體架構等資訊來決定要使用的 EC2 instance type。

決定類型跟硬體架構後,還要決定 EC2 instance 的大小(instance size)。instance size 決定 instance 有多少 CPU 跟記憶體,一樣可以在 官方頁面 查到,例如 t3.small 有 2 個 CPU、2G 記憶體。決定 instance size 的考量當然是使用上需要多少 CPU 跟記憶體資源,以及花費(aka 錢錢)啦~越大台的 instance 每小時收費越高。

AWS EC2 instance 收費有很多種,各有各的使用條件,這邊我們只看隨需(on-demand),也就是你想用就開來用、不想用就關掉的模式。官方收費頁面 可以查到各種 instance type 的每小時費用,注意每個 region 跟作業系統的收費各不相同,要選擇預計開機器的 region 來查價錢(這邊我們選東京 Tokyo)跟 Linux,我們可以看到 t3.small 是每小時 $0.0272(這是美金!)。

這邊筆者選用 t3.micro ,各位可以依據自己的預算決定,如果在免費試用期間建議使用有標註 free tier 的 type。

https://ithelp.ithome.com.tw/upload/images/20230914/20160671ReojRWi336.png

再來我們要指定一組用來登入 ssh 的 key pair,如果之前有建立過 key pair 可以直接選擇,沒有的話也能從旁邊新增。

https://ithelp.ithome.com.tw/upload/images/20230914/20160671kpXMK4LfuH.png

我們新增一組 key pair,給個名字、選擇加密的方式 RSA。最後是 key 的格式,如果在 linux 上選 .pem ,如果在 windows 上使用 putty 則選 .ppk

https://ithelp.ithome.com.tw/upload/images/20230914/20160671jtfdvesFoj.png

點選 Create key pair 後,會讓你下載 private key 檔案,這個檔案要存好,等一下會用來連 EC2 instance。回到啟動 EC2 的畫面,按右邊轉圈圈重新載入 key pair 後選擇剛剛建立的 key pair。

https://ithelp.ithome.com.tw/upload/images/20230914/20160671MVF1QqOtj7.png

再來 Network settings 要先按 Edit 好進入編輯。VPC 跟 subnet 選剛剛開好的,Auto-assign public IP 要 enable,這樣等等才有 public IP 可以連 EC2 instance。

Firewall 的部分要設定 security group。

Security Group 由一組控制網路流量是否能通過的 rule 組成,可以想成包在 EC2 instance 外面的防火牆。預設會阻擋所有連線進入(inbound traffic),要加 rule 表示對哪些來源(source)開啟哪些 port。如果想從自己的電腦用 ssh 連進 EC2 instance,必須在 security group 加一個相應的 rule,不然試圖連進 EC2 instance 的連線會被 security group 擋下來。

直接看怎麼做吧~security group 是跟著 VPC 的,建立一個新的:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671UFxc2r4Yzl.png

inbound rule 的設定中,source type 選 My IP 會自動帶入你的 IP address。如果你的 IP 是動態 IP,每次連 EC2 instance 前要確認 security group 設定的 IP 是不是你當下的 IP,不然會連不上 (然後會找很久搞不懂為什麼連不上) 。type 選 ssh 或者用 TCP protocol、port range 22,表示來自我們 IP、要進到 tcp port 22 的 traffic 是可以通過的。

https://ithelp.ithome.com.tw/upload/images/20230914/20160671nYhgOwOcLt.png

大家有沒有想過,我們設定了 inbound rule 讓我們電腦送出的 traffic 可以進入 EC2 instance 的 port 22,那麼 EC2 instance 回傳的 traffic 應該也要設定對應 outbound rule,不然 response 應該會被擋下來?但 response 卻回得來?

這是因為 security group 是 stateful,它會記錄 request 並放行對應的 response——如果送給 EC2 instance 的 request 可以通過 security group,那從 EC2 instance 回傳的 response 出去也不用管 outbound rule、可以直接通過。反之,如果一個 request 是從 EC2 instance 發出,那麼送回給 EC2 instance 的 response 不管 security group inbound rule 是什麼都可以通過。因此我們在 security group 只需要設定 inbound 的部分。

AWS 有另一個服務跟 security group 類似、也是防火牆功能——Network ACL。它同樣能允許及限制網路流量的進出。不過 Network ACL 是 stateless,需要正確設定 inbound 跟 outbound 才會通,而且它作用的層級是在 subnet 而不是 instance 上。因為預設會有一個全部允許通過的 network ACL associate 在 subnet 上,我們不用特別去修改 network ACL。本系列文也不會去調整 network ACL,有興趣的朋友可以自行實驗。

接下來指定 EC2 instance 的硬碟大小,只要能安裝下 Ubuntu 還有些空間可以給之後 Gitlab Runner 跟 Docker 使用,隨喜好設定即可。

https://ithelp.ithome.com.tw/upload/images/20230914/20160671uL9Az6PwOa.png

剩下 Advanced details 通通使用預設值。

我們可以看到右邊 summary 顯示要開的 EC2 instance 資訊:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671t7VUqMagLK.png

最後 Launch instance 給它按下去~正常會看到成功畫面:

https://ithelp.ithome.com.tw/upload/images/20230914/20160671I5DQNlVqPJ.png

在 instances 頁面可以看到啟動的 EC2 instance:

https://ithelp.ithome.com.tw/upload/images/20230914/201606713tU0jbaFKE.png

SSH 連線進 EC2 Instance

最後我們要用 ssh client 連進 EC2 instance,從列表上選取 instance 後可以在下方的資訊中找到 public IPv4 address,用剛剛下載的 key 來連線:

$ ssh -i ~/.ssh/gitlab-runner.pem ubuntu@13.231.188.176

正常的話就能順利連進 EC2 instance~

如果連不上,先檢查 security group 有沒有設對!(很多時候連不上是因為 security group 設錯或沒有在 EC2 instance 上綁正確的 security group~)

目前架構

今天最後我們來看看到目前為止建立的整體架構。

下圖最外圍是 region,我們選在東京 ap-northeast-1,裡面開了一個 VPC 並且 attach internet gateway。VPC 內切出一個 subnet,利用 route table 把流量導向 internet gateway。像這樣有直接的 route 通往 internet gateway、可以跟 internet 直接溝通的 subnet 稱為 public subnet (ref)。最後是在 public subnet 中啟動一台 EC2 instance。

https://ithelp.ithome.com.tw/upload/images/20230914/201606715GXh4pKsUW.png

停止(stop)EC2 instance

EC2 instance 開著是會被收費的,不使用的話可以選取 instance、到右上角的 action 裡點選 stop instance 把 EC2 instance 關機。在 stopped 狀態的 EC2 instance 不會收費,但是它的硬碟 EBS volume 還是會依據大小收費。如果再也不用這台 EC2 instance,可以從 action 中 terminate 它,整台機器就會被終止、無法再開啟,一小段時間後 EC2 instance 跟 EBS volume 會被刪除(預設狀況下會刪除 EBS volume,但也可以選擇保留)。

Reference


上一篇
Day 3 AWS 的網路:VPC
下一篇
Day 5 Hello Gitlab Pipeline
系列文
AWS ECS + Gitlab + Laravel + Terraform 從入門到摔坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言