Sean's Note: 2018

2018年11月10日 星期六

AWS 學習筆記 (五) - Monitoring and Security 監控與安全性

Cloudtrail

官方介紹:
---------------------------------------------------------
AWS CloudTrail 是可啟用 AWS 帳戶管控、合規、操作稽核和風險稽核的服務。使用 CloudTrail 可以記錄、持續監控和保留 AWS 基礎設施中所有與動作相關的帳戶活動。CloudTrail 可提供 AWS 帳戶活動的事件歷史記錄,包括透過 AWS 管理主控台、AWS 開發套件、命令列工具及其他 AWS 服務所採取的動作。這個事件歷史記錄簡化了安全分析、資源變更追蹤和故障排除的程序。
---------------------------------------------------------

筆記:
Cloudtrail 可紀錄 CLI, SDK 與 API 被呼叫的情況。譬如說監測帳號是否被盜用來建立莫名的 EC2 Instance 或 S3 buckets,又或者用來查看誰對某個 S3 object 做了操作。Cloudtrail 將會紀錄近 90 天的 Event history。Event 又分為 Management Event 和 Data Event,Data Event 僅提供 S3 和 Lambda。
當 Cloudtrail 的設定套用至所有 Regions 時,只要未來 AWS 新增了 Region,這些設定也會自動被套用。

Network Access Control List (ACL)

官方介紹:
---------------------------------------------------------
「網路存取控制清單 (ACL)」是 VPC 中的選用安全 layer,作用就像防火牆,可控制一或多個子網路的傳入和傳出流量。您可以使用與您的安全群組相似的規則來設定網路 ACL,以為您的 VPC 新增額外的安全 layer。如需安全群組與網路 ACL 間差異的詳細資訊,請參閱安全群組和網路 ACL 的比較。
---------------------------------------------------------

筆記:
ACL 基本事項:
  • VPC 已自動隨附可修改的預設網路 ACL。根據預設,它會允許所有傳入和傳出 IPv4 流量與 IPv6 流量 (如適用)。 
  • 可以建立自訂網路 ACL,並將其與子網路建立關聯。根據預設,在新增規則之前,每個自訂網路 ACL 都會拒絕所有傳入和傳出流量。 
  • VPC 中的每個子網路都必須與一個網路 ACL 建立關聯。如果未明確將子網路與網路 ACL 建立關聯,子網路就會自動與預設網路 ACL 建立關聯。 
  • 您可以將多個子網路與某個網路 ACL 建立關聯,不過一個子網路一次只能與一個網路 ACL 建立關聯。當您為網路 ACL 與子網路建立關聯時,系統就會移除先前的關聯。 
 
・資料來源:AWS 官方網站

2018年11月4日 星期日

AWS 學習筆記 (四) - 常使用的 AWS Services 簡介 - Part 2

VPC Endpoints

官方介紹:
---------------------------------------------------------
VPC 端點可讓您將 VPC 私下連線至支援的 AWS 服務以及具有 PrivateLink 功能的 VPC 端點服務,而不需要網際網路閘道、NAT 裝置、VPN 連接或 AWS Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址,即可與服務中的資源通訊。VPC 與另一個服務之間的流量都會保持在 Amazon 網路的範圍內。 端點是虛擬裝置。端點為一種可水平擴展、備援且高可用性的 VPC 元件,允許 VPC 中之執行個體與服務之間的通訊,而不會強加網路流量的可用性風險或頻寬限制。 有兩種 VPC 端點類型:「界面端點」和「閘道端點」。請建立支援的服務所需要的 VPC 端點類型。
---------------------------------------------------------


用一些實際的例子來說明:
假設今天想要讓 EC2 存取 public 的服務,像是 S3 或 DynamoDB,此時就得讓該 EC2 位於 pubic subnet,但這當然有安全上的疑慮,所以我們為了保持 EC2 位於 private subnet,就可以透過設定 VPC Endpoints,來連到 S3 或 DynamoDB 等 public 的服務。

CloudFormation

官方介紹:
---------------------------------------------------------
AWS CloudFormation 提供一種通用語言,可用來描述和佈建雲端環境中的所有基礎設施資源。CloudFormation 可讓您使用簡單的文字檔以自動且安全的方式,在所有區域和帳戶為應用程式所需的資源建立模型並進行佈建。這個檔案是雲端環境唯一的真實資料來源。 使用 AWS CloudFormation 無須支付額外費用,只需支付應用程式執行所需的 AWS 資源費用。More...
---------------------------------------------------------

Elastic Beanstalk

官方介紹:
---------------------------------------------------------
AWS Elastic Beanstalk 是一項易用的服務,用於在熟悉的伺服器 (例如 Apache、Nginx、Passenger 和 IIS) 上部署和擴展以 Java、.NET、PHP、Node.js、Python、Ruby、Go 和 Docker 開發的 Web 應用程式和服務。 您只需上傳程式碼,從容量佈建、負載平衡、自動調整規模到應用程式運作狀態監控的部署,Elastic Beanstalk 都可為您自動處理。同時,您能夠完全控制為應用程式提供支援的 AWS 資源,並可隨時存取基礎資源。 Elastic Beanstalk 不收取其他費用 – 您只需支付使用 AWS 資源存放和執行應用程式的費用。
---------------------------------------------------------

Lambda

官方介紹:
---------------------------------------------------------
使用 AWS Lambda 執行程式碼,不必佈建或管理伺服器。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。 有了 Lambda,您可以透過虛擬方式執行任何類型的應用程式或後端服務,全部免管理。只需上傳程式碼,Lambda 就會運用其高可用性來處理執行程式碼及擴展規模所需的各項工作。您可以將自己的程式碼設成可以從其他 AWS 服務自動觸發,或從任何 Web 或行動應用程式直接呼叫。
---------------------------------------------------------


Elastic Container Service (ECS)

官方介紹:
---------------------------------------------------------
Amazon Elastic Container Service (Amazon ECS) 是可高度擴展的高效能容器協調服務,支援 Docker 容器,可讓您在 AWS 上輕鬆執行及擴展容器化應用程式。使用 Amazon ECS 無須安裝和操作自己的容器協調軟體、管理和擴展虛擬機器叢集,也不用排程這些虛擬機器上的容器。 您可以呼叫簡單的 API,借此來啟動和停止支援 Docker 的應用程式、查詢應用程式的完整狀態以及操作許多熟悉的功能,例如 IAM 角色、安全群組、負載平衡器,Amazon CloudWatch Events、AWS CloudFormation 範本和 AWS CloudTrail 日誌。
---------------------------------------------------------

Kinesis

官方介紹:
---------------------------------------------------------
Amazon Kinesis 可輕鬆地收集、處理和分析即時串流資料,讓您及時取得深入的見解並快速地對新資訊做出反應。Amazon Kinesis 提供的重要功能透過經濟實惠的方式處理任何規模的串流資料,還可讓您彈性選擇最符合應用程式需求的工具。使用 Amazon Kinesis,您可以導入即時資料,例如影片、音訊、應用程式日誌、網站點擊流和 IoT 遙測資料,用於機器學習、分析和其他用途。Amazon Kinesis 可讓您在資料到達時就進行處理和分析,並立即回應,無須等待收集所有資料之後再開始處理。
---------------------------------------------------------

Redshift

官方介紹:
---------------------------------------------------------
Amazon Redshift 是快速可擴展的資料倉儲,在分析資料倉儲和資料湖中的所有資料時不僅簡單易用且經濟實惠。Redshift 使用了機器學習、大量並行查詢執行及高效能磁碟上的單欄式儲存,因此它的效能比其他資料倉儲快十倍。您在幾分鐘內即可設定和部署新的資料倉儲,然後在 Redshift 資料倉儲中查詢數 PB 的資料,以及查詢 Amazon S3 上所建置之資料湖中數 EB 的資料。您可以從每小時 0.25 USD 的小規模開始,然後擴展到每年每 TB 250 USD 的規模,成本僅為其他解決方案的十分之一。 若要建立您的第一個 Amazon Redshift 資料倉儲,請依照我們的入門指南並充分利用您的經驗。聯絡我們以請求概念驗證或評估的支援。為了加速移轉到 Amazon Redshift,您可以免費使用 AWS Database Migration Service (DMS) 六個月。
---------------------------------------------------------

ElasticCache

官方介紹:
---------------------------------------------------------
Amazon ElastiCache 提供全受管的 Redis 和 Memcached。無縫地部署、執行和擴展常見的開放原始碼相容記憶體內資料存放區。從高輸送量和低延遲記憶體內資料存放區擷取資料,可建立資料密集型應用程式或提高現有應用程式的效能。Amazon ElastiCache 是遊戲、廣告技術、金融服務、醫療保健和 IoT 應用程式的熱門選擇。
---------------------------------------------------------

Storage Gateway

官方介紹:
---------------------------------------------------------
AWS Storage Gateway 是混合式儲存服務,可讓現場部署應用程式順暢無縫地使用 AWS 雲端儲存。您可以使用此服務進行備份和存檔、災難復原、雲端資料處理、儲存分層和遷移。您的應用程式透過使用 NFS、SMB 和 iSCSI 等標準儲存協定的虛擬機器或硬體閘道設備連接服務。此閘道連接 Amazon S3、Amazon Glacier 和 Amazon EBS 等 AWS 儲存服務,可在 AWS 為檔案、磁碟區和虛擬磁帶提供儲存。此服務包含高度優化的資料傳輸機制,以及頻寬管理、自動網路恢復和有效的資料傳輸,還搭配本機快取,讓您以低延遲的方式在現場部署存取最常用的資料。
---------------------------------------------------------

Elastic Map Reduce (EMR)

官方介紹:
---------------------------------------------------------
Amazon EMR 提供受管的 Hadoop 框架,讓您以輕鬆、快速且經濟實惠的方式,在動態可擴展的 Amazon EC2 執行個體之間處理大量資料。您也可以執行其他常用的分散式架構 (例如 Amazon EMR 中的 Apache Spark、HBase、Presto, 和 Flink),並與其他 AWS 資料存放區 (例如 Amazon S3 和 Amazon DynamoDB) 中的資料進行互動。 Amazon EMR 能夠安全可靠地處理各式各樣的大數據使用案例,包括日誌分析、Web 索引、資料轉換 (ETL)、機器學習、財務分析、科學模擬和生物資訊學。
---------------------------------------------------------

OpsWorks

官方介紹:
---------------------------------------------------------
AWS OpsWorks 是可提供受管 Chef 和 Puppet 執行個體的組態管理服務。Chef 和 Puppet 是可讓您使用程式碼自動設定伺服器組態的自動化平台。OpsWorks 可讓您使用 Chef 和 Puppet 自動化伺服器的設定和部署方式,以及如何在 Amazon EC2 執行個體之間和現場部署運算環境中進行管理。我們提供三種 OpsWorks 產品:AWS Opsworks for Chef Automate、AWS OpsWorks for Puppet Enterprise 和 AWS OpsWorks Stacks​。
---------------------------------------------------------

API Gateway

官方介紹:
---------------------------------------------------------
Amazon API Gateway 是一種全受管的服務,可讓開發人員輕鬆地建立、發佈、維護、監控和保護任何規模的 API。只要按幾下 AWS 管理主控台,您就能建立 API 作為應用程式從後端服務 (例如,在 Amazon Elastic Compute Cloud (Amazon EC2) 上執行的工作負載、在 AWS Lambda 上執行的程式碼,或任何 Web 應用程式) 存取資料、商業邏輯或功能的「門戶」。 Amazon API Gateway 負責處理有關接受和處理多達數十萬個並行 API 呼叫的所有工作,包括流量管理、授權和存取控制、監控和 API 版本管理。Amazon API Gateway 沒有最低費用或啟動成本。您只需為收到的 API 呼叫以及傳出的資料量付費。
---------------------------------------------------------

2018年10月28日 星期日

AWS 學習筆記 (四) - 常使用的 AWS Services 簡介 - Part 1

Cloudwatch

官方介紹:
---------------------------------------------------------
Amazon CloudWatch 是針對開發人員、系統業者、網路可靠性工程師 (SRE) 和 IT 管理員建置的監控和管理服務。CloudWatch 為您提供資料和可行的洞見以監控應用程式、了解並回應整個系統的效能變化、優化資源使用情況,以及透過整合的檢視來查看運作狀態。CloudWatch 以日誌、指標和事件的形式來收集監控和運作資料,為 AWS 與現場部署伺服器上執行的 AWS 資源、應用程式和服務提供一個整合的檢視。您可以使用 CloudWatch 來設定高解析度警示、將日誌和指標並列展示、採取自動動作、對問題進行故障診斷,還有探索洞見以優化應用程式,以確保其執行順暢。
---------------------------------------------------------

Elastics Load Balancing 

假設今天有兩個以上的 EC2 Instances,我們要如何適當的分配使用者的請求,以避免所有的使用者集中在同一個 EC2 而導致資源過載。

官方介紹:
---------------------------------------------------------
Elastic Load Balancing 可在多個目標 (例如 Amazon EC2 執行個體、容器與 IP 地址) 之間自動分配傳入的應用程式流量。它可以在單一可用區域或跨多個可用區域處理您應用程式流量的各種負載。Elastic Load Balancing 提供三種負載平衡器,它們都具有下列特性:高可用性、自動擴展,以及讓您的應用程式具備容錯功能的強大安全防護。More...
---------------------------------------------------------

AWS 又為 Elastic Load Balancing 提供了三種選擇:

  1. Classic Load Balancer - 基本款。
  2. Application Load Balancer - 適合用於處理 HTTP/HTTPS 流量的負載平衡。
  3. Network Load Balancer - 適用於需要極高效能的情況下處理 TCP 流量的負載平衡。

Autoscaling

官方介紹:
---------------------------------------------------------
AWS Auto Scaling 可監控應用程式並自動調整容量,盡可能以最低成本維持穩定、持續的優異效能。使用 AWS Auto Scaling,幾分鐘內即可為多項服務的多種資源輕鬆設定應用程式擴展功能。這個服務提供簡單而強大的使用者界面,可讓您各種資源打造擴展計畫,包括 Amazon EC2 執行個體和 Spot 叢集、Amazon ECS 任務、Amazon DynamoDB 表格和索引,以及 Amazon Aurora 複本。AWS Auto Scaling 可為您推薦合適的解決方案,協助您有效提升效能、降低成本,在兩者之間取得絕佳平衡,讓擴展作業不再繁瑣複雜。如果您已使用 Amazon EC2 Auto Scaling 動態擴展 Amazon EC2 執行個體,現在可以進一步結合 AWS Auto Scaling,為其他 AWS 服務提供更多資源。有了 AWS Auto Scaling,應用程式就能在需要時取得合適的資源。 透過 AWS 管理主控台、命令列界面(CLI)或 SDK 輕鬆開始使用 AWS Auto Scaling。使用 AWS Auto Scaling 不會產生額外費用。您只需支付執行應用程式時所需的 AWS 資源費用和 Amazon CloudWatch 監控費用。
---------------------------------------------------------

Route 53

官方介紹:
---------------------------------------------------------
Amazon Route 53 是一種可用性高、可擴展性強的雲端網域名稱系統 (DNS) Web 服務。該服務旨在為開發人員和企業提供一種非常可靠且經濟實惠的方式,將名稱 (如 www.example.com) 轉換為電腦用於互相連接的數字 IP 地址 (如 192.0.2.1),藉以將最終使用者路由到網際網路應用程式。Amazon Route 53 也可與 IPv6 完全相容。 Amazon Route 53 高效地將使用者請求連接到 AWS 中執行的基礎設施,例如 Amazon EC2 執行個體、Elastic Load Balancing 負載平衡器或 Amazon S3 儲存貯體,還可以將使用者路由到 AWS 外部的基礎設施。您可以使用 Amazon Route 53 設定 DNS 運作狀態檢查以將流量路由到狀況良好的端點,或者獨立監控應用程式及其端點的運作狀態。Amazon Route 53 Traffic Flow 讓您可以輕鬆透過多種路由類型 (包括 Latency Based Routing、Geo DNS、Geoproximity 和加權輪詢均衡) 來管理全球流量,所有的路由類型都可以與 DNS 備援進行組合,以實現各種低延遲容錯架構。使用 Amazon Route 53 Traffic Flow 簡單的視覺化編輯器,無論最終使用者是在單一 AWS 區域或分佈於世界各地,您都可以輕鬆管理他們路由到應用程式端點的方式。Amazon Route 53 還提供網域名稱註冊功能,您可以購買和管理網域名稱 (例如 example.com),而 Amazon Route 53 將自動為您的網域設定 DNS 設置。
---------------------------------------------------------


Simple Queue Service

官方介紹:
---------------------------------------------------------
Amazon Simple Queue Service (SQS) 是全受管訊息佇列服務,可讓您分離和擴展微型服務、分散式系統及無伺服器應用程式。SQS 可免除與管理和操作訊息導向中介軟體相關的複雜性及開銷,也可讓開發人員專注在與眾不同的工作上。您可以使用 SQS 在軟體元件之間傳送、存放和接收不限數量的訊息,不會遺失訊息或需要其他服務可用。使用 AWS 主控台、命令列界面或自選的 SDK 以及三個簡單的命令,即可在幾分鐘內開始使用 SQS。 SQS 提供兩種訊息佇列類型。標準佇列提供最高輸送量、盡力提供最佳排序,以及至少交付一次。SQS FIFO 佇列的設計目的是要保證訊息只會完全依照它們的傳送順序處理一次。
---------------------------------------------------------

Simple Notification Service

官方介紹:
---------------------------------------------------------
Amazon Simple Notification Service (SNS) 是耐用、安全的全受管發佈/訂閱簡訊服務,可讓您分離微型服務、分散式系統及無伺服器應用程式。Amazon SNS 提供了有關高輸送量、以推送為基礎的多對多簡訊的主題。使用 Amazon SNS 主題,您的發佈者系統可以將訊息散發至大量訂閱者端點以平行處理,包括 Amazon SQS 佇列、AWS Lambda 函數和 HTTP/S Webhook。透過 AWS 管理主控台、AWS 命令列界面 (CLI) 或 AWS 軟體開發套件 (SDK), 幾分鐘內就能開始使用 Amazon SNS。
---------------------------------------------------------

CloudFront

官方介紹:
---------------------------------------------------------
Amazon CloudFront 是快捷的內容交付網路 (CDN) 服務,可在開發人員容易使用的環境中,以低延遲、高速傳輸的方式,將資料、影片、應用程式和 API 安全地傳送到全球客戶手中。CloudFront 已與 AWS 完成整合,兩者可從其實體位置直接連線 AWS 全球基礎設施,以及其他 AWS 服務。CloudFront 可與多種服務流暢搭配,包含使用 AWS Shield 減少 DDoS 攻擊次數、以 Amazon S3、Elastic Load Balancing 或 Amazon EC2 做為應用程式的來源,以及使用 Lambda@Edge 在更靠近客戶使用者的位置執行自訂程式碼,並自訂使用者體驗。 您可以透過 API、AWS 管理主控台、AWS CloudFormation、CLI 和軟體開發套件等熟悉的 AWS 工具,快速開始使用內容交付網路。Amazon 的 CDN 提供簡單的按使用量付費定價模式,無需預付費用或簽訂長期合約,同時 CDN 支援也會內含在您現有的 AWS Support 訂閱中。
---------------------------------------------------------

2018年10月25日 星期四

AWS 學習筆記 (三) - 資料庫

Relational Database Service (RDS)

官方介紹:
---------------------------------------------------------
合作夥伴 Amazon Relational Database Service (Amazon RDS) 讓使用者能夠在雲端中輕鬆設定、操作和擴展關聯式資料庫。它提供經濟實惠且可調整大小的容量,且可自動處理硬體佈建、資料庫設定、修補程式和備份等耗時的管理任務。這讓您有更多時間專注在應用程式,以提供其所需的快速效能、高可用性、安全性和相容性。 針對記憶體、效能或 I/O 進行優化的多種資料庫執行個體類型都提供 Amazon RDS,並可讓您選擇六種熟悉的資料庫引擎,包括 Amazon Aurora、PostgreSQL、MySQL、MariaDB、Oracle 和 Microsoft SQL Server。您可以使用 AWS Database Migration Service 輕鬆地將現有的資料庫遷移或複寫到 Amazon RDS。
---------------------------------------------------------

筆記:
為了提供 RDS 的 high-availability,AWS 提供了 Multi-AZ 的部署機制,只要將其設定打開,AWS 便會將該 DB instance 設為主要 (Primary) 資料庫,並將資料同步覆寫到備份 (Standby) 資料庫,只有在主要資料庫 fail-over 時,應用程式將自動被導到備份資料庫。與 Multi-AZ 不同,Read Replicas 是為了減少主要資料庫的負載,而將請求導向其他副本資料庫。

DynamoDB

官方介紹:
---------------------------------------------------------
Amazon DynamoDB 是非關聯式資料庫,無論任何規模均能提供可靠效能。它是全受管、多區域、多主機的資料庫,可提供穩定的小於 10 毫秒延遲,還包括內建安全性、備份和還原以及記憶體內快取。
超過 100,000 個 AWS 客戶已選擇將 DynamoDB 運用在需要低延遲資料存取的行動應用程式、Web、遊戲、廣告技術、IoT 和眾多其他應用程式。為應用程式建立新表格,然後讓 DynamoDB 處理後續動作。 
---------------------------------------------------------

筆記:
DynamoDB 是 AWS 自家的一套 NoSQL DB,所謂 NoSQL DB 即是沒有 schema 概念的,而是已 JSON 格式為主的 document 形式。DynamoDB 除了以空間計價之外,也以讀取寫入容量單位 (Read/Write Capacity Unit) 來做計價,1 RCU 等同於每秒讀取 4KB,1 WCU 等同於每秒寫入 1KB。如果我們預期每秒要能讀取 20KB,並保證 eventually consistent,那 RCU 就應該要設成 5,若是要 strong consistent,則 RCU 要兩倍算,即是 10。
除此,DynamoDB 也有 Autoscaling 的機制跟 DynamoDB Accelerator (DAX),DAX 是透過 In-memory cache 的方式將毫秒的請求縮短到微秒。

Aurora

官方介紹:
---------------------------------------------------------
Amazon Aurora 是一種關聯式資料庫引擎,結合了高階商業資料庫的速度和可靠性,以及開放原始碼資料庫簡單和經濟實惠的優點。Amazon Aurora MySQL 可提供比 MySQL 高五倍的效能,大多數 MySQL 應用程式都無須任何變更;同樣地,Amazon Aurora PostgreSQL 可提供比 PostgreSQL 高三倍的效能。Amazon RDS 可管理您的 Amazon Aurora 資料庫,處理各種耗時的任務,如佈建、修補、備份、恢復、故障偵測和修復。您只需每月針對所使用的每個 Amazon Aurora 資料庫執行個體支付費用。不需要預先支付費用或簽訂長期合約。
---------------------------------------------------------


2018年10月23日 星期二

AWS 學習筆記 (二) - 資料儲存

Elastic Block Store (EBS)

官方介紹:
---------------------------------------------------------
Amazon Elastic Block Store (Amazon EBS) 可在 AWS 雲端提供用於 Amazon EC2 執行個體的持久性區塊儲存磁碟區。每個 Amazon EBS 磁碟區會在其可用區域內自動複寫,以保護您免於元件故障的威脅,同時提供高可用性和耐久性。Amazon EBS 磁碟區為您提供執行工作負載所需的一致性和低延遲效能。使用 Amazon EBS,您可在幾分鐘內調整用量大小 – 您只需為佈建的資源量支付低廉的價格。 

Amazon EBS 是專為應用程式工作負載所設計,而這些工作負載可從效能、成本和容量的微調中獲益。典型的使用案例包含大數據分析引擎 (像是 Hadoop/HDFS 生態系統和 Amazon EMR 叢集)、關聯式和 NoSQL 資料庫 (像是 Microsoft SQL Server 和 MySQL 或 Cassandra 和 MongoDB)、串流和日誌處理應用程式 (像是 Kafka 和 Splunk),以及資料倉儲應用程式 (像是 Vertica 和 Teradata)。
---------------------------------------------------------

筆記:
EBS Volume 的好處是在任何時間可以從一 EC2 Instance detach 然後 attach 到另一 EC2 Instance 上,並且在任何時間調整容量大小與加密。備份 EBS Volume 的方法是為其建立一個 snapshot,並在需要時用其建立一個新的 Volume 在指定的 AZ 或複製 snapshot 到其他 Region 後為其建立備份。

EBS 提供四種 volume 選項:
  1. EBS Provisioned IOPS SSD (io1) - 專為對延遲敏感的交易工作負載而設計的最高效能 SSD 磁碟區。
  2. EBS General Purpose SSD (gp2) - 針對各種交易工作負載平衡價格效能的一般用途 SSD 磁碟區。
  3. Throughput Optimized HDD (st1) - 專為經常存取、輸送量密集型工作負載而設計的低成本 HDD 磁碟區。
  4. Cold HDD (sc1) - 專為存取頻率較低工作負載而設計的最低成本 HDD 磁碟區。

Elastic File System (EFS)

官方介紹:
---------------------------------------------------------
Amazon Elastic File System (Amazon EFS) 提供簡單,可擴展的彈性檔案儲存,可與 AWS 雲端服務和現場部署資源搭配使用。 它不但易於使用,而且提供簡單的界面,讓您能夠快速輕鬆地建立和設定檔案系統。Amazon EFS 的設計可隨需彈性地擴展且不會中斷應用程式,可隨著您新增和移除檔案自動擴展和縮減,讓您的應用程式隨時都能獲得所需的儲存。它的設計旨在提供數千個 Amazon EC2 執行個體的大量平行共享存取,以便您的應用程式達到高標準的彙總輸送量和 IOPS,其可隨檔案系統成長而擴展,同時維持一致的低延遲。Amazon EFS 是地區性服務,其設計目的是提供高可用性和耐久性,以冗餘方式跨多個可用區域存放資料。 有了這些能力,Amazon EFS 非常適用於支援廣泛類型的使用案例,包括:Web 服務和內容管理、企業應用程式、媒體和娛樂處理工作流程、主目錄、資料庫備份、開發人員工具、容器儲存,以及大數據分析工作負載。
---------------------------------------------------------

筆記:
EBS Volume 同一時間只能 attach 於一個 EC2 Instance,若資料需要共享於多個 EC2 Instance 之間就需要 EFS,EFS 是透過網路介面與 EC2 Instance 建立連線。


Simple Storage Service (S3)

官方介紹:
---------------------------------------------------------
現在的公司需要具備以簡單且安全的方式收集、存放和分析大規模資料的能力。Amazon S3 是專為從任何位置存放和擷取任何數量資料所建立的物件儲存 – 網站和行動應用程式、公司應用程式,以及來自 IoT 感應器或裝置的資料。它的設計是為了提供 99.999999999% 的耐久性,並可為每個產業市場領導者所用的數百萬個應用程式存放資料。S3 提供完整的安全與合規功能,甚至可符合最嚴格的法規需求。它提供客戶彈性,使其可針對成本優化、存取控制和合規管理資料。S3 提供就地查詢功能,可讓您直接對 S3 中的靜態資料執行強大的分析。Amazon S3 是目前最受支援的雲端儲存服務,可與最大的第三方解決方案社群、系統整合商合作夥伴和其他 AWS 服務整合在一起。
---------------------------------------------------------

Glacier

官方介紹:
---------------------------------------------------------
Amazon Glacier 是成本極低的雲端儲存服務,為資料存檔和長期備份提供安全且耐用的儲存。它旨在提供 99.999999999% 的耐久性,並提供全面的安全性和合規功能,有助於滿足最嚴格的監管要求。Amazon Glacier 提供就地查詢功能,允許您直接在靜態存檔資料上執行強大的分析功能。客戶儲存資料時,每月每 GB 只要 0.004 USD,與現場部署解決方案相比,顯著降低了成本。為了保持低成本兼適用於各種擷取需求,Amazon Glacier 提供三個存取存檔的選項,擷取時間從數分鐘到數小時。
---------------------------------------------------------

筆記:
Glacier 讀取的選項有三種:

  1. Expedited - 當有急需,並針對大部分 250MB 以下的檔案,只要等一到五分鐘後就才能下載。
  2. Standard - 預設的選項,通常需要等候三到五個小時之後才能下載。
  3. Buck - 最便宜的選項,通常需要等候五到十二個小時之後才能下載。

2018年10月1日 星期一

AWS 學習筆記 (一) - Basic 基礎

Global Infrastructure

官方介紹:
---------------------------------------------------------
AWS 雲端遍及全球 18 個地理區域內的 55 個可用區域和 1 個當地區域,而且已宣布計劃在巴林、開普敦、香港特別行政區、斯德哥爾摩增加 15 個可用區域和五個 AWS 區域,以及在美國增加第二個 GovCloud 區域。
---------------------------------------------------------

AWS Global Infrastructure
圖片來源:https://aws.amazon.com/about-aws/global-infrastructure/?nc1=h_ls

筆記:

AWS Regions and Availability Zones

AWS 雲端基礎設施是以區域 (Region) 與可用區域 (Available Zone,簡稱 AZ) 為中心來建置的。AZ 其實就是由 AWS 一或多個個資料中心所組成的,而資料中心的功能即是置放多台實體伺服器的一棟建築。舉上圖來說,可以看到其中亞太地區,新加坡有三個 AZ、東京有四個 AZ,而北京有兩個 AZ。那為什麼每個 Region 都要有那麼多 AZ 呢?試想當我們的 AWS 資源建立在新加坡的 AZ_A 上,但 AZ_A 好死不死出現了跳電、網路斷線或者是設備壞損時該怎麼辦,這時 AZ_B, AZ_C 就變成了救援。後面會在介紹什麼是 High Availibility。

Virtual Private Cloud (VPC)

官方介紹:
---------------------------------------------------------
Amazon Virtual Private Cloud (Amazon VPC) 允許您在 AWS 雲端佈建一個在邏輯上隔離的部分,並在自己定義的虛擬網路中啟動 AWS 資源。您可以完全掌控虛擬聯網環境,包括選擇自己的 IP 地址範圍、建立子網路,以及配置路由表和網路閘道。您可以在 VPC 中同時使用 IPv4 與 IPv6 來安全且輕鬆地存取資源和應用程式。 您可以輕鬆自訂 Amazon VPC 的網路配置。例如,您可以為可存取網際網路的 Web 伺服器建立公有子網路,而將資料庫或應用程式伺服器等後端系統放在不能存取網際網路的私有子網路。您可以利用安全群組和網路存取控制清單等多種安全層,對各個子網路中 Amazon EC2 執行個體的存取進行控制。 此外,您也可以在公司資料中心和 VPC 之間建立硬體虛擬專用網路 (VPN) 連線,利用 AWS 雲端來擴展公司資料中心。
---------------------------------------------------------


筆記:
看完 Global Infrastructure 後,想像其就是一朵 AWS Cloud 大雲,而 VPC 則是用戶在這朵大雲中可以佈建的多個小雲,我們可以在這朵小雲裡,使用許多 AWS 資源。
階層範例如下:
AWS Cloud
|__Asia_Pacific
|   |__AZ_A
|   |   |__ VPC_1
|   |   |__ VPC_2
|   |   |__ ...
|   |__AZ_B
|   |   |__ VPC_1
|   |   |__ VPC_2
|   |   |__ ...
|   |__AZ_C
|__China
|   |__AZ_1
|   |__AZ_2
|__ ...

Elastic Compute Cloud (EC2)

官方介紹:
---------------------------------------------------------

Amazon Elastic Compute Cloud (Amazon EC2) 是一種 Web 服務,可在雲端提供安全、可調整大小的運算容量。該服務旨在降低開發人員進行 Web 規模雲端運算的難度。 Amazon EC2 的 Web 服務界面非常簡單,您可以輕鬆獲取和配置容量。使用本服務,您可以完全控制運算資源,並在成熟的 Amazon 運算環境中執行。Amazon EC2 讓獲取與啟動新伺服器執行個體所需的時間縮短至幾分鐘,如此一來,當您的運算要求發生變化時,便能快速擴展運算容量。Amazon EC2 按您實際使用的容量收費,從而改變了成本結算方式。Amazon EC2 還為開發人員提供了建置故障恢復應用程式以及排除常見故障情況的工具。
---------------------------------------------------------

筆記:
基本上,可以視為一個 EC2 即是一台 server,而我們可以在同一個 VPC 裡,根據需求而建立許多個 EC2。


VPCs and Subnets

官方介紹:
---------------------------------------------------------

Amazon Elastic Compute Cloud (Amazon EC2) 是一種 Web 服務,可在雲端提供安全、可調整大小的運算容量。該服務旨在降低開發人員進行 Web 規模雲端運算的難度。 Amazon EC2 的 Web 服務界面非常簡單,您可以輕鬆獲取和配置容量。使用本服務,您可以完全控制運算資源,並在成熟的 Amazon 運算環境中執行。Amazon EC2 讓獲取與啟動新伺服器執行個體所需的時間縮短至幾分鐘,如此一來,當您的運算要求發生變化時,便能快速擴展運算容量。Amazon EC2 按您實際使用的容量收費,從而改變了成本結算方式。Amazon EC2 還為開發人員提供了建置故障恢復應用程式以及排除常見故障情況的工具。
---------------------------------------------------------

筆記:
我。

Bastion Host

Bastion host 基本上就是一台 Proxy Server,用來存取私有網路,例如 DB Server 等等。簡單來說,我要對 DB Server 做操作,我得連進這台 Proxy Server,在連進 DB Server 對其 做操作。這樣設計的好處是,我們可以透過限定 SSH 連線,降低 Proxy Server 被攻擊的風險。

Network Address Translation (NAT)

官方介紹:
---------------------------------------------------------

您可以使用 NAT 裝置來使私有子網路中的執行個體連線到網際網路 (例如進行軟體更新) 或其他 AWS 服務,但防止網際網路初始化與執行個體的連線。NAT 裝置會將流量從私有子網路中的執行個體轉送至網際網路或其他 AWS 服務,然後將回應送回執行個體。當流量傳向網際網路時,來源 IPv4 地址會替換為 NAT 裝置的地址;同樣,當回應流量傳向這些執行個體時,NAT 裝置會將地址轉換為這些執行個體的私有 IPv4 地址。 NAT 裝置不支援 IPv6 流量,而是使用僅限傳出的網際網路閘道。如需更多詳細資訊,請參閱 輸出限定網際網路閘道。 注意 我們在此文件中使用 NAT 以遵循通用 IT 實務,但是 NAT 裝置的實際角色同時包含地址轉換和連接埠地址轉換 (PAT)。 AWS 提供兩種 NAT 裝置:「NAT 閘道」和「NAT 執行個體」。建議您使用 NAT 閘道,因為相較於 NAT 執行個體,NAT 閘道可提供較佳的可用性和頻寬。NAT 閘道服務也是一種受管服務,不需要您管理。NAT 執行個體從 NAT AMI 啟動。您可以選擇將 NAT 執行個體用於特別用途。
---------------------------------------------------------

筆記:
以上面提到的 Bastion Host 為例,因為 DB Server 位於 Private Subnet 中,沒有與網際網路連線的能力,若今天需要透過網際網路來連外更新軟體,但仍不允許從外部網際網路連入該 DB Server,這時就可以架設 NAT 達成,所有 DB Server 對外連線的請求,都將透過 NAT。設定 NAT 有兩種方式,一種是新建一個 NAT (EC2) Instance,或是新建一 NAT Gateways。


NAT Gateways

官方介紹:
---------------------------------------------------------
您可以使用網路位址轉譯 (NAT) 閘道讓私有子網路中的執行個體連線至網際網路或其他 AWS 服務,但防止網際網路啟動與這些執行個體的連線。如需 NAT 的詳細資訊,請參閱「NAT」。 
您將需要為您帳戶中建立及使用的 NAT 閘道支付費用。適用的費率為 NAT 閘道的每小時用量率及資料處理率。同時也適用 Amazon EC2 資料傳輸費。
如需詳細資訊,請參閱「Amazon VPC 定價」。 NAT 閘道不支援 IPv6 流量,而是使用僅限輸出的網際網路閘道。如需更多詳細資訊,請參閱 輸出限定網際網路閘道。
---------------------------------------------------------

筆記:
使用 NAT Gateways 的時機是,當你有很多 Instance 要對外連線時,唯一的 NAT Instance 可能會造成效能上的瓶頸,此時維護該 NAT Instance 也變得麻煩,這時就是使用 NAT Gateways 好時機。


2018年1月6日 星期六

Ruby on Rails 學習筆記 (一) - 安裝與指令

如何安裝 Ruby on Rails?

1. 安裝 Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2. 安裝 RVM(Ruby Version Manager)
\curl -L https://get.rvm.io | bash -s stable
重開 terminal 看 RVM 是否載入成功
rvm | head -n 1

3. 透過 RVM 安裝 Ruby
rvm use ruby --install --default ruby -v

4. 安裝 Rails
gem install rails --no-ri --no-rdoc
Ref: http://installrails.com/

Rails 指令

rails new

範例:新建 rails my app 專案
rails new myApp

rails generate

範例:自動產生 Greetings controller 樣板
rails generate controller Greetings hello
即會自動產生六個檔案:
  1. greetings_controller.rb - 內定義了擁有 hello action 的 GreetingsController 
  2. hello.html.erb
  3. greetings_controller_test.rb
  4. greetings_helper.rb
  5. greetings.coffee
  6. greetings.scss

rails console

範例:操作 rails application
rails console
rails c
  • 常用於直接讀寫資料庫的資料。
  • 可存取 apphelper 實體。

rails dbconsole

範例: 進入 rails application 所使用的資料庫 shell
rails dbconsole
rails db

rails server

範例:啟動 web server
rails server
rails s -b 0.0.0.0

rails runner

範例:執行 Ruby 程式碼
rails runner "Model.long_running_method"

rails destroy

範例:刪除 GreetingsController 樣板(rails generate 的反向操作)
rails destroy controller Greetings

至從 Rails 5.0 開始,rake 的指令集也被直接包進去了:

rails routes

範例: 輸出當前專案的 routes
rails routes
>>         Prefix Verb URI Pattern                Controller#Action
>> greetings_hello GET  /greetings/hello(.:format) greetings#hello

rails generate migration

範例: 建立資料表結構異動的 migration 檔案
rails generate migration add_admin_to_users
rails 便會在 db/migrate 的資料夾下產生像是 20180106022954_add_admin_to_users.rb 的檔案

rails db::migrate

範例: 根據 migration 檔來更新資料表結構與現有資料
rails db::migrate
schema.rb 原本所定義的資料表便會有所更新

更多指令詳見:
Ref: http://guides.rubyonrails.org/command_line.html

如何安裝與更新套件? 

Rails 使用了一套 Bundler 的套件管理工具,可以把它想像成 Node.js 的 npm 或 iOS 的 CocoaPods。只要在 Gemfile 裡增加或修改套件版本時,就可以執行:
bundle instasll
Note: 每次執行完,都要重啟 server。