如何确定自动缩放组中的EC2实例索引/位置?

我正在开发一些自动化脚本来引导我的应用程序,并将使用AWS中的自动缩放组来为我的应用程序启动/停止EC2实例。

我需要能够为遵循模式的机器重新创build一个一致的名称: MYAPP001MYAPP002MYAPP003

问题

有没有办法在用户数据引导阶段查询元数据,以确定刚刚出现的台机器是002组?

如果我能确定这一点,那么我可以将机器重命名为MYAPP002

情景来帮助解释

设想一个第三方服务,希望机器被命名为MYAPP001MYAPP002MYAPP003 。 在此软件中,机器可以脱机并稍后以不同的IP地址重新联机。 但是, 不能让两台不同的计算机同时使用相同的主机名与此软件进行通信。

你确定这个信息甚至可以通过API获得吗? 我能想到的最好的办法是查询所有正在运行的实例的启动时间,然后确定哪个是“最新”的。

我不得不说,如果你依赖自动调节组中的任何特定于机器的状态,那么你做错了。 您的部署方法和应用程序应该被构build,使得所有的ASG实例完全相同,甚至是它们的主机名。 出于某种技术原因需要分配一个特定的主机名回来困扰你。

把这看作是重构事物的一个机会,你不需要这样做。 构build您的应用程序,以便ASG可以根据需要创build和销毁实例,而无需担心所谓的每个主机。


作为一个思想实验,让我们来思考这个问题。 假设你用三个实例实例化一个ASG:ASG [01,02,03]。 在将来的某个时候,ASG02有问题并被终止。 ASG创build一个新的实例来取代它,现在是ASG04。 所以现在你有ASG [01,03,04]。 那是你的意图吗? 你为什么需要这些信息? 如上所述,如果你正在做的事情,你不需要这个信息,或不应该。 如果你只是为了人类可读的目的而做这件事,或者为了更好地跟踪事情,就放手让它去信任ASG去做。

好吧,它花了一些谷歌search,然后在AWS中旋转一些实例,进行远程处理和testing。 这是(非常简单的)回答感谢AWS:

http://169.254.169.254/latest/meta-data/ami-launch-index

而已。 这将返回启动顺序的“零基”索引。 这里是来自亚马逊的文档,他们提供了一个很好的用例,为什么你会需要这个:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#AMI-launch-index-examples

这里是我用来获取我的机器名称的PowerShell脚本:

 $index = (Invoke-WebRequest "http://169.254.169.254/latest/meta-data/ami-launch-index").Content $name = "MYAPP" + ([Int]::Parse($index) + 1).ToString("000") 

可悲的是,这并不是非常成功,因为我的汽车规模小组创build了两个实例,都表示他们是“索引#0” – 我会继续努力,并用我的发现来调整答案。