如何访问aws ec2标签

时间:2016-09-01 16:14:31

标签: ruby amazon-ec2 aws-sdk

我试图找出访问AWS标记的方法,然后在带有标记的实例上运行一些代码。

如何使用AWS SDK for Ruby - 版本2访问实例标记的每个键和值?

#!/usr/bin/ruby
require 'rubygems'
require 'aws-sdk'
require 'yaml'
Aws.config.update({
  region: region,
  credentials: Aws::Credentials.new(ENV_YML['access_key_id'], ENV_YML['secret_access_key'])
})

ec2 = Aws::EC2::Resource.new
ec2.instances.each do |instance|
  tags = instance.tags
  tags.each do |num|
    ### pseudo code
      puts tag owner # i want to get the value of tag owner
    if tag owner = "test" #then run on this tag if
      puts tag name #print the value of tag name
      #some code
    else 
      #some code
  end
end

当我做这样的事情时:

ec2.instances.each do |instance|
  tags = instance.tags
  tags.each do |num|
  puts num
  end
end

输出结果为:

#<struct Aws::EC2::Types::Tag key="Name", value="test.ec2.blabla.int">

但我希望能够通过调用密钥(名称)或其他任何东西来获取值。

请帮忙,

感谢。

2 个答案:

答案 0 :(得分:1)

instance.tags返回Aws::EC2::Types::Tag个对象的数组。 该课程的文档是: http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Types/Tag.html

访问标记值的正确方法是执行tag.value,如下所示:

ec2.instances.each do |instance|
  tags = instance.tags
  tags.each do |tag|
    puts tag.value
  end
end

如果你想要特定标签的价值,让我们说出Name标签,你可以这样做:

instance.tags.select{|tag| tag.key == "Name"}.first.try(:value)

如果标签不存在,它将返回nil

答案 1 :(得分:0)

你可以使用facter gem:

ec2.instances.each do |instance|
  tag_name = Facter::Util::Resolution.exec("ec2-describe-tags --region eu-west-1 --filter \"resource-id=#{instance.id}\" --filter key=Name | cut -f 5")