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