更新
我刚刚意识到,您appspec.yml
似乎缺少部署 Node.js 应用程序(以及大多数其他应用程序)的关键部分,即该hooks
部分。如AWS CodeDeploy 应用程序规范文件中所述,AppSpec 文件用于将每个部署作为一系列部署生命周期事件进行管理:
- 在部署步骤期间,AWS CodeDeploy 代理将在 AppSpec 文件的挂钩部分中查找当前事件的名称。[...] 如果在 hooks 部分找到事件,AWS CodeDeploy 代理将检索要为当前步骤执行的脚本列表。[...]
例如,请参阅提供的AppSpec 文件示例(纯粹是为了说明,您需要制作一个适合您的应用的自定义文件):
os: linux
files:
- source: Config/config.txt
destination: webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
如果没有这样的ApplicationStart
命令,AWS CodeDeploy 没有任何说明如何处理您的应用程序(请记住,CodeDeploy 与技术无关,因此需要告知如何启动应用程序服务器)。
初步答案
什么是AWS CodeDeploy ? 说明了典型 AWS CodeDeploy 部署的流程:
关于您的问题的关键方面是第 4 步:
- 最后,每个参与实例上的 AWS CodeDeploy 代理从指定的 Amazon S3 存储桶或 GitHub 存储库中提取修订,并按照提供的 AppSpec 文件中的说明开始将内容部署到该实例。[强调我的]
也就是说,一旦您开始了AWS CodeDeploy部署,一切都应该自动运行 - 因此,某些配置似乎不太正确,最常见的问题是部署组实际上还没有包含任何正在运行的实例。您是否已验证您可以通过 AWS 管理控制台从 CodeDeploy 部署到您的 EC2 实例?