在re:Invent 2019之前,AWS Toolkit发布了Cloud Debugging beta功能。该功能支持在IntelliJ IDEs(IntelliJ, PyCharm, Webstorm, 以及 Rider)中远程调试 ECS Fargate 容器中执行的应用程序。
对ECS Fargate demo启用了远程调试并调试成功后,这里记录一下该功能的使用体验并且分享体验过程中掉进去过的一些坑。
ECS Services收缩为0个task副本,同时创建一个新的Service并启用新的Task Definition,新的Task Definition中会加入Cloud Debug Sidecar容器来辅助实现远程调试。整个过程会对生产环境造成变更。Cloud Debugging将导致他人的持续部署失败或不生效。Cloud Debugging操作比较麻烦,且启用状态下无法更新ECS中部署的版本。需要先停用Cloud Debugging,部署新版本代码,然后再次启用Cloud Debugging才能调试新代码。尽可能的不要依赖Cloud Debugging来调试程序,花功能做好单元测试,集成测试以及E2E测试来避免调试云端环境。Cloud Debugging后,创建Cloud Debugging Launch Configuration并执行调试,遇到Retrieve execution role finished exceptionally错误。错误的原因是,文档中没有提到Cloud Debug Sidecar需要logs:CreateLogStream权限创建CloudWatch Logs Stream。解决方案是,为ECS Task Execution Role添加logs:CreateLogStream权限。Cloud Debugging的Task暂时禁用App Mesh和X-Ray。
Cloud Debugging是一个不错的开发工具尝试思路,帮助开发者更好的做出Cloud Native应用。但是该项目仍然是一个早期项目,有许多问题需要修复和改进。