如何访问aws ec2标签

how to access aws ec2 tags

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

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

#!/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">

但我希望能够通过调用键(名称)或其他方式仅获取值。

请帮忙,

谢谢。

你可以使用 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")

instance.tags return 是一个 Aws::EC2::Types::Tag 对象数组。 class 的文档是: 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)

如果标签不存在,它将return nil