【问题标题】:EC2 Auto Scaling instance starts and terminates instantly when using CodeDeployEC2 Auto Scaling 实例在使用 CodeDeploy 时立即启动和终止
【发布时间】:2020-03-16 19:14:26
【问题描述】:

我正在实施 Amazon EC2 Auto Scaling 和 AWS CodeDeploy(蓝绿色部署)。我已将烘焙 AMI 分配给 Auto Scaling 组。

Auto Scaling 在没有 CodeDeploy 的情况下可以正常工作。

用于蓝绿色部署的 AWS CodeDeploy 没有问题。我已经在部署组中分配了自动伸缩组。

但是,为了测试蓝绿部署,我手动终止了其中一个实例,以便 Auto Scaling 可以再启动一个实例。但是,实例会突然启动和终止

我看到 AWS CodeDeploy 有错误:

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

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

我只有 1 个应用程序部署组。

目前,我已通过将“自动复制 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】:

您可以使用自定义脚本清理目标文件夹并从 AppSpec hooks 部分运行它,例如,生命周期事件 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

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 2023-03-13
    • 2013-07-05
    • 2021-02-09
    • 2014-08-09
    • 2017-12-22
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多