透過 AWS CDK 啟用跨多個 AWS 區域、帳戶和 OU 的 Amazon DevOps 大師,提升營運效能 - AWS Prescriptive Guidance

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

透過 AWS CDK 啟用跨多個 AWS 區域、帳戶和 OU 的 Amazon DevOps 大師,提升營運效能

由拉胡爾·沙拉德·蓋克瓦德(AWS)創建

環境:PoC 或試驗

技能:管理與治理;原生雲端;DevOps;作業;安全性、身分識別、法規遵循;無伺服器

AWS 服務:Amazon API Gateway;AWS CDK;Amazon DynamoDB DevOps 作業大師;亞馬遜 DynamoDB;AWS Organizations

Summary

此模式演示了在 TypeScript 中使用 AWS Cloud Development Kit (AWS CDK) 跨多個 Amazon Web 服務 (AWS) 區域、帳戶和組織單位 (OU) 啟用 Amazon DevOps Guru 服務的步驟。您可以使用 AWS CDK 堆疊從管理員 (主要) AWS 帳戶部署 AWS CloudFormation StackSets,以便跨多個帳戶啟用 Amazon DevOps Guru,而不必登入每個帳戶,並為每個帳戶個別啟用 DevOps Guru。

Amazon DevOps Guru 提供人工智慧操作 (AiOps) 功能,可協助您改善應用程式的可用性並更快解決操作問題。DevOps Guru 透過套用機器學習 (ML) 支援的建議來減少您的手動工作,而不需要任何 ML 專業知識。DevOps 大師會分析您的資源和作業資料。如果偵測到任何異常,它會提供指標、事件和建議,以協助您解決問題。

此模式說明啟用 Amazon DevOps 大師的三個部署選項:

  • 適用於跨多個帳戶和區域的所有堆疊資源

  • 適用於 OU 之間的所有堆疊資源

  • 適用於跨多個帳戶和區域的特定堆疊資源

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • AWS Command Line Interface (AWS CLI),已安裝和設定。請參閱安裝、更新和解除安裝 AWS CLI在 AWS CLI 文件中)。

  • AWS CDK 工具組,已安裝和設定。請參閱AWS CDK 工具組在 AWS CDK 文件中。)

  • 節點包管理器(npm),在 TypeScript 中為 AWS CDK 安裝和配置。請參閱下載和安裝 Node.js 和 npm在 npm 文檔中。)

  • Python3 安裝並配置,用於運行 Python 腳本將流量注入到示例無服務器應用程序中。請參閱Python 設定和使用在文檔中。)

  • Pip,已安裝並配置為安裝 Python 請求庫。請參閱《》pip 安裝說明在 PyPL 網站上。)

產品版本

  • AWS CDK 工具組 1.107.0 或更新版本

  • npm 版本 7.9.0 或更新版本

  • Node.js 15.3.0 版或更新版本

Architecture

技術

此模式的架構包含以下服務:

AWS CDK 堆疊

該模式使用下列 AWS CDK 堆疊: 

  • CdkStackSetAdminRole— 建立 AWS Identity 和存取管理 (IAM) 管理員角色,以建立管理員和目標帳戶之間的信任關係。

  • CdkStackSetExecRole— 建立 IAM 角色以信任管理員帳戶。

  • CdkDevopsGuruStackMultiAccReg— 啟用跨多個 AWS 區域和帳戶的 DevOps Guru,以及設定 Amazon Simple Notification Service (Amazon SNS) 通知。

  • CdkDevopsGuruStackMultiAccRegSpecStacks— 針對特定堆疊啟用跨多個 AWS 區域和帳戶的 DevOps 大師,並設定 Amazon SNS 通知。

  • CdkDevopsguruStackOrgUnit— 跨 OU 啟用 DevOps 大師,並設定 Amazon SNS 通知。 

  • CdkInfrastructureStack— 在管理員帳戶中部署範例無伺服器應用程式元件,例如 API Gateway、Lambda 和 DynamoDB,以示範錯誤注入和產生深入解析。

範例應用程式架構

下圖說明已部署到多個帳戶和區域之間的範例無伺服器應用程式的架構。該模式使用管理員帳戶來部署所有 AWS CDK 堆疊。它還使用管理員帳戶作為設置 DevOps Guru 的目標帳戶之一。

  1. 啟用 DevOps Guru 時,它會先基準每個資源的行為,然後從 CloudWatch 發佈的指標擷取作業資料。

  2. 如果偵測到異常,則會將其與 CloudTrail 中的事件相關聯,並產生深入解析。

  3. 洞察提供了一系列相關的事件,以及規定的建議,讓操作員能夠識別罪魁禍首資源。

  4. Amazon SNS 會傳送通知訊息給操作員。

自動化和擴充

所以此GitHub 儲存庫使用 AWS CDK 做為基礎設施即程式碼 (IAC) 工具來建立此架構的組態。AWS CDK 可協助您跨多個 AWS 帳戶、區域和 OU 協調資源並啟用 DevOps 大師。

Tools

AWS 服務

  • AWS CDK— AWS Cloud Development Kit (AWS CDK) 可協助您將雲端基礎設施定義為使用五種支援的程式設計語言之一的程式碼:TypeScript、JavaScript、Python、Java 和 C#。

  • AWS CLI— AWS 命 Command Line Interface (AWS CLI) 是統一的工具,可提供與 AWS 服務和資源互動的一致命令列界面。

Code

此模式的來源碼可在 GitHub (Amazon DevOps Guru CDK 範例應用程式儲存庫。AWS CDK 代碼是用 TypeScript 編寫的。若要複製並使用儲存庫,請遵循下一節中的指示操作。

重要:這種模式中的某些故事包含 AWS CDK 和 AWS CLI 命令範例,這些命令格式適用於 Unix、Linux 和 macOS。用於 Windows 時,請以插入號 (^) 取代每一行結尾處的反斜線 (\) 接續字元。

Epics

任務描述需要的技能
設定 AWS 命名設定檔。

依照下列方式設定 AWS 命名設定檔,以在多帳戶環境中部署堆疊。

針對管理員帳戶:

$aws configure --profile administrator AWS Access Key ID [****]: <your-administrator-access-key-ID> AWS Secret Access Key [****]: <your-administrator-secret-access-key> Default region name [None]: <your-administrator-region> Default output format [None]: json

針對目標帳戶:

$aws configure --profile target AWS Access Key ID [****: <your-target-access-key-ID> AWS Secret Access Key [****]: <your-target-secret-access-key> Default region name [None]: <your-target-region> Default output format [None]: json

如需詳細資訊,請參閱「」命名設定檔在 AWS CLI 文件中。

裝置工程師
驗證 AWS 設定檔組態。

(選用) AWS 可以在credentialsconfig檔案,方法是遵循設定和檢視組態設定在 AWS CLI 文件中。

裝置工程師
驗證 AWS CDK 版本。

執行下列命令,驗證 AWS CDK 工具組的版本:

$cdk --version

此病毒碼需要 1.107.0 版或更新版本。如果您已經擁有舊版 AWS CDK,請遵循AWS CDK 文件以更新它。

裝置工程師
複製專案程式碼。

使用以下命令克隆此模式的 GitHub 存儲庫:

$git clone https://github.com/aws-samples/amazon-devopsguru-cdk-samples.git
裝置工程師
安裝包依賴關係和編譯 TypeScript 文件。

安裝軟件包依賴關係,並通過運行以下命令編譯 TypeScript 文件:

$cd amazon-devopsguru-cdk-samples $npm install $npm fund

這些命令會安裝範例儲存庫中的所有套件。

重要:如果您收到任何關於遺失套件的錯誤,請使用下列其中一個命令:

$npm ci

—或—

$npm install -g @aws-cdk/<package-name>

您可以在軟件包名稱和版本列表中找到Dependencies的 區段/amazon-devopsguru-cdk-samples/package.jsonfile. 如需詳細資訊,請參閱「」CI安裝 npm在 npm 文檔中。

裝置工程師
任務描述需要的技能
設定 Amazon SNS 通知的電子郵件地址。

請依照下列步驟提供 Amazon SNS 通知的電子郵件地址:

  1. 編輯檔案/amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-stack.ts/amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-org-uni-stack.ts

  2. 在 中DevOpsGuruTopicSubscription區段中,更新Endpoint參數與您的電子郵件地址。

  3. 儲存並關閉檔案。

裝置工程師
建置專案程式碼。

建置專案程式碼,並執行下列命令來合成堆疊:

npm run build && cdk synth

您應該會看到類似下列的輸出: 

$npm run build && cdk synth > cdk-devopsguru@0.1.0 build > tsc Successfully synthesized to ~/amazon-devopsguru-cdk-samples/cdk.out Supply a stack id (CdkDevopsGuruStackMultiAccReg,CdkDevopsGuruStackMultiAccRegSpecStacks, CdkDevopsguruStackOrgUnit, CdkInfrastructureStack, CdkStackSetAdminRole, CdkStackSetExecRole) to display its template.

如需詳細資訊和步驟,請參閱您的第一個 AWS CDK 應用程式在 AWS CDK 文件中。

裝置工程師
列出 AWS CDK 堆疊。

執行下列命令列以列出所有 AWS CDK 堆疊:

$cdk list

該命令會顯示下列清單:

CdkDevopsGuruStackMultiAccReg CdkDevopsGuruStackMultiAccRegSpecStacks CdkDevopsguruStackOrgUnit CdkInfrastructureStack CdkStackSetAdminRole CdkStackSetExecRole
裝置工程師
任務描述需要的技能
部署 AWS CDK 堆疊以建立 IAM 角色。

此模式使用AWS CloudFormation StackSets以跨多個帳戶執行堆疊作業。如果您要建立第一個堆疊集,則必須建立下列 IAM 角色,才能取得在 AWS 帳戶中設定的必要權限:

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

請注意:角色必須具有這些確切的名稱。

  1. 建立 IAM

    AWSCloudFormationStackSetAdministrationRole

    角色在系統管理員 (主要) 帳戶中執行下列 CLI 命令:

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. 建立 IAM

    AWSCloudFormationStackSetExecutionRole

    角色,您希望執行堆疊執行個體。若要建立此角色,請執行下列 CLI 命令:

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator   $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

如需詳細資訊,請參閱「」授與自我管理許可在 AWS CloudFormation 文件中。

裝置工程師
部署 AWS CDK 堆疊,在多個帳戶中啟用 DevOps 大師。

AWS CDKCdkDevopsGuruStackMultiAccReg堆疊會建立堆疊集,以在多個帳戶和區域之間部署堆疊執行個體。若要部署堆疊,請使用指定的參數執行下列 CLI 命令:

$cdk deploy CdkDevopsGuruStackMultiAccReg \   --profile administrator \   --parameters AdministratorAccountId=<administrator-account-ID> \   --parameters TargetAccountId=<target-account-ID> \   --parameters RegionIds="<region-1>,<region-2>"

目前,Amazon DevOps 大師可在DevOps Guru

裝置工程師
任務描述需要的技能
擷取 OU 識別碼。

AWS Organizations主控台中,識別您要啟用 DevOps Guru 的組織單位識別碼。

裝置工程師
啟用 OU 的服務管理許可。

如果您使用 AWS Organizations 進行帳戶管理,則必須授與服務管理的權限才能啟用 DevOps Guru。而不是手動建立 IAM 角色,請使用以組織為基礎的信任存取和服務連結角色 (SLR

裝置工程師
部署 AWS CDK 堆疊,以在 OU 之間啟用 DevOps 大師。

AWS CDKCdkDevopsguruStackOrgUnit堆疊可啟用 OU 之間的 DevOps 大師服務。若要部署堆疊,請使用指定的參數執行下列命令:

$cdk deploy CdkDevopsguruStackOrgUnit \   --profile administrator \   --parameters RegionIds="<region-1>,<region-2>" \   --parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
裝置工程師
任務描述需要的技能
部署 AWS CDK 堆疊以建立 IAM 角色。

如果您尚未建立第一個選項中顯示的必要 IAM 角色,請先執行以下操作:

  1. 建立 IAM

    AWSCloudFormationStackSetAdministrationRole

    角色在系統管理員 (主要) 帳戶中執行下列 CLI 命令:

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. 建立 IAM

    AWSCloudFormationStackSetExecutionRole

    角色,您希望執行堆疊執行個體。若要建立此角色,請執行 CLI 命令:

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

如需詳細資訊,請參閱「」授與自我管理許可在 AWS CloudFormation 文件中。

裝置工程師
刪除現有堆疊。

如果您已經使用第一個選項來啟用所有堆疊資源的 DevOps Guru,則可以使用下列命令刪除舊堆疊:

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator

或者,您也可以變更 RegionIds參數,當您重新部署堆疊以避免堆疊已存在錯誤。

裝置工程師
使用堆疊清單更新 AWS CDK 堆疊。
  1. 編輯 /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-spec-stack.ts 檔案。

  2. ResourcesCloudFormationStackNames,列出您希望啟用 DevOps Guru 的堆疊。為了示範目的,參數會指定CdkInfrastructureStack堆疊,但您可以根據您的需求編輯此項目。

  3. 儲存並關閉 檔案。

  4. 若要合成並更新堆疊範本,請執行:

     $cdk synth
資料工程師
部署 AWS CDK 堆疊,為多個帳戶的特定堆疊資源啟用 DevOps Guru。

AWS CDKCdkDevopsGuruStackMultiAccRegSpecStacks堆疊可讓 DevOps Guru 針對多個帳戶的特定堆疊資源。若要部署堆疊,請執行下列命令:

$cdk deploy CdkDevopsGuruStackMultiAccRegSpecStacks \   --profile administrator  \   --parameters AdministratorAccountId=<administrator-account-ID> \   --parameters TargetAccountId=<target-account-ID> \   --parameters RegionIds="<region-1>,<region-2>"

請注意:如果您先前針對選項 1 部署此堆疊,請變更RegionIds參數(確保從可用的區域)以避免堆疊已存在錯誤。

裝置工程師
任務描述需要的技能
部署範例無伺服器基礎結構堆疊。

AWS CDKCdkInfrastructureStack堆疊會部署無伺服器元件,例如 API Gateway、Lambda 和 DynamoDB 表格,以示範 DevOps 大師深入解析。若要部署堆疊,請執行下列命令: 

$cdk deploy CdkInfrastructureStack --profile administrator
裝置工程師
在 DynamoDB 中插入範例記錄。

執行下列命令,將範例記錄填入 DynamoDB 表格。請提供正確的路徑populate-shops-dynamodb-table.json指令碼。

$aws dynamodb batch-write-item \   --request-items file://scripts/populate-shops-dynamodb-table.json \   --profile administrator

該命令會顯示下列輸出:

{     "UnprocessedItems": {} }
裝置工程師
驗證在 DynamoDB 中插入的記錄。

若要確認 DynamoDB 表格包含來自populate-shops-dynamodb-table.json檔案中,存取ListRestApiEndpointMonitorOperatorAPI,該 API 會以 AWS CDK 堆疊的輸出形式發佈。您也可以在輸出索引 AWS CloudFormation 籤,用於CdkInfrastructureStack堆疊。AWS CDK 輸出格式應類似以下內容:

CdkInfrastructureStack.CreateRestApiMonitorOperatorEndpointD1D00045 = https://oure17c5vob.execute-api.<your-region>.amazonaws.com/prod/ CdkInfrastructureStack.ListRestApiMonitorOperatorEndpointABBDB8D8 = https://cdff8icfrn4.execute-api.<your-region>.amazonaws.com/prod/
裝置工程師
等待資源完成基準。

這個無伺服器堆疊有幾個資源。我們建議您等待 2 小時,再執行後續步驟。如果您在生產環境中部署此堆疊,則最多可能需要 24 小時才能完成基準,這取決於您在 DevOps Guru 中選取要監視的資源數目。

裝置工程師
任務描述需要的技能
更新 AWS CDK 基礎設施堆疊。

若要嘗試 DevOps Guru 深入解析,您可以進行一些設定變更,以重現典型的作業問題。

  1. 編輯 /amazon-devopsguru-cdk-samples/lib/infrastructure-stack.ts 檔案。

  2. 在 中DDB Table區段中,將 DynamoDB 表格的讀取容量從 5 變更為 1。

  3. 儲存並關閉 檔案。

  4. 執行下列命令來合成和部署更新的 AWS CDK 基礎設施堆疊:

    $cdk synth $cdk deploy CdkInfrastructureStack --profile administrator
裝置工程師
在 API 上注入 HTTP 請求。

以 HTTP 要求的形式將輸入流量注入ListRestApiMonitorOperatorEndpointxxxxAPI:

  1. 編輯 Python 指令碼/amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.py

  2. 更新url變數與 API 連結ListRestApiMonitorOperatorEndpointxxxx。您可以在 AWS CDK 的輸出中找到這個 URLdeploy命令或 AWS 雲端形成主控台上的輸出索引標籤。

  3. 儲存並關閉 檔案。

  4. 使用命令來執行 Python 指令碼:

    $python sendAPIRequest.py
  5. 請確定您取得 200 個狀態碼。

  6. 您可能需要通過多個(最好是四個)終端運行腳本,以高速注入流量。

  7. 指令碼在迴圈中執行大約 10 分鐘之後,您可以看到DevOps Guru 主控台

裝置工程師
檢閱 DevOps 大師深入解析。

在標準條件下,DevOps Guru 儀表板會在進行中的深入資訊計數器中顯示零。如果偵測到異常,則會以深入解析的形式引發警示。在導覽窗格中,選擇深入分析以查看異常的詳細資料,包括概觀、彙總度量、相關事件和建議。如需檢閱洞見的詳細資訊,請參閱利用亞馬遜 DevOps 大師獲得營運見解部落格文章。

裝置工程師
任務描述需要的技能
清除和刪除資源。

您必須移除您所建立的資源,才能避免產生任何進一步的費用。執行這些命令:

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator $cdk destroy CdkDevopsguruStackOrgUnit --profile administrator $cdk destroy CdkDevopsGuruStackMultiAccRegSpecStacks --profile administrator $cdk destroy CdkInfrastructureStack --profile administrator $cdk destroy CdkStackSetAdminRole --profile administrator $cdk destroy CdkStackSetExecRole --profile administrator $cdk destroy CdkStackSetExecRole --profile target
裝置工程師

相關資源