2016年1月29日 星期五

Amazon EC2使用心得

前陣子為了嘗試 Amazon SES 寄送email的功能,申請了Amazon免費是用一年的帳號,申請時需驗證email、手機、信用卡(但沒要你輸入檢查碼)、信用卡帳單地址


申請一台EC2

登陸後台後,如圖:

功能太多,要從哪裡先下手?
Rellik:你要開機器不就是 ec2 和  vpc( Isolated Cloud Resources ) 先吧,先把 vpc 搞懂再來才是 ec2。
什麼是VPC?
Rellik:vpc 算是網路規劃。你要想好如果是正式服務的話要怎麼規劃網段 scale 起來比較容易。就是當你的量大起來的時候你要怎麼樣比較容易加機器或是量減少時縮減機器,因為ec2 on demand 開機器很貴,所以透過上面的一些監控機制可以做到自動增加和縮減
好複雜喔...
Rellik:小小的複雜,但是對一般養不起 sa 的小公司( rd 自己學 )來說很有用,因為所有事情都可以透過 api 來達成,然後你就可以想辦法把這些東西自動化

選擇ComputeEC2,近入EC2 Dashboard。如圖:
1. 修改地區為東京
2. 點擊 Launch Instance去產生新機器

選主機地點?
Rellik:看你用途,因為有些 aws 的點會有特定服務還沒開通,你有需要用到那些服務的話就得選特定 region,不然就是選離自己最近的,因為 latency 越低越好
東京、首爾、新加坡、美西? 
Rellik:以東京的 scale 來說比起新加坡要大。新加坡之前有人踩到總體頻寬不足的問題。首爾的話是最近新增的 region,沒興趣踩地雷,不然韓國的網路速度應該還算蠻快的。東京的話台灣過去大概在 30~50ms
北京和香港有Amazon嗎?
Rellik:香港沒有,北京不要用,上面連個可用的 image 都沒有。http://www.amazonaws.cn/ 連domain都不一樣了,是個與世隔絕的山寨 aws
amazon有直接搬家服務?
Rellik:不清楚。但有可能是透過 s3,s3 是跨 region 的 service。他把機器打 snapshot 以後儲存到 s3,然後在東京開起來


1. Choose AMI

a. 選擇AWS Marketplace
b. 搜尋debian
c. 選擇非pvm的hvm image

如何選擇image?
Rellik:用官方的,不要用一些有人放出來的 images,一些 user 也會把自己的東西包成 ami,但是有可能被污染過,不要亂用(選 AWS Marketplace頁籤,不要選Community AMIs)
在Choose AMI中第一個Quick Start頁籤的Amazon Linux ( Amazon Linux AMI 2015.09.1 (HVM), SSD Volume Type ) 鏡像,這個好用?
Rellik:不好。amazon linux 是 亞馬遜自己開出的 linux,很近似 redhat 但很多東西都用非常的新版。不建議。可以的話 debian 或是 redhat( 要錢 )
註:雖然在 AWS Marketplace 中搜尋 red hat,會出現 Free tier eligible 標籤的red hat 鏡像,但以Red Hat Enterprise Linux (RHEL) 6 為例 ,每小時的收費是 $0.08 to $5.70/hr incl EC2 charges + other AWS usage fees。或參考下面兩張表
https://aws.amazon.com/marketplace/pp/B00WUNJIEE/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1453969222685  Debian GNU/Linux 8 (Jessie)
https://aws.amazon.com/marketplace/pp/B007ORSS8I?ref=cns_srchrow  Red Hat Enterprise Linux (RHEL) 6
同樣micro的機器,Red Hat $0.086/hrDebian $0.02/hr (但我不知道t1和t2的差別在哪)
Rellik:t2 micro 是最小規格機器
debian和centos哪個好?
Rellik:我會建議你用 debian,centos 找 package 找不到很煩,你如果沒有安裝 epel-relesae 的 yum repo site,你能用的東西幾近於無,我都希望只要透過 yum 能找得到的東西就直接安裝進來就好了,你就不需要管安裝 + 編譯,我有算過 centos 官方 repository .. 才收了 5000 個左右的 package,debian 官方則是有 30000 套以上。光是我弄個 smokeping  centos 就要自己編譯到死,你不會想要自己搞編譯 + dependency
在Community AMIs搜尋debian後出現多個images,如debian-jessie-amd64-hvm-2015-06-07-12-27-ebs和debian-jessie-amd64-pvm-2015-06-07-12-35-ebs。hvm  和pvm差在哪?
Rellik:用 hvm。pvm 是舊型態的 vm type。hvm 在 aws 官方文件上有推薦要你們多用這個。pvm 的話在升級 kernel 的時候會出問題
關於DB要裝哪個版本?
Rellik:建議用 percona,強烈不建議你 mariadb,踩了很多次 mariadb 地雷,官方 mysql 更是不要用,被 oracle 污染的有點嚴重。建議你安裝 mysql5.6 ( percona ),效能非常好

選擇( Select )了image後會出現每小時的收費,如圖
然後按藍色Continue按鈕進入下一步

2. Choose Instance Type

因為是免費試用一年的會員,所以只能選t2.micro。如圖
可以直接點 Review and Launch跳過 3-6的步驟

3. Configure Instance

Rellik:我建議你選 az(availability zones,Subnet那欄) 的時候選在 1b,那邊的 latency 大概在 30ms。另外要有個基本觀念:everything will fail。所以在設計的時候就要把東西盡量以 ha 架構來部署,他之所以有這麼多 region 是因為有過整個 region  fail 的情形。1 region 底下有 multilpe az,1az =  multiple IDC (機房)。所以才要你先搞懂 vpc,vpc 是關係到你的 service整個網路架構 => 他的專有名詞很多,很煩

實際跑一遍時發現沒有1b可以選,就隨便選了,點Create new subnet 後會跳到VPC那邊去

4. Add Storage

Rellik:storage type 有好幾種,你東西要關機之後可以保存著的話,要選 ebs,ebs 又分幾個 type。magnetic volume 代表是本機硬碟,但是這種 type 資料存不住不能關機,關了會消失,原因是你關機之後再開機 , 他因為是 virtual host,所以不一定會開到同樣一台。general purpose 不用算 iops ( input/output per second ) 費用provision iops 這種會算 iops 費用。一般來說 mysql都蠻需要 iops。iops 和 硬碟 through put 有關
如圖:


好複雜...
Rellik:沒辦法,他每個都是錢,但是所有東西都可以弄成 code,包括我們整個 server 架構都可以用 json  code 來表示

5. Tag Instance

沒重點,直接下一步。如圖

6. Configure Security Group

沒重點,直接下一步。如圖

7. Review

把你前面客製化的設定列出來,可以看到我們即將建置Debian 8 t2.micro ebs hvm 每小時0收費的instance。如圖


1. 看完Review後點擊Launch,會出現lightbox(aws網頁做的怪怪的,lightbox跳出來後chrome不能複製(ctrl+c)和搜尋(ctrl+f))
2. 選擇Create a new key pair,生成後下載到電腦上(ex. key.pem
3. Launch Instances

開始創建instance,等待...
最後出現成功的畫面

點擊View Usage Instructions查看你的instance列表
如何刪除instance?
http://serverfault.com/questions/117123/how-to-delete-instances-in-amazon-ec2-change-pair-key
give it some time. deletion of terminated instances is not a high priority task within the EC2 stack (seems reasonable to me). eventually the terminated instance will drop out of the interface.
terminate(終止)後過一段時間他會自己不見

使用PuTTY連線 Amazon EC2
Rellik:建議你機器不要開密碼登入,開 key登入比較保險(實務上不是掛vpn就是用key登陸,不讓外面的ip直接ssh來try帳號密碼),外面 ssh 通常很容易掃得到,都會有無聊人士,所以不建議用密碼登入。
http://unix.stackexchange.com/questions/116303/convert-amazon-pem-key-to-putty-ppk-key-linux
因為AWS下載的.pem檔,不能直接相容於PuTTY
1. 在AWS上下載你的.pem檔(上面步驟的key.pem)
2. 到 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 下載PuTTYgen,並打開他,選擇Type of key to generate為SSH-2 RSA
3. 點擊Load按鈕
4. 設定檔案類型為 *.*
5. 打開你的.pem
6. 點擊 Save private key ,把它存為 ppk
7. 打開PuTTY。Connection -> SSH -> Auth -> Private key file for authentication選擇你產生的ppk檔
8. PuTTY  Session的連線地址設。AWS Instances列表,你的機器的Public DNS
9. 連線後使用者名稱輸入admin(不能輸入root)
10. 連進去後直接 sudo su - 切換成root

申請VPC
因為免費方案不能使用VPC,他的NAT gateway是要收費的( 收費表:http://aws.amazon.com/tw/vpc/pricing/  )因次作罷

安裝nginx後訪問不到
ps aux | grep nginxnetstat -ant | grep 80 看起來都正常,但是外面telent x.x.x.x 80 卻連不上( telnet: Unable to connect to remote host: Connection timed out )
先在 EC2後台查詢你的instances是用哪個 Security groups ,再去左側菜單的 NETWORK & SECURITY => Security groups ,更改你的 Security groups的 inbound
Security groups 就是 AWS的防火牆


參考資料:
Rellik Hsu



沒有留言:

張貼留言