re:Invent 2019之前,AWS Toolkit发布了Cloud Debugging beta功能。该功能支持在IntelliJ IDEs(IntelliJ, PyCharm, Webstorm, 以及 Rider)中远程调试 ECS Fargate 容器中执行的应用程序。

对ECS Fargate demo启用了远程调试并调试成功后,这里记录一下该功能的使用体验并且分享体验过程中掉进去过的一些坑。

试用体验 

  • 首先,该功能不适用于生产环境。因为对ECS Fargate类型的Service启用Cloud Debugging功能会将原始的ECS Services收缩为0个task副本,同时创建一个新的Service并启用新的Task Definition,新的Task Definition中会加入Cloud Debug Sidecar容器来辅助实现远程调试。整个过程会对生产环境造成变更。
  • 如果ECS集群是通过CI/CD持续部署,并且是多人协同使用的环境,该功能也不适用。因为,对某些容器服务启用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权限。
  • AWS Toolkit Jetbrains当前的版本1.9-193不支持启用了AppMeshX-Ray的Task。解决方案是,对需要启用Cloud Debugging的Task暂时禁用App Mesh和X-Ray。

Cloud Debugging是一个不错的开发工具尝试思路,帮助开发者更好的做出Cloud Native应用。但是该项目仍然是一个早期项目,有许多问题需要修复和改进。