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

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

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


Amplify CLI


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

  • Amplify CLI:啟動后端;

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

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

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

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

  • 身份驗證:Cognito

  • 存儲:DynamoDB、S3

  • 函數(shù):Lambda

  • 托管:S3 和 CloudFron

只需要幾個命令,就可以通過向?qū)矫钚薪缑鏄?gòu)建全棧應(yīng)用程序。

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

請看下面的例子:






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

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

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

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


AppSync


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

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






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

屬性ISIN是來自DynamoDB的字符串,currentPrice由名為priceResolver的Lambda函數(shù)解析。此處的Lambda解析器可以提供很大的靈活性。在lambda函數(shù)中,你可以根據(jù)需要自定義代碼(請求兩個不同的API、清理和預(yù)處理數(shù)據(jù)等等),并返回應(yīng)用程序所需的數(shù)據(jù)。不論數(shù)據(jù)保存在何處,AppSync都可以讓你在同一個應(yīng)用程序內(nèi)解析數(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è)者為什么要學(xué)習(xí)AppSync?首先。你可以享受GraphQL帶來的好處,不僅可以保證類型安全,而且還可以為前端開發(fā)人員提供準(zhǔn)確請求所需數(shù)據(jù)的能力。其次,你可以連接到任意數(shù)據(jù)源,靈活性非常大。第三,很多工作都可以交給AWS。你只有一個終端節(jié)點,無需解析請求,也不需要將不同的AWS服務(wù)連接在一起。這可以極大地減少開發(fā)時間。


Lambda


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

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

建議:

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

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

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

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


Cognito


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

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

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

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

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

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


DynamoDB


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

DynamoDB的結(jié)構(gòu)與其他數(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有一些很棒的功能可以進(jìn)一步提高性能,例如全局表、DynamoDB加速器、按時間點恢復(fù)等等。在設(shè)計DynamoDB表時,需要考慮訪問模式。

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


總結(jié)


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

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

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

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

立即登錄,閱讀全文
AWS
版權(quán)說明:
本文內(nèi)容來自于 CSDN,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多