為什麼熟悉Amazon AWS總是高薪工程師的加分條件? 深入淺出的AWS服務教學介紹。
爆炸多選項、對於新手來說極端不友善的AWS,它是有什麼魔力在裡面?
此文章也有影片介紹,可以搭配影片一起學習!
01. AWS免費方案介紹 (所屬課程)
如果開始翻閱各大人力銀行的網路方面的工程師職缺,總是會發現很多高薪工作都會説會Amazon AWS是一個加分。但是你知道嗎?如果沒有AWS需求,工作內容也不會間接碰到AWS,也沒有GCP或是Azure需求的工作,多半薪水都不會高到哪去。
(不過如果工作本身跟網站部署沒關係,是有可能不要求會AWS,因為可以進去再學)。
這麼說當然是有點武斷,不過如果從根本面來看的話,是可以很容易推論出來的。AWS 與其他雲端主機最大的優點就是可擴展性(scalability)。如果你的公司業務發展快速,或是即將發展快速。最怕的就是程式跟不上發展,或是硬體規格跟不上發展。像是做電商最怕的就是做活動都幾十萬元一個月廣告費灑下去了,結果網站掛掉、伺服器(Server)掛掉(就算是手機APP後面也要一台伺服器),錯過讓顧客剁手的黃金銷售時間,多漚啊!
如果用雲端主機的話,只要架構架的對,碰到突如其來的大量流量也可以自動長出新的伺服器去分擔流量。先不論真實情況有沒有優化的空間,至少網站不會即時被打掛而喪失訂單,讓工程團隊有時間去研究就已經是莫大的好處了。
這也是為什麼我們在最前面的時候提到高薪的工作多半都會跟AWS扯上關係。高薪有個常見的必要條件就是公司賺錢,畢竟老闆有賺才會願意分出來,或是老闆預期有賺錢,所以工程費用是必要的支出。而在企業級的雲端服務中,Amazon AWS就是龍頭角色(沒有之一)。如果公司產品即使為了穩定性卻認為依然不值得使用AWS 的服務的話,那可能是
1. 技術層級不高 ,例如文章類型網站,以靜態頁面為主。
2. 產品不賺錢,使用AWS的花費對營收來說也是不能忽略的要素。
3. 產品比較敏感或是老闆比較多疑,認為必須放在自家Server才安全。
第3點是比較不能說他有問題的點,因為確實可能有些資安的疑慮,比方說Google曾經把Gmail內容【非針對】的拿去訓練廣告服務,或是擔心中國大陸的阿里雲會有政治監控問題。
但是可以這樣說,對於那些跨國雲端公司而言,一般可以讓老闆買跑車、住別墅等級的生意,其實也只是九牛一毛而已,真的有興趣到不席一切代價即使嚴重影響商譽的可能性極小,他任何的一個服務都遠賺的比你的服務多。
另外兩個原因對於工程師職涯發展不利,所以如果產品本身技術含量不高,或是老闆整天異想天開做些不賺錢的服務,那還是趕快考慮後路會比較好,時間不等人的。當你的同齡人都跳幾個工作達年薪百萬的時候,你還在年薪不到70,後悔就來不及了。(之後我們會有文章用比較有系統的方式來告訴你薪水是怎麼算出來的,你就會知道這樣工作了5 ~ 6年以上這樣的薪水真的不行。)
講了這麼多還沒開始介紹AWS的服務,那我們接下來就用列表的方式一個一個簡介吧!
(以下依照 Linux雲端伺服器,用AWS暸解Apache與Nginx 課程 AWS章節順序介紹)
1. Amazon EC2 (官網介紹)
全名為 Amazon Elastic Compute Cloud,除去Amazon這個公司名稱後縮寫會是ECC,把兩個C改成 C2 就會變成 EC2。直譯為 Elastic(彈性) Compute(運算) Cloud(雲端),而每個EC2 官方使用的單位是instance(實例),所以應該是彈性雲端運算實例。但大多數時候都直稱EC2,算是最常被使用的AWS 中心服務之一。
如果單獨使用它,他就像是一個VPS一樣,要先選硬體規格與資源。但是是以小時計費,如果關掉它就不會算錢,但不表示除了運算實例以外的部分不算錢。比方說硬碟空間就是可以額外加錢增加,固定連外IP如果閒置下來也是要負額外的費用。但是這些如果考慮得宜其實也不盡然會被徵收費用。
延伸閱讀:學習VPS的重要性與各大Linux VPS 比較(Linode, DigitalOcean, Vultr, AWS Lightsail)
2. Amazon VPC (官方介紹)
全名為 Amazon Virtual Private Cloud,這個比較少直接看到文章解釋該怎麼用。因為它多半會在使用其他服務的時候順便設定。直譯翻譯的話接近Virtual(虛擬) Private(私有) Cloud(雲)。
要了解「私有雲」這個服務必須對網路有一點概念。不曉得大家有沒有用過區域網路,例如公司或是學校宿舍。先不論無線傳輸(雖然概念一樣,但是抽象上比較難理解),如果兩台電腦在「斷網」的情況下要互相連接,基本上就是要有實體線對聯。網路的概念就是 A 連到 B 連到 C 連到 D,然後ABCD電腦透過這些線路彼此之間可以互相看得到。前面提到的「斷網」在台灣其實就是指ABCD電腦彼此之間雖然看得到彼此,卻看不到中華電信的主機,因為沒有實體線路連接過去。那我們就可以稱這個ABCD網路為區域網路,是這幾台電腦私自擁用的網路。
那私有網路有時麼好處呢? 主要就是可以防範被攻擊,有資安上面的益處。外部電腦要攻擊你首先第一件事情就是要找的到你的電腦。如果他根本就無法連線,那也無從攻擊。所以即使是現在,也常常聽到MySQL的3306 port 有零時漏洞被掃瞄。但是如果這個port如果只有在私有雲上面的主機才看得到的話,即使他有天大的漏洞也相對安全,就像是你把錢包放在你家沒上鎖的你的房間裡面。小偷還是要通過你家大門才有可能觸碰到這個房間。
那你會說不能連網怎麼服務客戶?答案當然是至少某一台主機必須要開啟對外的功能。然後在一開始只要針對這個門口進行防護就好了(例如大樓一樓可以安插個管理員的概念)。所以如果你只有一台EC2沒有使用其他的服務的話,那就會感覺不出來這個功能有何用處。但如果分散式架構架設出來的話,就可以很明顯地感覺到了。
Private Network這個概念其實Linode也有,只是AWS很厲害的可以讓你同時設定擁有很多組虛擬雲,並且訪問的權限是可以個別設定的。
3. Amazon S3 (官方介紹)
全名為 Simple Storage Service,縮寫就是三個大寫的S,所以稱為S3。直譯翻譯的話接近Simple(簡單) Storage(儲存) Service(服務)。常見的用法就是當成圖片的外部圖床空間或是檔案,也有聽說有些人會直接配合Amazon Cloudfront 服務製作成靜態網站(比較少見),也有人拿來當作線上影片服務的儲存空間。
S3 大概是除了EC2之外比較常見的使用AWS的原因,通常在圖文網站中都會有圖床(專門放圖的可對外傳輸空間)的需求,這是因為Web Server一次能處理的訪問數是有限的,而圖片、影片、檔案比起HTML文字檔總是大的許多,而且其實不需要使用到後端程式去處理,所以如果放在外部的伺服器可以有效的降低主要伺服器的負載。依照網站性質,就算優化了100倍也是有可能的。而S3就是那個可對外傳輸資料的伺服器空間。
不過S3也有私有雲的概念,所以他除了可以被公開存取外,也可以只被內部存取。S3使用起來跟一般的網路空間沒太大的差異,除了它的根目錄被稱作Bucket(籃子),並且需要為他命名一個獨特的名稱,全世界都不能相同,因為他會對應到外部的URL網址,總不可能不同的使用者用同樣的URL網址互相干擾吧!
講到S3的話就一定需要講到API的功能,因為通常都是先上傳圖片到自己網站後再轉傳到S3上去。所以一定要有API End Point不然無法自動化。不過這段不算困難,Amazon也已經做了SDK讓大家使用,例如PHP版本、Ruby版本。
4. Amazon RDS (官方介紹)
全名為Amazon Relational Database Service,拿掉Amazon再取大寫就是RDS。從Relational Database就可以直接看得出來他是跟關聯性資料庫有關。直譯翻譯的話接近Relational(關聯性) Database(資料庫) Service(服務)。
如果是純使用Linode等VPS的服務,如果想要把資料庫與主程式分開,你必須要多新增一個主機,然後自己在裡面安裝MySQL或是PostgreSQL,並且關於「資料庫備份快照」等功能也必須要自己用Crontab去處理,並且還要找儲存備份的空間。在AWS裡面完全不用,你不用擔心MySQL在安裝的時候的設定,你也不用去想如果被Hack的話怎麼辦。基本上安全性都是由Amazon去處理,而且你還有虛擬私有雲的概念。也不用擔心備份會不會有問題,因為備份的快照服務是RDS的內建功能,要複製出一個一樣的資料庫也是1分鐘以內的事情。儲存空間則是可以選擇直接存在S3裡面(可以設成外部無法訪問)。
RDS服務主要有6個資料庫種類可以選擇,除了常見的MySQL、PostgreSQL、MariaDB,也有大型商業公司常用的Orcle與微軟旗下的MSSQL。當然Amazon也很喜歡用自己的規格綁架使用者,所以製作出了Amazon Aurora這個與MySQL共容的資料庫。但是目前來說沒有特別推薦Aurora(不喜歡被綁架)。
5. Amazon SES (官方介紹)
全名為 Amazon Simple Email Service,拿掉Amazon再取大寫就是SES,主要是寄送Email信的服務。直譯翻譯的話接近Simple(簡單) Email(電子郵件) Service(服務)。
這個服務如果從EC2呼叫是免費的,每個月有62,000封免費,每天最高可以寄送五萬封Email(超過每月免費額度就要付費,每千封0.1美元約3塊台幣),以數字上來講是很可觀的。一般的Email寄送服務免費額度到1萬就已經非常多了。Amazon給到62,000是很難用的完的一個數量,如果各位有在用Gmail的話,Gmail一天的上限大概是500左右。
如果有要使用這個服務,第一件事是需要自己的網址網域,並且在DNS上面輸入一些驗證用的紀錄(Record)。不過有兩個缺點,一個是寄送IP位置與其他使用者是共用的。因此如果對象網站有依照IP來封鎖Email寄送的話,那就很麻煩,信會寄不出去。聽說有些Email服務會有這個問題,這時就要付費購買IP Address了。
另一個問題是收信問題,如果是直接使用的話,其實無法讀取Email。 只能存在S3裡面管理,並沒有人類看得懂的介面。當然,再加上一些其他的服務就可以避開這個問題。但整體還說是相當不方便的!
6. Amazon SNS (官方介紹)
全名為 Amazon Simple Notification Service,拿掉Amazon再取大寫就是SNS,直譯翻譯的話接近Simple(簡單) Notification(通知) Service(服務)。
這個服務也是常存在各種服務之中。主要去監聽系統活動,並且發送通知訊息。這服務有兩個比較明顯的概念,第一個就是通知使用者,比方說寄送Email通知某個S3 bucket增加了東西,或是寄送簡訊。
另外一個是驅動其他程式。AWS裡面有很多服務都是需要被驅動的,這時候就可以把接收器跟目標服務綁定再一起,當SNS發生的時候,就會執行目標服務。算是在全自動服務中相當重要的糨糊型功能。
7. Amazon CloudFront (官方介紹)
使用S3在雲端服務上有的一個直接的好處是可以降低Request數量,進而讓你的Server可以降低負載,同時服務更多的訪客。但是即使是S3也還是有機房的概念。也就是說你的資料是存在單一實體位置裡面,也就會有物理限制。例如如果你把資料放在東京(Tokyo)的機房,那去到北美就會有距離這個物理上的速度限制。
前面有提到S3主要是一個儲存空間,主要儲存的是靜態的文件檔案,那如果今天先把這樣的檔案先在全球各地都放一個副本,如果有人訪問他就直接送最近的副本給他,那距離的問題就解決了。這也就是CDN的概念
為了要達到這個目的,必須要有很多基礎設施的協助,對一般人來說並不是這麼的容易。不過Amazon有提供這個功能,也就是CloudFront這個功能,而且他在一般使用的費用上面,雖然會比S3貴一些,不過整體來說也算是便宜的選項,CloudFront設定完成後會是自動同步S3的(同步的範圍可以設定),算是相當的好用!
延伸閱讀:為何Netflix等跨國商業網站因為地理位址而影響服務速度?關鍵在於CDN
8. AWS IAM (官方介紹)
這個不太算是Features (功能特點),但是在團隊和程式管理上面很方便。AWS 很多的服務都可以靠API或是Command Line指令的方式達成,當然也有很”豐富“的後台User Interface(UI)介面。不過很多時候,我們會希望功能可以讓程式自動完成,比方說如果我們上傳到網站後就自動上傳到S3。但是我們不可能讓所有人都可以隨便用其他的軟體上傳,所以必須要有權限管理的機制。IAM就是這方面的功能。
IAM除了可以限制使用者,還可以管理使用者權限,比較特別的是他的使用者權限管理得很細,讀寫可以分離,即使是超級使用者也可以分成是後台UI用或是Command Line指令用。每個AWS的服務的權限是分開的,也有User使用者與Role角色的設定方式,也可以單獨廢棄掉某個使用者或是某個授權的Key(如果不小心洩漏的話)。總之非常的詳盡,但也因此入門的時候會有點卡。但是熟悉以後對於資訊安全是會有顯著的幫助的。
9. Elastic Load Balancer / Auto Scaling (官方介紹 、官方介紹)
對於現代的網路架構,Load Balancer算是一個非常必要的工具。現在的分散式架構為了解決時間週期性的大小流量變化,使用了叫做Auto Scaling的技術。簡單的來說就是在流量大的時候多開幾台機器,流量小的時候關掉多餘的機器。但是在實現Auto Scaling之前會先碰到要如何把流量平均分配給多台機器這個問題。為了解決這個問題,所以就想出了以反向代理技術為基底的Load balancing 技術。
一個Domain URL只能對應一個IP,雖然理論上Sub Domain可以有很多個,但是實際上訪客只會用同一個Domain進行連線,所以要解決的問題就是如何把同一個Domain 下得流量分留給多台機器。
方法就是在所有的機器前面在建立一台機器先接收所有的流量,但是不處理Reqeust,而是分發給其他的機器Server處理,有點類似總機的概念。一般如果要自己建立的話,可以使用Nginx再加上一些設定與調整。但是如果你用的是AWS Load Balancer的話,基本上就是隨開即用。
AWS的Load Banlancer除了可以處理一個Domain下的所有要求,其實也可以一起處理多個Sub Domain,甚至是單個URL對應到不同的EC2實體都是可以的。所以一個Load Banlancer是可以處理超過一個網站的,也可以處理超過一個入口網站(因為不是每一個網站都是對外開放的,前面提到的VPC機制)。
AWS的Load Banlancer還有一個特別的服務,就是加上HTTPS不用錢,只要你有使用AWS的Load Banlancer,就可以免費使用AWS的ACM機制,免費加上SSL憑證喔,而且不用像Let's encrypt 一樣需要設定自動更新,AWS會幫你處理好的。
10. AWS ElasticCache (官方介紹)
In memory cache 一直都是動態網站最好用的快取機制,畢竟新型態的銷售方式是會依據顧客的使用情況來變化網頁頁面的,比方說推薦系統,或是通知系統。如果要做這方面的Cache,現在的主流就是Redis或是歷史相對悠久也很多人使用的Memcached。
不過In memory cache會使用系統的memory,會擠壓到Application能使用的資源,又因為Auto Scaling的關係,所以每台Cache都有可能會重複或是不完整。因此拉出來成為獨立的服務是一個很自然的解法。如果使用AWS Elastic Cache,就等於是Amazon幫你設定好了Redis或是Memcached(可以自己選),是個方便的隨開即用功能。只要VPC設定沒有問題,速度也是相當的快的。
延伸閱讀:[不是工程師] 讓網站速度飛快的秘密,你了解什麼是網頁快取(Cache)嗎?
11. AWS Certificate Manager (官方介紹)
現在為了安全,只要是網站都推薦使用HTTPS的協定(Protocol),而非單純的HTTP而已。但是HTTPS需要SSL憑證,市面上很多都需要付費。當然也有不用付費的Let's Encrypt或是CloudFlare,他們彼此都有使用上的優缺點與設定上的麻煩度。而AWS Certificate Manager 就是AWS提出來的解決方案。
只要你使用的服務是Elastic Load Balancing、Amazon CloudFront 及 Amazon API Gateway這些整合型的服務,那你都可以免費使用AWS 提供的SSL 憑證,而且還是類似Wildcard形式的,連子網域都包含進去。不過其他的AWS服務或是外部的服務就無法使用了,比較麻煩的是你想付錢使用它也沒有這個選項。
所以如果你單純使用EC2而沒有Elastic Load Balancing的話,那還是只能用其他的非AWS服務來解決(例如Let's Encrypt)。
延伸閱讀:[不是工程師] 差一個字差很多,HTTP 不等於 HTTPS
。。。剩下的功能因為課程還沒有講到,所以之後再繼續補充喔!
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!