首頁 > 科技

創業者應該瞭解的五大無伺服器AWS服務

2021-06-23 13:42:19

作者 | Sandro

譯者 | 彎月 責編 | 歐陽姝黎

我希望通過本文介紹一下每個科技創業者或技術狂人都應該知道的五大無伺服器AWS服務。我不打算深入探討這些服務,但會簡單介紹一下這些服務,並說明它們為什麼值得學習和使用。你可以利用這些服務構建所有你能想到的Web和移動應用程式,而且它們幾乎可以和所有的高階程式語言一起使用,例如 Python、TypeScript、JavaScript 和 Java等。下面,我們開始。

Amplify CLI

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

  • Amplify CLI:啟動後端;

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

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

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

  • API:AppSync GraphQL 或 REST API 閘道器

  • 身份驗證:Cognito

  • 儲存:DynamoDB、S3

  • 函數:Lambda

  • 託管:S3 和 CloudFron

只需要幾個命令,就可以通過嚮導式命令列介面構建全棧應用程式。

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

請看下面的例子:

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

這個架構創建了類型Holding。註釋model將在DynamoDB中創建一個表,主鍵為id。而currentPrice將由lambda函數priceResolver解析。

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

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

AppSync

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

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

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

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

接下來,我們查詢資料:

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

返回資料如下:

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

接下來,你可以通過修改查詢來更改資料,而且你還可以通過訂閱查詢實時更新資料。

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

Lambda

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

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

建議:

  • 至少保證4GB左右的記憶體,因為程式運行速度越快越便宜。

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

  • 在設計應用程式時要考慮冷啟動。如果你需要保證的響應時間,請事先預熱lambda,或採用預先分配的併發性。

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

Cognito

下面,我們來看一看身份認證。Cognito是AWS的身份驗證和授權服務。你可以使用Cognito實現使用者註冊和登入、使用者組控制,甚至是聯合登入,例如 Facebook、Google 和蘋果賬號登入。如果你是一名Saas業務創業者,而且希望為使用者提供無縫的身份驗證體驗並提供社交登入,那麼可以通過Cognito輕鬆實現。Cognito分為使用者池和身份池。

  • 使用者池:為使用者提供註冊、登入和聯合登入功能。

  • 身份池:為使用者創建唯一的身份,並授予他們訪問其他AWS服務的許可權。例如,為匿名使用者生成臨時憑證。

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

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

創業者為什麼要學習Cognito?任何規模的企業都可以使用Cognito。你可以自定義註冊和登入頁面,甚至可以使用AWS預先構建的頁面。通過聯合登入功能可以實現一鍵登入。

DynamoDB

我想介紹的最後一項服務是DynamoDB。DynamoDB是一個完全託管的NoSQL資料庫,具有高度的可擴展性和高可用性。我所有的項目都使用了DynamoDB,我是它的忠實粉絲。

DynamoDB的結構與其他資料庫非常相似:

  • 表:有一個或多個數據項;

  • 資料項:不同屬性的集合;

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

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

其實,DynamoDB是一個鍵值資料庫,你可以在其中儲存不同資料類型的值。值也可以是巢狀列表或巢狀物件列表(如JSON)。下面是一個DynamoDB資料項的例子:

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

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

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

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

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

價格:具體的使用價格取決於讀取、寫入和儲存的資料量。對於Saas產品創業者來說,價格非常低廉。如果你可以預測讀寫請求量,則甚至可以使用更便宜的預配置容量。

總結

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

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

  • 可擴展。如果你獲得了大量使用者,則AWS可以隨著使用者數量一起擴展。

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

原文連結:https://medium.com/@sandro_volpicella/top-5-serverless-aws-services-founders-indie-hackers-should-know-7ef62707f766

聲明:本文由CSDN翻譯,轉載請註明來源。


IT145.com E-mail:sddin#qq.com