Quantcast
Channel: 技術 –サーバーワークスエンジニアブログ
Viewing all articles
Browse latest Browse all 1210

EBSにタグをつけるスクリプトを作った

$
0
0

アソシエイト3冠の渡辺です。
EBSボリュームにタグをつけるスクリプトを作成しました。

仕様

  • コマンドライン引数にEC2のインスタンスIDを取る(複数可)
  • EC2インスタンスのタグをそのままアタッチされているEBSボリュームにつける
  • EBSボリュームが複数ある時は全てのEBSボリュームにつける

作成した理由

大量のEC2インスタンスに大量のタグをつける案件に遭遇してしまいました。。。
しかも、EBSにもつける必要があります。

サーバーワークスの構築はCloudFormationが主流です。
しかし、残念ながらCloudFormationはEBSのタグには対応していないようです。

自動的に作成されたタグを含むすべてのスタックレベルのタグは、AWS CloudFormation がサポートするリソースに反映されます。現在のところ、タグはブロックデバイスマッピングから作成された Amazon EBS ボリュームには反映されません。
AWS CloudFormation Resource Tags タイプ

ちょっと聞いた感じ、クリックだけで乗り切るには危険な量でした。

スクリプト

import boto3
import sys

def main(argv):
    ec2 = boto3.resource('ec2')
    for instanceid in argv:
         volumes = []
         instance = ec2.Instance(instanceid)
         tags = dict([(tag['Key'], tag['Value']) for tag in instance.tags])

         for device in instance.block_device_mappings:
             volumeid = device['Ebs']['VolumeId']
             volumes.append(ec2.Volume(volumeid))

         for volume in volumes:
             for key, value in tags.items():
                  volume.create_tags(
                      Tags=[
                          {
                              'Key': key,
                              'Value': value
                          },
                      ]
                  )

if __name__ == "__main__":
    main(sys.argv[1:])

 

使い方

EC2のインスタンスIDを引数にとってスパッと実行してください。

python create_tags_ebs.py i-xxxxxxxxxxxxxxxxx i-yyyyyyyyyyyyyyyyyyy i-zzzzzzzzzzzzzzzzzz

 


Viewing all articles
Browse latest Browse all 1210

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>