我似乎不理解AWS Autoscaling的一个中心点:
我创建了一个安装了我的Web服务器的(Ubuntu)EC2实例的AMI,我使用这个AMI作为我的Autoscaling组的启动配置。
但是当Autoscaling决定启动一个新实例时,我该如何在该实例上启动我的网络服务器。我是否应该编写一些启动脚本或者从Autoscaling开始新的spun-up实例的过程是什么最佳实践?
答案 0 :(得分:3)
当我将应用程序(PostgreSQL,Elasticsearch,无论如何)部署到EC2实例时,我通常会这样做以便能够重复该过程。所以我的第一步是创建一个初始部署脚本,该脚本将尽可能多地执行安装和设置过程,而无需知道IP地址,主机名,内存量,处理器数量等。基本上,尽可能多我可以不需要知道任何可以从一个实例更改为下一个实例或关闭/重启的内容。
一旦稳定,我就会创建它的AMI。
然后我创建了一个初始化脚本,我在启动配置中使用它并让它在先前创建的AMI上执行该脚本。
这适用于高度配置的应用程序。如果你只是使用默认设置(例如IP地址= 0.0.0.0),那么我只需设置'sudo update-rc.d<>默认值为95 10',以便它在启动时运行。
然后创建AMI。从该AMI创建新实例时,Web服务器应默认启动。如果没有,我会看看你是否确实设置了init.d脚本。
从AMI启动新实例应该与启动先前关闭的实例没什么不同。
顺便说一句,作为创建这些脚本的一个实践问题,我也做了一些事情让事情变得更加清洁:
1)在单独的bash脚本中创建模块(例如创建用户帐户,设置环境变量等)以获得可重复性
2)每个部署脚本首先下载并安装AWS CLI
3)每个EC2实例都启动一个具有S3读访问权限的IAM角色,IAM SSH描述权限,EC2地址分配/关联等。
4)将所有脚本加载到S3上,然后让部署/初始化脚本下载必要的bash模块脚本chmod + x并执行它们。它接近OOP我可以得到而不会过度,但它创建了非常干净的bash脚本。大多数顶级启动/初始化脚本只是从S3下载单个脚本并执行它们。
5)我采购所有模块而不是简单地执行它们。这样bash共享变量。
6)使linux帐户创建成为初始化脚本(不是AMI)的一部分。使用CLI,您可以查询用户,grep查询从AWS请求的公共SSH密钥,创建他们的帐户并准备好让他们自动登录。
这样,当您需要更改某些内容(即更改应用程序的版本,更改配置等)时,您只需修改模块脚本,如果它更改了AMI,则重新启动并重新启动AMI。否则,如果只是更改实例专用,那么只需使用新的初始化脚本启动AMI。
希望有帮助...