【问题标题】:node-grunt-compass Heroku's Buildpack analogy for AWS CodeDeploy?node-grunt-compass Heroku 的 AWS CodeDeploy 的 Buildpack 类比?
【发布时间】:2015-09-02 02:22:03
【问题描述】:
我们正在尝试将我的 nodejs 应用程序从 Heroku 迁移到 AWS CodeDeploy。
在 Heroku 部署中,我们使用 nodejs-compass-grunt buildpack 来安装依赖项并运行 compass。 AWS 中是否有类似的东西可以与 CodeDeploy 一起使用,或者我们是否应该只安装一个安装了所有东西的 AMI?
【问题讨论】:
标签:
node.js
amazon-web-services
heroku
gruntjs
aws-code-deploy
【解决方案1】:
与 Heroku 不同,CodeDeploy 不是 PaaS。它是一项服务,可帮助您管理部署到云基础架构的软件。 CodeDeploy 与您要部署的软件类型及其依赖项无关。这使得它非常灵活,但这也意味着您必须做更多的工作来告诉 CodeDeploy 如何部署您的软件。
如果您想将框架部署到主机,然后部署依赖于该框架的软件,您有两种选择:
- 烘焙一个已安装依赖项的 AMI,然后仅部署您的服务。
- 安装所有依赖项作为 CodeDeploy 部署的一部分。
使用选项 1,如果您想迁移到任何依赖项的新版本,则必须执行与切换到新操作系统相同的工作。本质上,您将不得不进行蓝绿部署:
- 烘焙一个新的 AMI。
- 提供新的基础设施。
- 将您的服务部署到新的基础架构。
- 用新的基础架构替换您现有的基础架构。
- 释放您的旧基础架构。
如果您希望使用 CodeDeploy 进行就地部署,那肯定会减慢速度。如果您无论如何都想做蓝绿部署,那么您唯一失去的就是不使用出售的 AMI 并且必须自己管理。
使用选项 2,您需要将所有依赖项捆绑为部署存档的一部分。您还需要创建脚本来安装/重新安装它们。然后,您可以在 BeforeInstall 生命周期步骤中调用这些脚本。当您想要更新或回滚依赖项时,您需要做的就是与正常代码更改相同的事情:
- 创建一个新的部署包。 (理想情况下,这应该是使用 CodeDeploy 时构建过程的最终结果)
- 使用 CodeDeploy 部署新包。
这里的缺点是,您必须在每次部署时重新安装依赖项,或者添加代码以检查现有版本,并且存在依赖项损坏的风险,而这种依赖项无法通过重新部署相同的包来修复。