首页 文章

自动调节EC2:在Spun-up实例上启动Web服务器

提问于
浏览
3

我似乎不理解AWS Autoscaling的一个中心点:

我创建了一个安装了我的Web服务器的(Ubuntu)EC2实例的AMI,我使用这个AMI作为我的Autoscaling组的启动配置 .

但是当Autoscaling决定启动一个新实例时,我该如何在该实例上启动我的web服务器 . 我是否应该编写一些启动脚本或者从Autoscaling开始新的spun-up实例的过程是什么最佳实践?

1 回答

  • 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实例都启动时具有IAM角色,该角色具有S3读访问权限,IAM SSH描述权限,EC2地址分配/关联等 .

    4)将所有脚本加载到S3上,然后让部署/初始化脚本下载必要的bash模块脚本chmod x并执行它们 . 它接近OOP我可以得到而不会过度,但它创建了非常干净的bash脚本 . 顶级启动/初始化脚本大部分只是从S3下载单个脚本并执行它们 .

    5)我采购所有模块而不是简单地执行它们 . 这样bash共享变量 .

    6)使linux帐户创建成为初始化脚本(而不是AMI)的一部分 . 使用CLI,您可以查询用户,grep查询从AWS请求的公共SSH密钥,创建他们的帐户并准备好让他们自动登录 .

    这样,当您需要更改某些内容(即更改应用程序的版本,更改配置等)时,您只需修改模块脚本,如果它更改了AMI,则重新启动并重新AMI . 否则,如果它只是更改实例 - 而不是仅使用新的初始化脚本启动AMI .

    希望有帮助......

相关问题