我试图找出访问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">
但我希望能够通过调用密钥(名称)或其他任何东西来获取值。
请帮忙,
感谢。
答案 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")