学习如何搭建、托管、注册并发布运行在 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 许可证可用
亚马逊网络服务(AWS)的前提条件
确保以下AWS服务和工具已搭建,用于部署和管理您的Elastic Beanstalk环境。
本地发展环境的前提条件
在本地安装并配置以下工具,以构建、运行和部署该代理。
Code 编辑器:使用 Visual Studio Code 或 Visual Studio
.NET SDK:使用 .NET 8.0 SDK 或更高版本
AWS Toolkit :从Visual Studio 或Visual Studio Code 。 使用您的 AWS身份与访问管理(IAM) 凭证登录。LLM API 访问:根据你的代理配置或你偏好的模型提供商选择合适的服务:
- OpenAI API 密钥: 获取 OpenAI API 密钥
- Azure OpenAI:创建并部署 Azure OpenAI 资源以获取 API 密钥和终结点
创建和部署.NET代理
以下说明描述了如何创建一个最小代理:
- 响应GET
/ - 接受POST上的机器人框架活动
/api/messages
创建项目目录
mkdir aws-a365-agent
cd aws-a365-agent
初始化.NET项目
为了简化你的体验,本文使用了已准备好的样本。 克隆 Agent365 Samples 仓库 ,访问 dotnet\semantic-kernel\sample-agent 样本。
语义内核示例代理 - C#/.NET 示例包括:
请前往 dotnet\semantic-kernel\sample-agent 验证项目是否成功构建:
dotnet restore
dotnet build
配置模型
按照 步骤2:LLM配置 中的说明,使用你的Open API密钥配置项目。
本地考试(可选)
在部署到AWS之前,先在本地测试你的代理:
# Run the application dotnet run在另一个终端测试端点:
# Test agent endpoint locally curl http://localhost:3978点击
Ctrl+C停止本地服务器。
构建和部署
选择您偏好的选项来构建并部署此示例应用:
选项A:在 Visual Studio 中生成和部署 - 选项 B:使用 CLI 生成并部署到 AWS Elastic Beanstalk
选项 A:从Visual Studio生成和部署
使用 AWS Toolkit for Visual Studio,使用引导向导将应用发布到 Elastic Beanstalk。
在 解决方案资源管理器 中,右键单击项目。
选择 发布到 AWS Elastic Beanstalk。
请跟随 Beanstalk部署向导:
- 选择您的AWS凭证配置文件。
- 选择“区域”(例如,
us-east-1)。 - 选择平台(
.NET Core on Linux)。 - 配置环境设置。
选择“ 部署”。
向导负责构建、打包并将你的应用部署到 AWS。
选项B:构建并部署到带有CLI的AWS Elastic Beanstalk上
使用 Elastic Beanstalk CLI 打包.NET代理并将其部署到 64 位 Amazon Linux 2 环境。 确保AWS CLI和Eb CLI都已配置好。 应用绑定到由 Beanstalk 设置的 PORT 环境变量。
生成并发布.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初始化 .NET 的 Elastic Beanstalk。 系统提示您选择地区和平台:
eb init选择:
-
平台:
64bit-amazon-linux-2023-v3.7.0-running-.net-8 -
区域:您偏好的AWS区域(例如:
us-east-1)
-
平台:
创建部署包并部署:
cd publish zip -r ../deploy.zip . cd .. eb create aws-a365-agent-env eb deploy此命令:
- 创建 Elastic Beanstalk 应用。
- 创建一个带有负载均衡器的环境。
- 部署你的应用程序。
- 配置必要的AWS资源。
完成后,获取你的 Elastic Beanstalk 端点:
eb status注意你的终点。 结果应如下所示:
http://aws-a365-agent-env.us-east-1.elasticbeanstalk.com该端点由
messagingEndpointAgent 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许可证,或使用未经许可的用户路径(如果受支持)。