Windows 自动缩放启动后来自 AMI 的 EC2 初始配置

Windows EC2 initial config from AMI after autoscale boot up

我正在考虑自动缩放亚马逊提供的现成 Windows AMI(与自定义 AMI 相对)。

在新实例启动后(以及之前!!它被添加到负载均衡器),我想注入一些初始化任务并在新实例上 运行(比如,运行 一个 powershell脚本)。

其次,负载均衡器需要知道仅在此启动脚本完成后才开始向新的 EC2 实例发送请求(也不确定如何执行此操作)。

After a new instance gets booted (and before!! it gets added to load balancer), I want some initialization tasks injected and ran on the new instance (say, running a powershell script).

看看userdata。总而言之,您可以在实例启动时将实例配置为 运行 一个小脚本,可用于引导。

一种常见的做法是在用户数据中包含足够的代码以从中央位置(例如 Git 存储库或安全 S3 存储桶)下载变量脚本,然后执行它 - 这样你就可以版本和更改执行工作的实际脚本,而无需更新用户数据。

Secondly, the loadbalancer needs to know to only start sending requests to the new EC2 instance after this startup script has finished (not sure how to do this either).

负载均衡器倾向于对指定端口的实例执行一种 ping 请求,针对指定的文件来确定它是否健康。我不确定您的 Windows AMI 是做什么用的,但它应该以相同的方式工作。您只需要将它指向一个文件,该文件只有在您的引导完成后才可用 - 即,您的引导脚本可能会在您系统的某处创建一个 health.txt 文件,其内容为 "OK",并且您的负载平衡器可以 ping 该文件直到它存在 -> 然后它是健康的。

如果您采用上述想法,请确保 health.txt 不存在于您用来旋转 auto-scaled 实例的 AMI 中,否则它们将使用该文件创建到位并且可能会在您的 userdata/bootstrapping 脚本完成之前注册误报。

例如,对于 LAMP 堆栈,量化它相当容易,因为示例用户数据脚本可能会执行以下操作:

  1. 克隆 Git 存储库
  2. 清理缓存
  3. 设置一些 file/folder 权限
  4. 在 Apache 网络根目录中创建 "health.html",内容为 "OK",因此当被 ping
  5. 时它将 return 200 header
  6. 启动 Apache

在此示例中,负载平衡器将每隔一段时间 ping 服务器的 /health.html 文件,直到 return 为 200 header,这只会在上述第 5 步完成后发生.

我相信您一定能够找到适合您的 Windows AMI 的类似方法。

您可以 运行 通过 UserData 部分中的 powershell 初始化任务 <powershell>./yourscript</powershell> 而且,假设您使用的是 ELB,您可以将 'ping target' 设置为指向一个文件,该文件是在用户数据脚本成功执行后创建的。在此之前,ELB 不会将流量发送到您的 EC2 实例。

Autoscaling 会自动为您添加到 ELB:http://docs.aws.amazon.com/autoscaling/latest/userguide/autoscaling-load-balancer.html