Amazon web services EC2自动缩放实例在使用CodeDeploy时立即启动和终止

Amazon web services EC2自动缩放实例在使用CodeDeploy时立即启动和终止,amazon-web-services,autoscaling,aws-code-deploy,Amazon Web Services,Autoscaling,Aws Code Deploy,我正在实现AmazonEC2自动扩展和AWSCodeDeploy蓝绿色部署。我已将烘焙的AMI分配给自动缩放组 如果没有CodeDeploy,自动缩放就不会出现问题 用于蓝绿色部署的AWS CodeDeploy工作正常。我已在部署组中分配了自动缩放组 然而,为了测试蓝绿色部署,我手动终止了其中一个实例,以便自动伸缩可以启动更多的实例。但是,实例会突然启动和终止 我发现AWS CodeDeploy有一个错误: 部署失败,因为指定的文件已存在于以下位置:webserver/server.js 我使用

我正在实现AmazonEC2自动扩展和AWSCodeDeploy蓝绿色部署。我已将烘焙的AMI分配给自动缩放组

如果没有CodeDeploy,自动缩放就不会出现问题

用于蓝绿色部署的AWS CodeDeploy工作正常。我已在部署组中分配了自动缩放组

然而,为了测试蓝绿色部署,我手动终止了其中一个实例,以便自动伸缩可以启动更多的实例。但是,实例会突然启动和终止

我发现AWS CodeDeploy有一个错误:

部署失败,因为指定的文件已存在于以下位置:webserver/server.js

我使用的AWS CodeDeploy配置是OneAtTime和content选项:覆盖内容

我只有一个应用程序部署组

目前,我已将自动复制Amazon EC2自动缩放组更改为手动配置实例,从而从AWS CodeDeploy中删除了自动缩放组,这已停止终止实例。但是,自动缩放创建的新实例没有新代码。CodeDeploy是否用新代码更新或替换AMI

问题:

为什么我会收到部署失败的错误消息,因为指定的文件已存在于以下位置:webserver/server.js

通过自动缩放创建的EC2实例没有最新的部署代码

是否有更好的方法来执行蓝绿色部署和自动缩放。上述方法是否存在任何问题


我已经阅读了AWS CodeDeploy教程,但遗漏了一些内容。

您可以使用自定义脚本清理目标文件夹并从AppSpec挂钩部分运行它,例如,安装前的生命周期事件看起来是运行此脚本的好地方。 您可以创建一个名为BeforeInstall的appspec挂钩,它将清理需要部署的目录

例如:

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html
hooks:
  BeforeInstall:
    - location: ./cleanup.sh
而cleanup.sh的内容与此类似:

#!/bin/bash -xe
# cleanup folder /var/www/html
rm -rf /var/www/html
有了这个钩子,在部署代码之前,BeforeInstall钩子将运行,并且该脚本将被执行以清理目录


关于appspec钩子的更多信息可以在这里找到:

面对同样的问题,您有什么解决方案吗。