Amazon web services 部署到负载平衡器后面的EC2实例;PHPStorm&x2B;github

Amazon web services 部署到负载平衡器后面的EC2实例;PHPStorm&x2B;github,amazon-web-services,github,amazon-ec2,load-balancing,amazon-elb,Amazon Web Services,Github,Amazon Ec2,Load Balancing,Amazon Elb,我知道这在很多地方都得到了部分回答,但答案是这样的。。地图上到处都是,年代久远,解释得不清楚。我正在寻找截至2016年2月的最佳实践 设置: 基于PHP的RESTful应用程序服务,位于EC2实例中。EC2实例将S3用于上传的用户数据(图像文件),将RDS MySql用于其数据库(这两点并不特别重要) 我们在PHPStorm中开发,我们的源代码控制是GitHub。部署时,我们只需使用PHPStorm的内置SFTP部署将文件直接上载到EC2实例(我们有一个用于登台环境的实例,另一个用于生产环境)。

我知道这在很多地方都得到了部分回答,但答案是这样的。。地图上到处都是,年代久远,解释得不清楚。我正在寻找截至2016年2月的最佳实践

设置:

基于PHP的RESTful应用程序服务,位于EC2实例中。EC2实例将S3用于上传的用户数据(图像文件),将RDS MySql用于其数据库(这两点并不特别重要)

我们在PHPStorm中开发,我们的源代码控制是GitHub。部署时,我们只需使用PHPStorm的内置SFTP部署将文件直接上载到EC2实例(我们有一个用于登台环境的实例,另一个用于生产环境)。我经常部署到Staging。可能是一天20次。我只需单击PHPStorm中的一个文件并说“部署到Staging”,这将执行SFTP传输。或者,我可能只需单击整个项目并单击“部署到登台”-某些文件夹和文件将从上载中排除,这是PHPStorm部署配置的一部分

最近,我将我们的EC2实例放在负载平衡器后面。我这样做是为了通过证书管理器利用Amazon提供的免费SSL,证书管理器不支持单个EC2实例

所以,现在有一个负载平衡器,后面只有一个EC2实例。我维护一个指向EC2实例的弹性IP,以便可以直接访问它(请参阅上面我当前的部署方法)

问题:

我还没有勇气在我的负载平衡器后面创建额外的(克隆)EC2实例,因为我不确定应该如何部署到它们。我想到了一些想法,但它们都很老套

鉴于上述场景,当前最平滑和最好的方法是什么?A)将代码库快速部署到负载平衡器后面的一组EC2实例,以及B)实际“克隆”我的当前EC2实例以创建其他实例

尽管我已经考虑了一些(高度技术性的)建议,但我还不能在脑海中真正清晰地描绘出上述内容


谢谢

您需要将EC2实例视为100%可有可无。意思是,它可以在任何时候终止,你不应该在意。替换的EC2实例将启动并接管工作

有三种方法可以实现这一点:

方法1:每个部署创建一个新的AMI映像

部署应用程序时,将其部署到worker EC2实例,该实例的唯一用途是“设置”应用程序。部署新版本后,您将从EC2实例创建一个新的AMI映像,并使用新的AMI映像更新自动缩放启动配置。旧的EC2实例被终止并替换为新代码

新的EC2实例上已经有了最新的代码,因此可以将它们添加到负载平衡器中

方法2:每个部署都是对非实例存储(如AmazonS3)进行的

EC2实例将从AmazonS3下载最新的代码,并在引导时安装

因此,要使新代码生效,您需要终止旧实例,并启动新实例来替换开始使用新代码的实例

这可以通过滚动更新方式完成,也可以通过蓝色/绿色部署完成

方法3:与方法2类似,但这次实例有一些智能,可以发出信号下载并安装代码

这样,您就不需要终止实例:现有实例被告知从S3更新,它们自己进行更新

一些可能有帮助的工具包括:

  • 厨师
  • 安西布尔
  • 云层形成
更新:

方法2和3都从一个“基本”AMI开始,该AMI被配置为从S3中提取网页资产。此AMI不会因您网站的版本而更改

例如,AMI可能已经安装了Apache和PHP,在启动时它从S3中提取.PHP网站资产,并将它们放入
/var/www/html

云层形成在这方面效果很好。此外,对于方法3,您可以使用
cfn hup
等待更新信号。当发出信号时,它将从S3中提取更新的资产

另一种可能是使用弹性豆茎,它可以用来为您管理所有这些

更新:

要从Git中提取AMI映像,请尝试以下操作:

#!/bin/sh
cd /git/app
git pull
; copy files from repo to web folder
composer install
  • 安装一个EC2实例,其中包含您需要为web应用安装的所有内容
  • 安装Git并设置本地repo,以便
    Git拉取
  • 关闭并创建实例的AMI
  • 部署时,请执行以下操作:

    #!/bin/sh
    cd /git/app
    git pull
    ; copy files from repo to web folder
    composer install
    
  • Git推送
    到GitHub
  • 根据您的AMI映像启动一个新的EC2实例
  • 作为用户数据的一部分(在EC2实例启动期间指定),请指定如下内容:

    #!/bin/sh
    cd /git/app
    git pull
    ; copy files from repo to web folder
    composer install
    

    这样做时,该用户数据将作为脚本,在第一次启动时运行。

    OK。。等待首先,我要问:我真的被一个叫“马特·豪瑟”的人回答了吗?嗯,我是马修·豪瑟,这很有趣=P好的,继续。。。我想我会先问一些问题,然后从这个问题开始:对于“方法3”,这会与自动缩放很好地结合吗?我认为自动缩放确实是我最终应该做的明智之举。方法3似乎没有更新“AMI”,那么它将如何工作(也许不会)?是的,它都可以自动缩放。即使只有一个实例(只要该实例是一次性的),自动缩放也是一种可行的方法。我已经对我的答案进行了更新,以解决方法2和3的AMI问题。由于我们使用GitHub作为服务器代码,并且不想开始使用S3作为服务器代码的宿主,那么公平地说我们