【问题标题】:Autoscaling EC2: Launch Webserver on Spun-up Instance自动缩放 EC2:在启动实例上启动 Web 服务器
【发布时间】:2016-05-13 06:36:17
【问题描述】:

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

我创建了一个安装了我的 Web 服务器的 (Ubuntu) EC2 实例的 AMI,并将此 AMI 用作我的 Autoscaling 组的启动配置。

但是当 Autoscaling 决定启动一个新实例时,我应该如何在该实例上启动我的网络服务器。我是否应该编写一些启动脚本或从 Autoscaling 启动新启动实例的进程的最佳实践是什么?

【问题讨论】:

  • 需要将 AMI 配置为在启动时以某种方式启动 Web 服务器。完成的方式会因您使用的 Web 服务器而异。
  • @Mark B 所以你提倡使用启动脚本,类似于将网络服务器添加到 /etc/rc.local 。在 Linux 中?
  • 是的,一般来说,我将任何需要的服务(例如 Web 服务器)配置为在引导时通过 /etc/rc.local 或 /etc/init.d 启动,或者任何适合该风格的东西我正在使用的 Linux。

标签: amazon-web-services amazon-ec2 boot autoscaling


【解决方案1】:

当我将应用程序(PostgreSQL、Elasticsearch 等)部署到 EC2 实例时,我通常这样做是为了能够重复该过程。所以我的第一步是创建一个初始部署脚本,它将尽可能多地完成安装和设置过程,而不需要知道 IP 地址、主机名、内存量、处理器数量等。基本上,尽可能多我可以不需要知道任何可以从一个实例更改为下一个实例或关闭/重新启动时的内容。

一旦稳定了,我就创建它的 AMI。

然后,我创建一个在启动配置中使用的初始化脚本,并让它在之前创建的 AMI 上执行该脚本。

这适用于高度配置的应用程序。如果您只是使用默认设置(例如 IP 地址 = 0.0.0.0),那么我只需设置“sudo update-rc.d defaults 95 10”,以便它在启动时运行。

然后创建 AMI。当您从该 AMI 创建新实例时,Web 服务器应默认启动。如果没有,我会看看你是否真的将 init.d 脚本设置为这样做。

从 AMI 启动新实例应该与启动之前关闭的实例没有什么不同。

顺便说一句,作为创建这些脚本时的实践,我还做了一些事情来让事情变得更干净:

1) 在单独的 bash 脚本中创建模块(例如创建用户帐户、设置环境变量等)以实现可重复性

2) 每个部署脚本都从下载和安装 AWS CLI 开始

3) 每个 EC2 实例都使用具有 S3 读取访问权限、IAM SSH 描述权限、EC2 地址分配/关联等的 IAM 角色启动。

4) 将所有脚本加载到 S3 上,然后让部署/初始化脚本下载必要的 bash 模块脚本,chmod +x 并执行它们。它与我可以在不过度使用的情况下获得的 OOP 一样接近,但它创建了非常干净的 bash 脚本。大多数情况下,*启动/初始化脚本只是从 S3 下载单个脚本并执行它们。

5) 我获取所有模块,而不是简单地执行它们。这样 bash 共享变量。

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

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

希望对您有所帮助...

【讨论】:

    最近更新 更多