AWS - 获取与Capistrano一起使用的自动缩放名称

时间:2016-05-09 10:49:35

标签: ruby amazon-web-services capistrano3

我正在尝试在Amazon Cloud上使用Capistrano建立远程部署。

这个想法:我通过SSH连接到自动扩展组的随机机器,我想从那里部署到所有其他机器。为了做到这一点,我需要获取其他实例的名称,以便我可以定义我要部署到的Capistrano服务器

我已经安装了Ruby sdk,但我找不到检索实例名称的最佳方法(利用我在VPN上的优势)。

我实际上有两种可能性:通过标签找到实例(我用“生产”标记它们)或者通过自动缩放组的ID找到。

我不想像厨师等那样使用其他“大枪”。

1 个答案:

答案 0 :(得分:0)

阅读了太多文档后

两种策略:通过自动缩放组或按标签检索dns名称

按标签

ec2 = Aws::EC2::Client.new

instances_tagged = ec2.describe_instances(
  dry_run: false,
  filters: [
    {
      name: 'tag:environment',
      values: ['production'],
    },
    {
      name: 'tag:stack',
      values: ['rails'],
    }
  ],
)

dns_tagged = instances_tagged.reservations[0].instances.map(&:private_dns_name)

通过自动缩放组

as = Aws::AutoScaling::Client.new
instances_of_as =  as.describe_auto_scaling_groups(
  auto_scaling_group_names: ['Autoscaling-Group-Name'],
  max_records: 1,
).auto_scaling_groups[0].instances

if instances_of_as.empty?
  autoscaling_dns = []
else 
  instances_ids = instances_of_as.map(&:instance_id)
  autoscaling_dns = instance_ids.map do |instance_id|
    ec2.instances[instance_id].private_dns_name
  end
end