本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 自動化巢狀應用程式的部署 AWS SAM
由 Rahul Sharad Gaikwad 醫生 (AWS)、Dmitry Gulin ()AWS、Ishwar Chauthaiwale (AWS) 和 Tabby Ward (AWS) 建立
Summary
在 Amazon Web Services (AWS) 上,無AWS伺服器應用程式模型 (AWSSAM) 是開放原始碼架構,提供快速語法來表達函數、APIs、資料庫和事件來源映射。只要為每個資源設定幾行,您就可以定義您想要的應用程式,並使用 建立模型YAML。在部署期間, SAM 會將語法SAM轉換並擴展為AWS CloudFormation 語法,您可以用來更快地建置無伺服器應用程式。
AWS SAM 簡化 AWS 平台上無伺服器應用程式的開發、部署和管理。它提供標準化架構、更快的部署、本機測試功能、資源管理、與 開發工具的無縫整合,以及支援社群。這些功能使其成為有效且高效地建置無伺服器應用程式的寶貴工具。
此模式使用 AWS SAM 範本自動部署巢狀應用程式。巢狀應用程式是另一個應用程式中的應用程式。父系應用程式會呼叫其子系應用程式。這些是無伺服器架構鬆散耦合的元件。
使用巢狀應用程式,您可以重複使用獨立撰寫和維護但使用 AWSSAM和 Serverless Application Repository 組成的服務或元件,快速建置高度複雜的無伺服器架構。巢狀應用程式可協助您建置功能更強大的應用程式,避免重複工作,並確保團隊和組織的一致性和最佳實務。為了示範巢狀應用程式, 模式會部署範例無AWS伺服器購物車應用程式
先決條件和限制
先決條件
作用中AWS帳戶
現有的虛擬私有雲端 (VPC) 和子網路
整合的開發環境,例如 Visual Studio Code (如需詳細資訊,請參閱建置在 上的工具AWS
) 如果尚未安裝 Python 輪程式庫,請使用 pip 安裝輪進行安裝
限制
可在無伺服器應用程式中巢狀化的應用程式數量上限為 200。
巢狀應用程式的參數數目上限可以有 60 個。
產品版本
此解決方案建置在AWSSAM命令列界面 SAM (AWS CLI) 1.21.1 版上,但此架構應可搭配較新AWSSAMCLI版本使用。
架構
目標技術堆疊
Amazon API Gateway
AWS SAM
Amazon Cognito
Amazon DynamoDB
AWS Lambda
Amazon Simple Queue Service (Amazon SQS) 佇列
目標架構
下圖顯示使用者如何透過呼叫 對購物服務提出請求APIs。使用者的請求,包括所有必要的資訊,會傳送至 Amazon API Gateway 和 Amazon Cognito 授權方,其會執行 的身分驗證和授權機制APIs。
在 DynamoDB 中新增、刪除或更新項目時,事件會放入 DynamoDB Streams,然後啟動 Lambda 函數。為了避免在同步工作流程中立即刪除舊項目,訊息會放入SQS佇列,這會啟動工作者函數來刪除訊息。

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

建置和部署堆疊。
驗證 CloudFormation 堆疊包含 Amazon Cognito。
產品 CloudFormation 堆疊包含 Lambda 函數和 Amazon API Gateway
購物 CloudFormation 堆疊包含 Lambda 函數、Amazon API Gateway、SQS佇列和 Amazon DynamoDB 資料庫。
工具
工具
Amazon API Gateway 可協助您以任何規模建立、發佈、維護REST、監控和保護 HTTP、 和 WebSocket APIs 。
AWS CloudFormation 可協助您設定AWS資源、快速且一致地佈建資源,並在其整個生命週期內跨AWS帳戶和區域進行管理。
Amazon Cognito 提供 Web 和行動應用程式的身分驗證、授權和使用者管理。
Amazon DynamoDB 是全受管的無SQL資料庫服務,可提供快速、可預測且可擴展的效能。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
AWS 無伺服器應用程式模型 (AWS SAM) 是一種開放原始碼架構,可協助您在AWS雲端中建置無伺服器應用程式。
Amazon Simple Queue Service (Amazon SQS) 提供安全、耐用且可用的託管佇列,可協助您整合和分離分散式軟體系統和元件。
Code
此模式的程式碼可在 GitHub AWSSAM巢狀堆疊範例
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
安裝 AWS SAM CLI。 | 若要安裝 AWS SAM CLI,請參閱 AWS SAM 文件中的說明。 | DevOps 工程師 |
設定AWS登入資料。 | 若要設定AWS登入資料,讓 AWSSAMCLI可以代表您呼叫 AWS 服務,請執行
如需設定登入資料的詳細資訊,請參閱身分驗證和存取登入資料。 | DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
複製AWSSAM程式碼儲存庫。 |
| DevOps 工程師 |
部署 範本以初始化專案。 | 若要初始化專案,請執行 | DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
檢閱AWSSAM應用程式範本。 | 檢閱巢狀應用程式的範本。此範例使用下列巢狀應用程式範本:
| DevOps 工程師 |
檢閱父範本。 | 檢閱將調用巢狀應用程式範本的範本。在此範例中,父範本為 | DevOps 工程師 |
編譯並建置AWSSAM範本程式碼。 | 使用 AWS SAM CLI執行下列命令。
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
部署應用程式。 | 若要啟動SAM範本程式碼,以建立巢狀應用程式 CloudFormation 堆疊並在AWS環境中部署程式碼,請執行下列命令。
命令將提示幾個問題。使用 回答所有問題 | DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
驗證堆疊。 | 若要檢閱AWSSAM範本中定義的AWS CloudFormation 堆疊AWS和資源,請執行下列動作:
| DevOps 工程師 |
相關資源
參考
無伺服器購物車微服務
(AWS 範例應用程式)
教學課程和影片
其他資訊
所有程式碼都到位後,範例會有下列目錄結構:
sam_stacks – 此資料夾包含
shared.py
layer。layer 是檔案封存,其中包含程式庫、自訂執行時間或其他相依性。透過 layer,您可以在函數中使用程式庫,而無需將其包含在部署套件中。product-mock-service – 此資料夾包含所有產品相關的 Lambda 函數和檔案。
shopping-cart-service – 此資料夾包含所有購物相關的 Lambda 函數和檔案。