View a markdown version of this page

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

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

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

概述

本指南向您展示如何使用 C AWS loud Development Kit (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托管策略和允许创建 Resource Explorer 服务相关角色的内联策略。

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

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

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

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

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

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

  • 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 应用程序使用信任策略创建 IAM 角色,该策略仅允许aidevops.amazonaws.com服务委托人代入这些角色。

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

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

  • 跨账户角色 (DevOpsAgentRole-SecondaryAccount) 使用固定名称,其作用域仅限于特定的代理空间 ARN。

后续步骤

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

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

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

其他资源