AWSomeDay | 台北 2017 的心得與重點整理

George Chang
origino
Published in
10 min readAug 26, 2017

心得分享

在8/23參加了AWS舉辦的AWSomeDay | 台北2017 活動,認識了AWS上的各種雲端服務。這場研討會的用意就是,介紹你如何用AWS上的各種服務(運算、網路、儲存與資料庫)來完成你的服務平台,無論是網站或者APP。

因為前一家公司是做web hosting為本業,所以我在AWS上涉略就不深,參加研討會才知道原來以前使用過的架構只是在AWS上有不同稱呼,而且以前每台都是虛擬主機,需要花費大量的時間去維護,在AWS上的區分不同的服務就是企業能省去維護主機的成本,專注在實現業務邏輯上。

另外我想舉辦這樣一場免費的研討會,看似是很大的開銷,但隨之帶來的效益應該是很大的,針對最準確的目標客群去行銷,讓這群人了解AWS上各式各樣的服務與應用場景,而且我覺得以他們安排的議題在一天的議程介紹挺剛好的,能夠用一個綜觀的角度去了解各個基礎設施。

最後我會說這是我目前參加過所有的研討會,講師表現最佳的一場會議,無論是台風、口條、解釋的用語、隨機應變能力以及對於時間的掌握都是一流的。

重點整理

Regions & Availability Zones

在租用AWS時有不同的地區可以選擇,而不同的地區就代表AWS在當地有建立資料中心,一般我們會選擇距離服務對象較近的地區,或者用成本考量選擇單價較便宜的地區,而不同的地區至少會有兩座可用區域,這個可用區域的意思就是AWS在該地區有建立多少的資料中心群集。所以在需要做水平擴展及即時備份時,AWS會自動將主機放在不同的可用區域上,也就是不會把資料放在同個籃子內。

Elastic Cloud Compute(EC2)

這個就是AWS的基礎服務,也就是在AWS租用虛擬主機(VM),目前支援Linux與Windows。號稱是3分鐘就可以開好一台VM,事實上也是。另一個特色是可以隨著需求調整機器的效能。

而EC2有針對不同的需求提供各種類型的方案,簡報也直接列出在什麼使用情況下建議選擇的方案:

Instance Metadata & UserData

A. Metadata

AWS也提供一個URL能直接在主機上列出該主機的資訊

$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/

上面範例就是使用curl去從URL去取得metadata。

B. User Data

User Data的用途則是可以存在一份shell script,就能在主機第一次啟動時去執行任務,例如:

#!/bin/sh
yum -y update
yum -y install nginx
/etc/init.d/nginx start

就會在第一次啟動主機時升級yum套件、安裝與啟動nginx。

同樣的也能在主機查詢User Data:

$ curl http://169.254.169.254/latest/user-data/

Virtual Private Cloud(VPC)

從命名上就可看出這個服務是用來做內部與外部的網路配置,例如架設網站時只需要將web server的主機對外公開,至於app server或db server就只需要用內部網路來溝通,另外也支援VPN與公司自有的主機連線。

Simple Storage Service(S3)

AWS的雲端儲存服務,用來儲存靜態資源與備份資料,並提供web api讓開發者能撰寫程式去存取S3,在安全性上也支援SSL(https)傳輸。

架構為Account-> Bucket(up to 100) -> Object(file)。

S3 Versioning

在S3可以開啟Versioning的服務,也就是當檔案有異動 — 例如複寫或刪除時,並不會真的直接改變檔案,而是加上新版本的方式去紀錄變更,不過隨之帶來的問題就是會消耗更多儲存空間(成本)。

S3 Object Lifecycle

在S3上共有三種類別與建議的使用方式:

  1. S3 Standard — 用來存放一般常用的檔案。
  2. Infrequent Access(IA) — 空間上的定價較Standard便宜,但存取時會額外收取費用,所以如果經常存取IA上的資源,費用反而會比放Standard貴許多,故建議存放不需經常存取的檔案。
  3. Glacier — 這個單字是冰河的意思,定價為$0.004 每 GB/月,也就是便宜到嚇死人,但是使用的限制是要存取資料的時間很長,例如標準的時間是3–5個小時,而且也會收取額外的存取費用,建議存放用不著但是又得留著的歷史資料。

在S3的後台可以設定時間,讓物件在超過多久之後自動轉移到開發者設置的類別。

Elastic Block Store(EBS)

這個服務是提供EC2的永久性儲存空間,簡單的說就是加購硬碟的概念,因為在EC2上的儲存空間會在主機stop/start後就消失,因此EC2的local store只建議存放暫時性的資料或者可以重新生成/取得的資料,而需要保持永久的資了當然就需要租用EBS服務。

EBS有SSD與HDD可選擇,差異自然就是IOPS效能、容量與價格上的考量。

並且可以製作snapshot備份資料到S3。

Security —Security Group、Authentication & Authorization — IAM

A. Security Group

AWS的防火牆機制,也就是藉由Security Group規則去套用該主機的網路區端是否要開啟。

B. Identity and Access Management(IAM)

AWS服務的使用者與權限管理,負責驗證與授權。可以藉由開設群組與使用者去限定團隊人員能夠操作的範圍。

比較特別的是IAM Roles,這跟功能跟建立IAM User差不多,但主要是給臨時需要存取公司AWS服務的人。

Database(DynamoDB、RDS)

到了介紹AWS資料庫服務的時候,AWS上有兩種資料庫類型

  1. NoSQL — 在AWS上稱作DynamoDB,是Key-Value DB,沒有固定的schema,根據特性適合作水平擴展,將資料分布在不同服務器上,再根據hash去找尋資料。
  2. RDBMS — RDS,就是AWS的關聯式資料庫,目前支援的引擎有Amazon Aurora, MySQL, MariaDB, MS SQL Server, Oracle與PostgreSQL。

RDS Backups Work & Snapshots

在RDS上可以自動根據transaction log去備份資料庫,或者手動建立snapshot完整備份資料庫到S3,而RDS的snapshot會自動跨地區(region)儲存。

Multi-AZ RDS Deployment

這是AWS上的DB Replication服務,使用Master — Standby(Slave)架構,AWS會自動將Standby存放在與Master不同的Availability Zone(AZ),並且支援failover故障轉移,當Master故障後會自動切換到Standby,並將Standby視為新的Master,然後會啟動另一個新的Standby。

Scaling

Elastic Load Balancing

AWS的負載平衡服務,也就是自動分配請求給多台EC2分散流量,並且提供Health Check進行狀況檢查,在AWS上有兩種類型的負載平衡:

A. Classic Load Balancer

傳統的負載平衡器,可以根據所需加入/移除EC2 instance去調整效能,會有一個TCP/SSL listener去控制分發請求到註冊的EC2 instance上。

B. Application Load Balancer

建立在應用層的負載平衡器,所以可以支援進階的路由設定,例如根據請求的內容、HTTP Header的Host欄位或URL路徑等等的規則去對應到Target Group,再分配到該Target Group註冊的Target(EC2 instance),而一個Target還支援綁定到多個Target Group上。

Monitoring — CloudWatch

AWS的資源監控服務,可以查看各個服務的統計與圖表分析,並且藉由CloudWatch Alarm去設定在資源到達臨界值時寄信通知管理者(SNS Email Notification)以及Auto Scaling。

Auto Scaling

AWS的自動擴展服務(Scale out & Scale in),使用自動擴展有以下三個優點:

  1. 系統的容錯率更高:Auto Scaling會去檢測EC2 instance的健康狀況,如果遇到非健康的服務器,AWS的作法是直接將該服務器關閉,另起一個新的服務器來使用。另外也支援Multi AZ,在原本的AZ無法運作時,一樣會在別的AZ另起一個新的服務器。
  2. 提高可用性:確保你的系統有足夠數量的EC2 instance去支撐你的服務。
  3. 更好的成本控管:Auto Scaling不只是會在需求增加時擴展資源,當需求降低後,也會自動關閉EC2 instance減少成本上的消耗。

而實作上Auto Scaling藉由:

  • Launch Configurations — 提供Scaling group一個模版,也就是告訴Scaling group當需要Scale out的時候如何去開一個EC2 instance。
  • Auto Scaling groups — EC2 instance的集合,可以設定最小與最大值,Auto Scaling就會根據設定的規則自動去增加/減少服務器的數量。

Dynamic Scaling

藉由上面所提到的CloudWatch去設定Scaling policy來定義scale out & scale in的規則。

DynamoDB auto scaling

AWS新推出的服務,可以自動擴展DynamoDB的容量,也可以透過CLI及API擴展,當應用程式捕捉到相對應的Error時,便可以使用SDK去擴展容量。

Certificate

在參加完課程後會頒發出席證明,當然出席證明只代表你有參加課程,不保證你學習了什麼,最主要還是真的有藉由這樣的課程帶領入門去更深入了解AWS的服務及應用場景。

--

--