---
title: AWS 介紹
tags: 人工智慧與智能應用培訓班, AWS
---
# AWS introduction
>講義:人工智慧與智能應用培訓班(II)
## 🍩What's the Cloud? And Why?
>透過網路遠端取得IT資源
1. **固定機房on-premise**
- expensive capital cost
- it costs money to maintain the server and keep it up to date
- low flexibility:擴展率較低
- crash will result in downtime
2. **雲端cloud computing**
> 無伺服器:還是有實體機器,但交由別人管理
- no capital expenditure
- on-demand:隨需及用
- elastic and scalable
- pay as you go and only for what you actually used
- allow you to focus on the function of service instead of infrastructure
### 架設雲端方式
- **All-in Cloud**:100%雲端(新興產業)
- **Hybrid**:50%機房,50%雲端(較久的產業,以前已有機房)
</br>
## 🍩AWS Background(Amazon Web Service)
- 證照期限3年(一張150鎂)
- AWS的<a href="https://www.slideshare.net/AmazonWebServices">投影片</a>
- 最基礎的證照(foundation):AWS Cloud Practitioner Essentials
- <a href="https://aws.amazon.com/tw/certification/?nc2=sb_ce_co">證照說明</a>
- **lots of domain**:application integration, analytics, compute, quantum technologies, network, security, game tech, database, IoT, AR&VR, mobile, block chain, customer engagement...
</br>
## 🍩What AWS Can Do?
- DNS(Domain Name System)
> 轉換domain name和IP
- IP:電腦世界的名牌(ex:196.16.x.x)
- domain name:給人看的URL (ex:www.google.com)
- 介紹網路的<a href="https://www.youtube.com/channel/UCJQJ4GjTiq5lmn8czf8oo0Q">youtube</a>(尤其是DNS講很好)
- 用圖片講解網路基本概念的<a href="https://www.youtube.com/channel/UCEdvq5WbYGHmHKBK5Tej98w">youtube</a>
- 應用在Airbnb
- EC2 for servers
- ELB for balancing traffic
- RDS for database
- Route53 for DNS
</br>
## 🍩AWS Global Infrastructure (AWS基礎設施)
### Data Center
- collection of servers(機房)
- around 50000~80000 servers
- customized equipments(選擇喜歡的類型當底層機器)
- ex:x86 or ARM
- 但無法選擇機房
- all data centers are online, no "Cold" servers
### Availability Zone(AZ)
- 多個data center組合而成
- 獨立的水電、網路、連接設備
- each AZ is within 60 miles
- 所以 AZ 之間不會互相影響
- 使用者可選擇的最小單位
- highly available, fault tolerant, and scalable
- 高可用性:把同一個系統放在多個不同AZ,其中一個AZ壞掉時系統仍不會崩潰
- interconnected by a dedicated fiber network with high bandwidth and low latency
- 不會有太高的延遲性(AZ距離控制在60miles以內)
### Region
- 選擇region很重要
- physical location in the world (實際的地理位置)
- have multiple AZs
- completely isolated from the other Amazon Regions (regions資源是分開的)
- 導致不同region之間溝通較慢
- 要換region只能重開,不能直接搬過去(慎重選擇region)
- 如何選擇region
- 符合Global Compliance(國際規範)
- global norms, national law, company policy
- ex:金融資料、個資不能離開本地端
- cost
- 每個功能在不同地區價格都不一樣
- 試算:service pricing
- latency
- 距離短,傳輸時間短
- 試算:CloudPing.info(測試本電腦跟不同region的latency)
- support service
- region table
- 想使用的功能在此region不支援
- 新服務會先放在大的region
# Amazon S3 (Simple Storage Service)
## ❤ 基本介紹
- provide secure, durable, highly-scalable object storage
- store files in any format
- 可架設static website (只有 AWS 可)
- 網址為 http://\<bucketname>.s3-website-us-east-1.amazonaws.com
- 動態網頁用 EC2
- 使用時機
- media(ex:Netflix)
- Data Lake(數據分析的database)
- backup tool 資料備份
### ⭐Durability and Availability *p.8*
- 會複寫到3個 AZ 以上
- 有將近100%的可靠性(99.999999999%)11個9
### ⭐Bucket
- container for objects stored
- S3 is a URL, bucket names must be unique globally
### ⭐Region *p.14*
- 選擇放哪個 region 的因素
- 延遲
- 成本
- 法規要求
### ⭐Objects *p.10*
>存放在 S3 Bucket 裡的東西都稱為 Object
- 上傳成功的code:HTTP200
- http://{==demo==|bucket}.s3.amazonaws.com/{==2019-04-12/home.html==|object/key}
- Object 組成:
- **Key** 檔名-the name of the object (不能跟 bucket 其他 object 重複)
- **Version ID**-key 和 version 識別出每個object不同的版本
- **Value**-資料內容
- **Metadata** 詳細資訊-data about data you are storing
- **Subresources**-定義 bucket 與 object關係
- **Access Control Information**-控制 object 存取權限
- 無法做到分層資料夾,但可以 Key 的字首及分隔符號做結構
- ex : Dev/example1.xlsx 會在Dev/結構下
- Prefix *p.15*
- object keys in S3 are partitioned by **prefix**
- 資料集中放在S3的一小塊區塊,那個區塊比較容易損壞(存取速度變慢等等),所以需要 prefix 幫忙把資料分開(hash)
- prefix 數量無限制
- 不會影響到存取速度,因為request效能會隨著數量自動擴展,每個 prefix 每秒至少可實現 3500 個 PUT/POST/DELETE 和 5500 個 GET 請求
</br>
---
## ❤移動資料
### ⭐Data Consistency Model *p.17*
- strong read after write consistency:有人正在 write 就會等他 write 完再讓 user read (目前只有AWS使用)
- eventually consistent read:可能會讀取到舊的東西
</br>
### ⭐Moving data to S3
- 上傳到 API 的三種方式
- Console
- CLI ( 需要輸入憑證 )
- SDKs ( 需要輸入憑證 )
- Multipart Upload
- 檔案切成多個封包一起傳,S3 會自動把他組起來
- 解決網速不夠的問題(太佔網路頻寬)
- 若網路斷掉,則要重新上傳所有封包(解決方法:Transfer acceleration)
- 用 CLI 或 Lifecycle 才能把失敗的資料處理掉
</br>
### ⭐Transfer Acceleration *p.37*
>解決網路不穩的狀況(不一定比較快,但會防止斷線)
<a href="https://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html">速度比較工具</a>
- 透過 CloudFront 在世界各地的 Edge Location,在 AWS 內部的骨幹網路傳輸到放置在外國的 bucket
- 使用時機
- 從各地集中上傳至一個 S3 Bucket
- 定期跨 Region 傳送大量資料
- 不想用網路上傳到 S3
- \> Properties > 進階設定 > Transfer Accerleration > Enable > 上傳到他給的 endpoint
</br>
### ⭐Snow Family *p.54*
>將**大量資料**移入或移出 S3
- Snowcone-硬體大小最小(衛生紙盒),資料搬遷及邊緣運算,8TB
- Snowball Edge-邊緣運算最強,可搭配AWS Lambda、EC2、IoT等等,100TB,100Gbps
- Snowmobile-硬體大小最大(貨櫃車),可雲端部屬同時on-work(公司不能停止運作),可搬遷整個資料庫甚至data center,100PB,500Gbps
</br>
---
## ❤權限
### ⭐Block Public Access 存取權限 *p.26*
> 是否可透過URL存取object
- 預設:不允許公開存取 block all public access on
- public:創建 bucket 時要把block all public access off
- 選擇讓哪些 object public(方法如下)
- 對單個object make public
- Bucket Policy(能設定的最多)
- ACL
- Bucket Policy:決定存取的權限(用 Json 寫)
- Resources-對哪些資源操作
- Actions-user 能對 S3 資源做什麼
- Effect-allow 或 deny 操作
- Principal(委託人)-指定這個 bucket 能夠被誰使用
- Condition-讓 policy 生效的條件
- 可設定只能用某個網路的ip存取
```json=
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicRead",
"Effect":"Allow",
"Principal": "*",
// *:所有人
//"Principal":{
// "AWS":"arn:aws:iam::Account-ID:user/Dave"
//}
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket"]
// ARN:每個object都會有的id number(可在object overview找到)
}
]
}
```
- bucket名稱>permissions
- 
- **Access Control List (ACL)**
|許可|在 Bucket 上| 在 Object 上|
|-|-|-|
|READ|允許列出 Bucket 中的 object|允許讀取 object data 及其 metadata|
|WRITE|允許建立、覆寫、刪除 Bucket 中的 object|不適用|
|READ_ACP|允許讀取 Bucket ACL|允許讀取 object ACL|
|WRITE_ACP|允許寫入 Bucket ACL|允許寫入 object ACL|
|FULL_CONTROL|以上皆可|以上皆可|
upload objects時設定

</br>
### ⭐CORS (Cross-Origin Resource Sharing 跨源資源共享) *p.30*
- 瀏覽器和伺服器間確認是否互相信任並同意跨源請求(Cross-Origin Requests)
- 範例:用 S3 架設靜態網站提供使用者觀看影片,但影片在其他 Bucket 中 ,此時可在 hosting 網站的 S3 Bucket 上設定 CORS,才能從另一個 Bucket 拿取需要的影片及圖片
- \> Permissions > CORS configuration
```json=
{
"AllowedHeaders":[
"*"
],
"AllowedMethods":[
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins":[
"http://www.example1.com"
],
"ExposeHeaders:[]"
}
```
- bucket名稱>permissions

- Pre-signed URL
- 不公開,不用登入也可以上傳至 Bucket
- 只在設定的期限內才有效
- create方法:
- AWS CLI: $ aws s3 presign --expires-in <Expire Time/Second> s3://BucketName/ObjectKey
- AWS SDK: Java, .NET, Ruby, Python...
---
## ❤資料保護
### ⭐Versioning 版本控制 *p.25*
- keep multiple version of an object in the same bucket
- 打開就無法關掉,只可暫停
- 回到之前的版本,可復原刪除或覆寫的物件
- 建bucket時選擇

</br>
### ⭐MFA Delete
- 輸入一個 token 才能刪除東西 (root user 才能開)
- change the versioning state of your bucket
- permanently delete an object version
- configure MFA Delete on a bucket to ensure that data in your bucket cannot be accidentally deleted
### ⭐Protecting Data Using Encryption 資料加密 *p.34*
- in Transit: use SSL/TLS or by using client-side encryption
- Server Side Encryption(Server端加密、對稱式加密) ==會考以下縮寫==
- **SSE-S3**(Amazon S3-Managed Keys):每個 object 都會用唯一的金鑰加密,由 S3 管理這把金鑰,會定期輪換並提供額外保護
- **SSE-KMS**(AWS Key Management Service):安全提供雲端進行擴展的金鑰管理系統,使用 AWS KMS CMK 來加密 object
- **SSE-C**(Customer-Provided Keys):用自己提供的金鑰來加密
- 對稱式加密:傳送人、被傳送人同時有相同的金鑰,傳送人傳送的資料會被加密處理,被傳送人可用金鑰解密
- Client Side Encryption:encrypt objects before upload
- 建bucket時選擇

</br>
### ⭐S3 Replication 複寫、備份 *p.42*
- 以==非同步==方式複寫到指定的 Bucket 中,不限同一個 AWS 帳號
- **CRR**(Cross-Region replication 跨區域複寫)
- reduce latency-降低不同 Region 使用者的延遲 (在離 user 最近的 Region 建立複本)
- compliance-某些合規要求將備份資料存放距離更遠
- increase operational efficiency-不同 region 分析相同物件群,可在這些 region 保存複本
- **SRR**(Same-Region replication 同區域複寫)
- Multi-Account using the same data
- collect data for analysis
- abide by data sovereignty laws
---
## ❤價格
### ⭐Storage Classes ==會考== *p.18*
- 針對每個object從最常存取至不常存取的方案排列,儲存費用最貴到最便宜,存取費用最便宜到最貴
- **Standard**-預設
- **RRS**(Reduced Redundancy Storage)-容易遺失,不建議使用
- **Intelligent-Tiering**-自動化常存取與不常存取
- 經常存取層(frequent access tier):30天沒存取移至不常存取層
- 不常存取層(infrequent access tier):資料成本較低,一被存取就移至常存取層
- **Standard IA**-針對存活時間長且不常存取的資料(較重要的資料)
- 會存在多個AZ
- **One Zone IA**-針對存活時間長且不常存取的資料(可重建的資料)
- 只會存在一個AZ
- **Glacier**-低成本且不常存取的資料,與standard有相同的耐用性和彈性
- 最低儲存時間90天(不到90天就刪除也是一樣費用)
- 存取時需3~5小時才可回覆物件,快速存取需額外付費
- 儲存費用最便宜,存取費用最貴
- **Glacier Deep Archive**-低成本且不常存取的資料,與standard有相同的耐用性和彈性
- 最低儲存時間180天(不到180天就刪除也是一樣費用)
- 存取時需12小時才可回覆物件
- 可選擇在48小時內擷取大量資料
- upload objects時設定

</br>
### ⭐生命週期規則(Lifecycle Policy) *p.23*
- 讓每個object隨著設定好的週期自動移轉到其他儲存方案
- 管理儲存方案,管理版本控制(Versioning)
- Transition actions(轉換動作)-定義何時轉成另一個儲存方案
- Expiration actions(過期動作)-定義過期時間,代替使用者刪除過期物件
## 統整
- 依照 data type, storage format... 決定要用 Amazon EBS 或 Amazon S3 儲存資料
- 傳送資料可用:AWS Snowball, AWS Snowmobile, Amazon Storage Gateway *p.57*
- 讓 S3 當作 EC2 的儲存空間*p.59*(非官方)
官方是 EBS 當 EC2 儲存空間
- 說服別人用 S3
- cheap
- 11個9的可靠度
- 儲存大小沒有限制
- read after write
- 存放3個以上不同 AZ
- static website
- upload data
- transfer accerleration:解決網路不穩
- snow family:大量資料
- multipart upload:頻寬不夠
- storage gateway
- access control
- block public access(人的權限)
- bucket policy
- make public
- ACL
- CORS:別人想 import 你網頁的物件(網頁的權限)
- Pre-signed URL:user 不用識別就可上傳資料(有期限)
- protect
- SSE-SS, SSE-KMS, SSE-C
- versioning
- MFA delete
- SRR, CRR
<br>
# AWS EC2
- Virtual Server(Virtual Machine) in the Cloud(虛擬機)
- Web hosting Enterprise apps, Authentication, Database Analytics applications, just like a server
- 跟自己的電腦區隔,不會把自己的電腦用亂
- 可架動態網站
- 用到中毒就再開一台就好,不怕懲罰
- 非託管的服務:可靠性需要靠自己,不會自動幫你放多個 AC
## ⭐AMIs(Amazon Machine Images) *p.61*
- EC2 的作業系統
- Linux, Windows, macOS 等等
- 取得 AMI 方法
- 去 Marketplace 買廠商上架的 AMI
- create your own
- AWS內建
- 開源者分享
- 選 AMI 種類(效能)
- CPU
- Memory
- Instant Storage
- EBS only(要買EBS才能使用)
- SSD(內建就有SSD儲存空間)
- Network
- launch EC2 with user data(以 root 身分執行):將安裝好的套件寫在 user data 中,發生錯誤可看 system log 來 debug
- 要快速建立很多一樣軟體資源的 instance:用客製 AMI 創建
## ⭐Instance Type決定效能 *p.62*
- i3.xlarge
- i3:instance family&generation
- xlarge:instance size
- **instance family**
- 加強此虛擬機的哪個功能(開頭字母)
- T-burstable, C-CPU, M-general purpose, D-dense storage, R-memory intensive, X-large memory, I-high I/O...
- **instance size**
- 依據cpu,記憶體,儲存及網路效能差異,每個類型有大小之分
- 越大效果越好
## ⭐EC2 的 Metadata(詳細資訊)
- you can use to configure or manage the running instance
- retrieving information about your EC2 instance with instance metadata using CLI v2
## ⭐Spread *p.66*
- 一組各放在不同機架上的 instance
- 一個 AZ 最多放7個 Instance 再 Spread 群組
- 分開保存,降低同時故障的危險
## ⭐tag instance *p.70*
- 管理、分類 instance 資源
- key and value 組成
- 每個 instance 可擁有一個以上的標籤
## ⭐Elastic Load Balancer
- 不同 instance 間的流量分配
## ⭐EC2 Lifecycle *p.72*
- pending: 對 instance 做 health check,通過則進入 running
- running: instnace 運行中且可供使用
- rebooting: 需要維護時用 reboot 更新,instance 維持 running狀態
- stopping: instance 準備停止或停止休眠
- stopped: 已關閉且無法使用,可隨時啟動
- shutting-down: 準備終止
- terminated: 永久刪除且無法啟動,先評估要不要備份
||terminated|stopped|
|-|-|-|
|private & public IP|None|1. keep the same private IP 2. get a new public IP|
|root volume(EBS)|deleted by default|volume is preserved|
|RAM|None(不會儲存資料)|None(不會儲存資料)|
|instance store(SSD儲存空間)|None(不會儲存資料)|None(不會儲存資料)|
- private IP : 同個 VPC 中不同 subnets 直接溝通(不通過外網)
- Elastic IPs : 固定 IP(不會因為關機就換 IP),使用中就免費
## ⭐價格方案 *p.75*
- **on-demand**:隨需及用(用多少算多少)
- 適用測試應用程式使用
- **spot instance**:90%off,用 AWS 剩餘資源降價給消費者使用,隨時會被收回
- 適用在業務中斷不會有太大影響
- 通知2分鐘就收
- Windows AMI 以小時為單位(1分鐘也算1小時的錢),Linux AMI 以分鐘為單位
- **reserved instances**:簽合約,一次買"一年"或"三年"(購買單位為EC2數目),跟on-demand 比起來打了25折(75% off),用不完的合約可轉售
- **EC2 instance savings plans**:簽合約,一次買"一年"或"三年"(購買單位為用量capacity,有可能可開更多的EC2),72% off
- **dedicated instance**:單一user的EC2 instance會在主機硬體level與其他user實體隔離(單一user怕被其他user攻擊),同一時間只會運行他的EC2
- **dedicate host**:可使用現有所有的軟體licenses,可降低成本,租整個機櫃
## ⭐EBS種類(Amazon Elastic Block Store) *p.68* ==會考==
>EC2的硬碟
>功能:
>block storage 區塊儲存
>persistent storage 永久儲存
>snapshot 快照(備份)
- 跟 S3 比較
- S3 不用先選擇資料大小
- S3 不是 block
Volume type
SSD:固態硬碟,HDD:傳統硬碟
- **gp3** (general purpose SSD)
- 第二貴
- 讀取速度較快 (low latency)
- recommended for most workloads
- development and test environments
- 16000IOPS
- throughput : 250 MB/s(gp2), 1000 MB/s(gp3)
- throughput (每秒傳輸的資料量),IOPS (input/output per second:找資料的速度)
- **io2** (provisioned IOPS SSD)
- 最貴
- IOPS較高
- 256000 IOPS
- 4000 MB/s
- 99.999% durability
- ideal for critical applications&databases with sustained IOPS or more than 1600IOPS (適用重要的應用程式)
- **st1** (Throughput Provisioned:HDD)
- throughput較高
- 500 MB/s
- 適用在寫入資料有順序性(ex:big data, data warehouse, log processing)
- **sc1** (Cold HDD)
- 最便宜
- 250 MB/s
- 適用在不常讀取的資料
- EBS Snapshot
- EBS 備份、複寫
- 存放在 S3 裡 (可存放在其他 AZ 或 Region)
- 可加密
- 可 snapshot 放在不同 EC2 (複製EBS)
## ⭐EFS、FSx
> 多台 EC2 取用相同資源
- EFS(Linux workloads)
- FSx(Windows workloads)
- shared across
- VPCs
- AZ
- Regions
- Account
<br>
# Database
- 對結構化資訊、組織性資料的收集存放處
- 資料庫系統組成:DBMS(資料庫管理系統)、Database(資料庫)、相關的應用程式
### ⭐建資料庫作法 *p.80*
- on-premise
- local server 自己建資料庫、準備運算資源
- 優:客製化程度高
- 缺:維護、容錯、備份都自己來
- hosted:
- 用 EC2 當 sever ,在 EC2 建資料庫
- 優:無須維護底層主機 (AWS管理),有點客製化
- 缺:維護、容錯、備份自己來
- managed:
- 用 AWS 的資料庫服務建資料庫
- 優:底層運算,資料庫環境都幫你用好
- 缺:客製化程度低(?
### ⭐資料庫種類 *p.81*
- SQL DB (關聯式資料庫)
- 結構化資料
- 用 tables 來儲存資料
- ex:Microsoft SQL Server, Oracle DB, MariaDB, MySQL, PostgreSQL...
- 要擴展只能把機器換大
- No-SQL DB (Not only SQL 非關聯式資料庫):
- 非結構化資料
- 用 JSON 儲存資料
- 可以很彈性在任何地方存資料,不限資料形式(Key的資料形式是固定的)
- Key-Value DB、In-memory DB、File DB、Graph DB
- ex:MongoDB, Cassandra, Redis
- 水平擴展,要多少就多放多少資料
||Relational/SQL|NoSQL|
|-|-|-|
||data storage rows and columns|key value, document, and graphs|
|schemas|fixed|dynamics|
|querying|sql-based querying|focused on collection of documents|
|scalability|vertical|horizontal|
## ❤AWS Database 種類 *p.83*
### ⭐RDS (Relational Database Service)
- 全託管的關聯式資料庫
- 支援多種資料庫引擎
- Oracle:要授權費
- Microsoft SQL Server:要授權費
- MySQL
- PostgreSQL
- MariaDB
- Amazon Aurora
- DB Instance Type
- 選擇機器的種類、大小
### ⭐DynamoDB
- 全託管的 NoSQL 資料庫
- 資料分布在不同服務器上,再根據 hash 找尋資料
- event-driven programming (serverless computing) 事件驅動程式
- extreme horizontal scaling capability 水平擴展
- on-demand read/write capacity
### ⭐DocumentDB
- 與 MongoDB 相容的全託管文件資料庫
- 適合 user 在 local 使用 MongoDB 之後搬遷至雲端資料庫 DocumentDB
- DMS (Database Migration Service)
- 搬遷資料庫工具
### ⭐ElastiCache
- 緩存服務
- Redis 與 Memcached 兩種塊取引擎
- 用來儲存大量讀取繁重的資料 (減輕後端資料庫的負擔) ex: 遊戲、Netflix...
### ⭐Redshift
- 全託管的資料倉儲(Data Warehouse)服務
- 處理大規模數據分析
- 比 RDS 更能處理巨量 SQL 的分析工作
- 支援大多數應用程式使用 ODBC 和 JDBC 建立連接
- ODBC (Open Database Connectivity):提供 API 存取 DBMS(資料庫管理系統),主要利用 SQL 來完成
- JDBC (Java Database Connectivity):用 Java 規範客戶端如何存取資料庫的應用程式介面,像查詢、更新資料庫的資料
### ⭐Neptune
- 全託管的**圖形**資料庫(節點與節點的關係)
- 支援圖形模型 Property Graph,W3C 的 RDF,Gremlin,SPARQL
- 圖形資料庫應用:推薦引擎、詐欺偵測、知識結構圖、藥品探索、網路安全等
### ⭐QLDB
- 全託管的總帳資料庫(交易)
- 應用:私有的(限制存取者)資料庫,但所有的存改都須被完整記錄,不想自己建區塊鏈
## ❤RDS (Relational Database Service)
- on demand capacity (容量要用多大就用多大)
- easy to administer
- secure & compliant
- available & durable
### ⭐RDS Storage Type *p.88*
- 一般用途 SSD
- 適合大多數的工作負載
- 每 GB 可提供 3 IOPS,最低 100 IOPS
- 磁碟區越大效能越好
- 不同資料庫引擎有不同容量可使用
- MariaDB、MySQL、Oracle、PostgreSQL:20 GiB ~ 64 TiB
- SQLserver 的 Enterprise、Standard、Web、Express:20 GiB ~ 16 TiB
- 佈建容量 IOPS SSD
- 適合 I/O 密集的工作負載,低延遲的應用程式
- |資料庫引擎|佈建的IOPS範圍|儲存體範圍|
|-|-|-|
|MariaDB|1000~80000 IOPS|100 GiB~64 TiB|
|SQL Server Enterprise、Standard 和 Web Edition|1000~64000 IOPS|20 GiB~16 TiB|
|SQL Server Express Editon|1000~64000 IOPS|100 GiB~16 TiB|
|MySQL|1000~80000 IOPS|100 GiB~64 TiB|
|Oracle|1000~80000 IOPS|100 GiB~64 TiB|
|PostgreSQL|1000~80000 IOPS|100 GiB~64 TiB|
- 磁性儲存體
- 磁帶儲存方式
- 新的應用程式不建議使用
- RDS instance type: AWS 會自動幫你選最適合的
### ⭐Multi-AZ *p.89*
- failover initiated by automation or through RDS API
- redirection to the new primary instance is provided through DNS
- this detects infrastructure issues, not database engine problems
- 開啟此功能(要先開好 subnet groups),AWS 會自動在另一個 AZ 開一台 standby DB (跨 AZ 的備份 2個 instance 的價錢)
- 若 primary DB 不可用,AWS 會**自動**將流量導到 standby DB
- standby DB:只對 primary DB 的資料進行同步,不 read/write
- primary(master) DB:主要的 DB,可做 read/write
- 設subnet group,才能開啟 multi-AZ
- two different AZ in the AWS Region
- the CIDR blocks of subnets 要夠大 to accommodate spare IP addresses for Amazon RDS
### ⭐read replica (唯獨副本) *p.90*
- relieve pressure on your source database with additional read capacity
- RDS 對 primary 創建 snapshot,從 snapshot 創建唯讀副本
- primary 數據變動,會用非同步複製方法更新唯讀副本 (有可能會讀到舊的資料)
- 可升級(promote)為 primary,成為獨立個體 (幫助災難復原)
- 可跨 region(跟 primary 不同 region)
- 一個 RDS 最多 5 個 replica
### Backup Widows
- 功能:備份
- 不會中斷
- 不能跟 maintenance windows 時間重疊
### Maintenance windows
- 功能:維護
- 會中斷
### ⭐開啟RDS *p.92*
1. 選擇**啟用方法**
- standard create:提供較多選項給使用者用,客製化程度高
- easy create:大部分默認為預設值,適合測試環境
2. 選擇**資料庫引擎**與**資料庫版本**
3. 設定資料庫**名稱與密碼**(日後身分驗證用)
4. 選擇**DB Instance**大小(依應用決定)
5. 選擇**儲存空間**大小
6. 選擇**網路環境 (VPC)**,選**subnet groups**(multi-AZ)
7. 創建一個 DB 專用的 Security Group,取名為**DB-SG**方便查詢
8. 需 5~10 分鐘佈建(**Status**為available)
- 建立 subnet groups
1. create VPC (private IP/16)
2. create subnet(AZ放不同地方) (private IP/24)
### ⭐與 RDS 互動方法
1. 用 workbench 連線至 RDS
- 限制:選用的資料庫引擎有提供客戶端連線的軟體才可使用
- 用視覺化的介面操作資料庫
2. 透過 CLI 連線至 RDS
- 不須額外安裝軟體,但須下指令才能操作
- 開一台 EC2 與 RDS 互動 (同一個 VPC),在 EC2 架設簡單網頁對 RDS 進行 CRUD 的操作
- **AMI**:Amazon Linux AMI
- **Instance Type**:t2.micro
- **Network**:和 RDS 選擇相同的 VPC
- **Auto-assign Public IP**:Enable
- **Userdata**:
- **Security Group**:允許 HTTP 80 anywhere 的流量進入
- 複製 EC2 Public IP 在瀏覽器貼上,則可看到 EC2 上架設的網頁
- 輸入資料庫資訊便可連至該資料庫 (可直接複製RDS頁面的資訊)
## ❤DynamoDB *p.98*
- 全託管
- 水平擴展-不用指定大小 (AWS 會自動幫你擴展)
- On-Demand Read/Write capacity (依R/W收費)
### ⭐創建 DynamoDB
- 設定 Primary key
- 靠 primary key 找到資料
- 設的好,找資料更快
- partition key(user ID) + sort key(name)
### ⭐Consistency *p.102*
- Strong consistency:不會讀取到舊的資料
- DB會一次儲存到3個不同的AZ
- 一個 request 耗費 2 個 RCU (read capacity unit)
- 收費依據 RCU & WCU(write capacity unit)
- on-demand:流量上升或下降到任何一個先前曾到達的流量時,立刻調整 RCU/WCU(用在無法確認流量)
- Provisioned(佈建模式):user 指定應用程式需要的 RCU/WCU,也可啟用 auto-scaling 自動調整資料表的 RCU/WCU,有上限與下限值(用在可預期且平穩的流量)
- Eventual consistency:有可能讀取到舊資料
- 只耗費一個RCU
- 較便宜
### ⭐輔助索引 *p.101*
- GSI(Global Secondary Indexes 全域次索引):跨所有資料表的索引
- LSI(Local Secondary Indexes 本機次要索引):只能索引此資料表,可用相同 partition key 但不同 sort key 的索引,索引大小不得超過 10 GB
### ⭐Global Table *p.106*
- 可在各個 Region 創建相同 table (同步複寫)
<br>
# IAM (AWS Identity and Access Management)
- 控管身分驗證與存取權限的服務
- 定義**誰**可以對**什麼**進行什麼**動作**
## Identity Management *p.114*
- Root user:付錢的那個人
- full access to all AWS resources
- billing information
- permission can't be limited
- 權限大,建議 user 不要以 root 身分登入處理日常作業(被盜就完了)
- IAM user
- 透過 root user 建立 IAM user
- 用 account ID, IAM user name, password 登入
- perform specific AWS actions based on their permissions(不要給他太多權限)
- no default permissions and credentials (好好保護憑證)
- 更安全:MFA(多重因素驗證碼)
- IAM user可做的事
- manage account password policy:制定密碼需要的長度強度和 password reset(重設密碼)
- create/revoke user (給權限,ban權限)
- add tags to user
- MFA (Multi-factor authentication 多重因素驗證碼)
- 綁定 MFA 後,登入時除了帳密外,還須從 AWS 支援的 MFA 機制提供為依的身分驗證(有時效性的 token)
- types:
- hardware (Gemalto, YubiKey)
- virtual (ex: Authy, Google Authenticator)
- 存取 AWS 資源 IAM Credentials
|access methods|credentials|
|-|-|
|AWS management console|user name/password|
|AWS command line interface(CLI)|access key/secret access key|
|AWS software development kits(SDKs)|access key/secret access key|
|AWS APIs|access key/secret access key|
run "$aws configure" to setup defalt credential
<br>
## Set permissions
- IAM Group *p.123*
- 多個 IAM 管理,只要設定 Group 權限,把人加進 Group 就會有那些權限
- 一個 IAM 可以屬於多個 Group,但權限可能會衝突,解決方法以下
- deny -> deny
- allow & no deny -> allow
- no allow -> deny
- IAM Policy *p.126*
- grant permissions to AWS services
- JSON (可用 <a href="https://awspolicygen.s3.amazonaws.com/policygen.html">policy generator</a> 產生,用 <a href="https://policysim.aws.amazon.com/">policy simulator</a> 測試)
```JSON=
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowS3CreateDelete",
"Effect":"Allow",
"Action":[
"s3:CreateBucket",
"s3:DeleteBucket"
],
"Resource":"arn:aws:s3:::<bucket name>/<key name>"
}
]
}
```
- attach to identity or resources
- Identity policy:attach 在 user/group 上的權限
- Resourse policy:attach 在 資源上的權限(ex:EC2 想跟 S3 用內網溝通)
- IAM Role *p.134*
- 需臨時給權限時使用
- temporary security credentials:工地帽(有時效性的權限)
- 通常用在資源上
- STS (Security Token Service)
- 提供 access key ID, secret access key, session token, expiration 產生 IAM Role
- 設終止時間
</br>
# Serverless
- 每一個 function 放在一個 server -> 高可用性 (不會每個 fuction 都一起壞掉)
- Virtual Machine -> Container -> Serverless
- VM 虛擬主機 (EC2)
- 在主機上實現多個網站或服務的技術
- VM 間完全獨立,有自己的作業系統 (浪費資源)
- Container 容器
- 啟動 Container 不用跟 VM 一樣重開機器 (速度較快)
- 作業系統層虛擬化 (每個容器共用同一個作業系統)
- Serverless 無伺服器
- 解決以上兩個須要維護底層主機的問題 (底層主機壞掉,上面開的 VM、Container 就壞了)
- 雲端幫使用者託管基礎設施 (without managing servers 不用維護伺服器)
- 不用硬體,可實現一個 function 放在一個 server
- 缺:Lambda 接到 request 才會做事 (小延遲)
## AWS Lambda
- 全託管 (不用做任何設定) 的計算服務
- run code on a schedule or in response to events
(e.g. changes to data in an S3 bucket or DynamoDB table)
- 依使用量付費 (function 的請求數量和程式碼執行期間)
- 可在 edge 執行
- 優點
- no infrastructure to manage:不用 EC2
- Automatic Scaling:伺服器池中的計算資源量(通常根據有效的伺服器數量來衡量)會根據伺服器池中的負載進行動態伸縮
- Fine-grained pricing:便宜
### Lambda 適用情況
- 處理無狀態(stateless)的請求
- 每個請求都是獨立的
- 執行結果不會受到之前的執行影響
- 事件驅動 (event-triggered)
- 有事件才啟動,平常休眠
- Lambda 通常透過其他服務觸發,服務之間的橋樑
- 一個需求最多跑 15 分鐘
- ex:從 HTTP 請求、 S3 Bucket、DynamoDB、SNS、SQS、CloudWatch、IoT、ALB、Scheduled...
- 簡單的動作
- 像寫程式函數盡量單純且快速
- 長時間運行建議用 EC2 或 Container
- 可安全的存取資料庫的功能
- 最佳實踐
- 版本控制 to manage AWS Lambda deployment
- stateless:沒辦法暫存狀態在 Lambda (ex:紀錄某人已登入)
- memory size 跟 CPU power 成正比 (更快更便宜)
- 用 CloudWatch 監測他
- 沒辦法 retry (15 分鐘 timeout 就 timeout 了)
- 可以設定 IAM Role
### Lambda 組成
- Dependency
- Source Code 需使用的相依性套件 ex:AWS SDK for Python
- Lamdba 有依些預設的套件
- 若不是預設套件則將 Library 打包成壓縮檔上傳至 Layers
- Source Code
- 主要程式碼編輯區
- 建議在習慣的編譯器完成且除錯再貼上來測試
- Configurations
- 其他相關設定 ex:權限、環境變數、逾時設定、記憶體大小...
### Lambda Container
- 已購買 container 工具進行開發,想將工具實作在 Lambda 上
- user 可將 Container Image 打包並推送 ECR (Amazon Elastic Container Registry)後,部屬在 Lambda 上
- 優:可輕鬆建立更多相依性套件的大型工作負載
- Lambda Runtime
- 對一些程式語言提供了基礎映像
- 可輕鬆加入程式碼和相依性套件進行打包,再部屬在 Lambda
- Lambda Runtime Interface Emulator
- user 能對容器映像執行本地測試
# API
- HTTP 協定定義的服務請求方法
- POST
- GET
- DELETE
- PUT
- PATCH
## API 種類 (Application Programming Interface 應用程式介面)
### REST API (Representational State Transfer 表現層狀態轉移)
- 將 POST/GET/PUT/DELETE 一起完成
- 用 JSON 讓網路的計算系統之間,彼此資源可互動使用的協作性質
- 組成元件
- 定義資源位置的 URL
- 定義資源要做的動作
- 資源呈現方式 (最常用 JSON)
### WebSocket API
- 只需伺服器和瀏覽器通過 HTTP 協議進行一次動作
- 可單獨建立 TCP 連線進行資料傳送
- 讓伺服器主動傳送資料給瀏覽器,不需等待瀏覽器送出請求才能回覆
## API Gateway
- manage your REST endpoints
- flask 的 route 概念
- create API that as front end for application
- DDoS protection
- Authenticate and authorize requests
- 可透過 API Gateway 建立 API,以存取 AWS 或其他 Web 服務以及 AWS 所存放資料
- RESTful API (Stateless)
- HTTP API (Stateless)
- 功能支援性較 RESTful 差,但較便宜
- WebSocket API
- 支援用戶端與伺服器之間啟用全雙工通訊
- user <-> WAF <-> API Gateway <-> Lambda