透過 AWS CDK 啟用跨多個 AWS 區域、帳戶和作業單位的 Amazon DevOps Guru,提升營運效能 - AWS 方案指引

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

透過 AWS CDK 啟用跨多個 AWS 區域、帳戶和作業單位的 Amazon DevOps Guru,提升營運效能

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

代碼存儲庫:Amazon DevOps 大師示例代碼

環境:PoC 或試點

技術:管理與治理;營運 CloudNative DevOps;安全性、身分識別、合規性;無伺服器

AWS 服務:Amazon API Gateway;AWS CDK;Amazon DevOps 大師;Amazon DynamoDB;AWS Organizations

Summary

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

Amazon DevOps Guru 提供人工智慧操作 (AIOps) 功能,協助您提高應用程式的可用性並更快地解決操作問題。 DevOps Guru 通過應用機器學習(ML)驅動的建議來減少您的手動工作量,而無需任何 ML 專業知識。 DevOps Guru 分析您的資源和運營數據。如果偵測到任何異常,就會提供量度、事件和建議來協助您解決問題。

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

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

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

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

先決條件和限制

先決條件

產品版本

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

  • 故宮版本 7.9.0 或更新版本

  • Node.js 版本 15.3.0 或更新版本

架構

技術

此模式的架構包括下列服務:

AWS CDK 堆疊

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

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

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

  • CdkDevopsGuruStackMultiAccReg— 在多個 AWS 區域和帳戶中啟用所有堆疊的 DevOps 專家,並設定亞馬遜簡單通知服務 (Amazon SNS) 通知。

  • CdkDevopsGuruStackMultiAccRegSpecStacks— 啟用跨多個 AWS 區域和帳戶的專 DevOps 家來處理特定堆疊,並設定 Amazon SNS 通知。

  • CdkDevopsguruStackOrgUnit— 跨 O DevOps U 啟用大師,並設定 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 大師。

工具

AWS 服務

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

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

Code

此模式的原始程式碼可在 GitHub Amazon DevOps Guru CDK 範例儲存庫中取得。AWS CDK 程式碼是用來撰寫的 TypeScript。若要複製並使用儲存庫,請遵循下一節中的指示。

重要:此模式中的一些故事包括針對 Unix、Linux 和 macOS 格式化的 AWS CDK 和 AWS CLI 命令範例。對於 Windows,請使用脫字符號 (^) 取代每一行結尾的反斜線 (\) 接續字元。

史诗

任務描述所需技能

設定 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 文件中的使用命名設定檔

DevOps 工程師

驗證 AWS 設定檔組態。

(選用) 您可以按照 AWS CLI 文config件中的設定credentials檢視組態設定中的指示,驗證和檔案中的 AWS 設定檔組態

DevOps 工程師

驗證 AWS CDK 版本。

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

$cdk --version

此病毒碼需要版本 1.107.0 或更新版本。如果您使用的是舊版 AWS CDK,請按照 AWS CDK 文件中的指示進行更新。

DevOps 工程師

克隆項目代碼。

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

$git clone https://github.com/aws-samples/amazon-devopsguru-cdk-samples.git
DevOps 工程師

安裝套件相依性並編譯 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.json件名稱和版本的清單。如需詳細資訊,請參閱 npm 文件中的 npm ci 和 npm 安裝。

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

設定 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. 儲存並關閉檔案。

DevOps 工程師

建置專案程式碼。

通過運行命令來構建項目代碼並合成堆棧:

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 應用程式

DevOps 工程師

列出 AWS CDK 堆疊。

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

$cdk list

此指令會顯示下列清單:

CdkDevopsGuruStackMultiAccReg CdkDevopsGuruStackMultiAccRegSpecStacks CdkDevopsguruStackOrgUnit CdkInfrastructureStack CdkStackSetAdminRole CdkStackSetExecRole
DevOps 工程師
任務描述所需技能

部署 AWS CDK 堆疊以建立 IAM 角色。

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

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

附註:角色必須具有這些完全相同的名稱。

  1. 執行下列 CLI 命令,AWSCloudFormationStackSetAdministrationRole在管理員 (主要) 帳戶中建立 IAM 角色:

    $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 工程師

部署 AWS CDK 堆疊,以跨多個帳戶啟用 DevOps 大師。

AWS CDK CdkDevopsGuruStackMultiAccReg 堆疊可建立堆疊集,以跨多個帳戶和區域部署堆疊執行個體。若要部署堆疊,請使用指定的參數執行下列 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 師常見問答集中列出的 AWS 區域使用。

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

擷取 OU 識別碼。

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

DevOps 工程師

啟用 OU 的服務管理權限。

如果您使用 AWS Organizations 進行帳戶管理,則必須授予服務管理許可才能啟用 DevOps Guru。而不是手動建立 IAM 角色,而是使用組織型受信任存取和服務連結角色 (SLR)。

DevOps 工程師

部署 AWS CDK 堆疊以啟用跨 OU 的 DevOps 大師。

AWS CDK CdkDevopsguruStackOrgUnit 堆疊可在整個 OU 中提供 DevOps 大師服務。若要部署堆疊,請使用指定的參數執行下列命令:

$cdk deploy CdkDevopsguruStackOrgUnit \ --profile administrator \ --parameters RegionIds="<region-1>,<region-2>" \ --parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
DevOps 工程師
任務描述所需技能

部署 AWS CDK 堆疊以建立 IAM 角色。

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

  1. 執行下列 CLI 命令,AWSCloudFormationStackSetAdministrationRole在管理員 (主要) 帳戶中建立 IAM 角色:

    $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 工程師

刪除現有堆疊。

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

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator

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

DevOps 工程師

使用堆疊清單更新 AWS CDK 堆疊。

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

  2. ResourcesCloudFormation、下StackNames,列出您要啟用 DevOps Guru 的堆疊。為了進行示範,參數會指定CdkInfrastructureStack堆疊,但您可以根據需求編輯此項目。

  3. 儲存並關閉檔案。

  4. 要合成和更新堆棧模板,請運行:

     $cdk synth
數據工程師

部署 AWS CDK 堆疊,以針對多個帳戶的特定堆疊資源啟用 DevOps Guru。

AWS CDK CdkDevopsGuruStackMultiAccRegSpecStacks 堆疊可讓 DevOps 大師處理多個帳戶的特定堆疊資源。若要部署堆疊,請執行下列命令:

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

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

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

部署範例無伺服器基礎架構堆疊。

AWS CDK CdkInfrastructureStack 堆疊可部署無伺服器元件,例如 API Gateway、Lambda 和 DynamoDB 表格,以展示大師深入分析資訊。 DevOps 若要部署堆疊,請執行下列命令: 

$cdk deploy CdkInfrastructureStack --profile administrator
DevOps 工程師

在 DynamoDB 支援中插入範例記錄。

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

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

該命令會顯示下列輸出:

{ "UnprocessedItems": {} }
DevOps 工程師

驗證在 DynamoDB 中插入的記錄。

若要驗證 DynamoDB 表格是否包含populate-shops-dynamodb-table.json檔案中的範例記錄,請存取 ListRestApiEndpointMonitorOperator API 的 URL,該 URL 會以 AWS CDK 堆疊的輸出形式發佈。您也可以在CdkInfrastructureStack堆疊的 AWS CloudFormation 主控台的 [輸出] 索引標籤中找到此 URL。AWS CDK 輸出看起來會類似下列內容:

CdkInfrastructureStack.CreateRestApiMonitorOperatorEndpointD1D00045 = https://oure17c5vob.execute-api.<your-region>.amazonaws.com/prod/ CdkInfrastructureStack.ListRestApiMonitorOperatorEndpointABBDB8D8 = https://cdff8icfrn4.execute-api.<your-region>.amazonaws.com/prod/
DevOps 工程師

等待資源完成基準。

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

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

更新 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
DevOps 工程師

在 API 上插入 HTTP 要求。

ListRestApiMonitorOperatorEndpointxxxx API 上以 HTTP 要求的形式插入輸入流量:

  1. 編輯 Python 腳本/amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.py

  2. 使用的 API 連結更新url變數ListRestApiMonitorOperatorEndpointxxxx您可以在 AWS CDK 部署命令的輸出中,或在 AWS Cloudform 主控台的堆疊的「輸出」索引標籤中找到此 URL。

  3. 儲存並關閉檔案。

  4. 通過使用命令運行 Python 腳本:

    $python sendAPIRequest.py
  5. 確保您獲得 200 狀態碼。

  6. 您可能需要透過多個 (最好是四個) 終端機執行指令碼,以高速插入流量。

  7. 指令碼在一個迴圈中執行大約 10 分鐘後,您可以在 DevOps Guru 主控台上看到操作深入分析。

DevOps 工程師

檢閱 DevOps 大師見解。

在標準條件下, DevOps Guru 儀表板會在進行中的見解計數器中顯示零。如果偵測到異常,就會以深入解析的形式提出警示。在導覽窗格中,選擇「深入解析」以查看異常的詳細資料,包括概觀、彙總量度、相關事件和建議。如需有關檢閱見解的詳細資訊,請參閱使用 Amazon DevOps Guru 透過 AIOps 取得營運深入解析部落格文章。

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
DevOps 工程師

相關資源