从本地脚本,终止(然后重新创建)Auto Scaling组

时间:2016-02-22 03:10:29

标签: amazon-web-services amazon-ec2 amazon-elb autoscaling aws-cli

设置:

我有一个附加了Auto Scaling组的AWS Load Balancer。它启动了我已配置为充当应用程序服务器基本设置的AMI实例。

我使用User Data设置执行以下操作:

#!/bin/bash

cd /home/server
GIT_SSH_COMMAND='ssh -i /home/ec2-user/app-server.key' git pull
composer install

也就是说:当Auto Scaling Group旋转一个新实例时,它会从GitHub中提取最新代码,更新作曲家依赖项(它是一个基于Lumen的PHP RESTful应用程序服务),并准备好了。< / p>

这一切都有效。

当我从Auto Scaling Group手动detatch所有EC2实例时,会立即创建新实例并成功获取最新代码。可爱!

我正在尝试做什么

在我将服务器代码提交给GitHub之后,我想运行一个本地命令 - 比如deploy staging,它会自动执行以下操作:

  1. 终止Auto Scaling组中的当前实例
  2. 这会导致创建新实例,然后更新为最新代码。
  3. 我现在在做什么

    它仍然非常手动。我承诺使用GitHub,然后我必须转到AWS Web控制台并“分离”我的所有EC2实例,以便新的实例取代它们 - 然后我必须终止那些已分离的实例。

    问题

    所以 - 鉴于我想要完成的任务,我该如何完成?

    在我的Windows PC中,我想输入一个单词来完成以上所有操作。

    也许我对事物的排序是不正确的 - 例如,新的实例应该在终止旧的之前旋转等等 - 在这种情况下,请告诉我最好的方法的东西。

    我也在寻找确切的建议:如何实现这一点。我是否需要下载适用于Windows的AWS CLI工具?如何从家用PC执行AWS命令?等。

    谢谢!

    修改

    或者(也许这是一种更干净的方式?),我也可以告诉我的Auto Scaling组/负载均衡器中的当前实例“执行GitHub更新”..但我不知道如何做到这一点。实例仅在首次创建时执行此操作。

1 个答案:

答案 0 :(得分:2)

这整个设置有点脆弱。您可以查看CodeDeploy:https://aws.amazon.com/codedeploy/

对于您的具体设置,如果您不允许触摸/更改太多,我会做的是:
在运行的实例中,我会定期从github中提取并与正在运行的内容进行比较。如果有新版本,我会停止服务。该实例将变得不健康并被回收并获得新版本 您可能希望在不同的计算机之间设置一个稍微随机的计划,以确保它们不会同时被回收。