使用 AWS CDK 在多个 AWS 区域、账户和 OU 中启用 Amazon DevOps Guru,从而提高运营绩效 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS CDK 在多个 AWS 区域、账户和 OU 中启用 Amazon DevOps Guru,从而提高运营绩效

由 Rahul Sharad Gaikwad 博士 (AWS) 编写

代码存储库:Amazon DevOps Guru 示例代码

环境:PoC 或试点

技术:管理和治理;; CloudNative;运营 DevOps;安全、身份、合规;无服务器

AWS 服务:亚马逊 API Gateway;AWS CDK;Amazon DevOps Guru;亚马逊 DynamoDB;AWS Organizations

Summary

此模式演示了使用中的 AWS Cloud Development Kit (AWS CDK) 跨多个亚马逊网络服务 (AWS) 区域、账户和组织单位 (OU) 启用 Amazon DevOps Guru 服务的步骤。 TypeScript您可以使用 AWS CDK 堆栈 CloudFormation StackSets 从管理员(主)AWS 账户部署 AWS,从而在多个账户中启用 Amazon DevOps Guru,而不必登录每个账户并为每个账户单独启用 DevOps Guru。

Amazon DevOps Guru 提供人工智能操作 (AIOps) 功能,可帮助您提高应用程序的可用性并更快地解决操作问题。 DevOps Guru 无需任何机器学习专业知识,即可应用机器学习 (ML) 驱动的建议,从而减少您的手动工作。 DevOps Guru 会分析您的资源和运营数据。如果它检测到任何异常,它将提供指标、事件和建议来帮助您解决问题。

此模式描述了启用 Amazon DevOps Guru 的三个部署选项:

  • 适用于多个账户及区域的所有资源

  • OU 中的所有堆栈资源

  • 适用于跨多个账户和区域的具体资源

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account。

  • 已安装和配置 AWS 命令行界面(AWS CLI)。(请参阅 AWS CLI 文档中的安装、更新和卸载 AWS CLI。)

  • AWS CDK Toolkit,已安装并配置。(请参阅 AWS CDK 文档中的 AWS CDK Toolkit。)

  • Node Package Manager (npm),已为中的 AWS CDK 安装和配置。 TypeScript(请参阅 npm 文档中的下载和安装 Node.js 和 npm。)

  • Python3,已安装并配置,用于运行 Python 脚本向示例无服务器应用程序注入流量。(请参阅 Python 文档中的 Python 设置和用法。)

  • Pip,已安装并配置,安装 Python 请求库。(请参阅 PyPl 网站上的 pip 安装说明。)

产品版本

  • AWS CDK Toolkit 版本 1.107.0 或更高版本

  • npm 版本 7.9.0 或更高版本

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

架构

技术

此模式的架构包含以下服务:

AWS CDK 堆栈

该模式使用以下 AWS CDK 堆栈: 

  • CdkStackSetAdminRole — 创建 AWS Identity and Access management (IAM) 管理员角色以在管理员与目标账户之间建立信任关系。

  • CdkStackSetExecRole — 创建 IAM 角色以信任管理员账户。

  • CdkDevopsGuruStackMultiAccReg— 允许 DevOps Guru 跨多个 AWS 区域和账户访问所有堆栈,并设置亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 通知。

  • CdkDevopsGuruStackMultiAccRegSpecStacks— 允许 DevOps Guru 跨多个 AWS 区域和账户访问特定堆栈,并设置 Amazon SNS 通知。

  • CdkDevopsguruStackOrgUnit— 在 O DevOps U 之间启用 Guru,并设置 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 Guru。

工具

Amazon Web Services

  • AWS CDK — AWS Cloud Development Kit (AWS CDK) 可帮助您将云基础设施定义为使用五种支持的编程语言之一的代码: TypeScript、、 JavaScript Python、Java 和 C#

  • AWS CLI – AWS 命令行界面(AWS CLI)是一种统一工具,为与 Amazon Web Services 和资源的交互提供了一致的命令行界面。

代码

此模式的源代码可在 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 文档中的设置和查看配置设置中的说明,验证 credentialsconfig 文件中的 AWS 配置文件配置。

DevOps 工程师

验证 AWS CDK 版本。

运行以下命令验证 AWS CDK Toolkit 的版本:

$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>

您可以在 /amazon-devopsguru-cdk-samples/package.json 文件 Dependencies 部分找到软件包名称和版本的列表。有关更多信息,请参阅 npm 文档中的 npm cinpm 安装

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 工程师
任务描述所需技能

部署用于创建 IAM 角色的 AWS CDK 堆栈。

此模式使用 AWS CloudFormation StackSets 跨多个账户执行堆栈操作。如果您要创建第一个堆栈集,必须创建以下 IAM 角色才能在您的 Amazon Web Services account 中设置所需权限:

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

注意:角色必须具有这些确切名称。

  1. 通过运行以下 CLI 命令在管理员(主)账户中创建 IAM AWSCloudFormationStackSetAdministrationRole 角色:

    $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 Guru。

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 Guru 已在 DevOps Gur u 常见问题解答中列出的 AWS 区域中提供。

DevOps 工程师
任务描述所需技能

提取 OU ID。

AWS O rganizations 控制台上,确定要在其中启用 DevOps Guru 的组织单位的 ID。

DevOps 工程师

支持 OU 的服务管理权限。

如果您使用 AWS Organizations 进行账户管理,则必须授予服务托管权限才能启用 DevOps Guru。与其手动创建 IAM 角色,不如使用基于组织的可信访问权限和服务相关角色 (SLR)。

DevOps 工程师

部署 AWS CDK 堆栈以跨业务单元启用 DevOps Guru。

AWS CDK CdkDevopsguruStackOrgUnit 堆栈支持跨业务单元的 DevOps Guru 服务。若要部署堆栈,请使用指定参数运行以下命令:

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

部署用于创建 IAM 角色的 AWS CDK 堆栈。

如果您未创建第一个选项中显示的必需 IAM 角色,请先执行以下操作:

  1. 通过运行以下 CLI 命令在管理员(主)账户中创建 IAM AWSCloudFormationStackSetAdministrationRole 角色:

    $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 Guru 在多个账户中使用特定的堆栈资源。要部署堆栈,请运行以下命令:

$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 表,以演示 Guru 的见解。 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 文件中的示例记录,请访问作为 AWS CDK 堆栈输出发布的 ListRestApiEndpointMonitorOperator API 的网址。您还可以在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 小时才能完成基准测试,具体取决于您选择在 Guru 中 DevOps 监控的资源数量。

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. 使用 ListRestApiMonitorOperatorEndpointxxxx 的 API 链接更新 url 变量。您可以在 AWS CDK 部署命令的输出中找到此 URL,也可以在 AWS Cloudformation 控制台的堆栈输出选项卡中找到此 URL。

  3. 保存并关闭文件。

  4. 使用命令运行 Python 脚本:

    $python sendAPIRequest.py
  5. 确保您得到一个 200 的状态码。

  6. 您可能需要通过多个(最好是四个)终端运行脚本才能高速注入流量。

  7. 脚本循环运行大约 10 分钟后,您可以在 DevOps Guru 控制台上看到操作见解。

DevOps 工程师

查看 DevOps Guru 的见解。

在标准条件下, 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 工程师

相关资源