AWS Cloud9 云开发环境入门 - 浏览器 IDE 的设置与活用
仅通过浏览器即可完成 AWS 开发的云 IDE。介绍在预装 SAM CLI 环境中进行 Lambda 开发以及通过实时协同编辑实现结对编程的方法。
Cloud9 的特点与使用场景
Cloud9 是一个基于浏览器的集成开发环境(IDE),在 t3.small 级别的 EC2 实例上自动构建开发环境,每月仅需数美元即可运行。代码编辑器、终端和调试器均在浏览器内运行,无需在本地机器上安装开发工具。AWS CLI、SAM CLI、Docker、Node.js、Python、Git 均已预装,无需花时间搭建环境即可开始开发。特别适用于新成员入职培训、动手实验和研讨会的环境统一,以及避免因本地环境差异导致的问题。需要注意的是,AWS 于 2024 年 7 月 25 日起停止向新客户提供 Cloud9。现有用户可继续使用,但新创建的 AWS 账户无法创建 Cloud9 环境。
Lambda 开发与 SAM CLI 集成
Cloud9 针对 Lambda 函数开发进行了优化,支持最大 10 GB 的 /tmp 存储和 15 分钟超时的 Lambda 本地测试。由于预装了 SAM CLI,可以通过 sam init 创建项目、sam local invoke 进行本地测试、sam deploy 进行部署,全部在终端中完成。还支持 Lambda 函数的内联调试,可以设置断点进行单步执行。由于 Docker 可用,还可以通过 sam local start-api 执行 API Gateway 的本地模拟。Cloud9 环境运行在 EC2 实例上,因此可以通过私有网络访问 VPC 内的资源(RDS、ElastiCache),轻松执行在本地开发中难以实现的集成测试。
成本管理与安全
Cloud9 本身免费使用,仅产生 EC2 实例和 EBS 存储的费用。通过自动停止功能,一定时间无操作后 EC2 实例会自动停止,再次访问时自动启动。默认停止计时器为 30 分钟,可根据开发风格进行调整。使用 t3.small 实例,每天使用 8 小时的情况下月费仅为数美元。在安全方面,AWS Managed Temporary Credentials 会自动注入到环境中,可以使用 IAM 用户的权限访问 AWS 资源。无需将访问密钥保存到文件中,降低了凭证泄露的风险。但 Managed Temporary Credentials 存在部分限制,某些 IAM 操作和 CloudFormation 操作可能受限,此类操作需要显式配置凭证。 关于 Cloud9 的详细介绍也可以在Amazon 的相关书籍中了解。
Cloud9 的替代方案与迁移路径
2024 年 7 月 25 日之后创建 AWS 账户的新客户无法使用 Cloud9,需要考虑替代方案。AWS CloudShell 是基于浏览器的 Shell 环境,预装了 AWS CLI 和 SAM CLI,仅终端操作可提供与 Cloud9 同等的便利性。但 CloudShell 没有代码编辑器功能,不适合正式的编码工作。本地 IDE(VS Code、JetBrains)配合 AWS Toolkit 扩展的组合是作为 Cloud9 后继推荐的工作流。AWS Toolkit 提供 SAM 模板创建支持、Lambda 函数本地调试、CloudFormation 堆栈管理等功能,在 IDE 内即可执行,覆盖了 Cloud9 的核心功能。如需远程开发,可通过 VS Code Remote - SSH 连接 EC2 实例,在远程环境中获得与本地相同的编辑体验。
Cloud9 的限制与注意事项
Cloud9 虽然便利性高,但需要了解其运营限制。基于 EC2 的环境根卷(EBS)默认大小仅 10 GB,处理 Docker 镜像或大型项目时需要扩展 EBS 卷。使用 resize.sh 脚本或 AWS CLI 修改卷大小并扩展文件系统。网络方面,默认配置将 Cloud9 环境放置在公共子网中,入站安全组将 SSH 访问限制为 Cloud9 服务的 IP 范围,但使用 Systems Manager 连接可将环境放置在私有子网中以增强安全性。协同编辑(结对编程)功能实时工作,但共享环境时会授予受邀用户对环境内所有文件的访问权限,因此需注意不要误将凭证文件放置在工作区中。
总结
Cloud9 是一个仅通过浏览器即可完成 AWS 开发的云 IDE。它集成提供了预配置的开发工具、Lambda 函数的本地测试以及从终端操作 AWS CLI 的功能。运行在 EC2 实例上,通过与团队成员的实时协同编辑,提高结对编程和代码审查的效率。由于 2024 年 7 月 25 日起不再向新客户提供,新用户请考虑本地 IDE 配合 AWS Toolkit 的组合或 AWS CloudShell 作为替代方案。