构建部署于亚马逊网络服务(AWS)的Agent 365代理

学习如何搭建、托管、注册并发布运行在 AWS Elastic Beanstalk上的Agent 365代理,使用 Agent 365 CLI。 Microsoft Entra和 Graph 提供代理标识、权限和蓝图,而 AWS Elastic Beanstalk 提供运行时。

如果你想让代理指向位于AWS端点背后的代码,只需以下步骤: 配置非Azure托管。 然后,按照 代理 365 开发入门中的所有其他步骤操作。

目标

了解如何将 Agent 365 和 Microsoft 365 用作控制平面,以及:

  • AWS Elastic Beanstalk 上的部署代理运行时
  • 为非Azure托管配置 a365.config.json
  • 在Entra ID中创建代理蓝图
  • 配置 OAuth2 + 继承权限
  • 注册指向AWS的机器人框架消息终端
  • 创建代理身份 + 代理用户
  • (可选)发布到 Microsoft 365 应用界面
  • 测试端到端的交互过程

先决条件

在开始之前,请确保满足以下Azure/Microsoft 365、AWS 和本地环境先决条件。

Azure/Microsoft 365先决条件

确认Microsoft Entra租户访问权限并安装以下工具来创建标识、蓝图和注册代理。

  • 一个 Microsoft Entra 租户,其中包含:

    • 创建应用程序和代理蓝图的权限或角色(全局管理员或同等职务)
    • 加入 Frontier预览计划 ,即可提前访问Microsoft Agent 365。
    • 至少有一个适用于代理用户的 Microsoft 365 许可证可用
  • 已安装Azure CLI登录

  • 已安装 Agent 365 CLI

亚马逊网络服务(AWS)的前提条件

确保以下AWS服务和工具已搭建,用于部署和管理您的Elastic Beanstalk环境。

本地发展环境的前提条件

在本地安装并配置以下工具,以构建、运行和部署该代理。

创建和部署.NET代理

以下说明描述了如何创建一个最小代理:

  • 响应GET /
  • 接受POST上的机器人框架活动 /api/messages

创建项目目录

mkdir aws-a365-agent
cd aws-a365-agent

初始化.NET项目

为了简化你的体验,本文使用了已准备好的样本。 克隆 Agent365 Samples 仓库 ,访问 dotnet\semantic-kernel\sample-agent 样本。

语义内核示例代理 - C#/.NET 示例包括:

  • 最小 ASP.NET Core Web API
  • 机器人框架 (Bot Framework) 消息处理程序 /api/messages
  • 健康检查端点在
  • AI 功能的 语义内核 内核集成

请前往 dotnet\semantic-kernel\sample-agent 验证项目是否成功构建:

dotnet restore
dotnet build

配置模型

按照 步骤2:LLM配置 中的说明,使用你的Open API密钥配置项目。

本地考试(可选)

  1. 在部署到AWS之前,先在本地测试你的代理:

    # Run the application
    dotnet run
    
  2. 在另一个终端测试端点:

    # Test agent endpoint locally
    curl http://localhost:3978
    
  3. 点击 Ctrl+C 停止本地服务器。

构建和部署

选择您偏好的选项来构建并部署此示例应用:

选项 A:从Visual Studio生成和部署

使用 AWS Toolkit for Visual Studio,使用引导向导将应用发布到 Elastic Beanstalk。

  1. 解决方案资源管理器 中,右键单击项目。

  2. 选择 发布到 AWS Elastic Beanstalk

  3. 请跟随 Beanstalk部署向导

    • 选择您的AWS凭证配置文件。
    • 选择“区域”(例如, us-east-1)。
    • 选择平台(.NET Core on Linux)。
    • 配置环境设置。
  4. 选择“ 部署”。

向导负责构建、打包并将你的应用部署到 AWS。

选项B:构建并部署到带有CLI的AWS Elastic Beanstalk上

使用 Elastic Beanstalk CLI 打包.NET代理并将其部署到 64 位 Amazon Linux 2 环境。 确保AWS CLI和Eb CLI都已配置好。 应用绑定到由 Beanstalk 设置的 PORT 环境变量。

  1. 生成并发布.NET应用程序:

    # Publish for Linux runtime (AWS Elastic Beanstalk uses Amazon Linux)
    dotnet publish -c Release -o ./publish --runtime linux-x64
    

    创建包含以下内容的Procfile。

    web: dotnet ./SemanticKernelSampleAgent.dll
    
  2. 初始化 .NET 的 Elastic Beanstalk。 系统提示您选择地区和平台:

    eb init
    
  3. 选择:

    • 平台64bit-amazon-linux-2023-v3.7.0-running-.net-8
    • 区域:您偏好的AWS区域(例如: us-east-1
  4. 创建部署包并部署:

    cd publish
    zip -r ../deploy.zip .
    cd ..
    eb create aws-a365-agent-env
    eb deploy
    

    此命令:

    • 创建 Elastic Beanstalk 应用。
    • 创建一个带有负载均衡器的环境。
    • 部署你的应用程序。
    • 配置必要的AWS资源。
  5. 完成后,获取你的 Elastic Beanstalk 端点:

    eb status
    

    注意你的终点。 结果应如下所示:

    http://aws-a365-agent-env.us-east-1.elasticbeanstalk.com
    

    该端点由 messagingEndpoint Agent 365 开发工具 CLI 使用。

注意

对于生产环境,可以通过在 Elastic Beanstalk 中添加 SSL/TLS 证书来配置 HTTPS。 机器人框架要求生产端点使用 HTTPS。

为非 Azure 托管环境进行配置

在 Elastic Beanstalk 项目文件夹中手动创建 a365.config.json

重要

对于非 Azure 托管,请将 messagingEndpoint 值设置为带有 /api/messages 路径的 Elastic Beanstalk URL。

文件 a365.config.json 应该长这样:

{
  "tenantId": "YOUR_TENANT_ID",
  "environment": "prod",

  "messagingEndpoint": "http://aws-a365-agent-env.us-east-1.elasticbeanstalk.com/api/messages",

  "agentIdentityDisplayName": "MyAwsAgent Identity",
  "agentBlueprintDisplayName": "MyAwsAgent Blueprint",
  "agentUserDisplayName": "MyAwsAgent User",
  "agentUserPrincipalName": "myawsagent@testTenant.onmicrosoft.com",
  "agentUserUsageLocation": "US",
  "managerEmail": "myManager@testTenant.onmicrosoft.com",

  "deploymentProjectPath": ".",
  "agentDescription": "AWS-hosted Agent 365 Agent"
}

下表总结了重要的配置字段及其用途。

领域 Meaning
messagingEndpoint 你的弹性豆茎网址 + /api/messages
deploymentProjectPath 冲压发生的地方.env

构建代理365代理

在代理代码针对 AWS 终结点运行后,请按照 Agent 365 开发入门 中的剩余步骤设置代理 365 代理。

端到端验证代理

使用这些检查来确认您的 AWS 托管代理是否可访问,是否能接收 Bot Framework 活动,并且是否能够在 Agent 365 界面上正确响应。

验证弹性豆茎连接性

向你的 Elastic Beanstalk 端点发送 GET 请求。

curl http://aws-a365-agent-env.us-east-1.elasticbeanstalk.com/

请求应返回以下消息:

AWS Agent is running.

查看 Elastic Beanstalk 日志中的机器人框架消息

使用Elastic Beanstalk日志记录来验证你的代理是否接收到Bot Framework活动并正确响应。

eb logs

或者实时直播日志:

eb logs --stream

消息发送到你的代理后,你会看到:

POST 200 /api/messages
Received activity: { ... }

365代理的测试代理上线

根据你的环境,你可以从不同表面测试试剂:

  • 代理操场
  • Teams(如已发布)
  • 特工壳牌
  • 联合曲面

你可以发送消息并验证你的Elastic Beanstalk日志。 了解如何使用 Microsoft Agent 365 SDK 测试代理,并用 Agents Playground 测试工具验证代理的功能

开发者工作流程

设置完成后,按照以下工作流程进行迭代开发:

在本地开发和测试

使用 监听模式 进行快速开发,并实现自动重载:

# Automatically rebuild and restart on file changes
dotnet watch run

先修改代码,保存并在本地测试,然后再部署。

构建并重新部署到 AWS Elastic Beanstalk

准备部署变更时:

# Clean previous builds (optional but recommended)
dotnet clean

# Publish optimized release build
dotnet publish -c Release -o ./publish --runtime linux-x64

# Create deployment package
cd publish
zip -r ../deploy.zip .
cd ..

# Deploy to AWS
eb deploy

测试和监视

使用Agent 365平台进行测试并监测 Elastic Beanstalk 日志:

# Stream logs in real-time
eb logs --stream

你不需要重新创建你的身份、蓝图、机器人端点或权限。

故障排除

使用此部分来诊断和解决在AWS Elastic Beanstalk上部署和运行Agent 365代理时的常见问题。 它涵盖了连接性和健康检查。 它还解决了端口绑定、构建错误和授权问题。

提示

Agent 365 故障排除指南 包含高层次的故障排除建议、最佳实践以及针对 Agent 365 开发生命周期各阶段的故障排除内容链接。

消息终端没有收到请求

请查看以下详情:

  • 你的终点正是:
    http://<your-app>.elasticbeanstalk.com/api/messages
  • 你的 Elastic Beanstalk 环境运行正常。 使用eb health进行检查。
  • 你的安全组允许 HTTP 或 HTTPS 流量进入。
  • 没有防火墙规则或VPC限制。

应用健康问题

检查环境健康:

eb health --refresh

查看详细日志:

eb logs

端口绑定问题

确保应用程序侦听环境变量指定的 PORT 端口。 Elastic Beanstalk 自动设置此值。

.NET生成或运行时问题

通过以下命令检查构建错误:

# Clean and rebuild
dotnet clean
dotnet build --verbosity detailed

验证.NET版本:

dotnet --version
dotnet --list-sdks

检查软件包问题:

# List installed packages
dotnet list package

# Update packages
dotnet restore --force

许可证转让失败

手动分配有效的Microsoft 365许可证,或使用未经许可的用户路径(如果受支持)。