boto3でEC2.InstanceオブジェクトからNameタグを取得する方法[Python]

こんにちは、臼田です。

皆さんPython書いてますか?

boto3で書いてて、ぐぐってもあんまりいい情報がなかったのでNameタグを取得する方法を共有します。

スクリプト

# -*- coding: utf-8 -*-

import boto3

ec2 = boto3.resource('ec2')
instance = ec2.Instance(id='i-xxxxxxxx')
name_tag = [x['Value'] for x in instance.tags if x['Key'] == 'Name']
name = name_tag[0] if len(name_tag) else ''
print(name)

Python 3.6で動作しない問題を修正しました。2.7, 3.6で動作を確認しています。ご指摘いただいたしんさかさん、ありがとうございます!

ec2.Instance.tagsで該当インスタンスのタグ一覧を取得して、filterで"key": "Name"のdictを取得します。

filter結果はlistになっているので[0]から取り出し、もしNameタグがなければfilter結果が空なので''を返します。

正直これが一番いいかわかりません。

他にもっといい方法があったら教えてほしいです。

  • しんさか

    そのまま実行してみましたが、len(name_tag)でエラーになるようでした。(Python3.6です)
    filterを使わない記述方法だと下記のようなパターンがあり得るかなと思います。
    (特別効率的とかではありませんが)
    https://qiita.com/shinsaka/items/299159968d7226c9bdb9

    • usuda.keisuke

      ご指摘ありがとうございます!参考にさせていただき修正しました!

      • しんさか

        おお、恐縮です!ブログがんばってくださいー!

        • usuda.keisuke

          m(_ _)m