使用 DevOps 實務和 AWS Cloud9 建立鬆散結合的架構與微型服務 - AWS 方案指引

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

使用 DevOps 實務和 AWS Cloud9 建立鬆散結合的架構與微型服務

創建者亞歷山大·納迪(AWS)

環境:PoC 或試點

技術: DevOps; 無服務器; Web 和移動應用程序; 數據庫

AWS 服務:AWS Cloud9; AWS; AWS CloudFormation CodePipeline; Amazon DynamoDB; AWS CodeCommit

Summary

此模式示範如何針對開始在 Amazon Web Services (AWS) 上測試 DevOps 實務的開發人員和開發主管,在無伺服器架構中開發典型 Web 應用程式。它構建了一個示例應用程序,該應用程序創建用於瀏覽和購買書籍的店面和後端,並提供可以獨立開發的微服務。該模式使用 AWS Cloud9 做為開發環境、Amazon DynamoDB 資料庫做為資料存放區,以及 AWS 等 AWS 服務來提 CodeBuild 供持續整合 CodePipeline 和持續部署 (CI/CD) 功能。

此模式會引導您完成下列開發活動: 

  • 建立標準 AWS Cloud9 開發環境

  • 使用 AWS CloudFormation 範本建立書籍的 Web 應用程式和微服務

  • 使用 AWS Cloud9 修改前端、提交變更和測試變更

  • 建立並測試微服務的 CI/CD 管線

  • 自動化單元測試

此模式的程式碼在 GitHub AWS DevOps 端對端研討會儲存庫中提供。

先決條件和限制

先決條件

重要事項:在您的 AWS 帳戶中建立此示範應用程式會建立和消耗 AWS 資源。您必須負責建立和執行應用程式所使用的 AWS 服務和資源成本。完成工作後,請務必移除所有資源,以避免持續收費。如需清理指示,請參閱《史詩》一節。 

限制

本逐步解說僅用於示範和開發目的。若要在生產環境中使用它,請參閱 AWS Identity and Access Management (IAM) 文件中的安全最佳實務,並對 IAM 角色、Amazon DynamoDB 和其他使用的服務進行必要的變更。Web 應用程式衍生自 AWS 書店示範應用程式;如需其他考量事項,請參閱 README 檔案的已知限制一節。

架構

書店應用程式的架構會在 AWS 書店示範應用程式的 README 檔案的架構區段中說明。 

從部署的角度來看,書店演示應用程序使用單個 CloudFormation 模板將所有服務和對象部署在一個堆棧中。此模式會進行一些變更,以示範特定開發人員或團隊如何在特定產品 (Books) 中運作,並獨立於應用程式的其餘部分進行更新。因此,此模式的程式碼會將 Books 微服務的 AWS Lambda 函數和相關物件分隔為第二個 CloudFormation 範本,以建立 Books 堆疊。這使得可以通過使用 CI/CD 實踐來查看微服務正在更新。在下圖中,虛線邊框標識 Books 微服務。

使 DevOps 用實踐的鬆散耦合架構中的書籍微服務。

工具

工具

  • 開玩笑框架進行測試 JavaScript

  • Python 3.9

Code

此模式的原始程式碼和範本可在 GitHub AWS DevOps 端對端研討會儲存庫中取得。在按照 Epics 部分中的步驟進行操作之前,請將存儲庫中的所有文件下載到您的計算機。

注意:Epics」段落提供此逐步解說的高階步驟,以提供有關程序的一般資訊。若要完成每個步驟,請參閱 AWS DevOps 端對端研討會儲存庫中的 README 檔案,以取得詳細指示。

AWS DevOps 端對端研討會儲存庫可擴充 AWS 書店示範應用程式儲存庫,並使用修改過的 AWS Cloud9 啟動載入程式碼版本來建立 AWS Cloud9 IDE。

最佳實務

使用書店應用程序很簡單。以下是一些建議的最佳作法:

  • 安裝應用程序時,您可以使用您選擇的項目名稱或使用默認名稱(demobookstore)以方便起見。

  • 應用程式啟動並執行之後,如果您想繼續測試一天,最好關閉 Amazon Neptune 資料庫,因為資料庫執行個體可能會產生額外費用。不過,請注意,資料庫會在七天後自動啟動。

  • 如需程式碼詳細資訊,請參閱 AWS 書店示範應用程式儲存庫的文件。它描述了每個微服務和表。

  • 有關其他最佳實踐,請參閱如果您有時間的某些挑戰... AWS DevOps 端對端研討會儲存庫中的讀我檔案區段。我們建議您檢閱這些資訊,深入了解安全性的其他功能,並練習解耦服務。

史诗

任務描述所需技能

從下載源代碼 GitHub。

此模式的原始程式碼和範本可在 GitHub AWS DevOps 端對端研討會儲存庫中取得。在您執行「Epics」區段中的後續步驟之前,請先將儲存庫中的所有檔案下載到您的電腦。

注意:Epics」段落提供此逐步解說的高階步驟,以提供有關程序的一般資訊。若要完成每個步驟,請參閱 AWS DevOps 端對端研討會儲存庫中的 README 檔案,以取得詳細指示。

AWS DevOps 端對端研討會儲存庫可擴充 AWS 書店示範應用程式儲存庫,並使用修改過的 AWS Cloud9 啟動載入程式碼版本來建立 AWS Cloud9 IDE。

應用程式開發人員
任務描述所需技能

建立書店應用程式的前端和 Lambda 函數。

  1. 登入CloudFormation 主控台,然後部署DemoBookstoreMainTemplate.yml範本以建立 DemoBookStoreStack 堆疊。這會建立 Books 微服務之外的前端和 Lambda 函數。

  2. 在堆疊的 [輸出] 索引標籤中,記下WebApplication標籤下的網站 URL。

開發人員

建立「書籍」微服務。

在主CloudFormation 控台上,部署DemoBookstoreBooksServiceTemplate.yml範本以建立 DemoBooksServiceStack 堆疊。

開發人員

測試您的應用程式。

使用 DemoBookStoreStack 堆疊中的網站 URL 來存取書店應用程式。

開發人員
任務描述所需技能

建立一個 AWS Cloud9 IDE。

在主CloudFormation 控台上,部署C9EnvironmentTemplate.yml範本以建立 AWS Cloud9 環境。

開發人員,開發人員

建立 CodeCommit 儲存庫。

  1. 登入 AWS CodeCommit 主控台,並確認您有一個demobookstore-WebAssets儲存庫,其中包含前端應用程式的程式碼。

  2. demobookstore-BooksService所謂的 Books 微服務創建一個存儲庫。

  3. 使用git clone命令複製 AWS Cloud9 (demobookstore-WebAssetsdemobookstore-BooksService) 中的兩個儲存庫。

開發人員

更改前端中的代碼並檢查管道。

  1. 使用 AWS Cloud9 在網頁上進行一些程式碼變更。這將更新存demobookstore-WebAssets儲庫。

  2. AWS CodePipeline 主控台上,確認示範儲存資產管道正在執行。 

  3. 通過從瀏覽器中刷新它來測試您的 Web 應用程序(Firefox 上的 Ctrl+F5)。

開發人員
任務描述所需技能

新增用於組建和服務更新的 YAML 檔案。

  1. 在 AWS Cloud9 中,上傳buildspec.ymlDemoBookstoreBooksServiceUpdateTemplate.yml 檔案。

    • buildspec.yml具有構建說明,還包括自動化測試的測試說明。他們在這一點上被評論,並將在以後使用。

    • DemoBookstoreBooksServiceUpdateTemplate.yml是的更新版本DemoBookstoreBooksServiceTemplate.yml,將用於管線的部署階段。

  2. 提交並推送文件。

開發人員

為建置管道建立 S3 儲存貯體。

若要建立 S3 儲存貯體,請按照 Amazon S3 文件中的指示進行操作。

  • 值區名稱必須是全域唯一的,例如demobookstore-books-service-pipeline-bucket-<YYYYMMDDHHMM>。 

  • 清除 [封鎖所有公用存取] 核取方塊,然後選取 [我確認...] 核取方塊。

開發人員

使用 IAM 建立 CloudFormation 部署角色。

建立demobookstore-CloudFormation-role角色並附加AdministratorAccess原則。在下一個史詩中,您可以重新配置此角色以獲得最低權限。

開發人員

建立新管道以自動化 Books 微服務的建置和部署。

使用「提交」、「建置」和「部署」階段建立BooksService管道 (例如,demo書店-Pipeline),如讀我檔案中所述。

開發人員

在 AWS Cloud9 中測試您的微服務。

ListBooks功能中進行更改並查看管道工作。

開發人員

自動執行 ListBooks Lambda 函數的單元測試。

在 AWS Cloud9 IDE 中,啟用組建以執行單元測試,並檢查測試結果。如需指示,請參閱讀我檔案

開發人員
任務描述所需技能

確保您的解決方案安全。

配置demobookstore-CloudFormation-role為具有最低權限,並檢查其他使用的角色。

開發人員

消除 CloudFormation 模板中的依賴關係。

DemoBookstoreMainTemplate.yml模板和模板之間交換信息的方法是基於輸出和導入。DemoBookstoreBooksServiceTemplate.yml在這兩個模板之間傳遞值會增加依賴關係。若要消除相依性,請考慮使用 AWS Systems Manager Parameter Store

開發人員

建立購物車微服務。

使用 Books 微服務做為範例,將購物車相關功能從範DemoBookstoreMainTemplate.yml本中取出,並建立購物車微服務。

開發人員
任務描述所需技能

刪除 S3 儲存貯體。

Amazon S3 主控台上,刪除下列與範例 Web 應用程式相關聯的儲存貯體:

  • 為 AWS 書店示範應用程式建立的兩個值區。值區名稱以您在建立前端 CloudFormation 時為 AWS 提供的堆疊名稱開頭,DemoBookStoreStack例如。

  • <YYYYMMDDHHMM>一個用於構建管道的存儲桶; 例如,demobookstore-books-service-pipeline-bucket-

開發人員

刪除堆疊。

CloudFormation 主控台上,刪除與範例 Web 應用程式相關聯的堆疊:

  • DemoBooksServiceStack

  • DemoBookStoreStack

移除作業可能需要超過 90 分鐘。如果移除失敗,請再次刪除它們,並根據通知刪除任何手動資源 (例如,VPC 或網路介面)。

開發人員

刪除 IAM 角色。

IAM 主控台上,刪除下列角色:

  • demobookstore-Cloudformation-role

  • demobookstore-BooksService-BuildProject-service-role

如需 step-by-step 指示,請參閱 IAM 文件。 

開發人員

相關資源

其他資訊

如需詳細的 step-by-step 指示,請參閱 AWS DevOps 端對端研討會 GitHub 儲存庫中的 README 檔案

關於 2023 年 5 月的更新:此模式已更新為使用較新版本的節點和 Python。我們更新了原始程式碼中的許多套件,並移除了 Glyphicon,因為它不再是免費的。我們也移除了 AWS 書店示範應用程式儲存庫上的所有相依性,因此這兩個儲存庫現在可以獨立進化。