本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
由 Rahul Sharad Gaikwad 博士创作 () AWS
此模式演示了使用中的 Cl AWS oud Development Kit (AWS) 在多个亚马逊网络服务 () 区域、账户和组织单位 (OUsAWSCDK) 中 TypeScript启用 Amazon DevOps Guru 服务的步骤。您可以使用AWSCDK堆栈AWS CloudFormation StackSets 从管理员(主)AWS账户进行部署,以便在多个账户中启用 Amazon DevOps Guru,而不必登录每个账户然后为每个账户单独启用 DevOps Guru。
Amazon DevOps Guru 提供人工智能操作 (AIOps) 功能,可帮助您提高应用程序的可用性并更快地解决操作问题。 DevOps Guru 无需任何机器学习专业知识,即可应用机器学习 (ML) 驱动的建议,从而减少您的手动工作。 DevOps Guru 会分析您的资源和运营数据。如果它检测到任何异常,它将提供指标、事件和建议来帮助您解决问题。
此模式描述了启用 Amazon DevOps Guru 的三个部署选项:
适用于多个账户及区域的所有资源
适用于所有堆栈资源 OUs
适用于跨多个账户和区域的具体资源
先决条件
一个活动的 AWS 账户。
AWS命令行界面 (AWSCLI),已安装和配置。(请参阅AWSCLI文档AWSCLI中的安装、更新和卸载。)
AWSCDK工具包,已安装和配置。(参见AWSCDK文档中的AWSCDK工具包。)
Node Package Manager (npm),已安装并配置为AWSCDK中。 TypeScript(请参阅 npm 文档中的下载和安装 Node.js 和 npm。)
Python3,已安装并配置,用于运行 Python 脚本向示例无服务器应用程序注入流量。(请参阅 Python 文档中的 Python 设置和用法。)
Pip,已安装并配置,安装 Python 请求库。(请参阅 PyPl 网站上的 pip 安装说明。)
产品版本
技术
此模式的架构包含以下服务:
AWSCDK堆栈
该模式使用以下AWSCDK堆栈:
CdkStackSetAdminRole
— 创建AWS身份和访问管理 (IAM) 管理员角色以在管理员和目标帐户之间建立信任关系。
CdkStackSetExecRole
— 创建信任管理员帐户的IAM角色。
CdkDevopsGuruStackMultiAccReg
— 为所有堆栈启用跨多个AWS区域和账户的 DevOps Guru,并设置亚马逊简单通知服务 (AmazonSNS) 通知。
CdkDevopsGuruStackMultiAccRegSpecStacks
— 为特定堆栈启用跨多个AWS地区和账户的 DevOps Guru,并设置 Ama SNS zon 通知。
CdkDevopsguruStackOrgUnit
— 启用 DevOps Guru 跨越OUs并设置 Amazon SNS 通知。
CdkInfrastructureStack
— 在管理员账户中部署示例无服务器应用程序组件,例如 API Gateway、Lambda 和 DynamoDB,以演示错误注入和见解生成。
应用程序架构示例
下图演示了跨多个账户和区域部署的示例无服务器应用程序的架构。该模式使用管理员帐户部署所有AWSCDK堆栈。它还使用管理员帐户作为设置 DevOps Guru 的目标帐户之一。
启用 DevOps Guru 后,它会首先为每个资源的行为设定基准,然后从 CloudWatch 提供的指标中提取操作数据。
如果它检测到异常,则会将其与来自的事件关联起来 CloudTrail,并生成见解。
该见解提供了相关事件序列以及规定的建议,使操作员能够识别罪魁祸首资源。
Amazon SNS 会向操作员发送通知消息。
自动化和扩缩
此模式提供的GitHub 存储库使用AWSCDK作为基础架构即代码 (IaC) 工具为该架构创建配置。 AWSCDK帮助您协调资源并在多个 DevOps AWS账户、地区和. OUs
AWS 服务
代码
此模式的源代码可在 GitHub Amazon DevOps Guru CDK 示例存储库中找到。AWSCDK代码是用写的 TypeScript。要克隆和使用存储库,请按照下一节中的说明操作。
这种模式中的一些故事包括针对 Unix、Linux AWS CDK 和 macOS 格式化的AWSCLI命令示例。对于 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
有关更多信息,请参阅文档中的使用命名配置AWSCLI文件。 | DevOps 工程师 |
验证AWS配置文件配置。 | (可选)您可以按照文档中设置credentials 和查看AWS配置设置中的说明在和config 文件中验证您的配置AWSCLI文件配置。 | DevOps 工程师 |
验证AWSCDK版本。 | 运行以下命令验证 AWS CDK Toolkit 的版本: $cdk --version
此模式需要版本 1.107.0 或更高版本。如果您有早期版本的 AWSCDK,请按照AWSCDK文档中的说明进行更新。 | 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 ci 和 npm 安装。 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|
为 Amazon SNS 通知配置电子邮件地址。 | 请按照以下步骤为Amazon SNS 通知提供电子邮件地址: 编辑文件 /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-stack.ts 和 /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-org-uni-stack.ts 。 在 DevOpsGuruTopic 、Subscription 部分中,使用您的电子邮件地址更新 Endpoint 参数。 保存并关闭文件。
| 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.
有关更多信息和步骤,请参阅AWSCDK文档中的您的第一个AWSCDK应用程序。 | DevOps 工程师 |
列出AWSCDK堆栈。 | 运行以下命令列出所有AWSCDK堆栈: $cdk list
命令显示如下列表: CdkDevopsGuruStackMultiAccReg
CdkDevopsGuruStackMultiAccRegSpecStacks
CdkDevopsguruStackOrgUnit
CdkInfrastructureStack
CdkStackSetAdminRole
CdkStackSetExecRole
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|
部署AWSCDK堆栈以创建IAM角色。 | 此模式AWS CloudFormation StackSets用于跨多个账户执行堆栈操作。如果您要创建第一个堆栈集,则必须创建以下IAM角色才能在AWS账户中设置所需的权限: 通过运行以下CLI命令在管理员(主)帐户中创建IAMAWSCloudFormationStackSetAdministrationRole 角色: $cdk deploy CdkStackSetAdminRole --profile administrator
在要运行堆栈实例的所有目标账户中创建该IAMAWSCloudFormationStackSetExecutionRole 角色。要创建此角色,请运行以下CLI命令: $cdk deploy CdkStackSetExecRole \
--parameters AdministratorAccountId=<administrator-account-ID> \
--profile administrator
$cdk deploy CdkStackSetExecRole \
--parameters AdministratorAccountId=<administrator-account-ID> \
--profile target
有关更多信息,请参阅AWS CloudFormation 文档中的授予自我管理权限。 | DevOps 工程师 |
部署AWSCDK堆栈以在多个账户中启用 DevOps Guru。 | AWSCDKCdkDevopsGuruStackMultiAccReg 堆栈创建堆栈集以跨多个账户和地区部署堆栈实例。要部署堆栈,请使用指定参数运行以下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 G FAQ uru 中列出的AWS区域上线。 | DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|
提取 OU IDs。 | 在 AWS Organizations 控制台上,确定要在其中启用 DevOps Guru 的组织单位。 IDs | DevOps 工程师 |
为启用服务管理权限。OUs | 如果您使用 Organi AWS zations 进行账户管理,则必须授予服务管理权限才能启用 DevOps Guru。与其手动创建IAM角色,不如使用基于组织的可信访问权限和服务相关角色 ()。SLRs | DevOps 工程师 |
部署AWSCDK堆栈以启用 DevOps Guru。OUs | 该AWSCDKCdkDevopsguruStackOrgUnit 堆栈支持跨越 DevOps Guru服务。OUs若要部署堆栈,请使用指定参数运行以下命令: $cdk deploy CdkDevopsguruStackOrgUnit \
--profile administrator \
--parameters RegionIds="<region-1>,<region-2>" \
--parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
| DevOps 工程师 |
任务 | 描述 | 所需技能 |
---|
部署AWSCDK堆栈以创建IAM角色。 | 如果您尚未创建第一个选项中显示的所需IAM角色,请先执行以下操作: 通过运行以下CLI命令在管理员(主)帐户中创建IAMAWSCloudFormationStackSetAdministrationRole 角色: $cdk deploy CdkStackSetAdminRole --profile administrator
在要运行堆栈实例的所有目标账户中创建该IAMAWSCloudFormationStackSetExecutionRole 角色。要创建此角色,请运行以下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 工程师 |
使用AWSCDK堆栈列表更新堆栈。 | 编辑 /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-spec-stack.ts 文件。 在Resources 、CloudFormation 、下StackNames ,列出要为其启用 DevOps Guru 的堆栈。出于演示目的,该参数指定 CdkInfrastructureStack 堆栈,但您可以根据需要编辑此条目。 保存并关闭文件。 要合成和更新堆栈模板,请您运行: $cdk synth
| 数据工程师 |
部署AWSCDK堆栈,为多个账户的特定堆栈资源启用 DevOps Guru。 | 该AWSCDKCdkDevopsGuruStackMultiAccRegSpecStacks 堆栈为 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 工程师 |
任务 | 描述 | 所需技能 |
---|
部署示例无服务器基础设施堆栈。 | 该AWSCDKCdkInfrastructureStack 堆栈部署了API网关、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 中的示例记录,请访问URL作为堆栈输出发布的。ListRestApiEndpointMonitorOperator API AWS CDK您也可以在CdkInfrastructureStack 堆栈AWS CloudFormation 控制台的 O ut puts 选项卡中找到它。URLAWSCDK输出将类似于以下内容: 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 工程师 |
任务 | 描述 | 所需技能 |
---|
更新AWSCDK基础架构堆栈。 | 要试用 DevOps Guru 见解,您可以进行一些配置更改以重现典型的操作问题。 编辑 /amazon-devopsguru-cdk-samples/lib/infrastructure-stack.ts 文件。 在本 DDB Table 节中,将 DynamoDB 表的读取容量从 5 更改为 1。 保存并关闭文件。 运行以下命令以合成和部署更新的AWSCDK基础架构堆栈: $cdk synth
$cdk deploy CdkInfrastructureStack --profile administrator
| DevOps 工程师 |
在HTTP. 上注入请求API。 | 在以下位置以HTTP请求的形式注入入口流量:ListRestApiMonitorOperatorEndpointxxxx API 编辑 Python 脚本 /amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.py 。 使用API链接更新url 变量ListRestApiMonitorOperatorEndpointxxxx 。你可以在AWSCDK部署命令的输出URL中找到,也可以在 AWS Cloudformation控制台的堆栈输出选项卡中找到它。 保存并关闭文件。 使用命令运行 Python 脚本: $python sendAPIRequest.py
确保您得到一个 200 的状态码。 您可能需要通过多个(最好是四个)终端运行脚本才能高速注入流量。 脚本循环运行大约 10 分钟后,您可以在 DevOps Guru 控制台上看到操作见解。
| DevOps 工程师 |
查看 DevOps Guru 的见解。 | 在标准条件下, DevOps Guru 仪表板在持续见解计数器中显示为零。如果检测到异常,则会以洞察的形式发出警报。在导航窗格中,选择见解以查看异常的详细信息,包括概述、聚合指标、相关事件和建议。有关查看见解的更多信息,请参阅 “AIOps使用 Amazon 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
| DevOps 工程师 |