通过


在亚马逊网络服务(AWS)中构建一个部署的Agent 365代理

重要

你需要是边境预览计划的一部分,才能提前访问 Microsoft Agent 365。 边界将你直接与Microsoft最新的 AI 创新联系起来。 边境预览版受客户协议现有预览条款的约束。 由于这些功能仍在开发中,其可用性和功能可能会随时间而变化。

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

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

目标

学习如何使用Agent 365和Microsoft 365作为控制平面,并:

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

先决条件

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

Azure / Microsoft 365 prerequisites

确认您的 Microsoft Entra 租户访问权限,并安装以下工具以创建身份、蓝图并注册您的代理。

亚马逊网络服务(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 核心 Web API
  • 机器人框架消息处理程序 /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构建并部署

使用Visual Studio的AWS Toolkit,通过引导向导将应用发布到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都已配置好。 应用绑定到 PORT Beanstalk设置的环境变量。

  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. 初始化 Elastic Beanstalk for .NET。 系统提示您选择地区和平台:

    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
    

    此命令:

    • 创建弹性豆茎应用。
    • 创建一个带有负载均衡器的环境。
    • 部署你的应用程序。
    • 配置必要的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。

Configure for non-Azure hosting

在你的 Elastic Beanstalk 项目文件夹中, a365.config.json 通过运行 a365 config init

重要

对于非Azure托管,设置以下值:

  • messagingEndpoint: 你的弹性豆茎网址, /api/messages 路径
  • needDeployment: false

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

{
  "tenantId": "YOUR_TENANT_ID",
  "subscriptionId": "YOUR_AZURE_SUBSCRIPTION_ID",
  "resourceGroup": "a365-aws-demo",
  "location": "westus",
  "environment": "prod",

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

  "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
"needDeployment": false 告诉CLI:“我自己托管服务器;不要部署到 Azure。
deploymentProjectPath 冲压发生的地方.env

构建代理365代理

在你的代理代码运行到AWS端点后,按照 Agent 365开发生命周期 的剩余步骤设置你的代理。

端到端验证代理

利用这些检查确认你的AWS托管代理是否可联系,接收机器人框架活动,并且在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表面并监测弹性豆茎原木进行测试:

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

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

Troubleshooting

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

小窍门

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

消息终端没有收到请求

请查看以下详情:

  • 你的终点正是:
    http://<your-app>.elasticbeanstalk.com/api/messages
  • 你的弹性豆茎环境是健康的。 通过使用 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 许可证,或者如果支持,可以使用无许可的用户路径。