自动缩放组主机名和 cloud-init

old*_*ule 5 amazon-web-services autoscaling

从简短的搜索来看 - 似乎没有一种方法可以为自动缩放组的成员设置动态主机名。该功能存在于 OpenStack Heat 中,使用index- 但我找不到任何关于使用 AWS 自动缩放组这样做的信息。

例如,使用 OpenStack Heat - 节点会根据自动缩放组中的节点数量自动获得一个主机名:

  instance_group:
    type: OS::Heat::ResourceGroup
    properties:
      count: { get_param: instance_number }
      resource_def:
        type: OS::Nova::Server
        properties:
          name: instance%index%
Run Code Online (Sandbox Code Playgroud)

如果我在自动缩放组中有 3 个实例,会给我以下内容

instance0
instance1
instance2
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法可以与 AWS 自动扩展组启动配置和/或 cloud-init 一起使用?

dan*_*nny 1

如果您坚持一些并非不合理的约定,我找到了一个效果很好的解决方案。

我启动的每种 EC2 实例,无论自动扩展组中有 N 个此类服务器还是独立实例,我都会为其创建一个实例配置文件。无论如何,根据我的经验,这是一个好主意,即使您不需要实例来访问任何 aws 服务,拥有具有空权限的角色/配置文件也没有什么坏处,它使得授予其访问权限变得更加容易s3 存储桶或将来需要的其他任何东西。

然后,在 user_data 脚本(或者您的配置管理工具,如果您使用的是 puppet 或 ansible 等)中启动服务器时,我从元数据服务查询实例配置文件名称,并附加每个服务器特有的内容(例如私有 ip)并进行设置作为主机名。

您最终会得到这样的主机名webserver-10-0-12-58:人类可读且对每个服务器来说都是唯一的。

(与递增整数相比,这种方法的缺点是它们不可预测,并且不能用于为单个服务器设置独特的行为。例如,如果您有 webserver-{0-8} 并且需要运行某些进程在一台服务器上,您可以使用 if hostname == webserver-0 then run_thing 这样的逻辑。)

  • 那么脚本是什么? (2认同)