使用 AWS SAM 自動部署巢狀應用程式 - AWS 方案指引

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

使用 AWS SAM 自動部署巢狀應用程式

由拉胡爾·沙拉德·蓋克瓦德博士(AWS),德米特里古林(AWS),伊什瓦爾喬凱瓦勒(AWS)和塔比沃德(AWS)創建

代碼存儲庫:aws-sam-nested-stack-示

環境:PoC 或試點

技術:現代化;無伺服器; DevOps

工作負載:所有其他工作

AWS 服務:AWS Serverless Application Repository

Summary

在 Amazon Web Services (AWS) 上,AWS Serverless Application Model (AWS SAM) 是一種開放原始碼架構,提供簡寫語法來表示函數、API、資料庫和事件來源對應。每個資源只需幾行,您就可以定義所需的應用程式,並使用 YAML 建立模型。在部署期間,SAM 會將 SAM 語法轉換並擴充為 AWS CloudFormation 語法,以便更快速地建置無伺服器應用程式。

AWS SAM 可簡化 AWS 平台上無伺服器應用程式的開發、部署和管理作業。它提供了標準化框架,更快的部署,本地測試功能,資源管理,與開發工具的無縫集成以及支持社區。這些功能使其成為有效率且有效地建置無伺服器應用程式的重要工具。

此模式使用 AWS SAM 範本自動化巢狀應用程式的部署。巢狀應用程式是另一個應用程式中的應用程式。父應用程式會呼叫其子應用程式。這些是無伺服器架構的鬆散耦合元件。 

使用巢狀應用程式,您可以重複使用獨立編寫和維護但使用 AWS SAM 和無伺服器應用程式儲存庫組成的服務或元件,快速建立高度複雜的無伺服器架構。巢狀應用程式可協助您建置功能更強大的應用程式、避免重複工作,並確保團隊和組織間的一致性與最佳作法。為了示範巢狀應用程式,該模式會部署 AWS 無伺服器購物車應用程式範例

先決條件和限制

先決條件

  • 有效的 AWS 帳戶

  • 現有的虛擬私有雲 (VPC) 和子網路

  • 整合式開發環境,例如 AWS Cloud9 或 Visual Studio 程式碼 (如需詳細資訊,請參閱在 AWS 上建置的工具)

  • 使用 pip 安裝輪安裝的 Python 輪庫,如果尚未安裝

限制

  • 無伺服器應用程式中可以巢狀化的應用程式數目上限為 200 個。

  • 巢狀應用程式的最大參數數目可以有 60 個。

產品版本

  • 此解決方案建立在 AWS SAM 命令列界面 (AWS SAM CLI) 1.21.1 版本上,但此架構應該可以與更新的 AWS SAM CLI 版本搭配使用。

架構

目標技術堆疊

  • Amazon API Gateway

  • AWS SAM

  • Amazon Cognito

  • Amazon DynamoDB

  • AWS Lambda

  • Amazon Simple Queue Service (Amazon SQS) 佇列

目標架構

下圖顯示了如何通過調用 API 向購物服務發出用戶請求。使用者的請求 (包括所有必要的資訊) 會傳送至 Amazon API Gateway 和 Amazon Cognito 授權者,該授權者會針對 API 執行身份驗證和授權機制。

在 DynamoDB 中新增、刪除或更新項目時,會在 DynamDynamoDB Streams 上放置一個事件,然後啟動 Lambda 函數。為了避免在同步工作流程中立即刪除舊項目,會將訊息置於 SQS 佇列中,該佇列會啟動 Worker 函數以刪除訊息。

""

在此解決方案設定中,AWS SAM CLI 可做為 AWS CloudFormation 堆疊的界面。AWS SAM 範本會自動部署巢狀應用程式。父 SAM 範本會呼叫子範本,而父系 CloudFormation 堆疊會部署子堆疊。每個子堆疊都會建置 AWS SAM CloudFormation 範本中定義的 AWS 資源。

""
  1. 建置和部署堆疊。

  2. 身份驗證 CloudFormation 堆棧包含 Amazon Cognito。

  3. 產品 CloudFormation 堆疊包含 Lambda 函數和 Amazon API Gateway

  4. 購物 CloudFormation 堆疊包含一個 Lambda 函數、Amazon API Gateway、SQS 佇列和 Amazon DynamoDB 資料庫。

工具

工具

  • Amazon API Gateway 可協助您建立、發佈、維護、監控和保護任何規模的 REST、HTTP 和 WebSocket API。

  • AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。

  • Amazon Cognito 為網頁和行動應用程式提供身份驗證、授權和使用者管理功能。

  • Amazon DynamoDB 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。

  • AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。

  • AWS Serverless Application Model (AWS SAM) 是一種開放原始碼架構,可協助您在 AWS 雲端建置無伺服器應用程式。

  • Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可協助您整合和分離分散式軟體系統和元件。

Code

此模式的程式碼可在 GitHub AWS SAM 巢狀堆疊範例儲存庫中取得。

史诗

任務描述所需技能

安裝 AWS 山姆 CLI。

若要安裝 AWS SAM CLI,請參閱 AWS SAM 文件中的指示。

DevOps 工程師

設定 AWS 登入資料。

若要設定 AWS 登入資料,以便 AWS SAM CLI 可以代表您呼叫 AWS 服務,請執行aws configure命令並遵循提示進行操作。

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

如需有關設定認證的詳細資訊,請參閱驗證和存取認證

DevOps 工程師
任務描述所需技能

複製 AWS SAM 程式碼儲存庫。

  1. 輸入以下命令,克隆此模式的 aws sam 嵌套堆棧示例存儲庫。

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. 輸入下列命令,導覽至複製的目錄。

    cd aws-sam-nested-stack-sample
DevOps 工程師

部署範本以初始化專案。

若要初始化專案,請執行SAM init指令。當系統提示您選擇範本來源時,請選擇Custom Template Location

DevOps 工程師
任務描述所需技能

檢閱 AWS SAM 應用程式範本。

檢閱巢狀應用程式的範本。此範例使用下列巢狀應用程式範本:

  • auth.yaml— 此範本設定驗證相關資源,例如 Amazon Cognito 和 AWS Systems Manager Parameter Store。

  • product-mock.yaml— 此範本會部署與產品相關的資源,例如 Lambda 函數和 Amazon API Gateway。

  • shoppingcart-service.yaml— 此範本會設定與購物車相關的資源,例如 AWS Identity and Access Management (IAM)、DynamoDB 資料表和 Lambda 函數。

DevOps 工程師

檢閱父範本。

複查將叫用巢狀應用程式範本的範本。在此範例中,父範本為template.yml。所有單獨的應用程序都嵌套在單個父模板中template.yml

DevOps 工程師

編譯並建置 AWS SAM 範本程式碼。

使用 AWS SAM CLI 執行下列命令。

sam build
DevOps 工程師
任務描述所需技能

部署應用程式。

若要啟動建立巢狀應用程式 CloudFormation 堆疊並在 AWS 環境中部署程式碼的 SAM 範本程式碼,請執行下列命令。

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

該命令將提示幾個問題。回答所有問題y

DevOps 工程師
任務描述所需技能

驗證堆疊。

若要檢閱 AWS SAM 範本中定義的 AWS CloudFormation 堆疊和 AWS 資源,請執行下列動作:

  1. 登入 AWS 管理主控台,然後導覽至主CloudFormation控台。

  2. 確認已列出父堆疊和子堆疊。

    在此範例中,sam-shopping-cart是呼叫巢狀驗證、產品和購物堆疊的父系堆疊。

    產品堆疊會提供產品 API Gateway URL 連結做為輸出。

DevOps 工程師

相關資源

參考

教學課程和影片

其他資訊

所有代碼到位後,該示例具有以下目錄結構:

  • sam_stack — 此資料夾包含圖shared.py。圖層是包含程式庫、自訂執行階段或其他相依性的檔案歸檔。透過圖層,您可以在函數中使用程式庫,而不需要將它們包含在部署套件中。

  • product-mock-service— 此資料夾包含所有與產品相關的 Lambda 函數和檔案。

  • shopping-cart-service— 此資料夾包含所有與購物相關的 Lambda 函數和檔案。