--- 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![](https://i.imgur.com/pQPbo4h.png) - 選擇讓哪些 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 - ![](https://i.imgur.com/mqUdwKl.png) - **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時設定 ![](https://i.imgur.com/oQ5QLvQ.png) </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 ![](https://i.imgur.com/3FH32ZK.png) - 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時選擇 ![](https://i.imgur.com/5HuGn33.png) </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時選擇 ![](https://i.imgur.com/vGcxz81.png) </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時設定 ![](https://i.imgur.com/paEJUi4.png) </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