[EC2 Auto Scaling实例在使用CodeDeploy时立即启动和终止

问题描述 投票:0回答:1

我正在实施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?

问题:

  1. 为什么出现错误“部署失败,因为指定的文件已存在于此位置:webserver / server.js”?

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

  3. 是否有更好的方法来进行蓝绿色部署和自动缩放。或上述方法有任何问题?

我已经阅读了AWS CodeDeploy教程,但是错过了一些东西。

amazon-web-services autoscaling aws-code-deploy
1个回答
0
投票

您可以使用自定义脚本来清理目标文件夹并从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

© www.soinside.com 2019 - 2024. All rights reserved.