

 此白皮書僅供歷史參考。有些內容可能已過時，有些連結可能無法使用。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例架構模式
<a name="sample-architecture-patterns"></a>

 您可以使用 API Gateway 和 AWS Lambda 作為邏輯層來實作熱門的架構模式。此白皮書包含利用 AWS Lambda邏輯層的最熱門架構模式：
+  **行動後端 -** 行動應用程式會與 API Gateway 和 Lambda 通訊，以存取應用程式資料。此模式可以延伸到未使用無伺服器 AWS 資源來託管簡報層資源的一般 HTTPS 用戶端 （例如桌面用戶端、在 EC2 上執行的 Web 伺服器等）。
+  **單一頁面應用程式 **- Amazon S3 和 CloudFront 中託管的單一頁面應用程式會與 API Gateway 通訊 AWS Lambda 並存取應用程式資料。
+  **Web 應用程式 ** – Web 應用程式是一種一般用途、事件驅動的 Web 應用程式後端，可 AWS Lambda 搭配 API Gateway 用於其商業邏輯。它也會使用 DynamoDB 做為其資料庫，並使用 Amazon Cognito 進行使用者管理。所有靜態內容都是使用 Amplify 託管。

 除了這兩種模式之外，本白皮書討論 Lambda 和 API Gateway 對一般微服務架構的適用性。微服務架構是一種熱門模式，雖然不是標準三層架構，但涉及解耦應用程式元件，並將其部署為彼此通訊的無狀態個別功能單位。

# 行動後端
<a name="mobile-backend"></a>

![\[無伺服器行動後端的架構模式\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/arch-pattern-serverless-mobile-backend.png)


* 無伺服器行動後端的架構模式 *

* 表 1 - 行動後端層元件 *


|  層  |  元件  | 
| --- | --- | 
|  簡報  |  在使用者裝置上執行的行動應用程式。 | 
|  Logic (邏輯)  |   Amazon API Gateway 搭配 AWS Lambda。  此架構顯示三個公開的服務 (`/tickets`、 `/shows`和 `/info`)。API Gateway 端點由 [Amazon Cognito 使用者集](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html)區保護 在此方法中，使用者會登入 Amazon Cognito 使用者集區 （視需要使用聯合第三方），並接收用於授權 API Gateway 呼叫的存取和 ID 字符。  每個 Lambda 函數都會指派自己的 Identity and Access Management (IAM) 角色，以提供適當資料來源的存取權。  | 
|  資料  |   DynamoDB 用於 `/tickets`和 `/shows`服務。  Amazon RDS 用於`/info`服務。此 Lambda 函數會從 AWS Secrets Manager 擷取 Amazon RDS 登入資料，並使用彈性網路界面存取私有子網路。  | 

# 單頁應用程式
<a name="single-page-application"></a>

![\[AWS architecture diagram showing interactions between services like CloudFront, S3, Lambda, and DynamoDB.\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/single-page-application.png)


* 無伺服器單頁應用程式的架構模式 *

* 表 2 - 單頁應用程式元件 *


|  層  |  元件  | 
| --- | --- | 
|  簡報  |   Amazon S3 中託管的靜態網站內容，由 CloudFront 分發。  AWS Certificate Manager 允許使用自訂 SSL/TLS 憑證。  | 
|  Logic (邏輯)  |   搭配 的 API Gateway AWS Lambda。  此架構顯示三個公開的服務 (`/tickets`、 `/shows`和 `/info`)。API Gateway 端點由 Lambda 授權方保護。在此方法中，使用者透過第三方身分提供者登入，並取得存取權和 ID 字符。這些字符包含在 API Gateway 呼叫中，Lambda 授權方會驗證這些字符並產生包含 API 啟動許可的 IAM 政策。  每個 Lambda 函數都會指派自己的 IAM 角色，以提供適當資料來源的存取權。  | 
|  資料  |   Amazon DynamoDB 用於 `/tickets`和 `/shows`服務。  `/shows` 服務會使用 Amazon ElastiCache 來改善資料庫效能。快取遺漏會傳送至 DynamoDB。  Amazon S3 用於託管 使用的靜態內容`/info service`。  | 

# Web 應用程式
<a name="web-application"></a>

![\[AWS 雲端 architecture diagram showing client interaction with various AWS 服務.\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/web-application.png)


* Web 應用程式的架構模式 *

* 表 3 - Web 應用程式元件 *


|  層  |  元件  | 
| --- | --- | 
|  簡報  |   前端應用程式是由 create-react-app 等 React 公用程式所產生的所有靜態內容 (HTML、CSS、JavaScript 和映像）。Amazon CloudFront 託管所有這些物件。使用 Web 應用程式時， 會將所有資源下載到瀏覽器，並從該處開始執行。Web 應用程式會連線至呼叫 APIs後端。  | 
|  Logic (邏輯)  |   邏輯層是使用 API Gateway REST APIs。  此架構會顯示多個公開的服務。有多個不同的 Lambda 函數，每個函數都會處理應用程式的不同層面。Lambda 函數位於 API Gateway 後方，可使用 API URL 路徑存取。 使用者身分驗證是使用 Amazon Cognito 使用者集區或聯合身分使用者提供者處理。API Gateway 使用與 Amazon Cognito 的立即可用整合。只有在使用者經過身分驗證後，用戶端才會收到 JSON Web Token (JWT) 權杖，然後在進行 API 呼叫時應使用該權杖。 每個 Lambda 函數都會指派自己的 IAM 角色，以提供適當資料來源的存取權。  | 
|  資料  |   在此特定範例中，DynamoDB 用於資料儲存，但其他專用 Amazon 資料庫或儲存服務可根據使用案例和使用案例使用。  | 

# 使用 Lambda 的微服務
<a name="microservices-with-lambda"></a>

![\[AWS 雲端 architecture with API Gateways and Lambda functions across two accounts.\]](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/serverless-multi-tier-architectures-api-gateway-lambda/images/microservices-with-lambda.png)


* 使用 Lambda 的微服務架構模式 *

 微型服務架構模式不受限於典型的三層架構；不過，這種熱門模式可以透過使用無伺服器資源來實現顯著的好處。

 在此架構中，每個應用程式元件都會解耦並獨立部署和操作。使用 Amazon API Gateway 建立的 API，以及後續由 啟動的函數 AWS Lambda，就是您建置微服務所需的一切。您的團隊可以使用這些服務，將您的環境解耦和分段至所需的精細程度。

 一般而言，微服務環境可能會帶來下列困難：建立每個新微服務時的重複額外負荷、伺服器密度和使用率最佳化的問題、同時執行多個微服務版本的複雜性，以及與許多個別服務整合的用戶端程式碼需求擴散。

 當您使用無伺服器資源建立微服務時，這些問題變得較不難解決，在某些情況下，只是消失。無伺服器微服務模式可降低建立每個後續微服務的障礙 (API Gateway 甚至允許複製現有 APIs，以及在其他帳戶中使用 Lambda 函數）。最佳化伺服器使用率不再與此模式相關。最後，Amazon API Gateway 以多種熱門語言提供以程式設計方式產生的用戶端 SDKs，以減少整合開銷。