View a markdown version of this page

开始使用 AWS DevOps 代理使用 AWS CDK - AWS DevOps 代理人

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

开始使用 AWS DevOps 代理使用 AWS CDK

概述

本指南向您介绍如何使用 AWS 云开发套件 (AWS CDK) 创建和部署 AWS DevOps 代理资源。 AWS CDK 应用程序通过自动创建代理空间、 AWS 身份和访问管理 (IAM) 角色、运营商应用程序和 AWS 账户关联。 AWS CloudFormation

AWS CDK 方法通过将所有必需的资源定义为基础设施即代码,自动执行 CLI 入门指南中描述的手动步骤。

AWS DevOps 代理在多个 AWS 地区可用。完整列表请参阅 支持的区域:

先决条件

开始之前,请确保您拥有:

  • AWS 命令行界面 (AWS CLI) 已安装并使用相应的凭据进行配置

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

  • AWS CDK 命令行界面 (CLI) 已在全球范围内安装。要安装 AWS CDK CLI,请运行以下命令:

npm install -g aws-cdk
  • 监控(主要) AWS 账户的一个账户

  • (可选)如果您想设置跨 AWS 账户监控,请使用第二个账户

本指南涵盖的内容

本指南分为两部分:

  • 第 1 部分 — 使用操作员应用程序和监控账户中的 AWS 关联来部署代理空间。完成本部分后,代理可以监控该账户中的问题。

  • 第 2 部分(可选)-为服务账户添加源 AWS 关联,并将跨账户 IAM 角色部署到该账户。此配置使代理空间能够监控账户间的资源。

创建的资源

第 1 部分: DevOpsAgentStack (监控账户)

  • IAM 角色 (DevOpsAgentRole-AgentSpace) — 由 DevOps 代理服务代为监控账户。包括AIDevOpsAgentAccessPolicy托管策略和允许创建资源管理器服务相关角色的内联策略。

  • IAM 角色 (DevOpsAgentRole-WebappAdmin) — 具有代理操作AIDevOpsOperatorAppAccessPolicy托管策略的运营商应用程序角色。

  • 代理空间 (MyCDKAgentSpace)-使用AWS::DevOpsAgent::AgentSpace CloudFormation 资源创建的中央代理空间。包括操作员应用程序配置。

  • 关联(AWS 监视器)-使用AWS::DevOpsAgent::Association CloudFormation 资源将监控帐户链接到代理空间。

  • 关联(AWS 来源)-(可选)将服务帐户链接到代理空间以进行跨账户监控。

第 2 部分: ServiceStack (服务帐号,可选)

  • IAM 角色 (DevOpsAgentRole-SecondaryAccount) — 具有固定名称的 Cross-account 角色。受监控账户中代理空间的信任。包括AIDevOpsAgentAccessPolicy托管策略和允许创建资源管理器服务相关角色的内联策略。

  • Lambda 函数 (echo-service) — 一个回显输入事件的简单示例服务。

设置

第 1 步:克隆示例存储库

运行以下命令克隆存储库并切换到项目目录:

git clone https://github.com/aws-samples/sample-aws-devops-agent-cdk.git cd sample-aws-devops-agent-cdk

第 2 步:安装依赖项

运行以下命令来安装项目依赖项:

npm install

第 1 部分:部署代理空间

在本节中,您将在监控账户中创建代理空间、IAM 角色、操作员应用程序和 AWS 关联。

第 1 步:配置监控账户 ID

打开lib/constants.ts并设置您的监控账户 ID:

以下示例显示了要更新的常量:

export const MONITORING_ACCOUNT_ID = "<YOUR_MONITORING_ACCOUNT_ID>";

第 2 步:引导 AWS CDK 环境

如果您尚未在监控账户中引导 AWS CDK,请运行以下命令:

cdk bootstrap aws://<MONITORING_ACCOUNT_ID>/<REGION> --profile monitoring

第 3 步:构建和部署

运行以下命令来编译 TypeScript 代码和部署堆栈:

npm run build cdk deploy DevOpsAgentStack --profile monitoring

第 4 步:记录堆栈输出

部署完成后, AWS CDK 会打印堆栈输出。记录这些值以备日后使用。

以下示例显示了预期的输出:

Outputs: DevOpsAgentStack.AgentSpaceArn = arn:aws:aidevops:<REGION>:123456789012:agentspace/abc123 DevOpsAgentStack.AgentSpaceRoleArn = arn:aws:iam::123456789012:role/DevOpsAgentRole-AgentSpace DevOpsAgentStack.OperatorRoleArn = arn:aws:iam::123456789012:role/DevOpsAgentRole-WebappAdmin DevOpsAgentStack.AssociationId = assoc-xyz

如果您计划完成第 2 部分,请保存该AgentSpaceArn值。你需要它来配置服务账户堆栈。

步骤 5:验证部署

要验证代理空间是否已成功创建,请运行以下 AWS CLI 命令:

aws devopsagent get-agent-space \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

此时,您的代理空间已部署完毕,同时启用了操作员应用程序并关联了您的监控帐户。代理可以监控此账户中的问题。

第 2 部分(可选):添加跨账户监控

在本节中,您将扩展设置,以便您的代理空间可以监控第二个 AWS 帐户(服务帐户)中的资源。这涉及两个操作:

  1. 在中添加指向服务帐号的源 AWS 关联。 DevOpsAgentStack

  2. 使用信任代理空间的 IAM 角色将部署 ServiceStack 到服务账户。

重要

必须先完成第 1 部分,然后才能继续。 ServiceStack 需要 DevOpsAgentStack 部署输出AgentSpaceArn中的。

步骤 1:配置服务帐号 ID

打开lib/constants.ts并设置您的服务帐号 ID:

以下示例显示了要更新的常量:

export const SERVICE_ACCOUNT_ID = "<YOUR_SERVICE_ACCOUNT_ID>";

使用此账户 ID DevOpsAgentStack 创建源 AWS 关联。如果您 DevOpsAgentStack 在设置此值之前部署了,请重新部署以创建关联:

运行以下命令进行重新部署:

npm run build cdk deploy DevOpsAgentStack --profile monitoring

第 2 步:设置代理空间 ARN

从 DevOpsAgentStack 输出中复制AgentSpaceArn值(第 1 部分,步骤 4)并将其设置为lib/constants.ts

以下示例显示了要更新的常量:

export const AGENT_SPACE_ARN = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>";

ServiceStack 使用此值将信任策略的范围限定在辅助账户角色上。 ServiceStack 仅在设置此值时合成。

第 3 步:引导服务帐号

如果您尚未在服务帐号中引导 AWS CDK,请运行以下命令:

cdk bootstrap aws://<SERVICE_ACCOUNT_ID>/<REGION> --profile service

步骤 4:部署 ServiceStack

运行以下命令,使用服务帐号的证书 ServiceStack 来构建和部署:

npm run build cdk deploy ServiceStack --profile service

这将在服务帐号中创建以下资源:

  • 信任监控账户中的代理空间的 IAM 角色 (DevOpsAgentRole-SecondaryAccount)

  • 一个 echo Lambda 函数 (echo-service) 作为示例服务

步骤 5:验证部署

要确认 Lambda 函数已成功部署,请运行以下命令来测试 echo 服务:

aws lambda invoke \ --function-name echo-service \ --payload '{"test": "hello world"}' \ --profile service \ response.json cat response.json

问题排查

本节介绍常见问题及其解决方法。

CloudFormation 未找到资源类型

  • 确认您正在部署支持的区域:

  • 确认您的 AWS CLI 已配置了相应的权限。

IAM 角色创建失败

  • 验证您的部署角色是否有权创建 IAM 角色。

  • 检查信任政策条件是否与您的账户 ID 相匹配。

Cross-account 部署失败,显示 “无法在目标账户中扮演角色”

  • 每个堆栈都必须使用目标账户的证书进行部署。使用该--profile标志指定正确的 AWS CLI 配置文件。

  • 验证 AWS CDK 是否已在目标账户中启动。

IAM 传播延迟

  • IAM 角色更改可能需要几分钟才能传播。如果在创建角色后代理空间创建立即失败,请等待几分钟并重新部署。

资源清理

要移除所有资源,请按相反的顺序销毁堆栈。

运行以下命令来销毁堆栈:

# If you deployed the ServiceStack, destroy it first cdk destroy ServiceStack --profile service # Then destroy the DevOpsAgentStack cdk destroy DevOpsAgentStack --profile monitoring

警告:此操作会永久删除您的代理空间和所有关联数据。此操作无法撤消。在继续操作之前,请确保已备份所有重要信息。

安全注意事项

  • AWS CDK 应用程序使用仅允许aidevops.amazonaws.com服务委托人代入的信任策略创建 IAM 角色。

  • 信任政策包括限制访问您的特定 AWS 账户和代理空间 ARN 的条件。

  • 所有政策都遵循最小权限原则。根据贵组织的安全要求审查和自定义 IAM 策略。

  • 跨账户角色 (DevOpsAgentRole-SecondaryAccount) 使用固定名称,范围限定为特定的代理空间 ARN。

后续步骤

使用 AWS CDK 部署 AWS DevOps 代理后:

  1. 在《 DevOps 代理用户指南》中了解AWS DevOps 代理的全部功能

  2. 考虑将 AWS CDK 部署集成到您的 CI/CD 管道中,以实现自动化基础设施管理。

  3. 如果您注册了第三方集成,请通过在控制台中轮换 webhook 来获取其 webhook 网址和密钥。 AWS CDK 通过部署 AWS CloudFormation,它不会将 webhook 密钥作为堆栈输出返回。有关管理 webhook 凭据的说明,请参阅管理 webhook 凭据。

其他资源