Amazon web services AWS-不断更新AMIs

Amazon web services AWS-不断更新AMIs,amazon-web-services,load-balancing,autoscaling,cloud-init,Amazon Web Services,Load Balancing,Autoscaling,Cloud Init,假设我从一个EC2实例创建了一个AMI。现在,我可以手动将其添加到LB中,或者让自动缩放组为我执行此操作(基于我提供的条件)。到目前为止,一切都很好 现在,假设我的开发人员添加了一个新功能,我在现有实例上提取了新代码。请注意,此时AMI没有更新,仍然有旧代码。我的问题是我应该如何处理这种情况,以便当自动缩放组从我的AMI创建一个新实例时,它将使用最新的代码 我想到了两种方法,如果您有其他解决方案,请告诉我: a) 随时更新AMIs;这意味着,每当有一个拉请求时,旧的AMI应该被删除并替换为新的A

假设我从一个EC2实例创建了一个AMI。现在,我可以手动将其添加到LB中,或者让自动缩放组为我执行此操作(基于我提供的条件)。到目前为止,一切都很好

现在,假设我的开发人员添加了一个新功能,我在现有实例上提取了新代码。请注意,此时AMI没有更新,仍然有旧代码。我的问题是我应该如何处理这种情况,以便当自动缩放组从我的AMI创建一个新实例时,它将使用最新的代码

我想到了两种方法,如果您有其他解决方案,请告诉我:

a) 随时更新AMIs;这意味着,每当有一个拉请求时,旧的AMI应该被删除并替换为新的AMI

b) 在AMIs上有一个启动脚本(cloudinit),它将在初始启动时从存储库中提取最新的代码。(通过在实例上存储存储库凭据并直接从git中提取代码)

以下哪种方法更好?如果两者都不好,那么实现这一目标的最佳实践是什么?

考虑到任何(几乎)东西都可以通过AWS使用API实现自动化;它将再次落在手头的特定用例上

一开始,人们会建议安装一个基本的AMI,并配置必要的软件包,还有一个init脚本,它可以下载最新的源代码。这里需要计算的一个非常重要的因素是签出或提取代码、配置实例并使其准备好投入工作所花费的时间。如果这个时间段非常大,那么使用这种策略进行自动缩放将是一个坏主意。由于预热时间与自动缩放和云观察的统计数据相结合将导致不同的现实[可能是/可能不是-但概率不是零]。这是你可以考虑经常烘烤一个新的AMI的时候。这将使您能够最大限度地减少实例为对抗流量而准备的时间

我建议测量并查看每种方法都是方便和经济的。它需要花费真正的金钱来拉下实例并使用AMI重新启动;然而,这是你需要做的权衡

然而,我回答了一个小小的开放式问题;因为。问题也不大

人们已经开始使用Chef、Ansible和Puppet来执行配置管理。这些工具增加了不同程度的自动化;您也希望探索该选项。类似的方法是使用Docker或其他容器。

考虑到任何(几乎)东西都可以通过AWS使用API实现自动化;它将再次落在手头的特定用例上

一开始,人们会建议安装一个基本的AMI,并配置必要的软件包,还有一个init脚本,它可以下载最新的源代码。这里需要计算的一个非常重要的因素是签出或提取代码、配置实例并使其准备好投入工作所花费的时间。如果这个时间段非常大,那么使用这种策略进行自动缩放将是一个坏主意。由于预热时间与自动缩放和云观察的统计数据相结合将导致不同的现实[可能是/可能不是-但概率不是零]。这是你可以考虑经常烘烤一个新的AMI的时候。这将使您能够最大限度地减少实例为对抗流量而准备的时间

我建议测量并查看每种方法都是方便和经济的。它需要花费真正的金钱来拉下实例并使用AMI重新启动;然而,这是你需要做的权衡

然而,我回答了一个小小的开放式问题;因为。问题也不大

人们已经开始使用Chef、Ansible和Puppet来执行配置管理。这些工具增加了不同程度的自动化;您也希望探索该选项。类似的方法是使用Docker或其他容器

a) 随时更新AMIs;意思是只要有 拉请求时,应移除(删除)并替换旧的AMI 用新的

您不应该将源代码存储在AMI中。这就带来了一场维护噩梦,以及您已经确定的自动缩放问题

b) 在AMIs上有一个启动脚本(cloudinit),它将拉动 首次启动时来自存储库的最新代码。(通过存储 实例上的存储库凭据并直接提取代码 来自git)

以下哪种方法更好?如果两者都不好,那么 实现这一目标的最佳实践是什么

第二项,在服务器启动时下载源代码,是正确的方法

其他选项包括使用Amazon CodeDeploy或其他一些部署服务来部署更新。部署服务还可用于将更新部署到现有实例,同时允许新实例在启动时自动下载最新代码

a) 随时更新AMIs;意思是只要有 拉请求时,应移除(删除)并替换旧的AMI 用新的

您不应该将源代码存储在AMI中。这就带来了一场维护噩梦,以及您已经确定的自动缩放问题

b) 在AMIs上有一个启动脚本(cloudinit),它将拉动 首次启动时来自存储库的最新代码。(通过存储 实例上的存储库凭据并直接提取代码 来自git)

以下哪种方法更好?如果两者都不好,那么 实现这一目标的最佳实践是什么

第二项,服务器启动时下载源代码,是cor