我正在尝试在Amazon Cloud上使用Capistrano建立远程部署。
这个想法:我通过SSH连接到自动扩展组的随机机器,我想从那里部署到所有其他机器。为了做到这一点,我需要获取其他实例的名称,以便我可以定义我要部署到的Capistrano服务器
我已经安装了Ruby sdk,但我找不到检索实例名称的最佳方法(利用我在VPN上的优势)。
我实际上有两种可能性:通过标签找到实例(我用“生产”标记它们)或者通过自动缩放组的ID找到。
我不想像厨师等那样使用其他“大枪”。
答案 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