創(chuàng)業(yè)者應該了解的五大無服務器AWS服務

來源:  CSDN
作者:Sandro
時間:2021-07-04
17066
?我希望通過本文介紹一下每個科技創(chuàng)業(yè)者或技術狂人都應該知道的五大無服務器AWS服務。我不打算深入探討這些服務,但會簡單介紹一下這些服務,并說明它們?yōu)槭裁粗档脤W習和使用。你可以利用這些服務構建所有你能想到的Web和移動應用程序,而且它們幾乎可以和所有的高級編程語言一起使用,例如 Python、TypeScript、JavaScript 和 Java等。

我希望通過本文介紹一下每個科技創(chuàng)業(yè)者或技術狂人都應該知道的五大無服務器AWS服務。我不打算深入探討這些服務,但會簡單介紹一下這些服務,并說明它們?yōu)槭裁粗档脤W習和使用。你可以利用這些服務構建所有你能想到的Web和移動應用程序,而且它們幾乎可以和所有的高級編程語言一起使用,例如 Python、TypeScript、JavaScript 和 Java等。下面,我們開始。


Amplify CLI


首先,介紹一款最常用的服務:Amplify。請注意,AWS有兩款(或者說三款)名叫Amplify的服務,我們必須區(qū)分二者:

  • Amplify CLI:啟動后端;

  • Amplify庫(比如JS庫):用于訪問 AWS 資源的前端庫;

  • Amplify Console:前端和后端的 CI/CD 流水線。

在此我們只介紹Amplify CLI。你可以通過Amplify CLI,在命令行界面內運行幾個命令來啟動后端。有好幾種不同類別的Amplify可供你添加,例如:

  • API:AppSync GraphQL 或 REST API 網(wǎng)關

  • 身份驗證:Cognito

  • 存儲:DynamoDB、S3

  • 函數(shù):Lambda

  • 托管:S3 和 CloudFron

只需要幾個命令,就可以通過向導式命令行界面構建全棧應用程序。

在我看來,graphql-transform 庫是最大的亮點。你可以利用該庫創(chuàng)建帶有自定義注釋(比如model或connection )的數(shù)據(jù)架構,而該庫可以將架構轉換為有效的 GraphQL 架構,同時創(chuàng)建 CloudFormation 模板,通過該模板可以創(chuàng)建DynamoDB 表、Cognito 連接等后端資源。

請看下面的例子:






type Holding @model {id: ID!ISIN: String!currentPrice: Float! @funtion(name: priceResolver)}

這個架構創(chuàng)建了類型Holding。注釋model將在DynamoDB中創(chuàng)建一個表,主鍵為id。而currentPrice將由lambda函數(shù)priceResolver解析。

在我看來,這種方式的主要缺點在于,靈活性不如通過CDK或Terraform等常見的IaC解決方案構建的基礎設施。由于Amplify自身的情況,你可能會遇到一些問題,尤其是當你需要使用多個團隊的環(huán)境和多個lambda層時。

盡管如此,Amplify仍不失為一個很棒的工具,它擁有一個很棒的社區(qū),而且它的團隊仍在努力開發(fā)其他服務。如果你想學習一款服務,則可以嘗試一下這一款。


AppSync


AppSync是完全由AWS托管的GraphQL API。開發(fā)人員可以通過GraphQL API,準確地獲取所需的數(shù)據(jù),同時又不必擔心獲取的數(shù)據(jù)太多或太少。AppSync提供了三個主要功能:查詢、修改和訂閱。

你可以通過AppSync查詢來自不同數(shù)據(jù)源的數(shù)據(jù)。這意味著上述類型Holding可以從不同來源獲取數(shù)據(jù)。我們繼續(xù)以上述數(shù)據(jù)架構為例進行說明:






type Holding @model {id: ID!ISIN: String!currentPrice: Float! @funtion(name: priceResolver)}

屬性ISIN是來自DynamoDB的字符串,currentPrice由名為priceResolver的Lambda函數(shù)解析。此處的Lambda解析器可以提供很大的靈活性。在lambda函數(shù)中,你可以根據(jù)需要自定義代碼(請求兩個不同的API、清理和預處理數(shù)據(jù)等等),并返回應用程序所需的數(shù)據(jù)。不論數(shù)據(jù)保存在何處,AppSync都可以讓你在同一個應用程序內解析數(shù)據(jù)。這種靈活性非常難能可貴。

接下來,我們查詢數(shù)據(jù):







query MyQuery {getHolding(ISIN: "DE0005190003") {ISINcurrentPrice}}

返回數(shù)據(jù)如下:









{"data": {"getHolding": {"ISIN": "DE0005190003","currentPrice": 90.94999694824219,}}}

接下來,你可以通過修改查詢來更改數(shù)據(jù),而且你還可以通過訂閱查詢實時更新數(shù)據(jù)。

創(chuàng)業(yè)者為什么要學習AppSync?首先。你可以享受GraphQL帶來的好處,不僅可以保證類型安全,而且還可以為前端開發(fā)人員提供準確請求所需數(shù)據(jù)的能力。其次,你可以連接到任意數(shù)據(jù)源,靈活性非常大。第三,很多工作都可以交給AWS。你只有一個終端節(jié)點,無需解析請求,也不需要將不同的AWS服務連接在一起。這可以極大地減少開發(fā)時間。


Lambda


下面,我們來介紹最基本的Lambda服務。Lambda是最著名的無服務器服務。當人們談論無服務器時,大多數(shù)指的都是lambda。lambda服務背后的思想是,無需考慮運行代碼所需的基礎設施時。AWS只是保證你的代碼會被執(zhí)行。Lambda支持多種運行時,例如 Python、JavaScript、Java、C#、Rust、Go 等等。其最新的功能之一是可以將自定義的docker容器作為運行時使用,而且計費單位是毫秒(而不是100毫秒)。lambda的最長運行時間為15分鐘,在構建應用程序時要考慮到這一點。唯一的基礎設施設置是內存設置。

價格:Lambda很便宜。每月的前一百萬個請求是免費的。超過一百萬個以后,按照lambda運行的時間進行計算。

建議:

  • 至少保證4GB左右的內存,因為程序運行速度越快越便宜。

  • 在處理函數(shù)的外部聲明所有的靜態(tài)變量,例如boto3中的DynamoDb。這樣可以減少冷啟動次數(shù)。

  • 在設計應用程序時要考慮冷啟動。如果你需要保證的響應時間,請事先預熱lambda,或采用預先分配的并發(fā)性。

創(chuàng)業(yè)者為什么要學習lambda?lambda可以讓你免去考慮執(zhí)行代碼所需的基礎設施。而且價格很便宜。你的整個應用程序都可以建立在Lambda之上。雖然需要考慮個人的具體情況和整體的架構,但據(jù)我所知大多數(shù)應用程序都可以很容易改成在幾個lambda函數(shù)上運行。你只需要按需付費,開發(fā)周期短,而且部署也更容易。


Cognito


下面,我們來看一看身份認證。Cognito是AWS的身份驗證和授權服務。你可以使用Cognito實現(xiàn)用戶注冊和登錄、用戶組控制,甚至是聯(lián)合登錄,例如 Facebook、Google 和蘋果賬號登錄。如果你是一名Saas業(yè)務創(chuàng)業(yè)者,而且希望為用戶提供無縫的身份驗證體驗并提供社交登錄,那么可以通過Cognito輕松實現(xiàn)。Cognito分為用戶池和身份池。

  • 用戶池:為用戶提供注冊、登錄和聯(lián)合登錄功能。

  • 身份池:為用戶創(chuàng)建唯一的身份,并授予他們訪問其他AWS服務的權限。例如,為匿名用戶生成臨時憑證。

對于常見的身份驗證功能,你可以使用用戶池。

價格:按照每月的活躍用戶付費,前5萬個免費。

創(chuàng)業(yè)者為什么要學習Cognito?任何規(guī)模的企業(yè)都可以使用Cognito。你可以自定義注冊和登錄頁面,甚至可以使用AWS預先構建的頁面。通過聯(lián)合登錄功能可以實現(xiàn)一鍵登錄。


DynamoDB


我想介紹的最后一項服務是DynamoDB。DynamoDB是一個完全托管的NoSQL數(shù)據(jù)庫,具有高度的可擴展性和高可用性。我所有的項目都使用了DynamoDB,我是它的忠實粉絲。

DynamoDB的結構與其他數(shù)據(jù)庫非常相似:

  • 表:有一個或多個數(shù)據(jù)項;

  • 數(shù)據(jù)項:不同屬性的集合;

  • 鍵:分為主鍵和排序鍵;

  • 流:你可以通過流,在表每次更新的時候觸發(fā)某些功能(例如lambda函數(shù))。

其實,DynamoDB是一個鍵值數(shù)據(jù)庫,你可以在其中存儲不同數(shù)據(jù)類型的值。值也可以是嵌套列表或嵌套對象列表(如JSON)。下面是一個DynamoDB數(shù)據(jù)項的例子:









{"ISIN":{"S":"DE0005190003"},"name":{"S":"BAY.MOTOREN WERKE AG ST"}}

鍵是列名(ISIN),值是數(shù)據(jù)類型(S代表String)以及實際值。該數(shù)據(jù)項也可以表示成常見的JSON格式:





{"ISIN": "DE0005190003","name": "BAY.MOTOREN WERKE AG ST"}

大多數(shù)SDK都可以將其解析成正確的DynamoDB表示。

DynamoDB有一些很棒的功能可以進一步提高性能,例如全局表、DynamoDB加速器、按時間點恢復等等。在設計DynamoDB表時,需要考慮訪問模式。

價格:具體的使用價格取決于讀取、寫入和存儲的數(shù)據(jù)量。對于Saas產(chǎn)品創(chuàng)業(yè)者來說,價格非常低廉。如果你可以預測讀寫請求量,則甚至可以使用更便宜的預配置容量。


總結


在構建應用程序時,你可以考慮一下本文介紹的這些服務。這些服務都擁有云原生方式開發(fā)的巨大的優(yōu)勢,包括:

  • 沒有風險。如果沒有人使用你的應用,則無需花一分錢。這可以極大地降低你的風險。

  • 可擴展。如果你獲得了大量用戶,則AWS可以隨著用戶數(shù)量一起擴展。

  • 安全。由AWS工程師為你保駕護航,而你則可以專注于業(yè)務邏輯。

立即登錄,閱讀全文
AWS
版權說明:
本文內容來自于 CSDN,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家