2016-09-01 6 views
1

AWSタグへのアクセス方法を理解し、そのタグでインスタンス上のコードを実行しようとしています。aws ec2タグへのアクセス方法

AWS SDK for Ruby - Version 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 

私はこのような何かするとき:

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

しかし、私はキー(名前)を呼び出すことによってのみ値を取得できるようにしたい:

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

を出力しましたまたは何でも。

助けてください、

ありがとうございました。

答えて

0

あなたはfacter宝石を使用することができます

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") 
1

instance.tagsAws::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 

をそして、あなたは、特定のタグの値が欲しい場合、あなたはこのようにそれを行うことができます、の名前タグを言わせて:

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

タグがEXIていない場合にはnilを返します。 sts。

+0

これは素晴らしい答えですが、私は得た: NoMethodError:未定義のメソッド '#は」してみてください:のhttp:// 答えはこれを実装することでしたozmm.org/posts/try.html –

関連する問題