基于AWS通过RDP连接C#桌面应用的部署启停方案问询
基于AWS EC2实现按需启停的RDP桌面应用部署方案
方案选型结论
优先选择AWS EC2,因为AWS WorkSpaces依赖专属客户端,无法使用标准RDP连接,且按需创建/启停的灵活性远不如EC2,完全匹配你的需求。
具体实现步骤
1. 制作自定义Windows EC2镜像(AMI)
- 创建一台Windows EC2实例,完成以下配置:
- 安装你的C#桌面应用及线缆硬件对应的驱动程序
- 配置RDP虚拟通道(Windows原生支持,可通过组策略、注册表或应用自身适配完成)
- 确保RDP服务正常启用,防火墙开放3389端口
- 实例配置完成后,创建自定义AMI,作为后续按需创建实例的模板。
2. 按需创建EC2实例的触发流程
- 搭建API Gateway + Lambda组合:
- 客户端发起RDP连接前,先调用API Gateway暴露的接口
- Lambda函数通过AWS SDK编写实例创建逻辑:指定自定义AMI、实例类型、安全组(仅开放RDP端口给指定客户端IP),创建成功后返回实例的公网IP/DNS给客户端
3. RDP断开时自动停止实例
有两种可靠实现方式:
- 实例内后台服务监控:在自定义AMI中部署一个Windows服务(用C#编写),通过Windows Terminal Services API或WMI监听RDP会话状态,当检测到所有会话断开时,调用AWS SDK发送停止实例的请求
- 云端监控触发:利用CloudWatch Events监控EC2实例的RDP会话连接数(或CPU使用率长时间低于阈值),当满足触发条件时,调用Lambda函数停止实例
4. 关键优化点
- 安全层面:安全组仅允许客户端的公网IP访问3389端口,避免无授权访问
- 成本控制:使用按需实例,停止后仅收取EBS存储费用;也可尝试Spot实例进一步降低成本
- 异常处理:设置超时机制(如15分钟无RDP会话则自动停止实例),避免客户端异常断开导致实例持续运行
对两种方案的补充说明
- AWS WorkSpaces:确实无法使用标准RDP连接,必须通过AWS WorkSpaces客户端访问,且其按用户订阅的模式无法实现“每次连接创建新实例、断开即停止”的灵活控制,不符合需求
- AWS EC2:完全支持按需创建/启停实例,通过上述Lambda、API Gateway、监控服务的组合即可实现RDP连接与实例生命周期的联动
内容的提问来源于stack exchange,提问作者Florin P.
相关产品推荐
相关产品推荐

