我正在实施Amazon EC2 Auto Scaling和AWS CodeDeploy(蓝绿色部署)。我已将烘焙的AMI分配给Auto Scaling组。
没有CodeDeploy,Auto Scaling毫无问题。
用于蓝绿色部署的AWS CodeDeploy可以正常工作。我已在部署组中分配了自动扩展组。
但是,为了测试Blue Green部署,我手动终止了一个实例,以便Auto Scaling可以启动另一个实例。但是,实例突然开始和终止。
我看到AWS CodeDeploy出现错误:
部署失败,因为指定的文件已存在于此位置:webserver / server.js
我正在使用的AWS CodeDeploy配置为OneAtTime
,内容选项为Overwrite the content
。
我只有一个应用程序部署组。
[当前,我已通过将“自动复制Amazon EC2 Auto Scaling组”更改为“手动配置实例”而从AWS CodeDeploy中删除了Auto Scaling组,该操作已停止终止实例。但是,由Auto Scaling创建的新实例没有新代码。 CodeDeploy是否不使用新代码更新或替换AMI?
问题:
为什么出现错误“部署失败,因为指定的文件已存在于此位置:webserver / server.js”?
通过自动缩放创建的EC2实例没有最新的部署代码?
是否有更好的方法来进行蓝绿色部署和自动缩放。或上述方法有任何问题?
我已经阅读了AWS CodeDeploy教程,但是错过了一些东西。
您可以使用自定义脚本来清理目标文件夹并从AppSpec挂钩部分中运行它,例如,生命周期事件BeforeInstall看起来是运行此脚本的好地方。您可以创建一个名为“ 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挂钩的更多信息,请参见http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html