目的
EC2 のタグを操作したいpython を使いたいので前回使った AWS cli ではなくて boto3 を使う。
やってみた
コマンドライン引数でインスタンスのIDや設定・削除するタグのKey、Valueを設定したい!
tag.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import boto3
import sys
from boto3.session import Session
def ec2_client():
session = Session(profile_name='default')
client = session.client('ec2')
# profileの指定が必要ない場合
# client = boto3.client('ec2')
return client
def show_tag(instances=[]):
response = ec2_client().describe_tags(Filters=[{'Name': 'resource-id','Values': instances}])
print(response)
def create_tag(instances,key,value):
response = ec2_client().create_tags(Resources=instances,Tags=[{'Key': key,'Value': value}])
print(response)
def delete_tag(instances,key,value):
response = ec2_client().delete_tags(Resources=instances,Tags=[{'Key': key,'Value': value}])
print(response)
if __name__ == '__main__':
args = sys.argv
app_name = args.pop(0)
if len(args) != 4 :
print('ex)' + app_name + ' show|create|delete instance_id key value')
exit()
command = args.pop(0)
instances = args.pop(0).split(',')
key = args.pop(0)
value = args.pop(0)
print('command:' + command )
print('instances:' + str(instances))
print('key:' + key)
print('value:' + value)
if command == 'show':
show_tag(instances)
elif command == 'create':
create_tag(instances,key,value)
elif command == 'delete':
delete_tag(instances,key,value)
else:
print('first argument must be "show" , "create" or "delete"')
使い方
# 指定した id のインスタンスに設定されているタグを表示する key と val は使用されないが設定が必要(手抜き)
python tag.py show i-xxxxxxxx,i-yyyyyyyyy key val
# 指定した id のインスタンスに key , valu を設定する。既に key が存在する場合は上書きされる。
python tag.py create i-xxxxxxxx,i-yyyyyyyyy key val
# 指定した id のインスタンスに設定されている key , val を削除する。
python tag.py delete i-xxxxxxxx,i-yyyyyyyyy key val
調べて参考にしたサイト(感謝)
boto3 を使ったいい感じのサンプル
python コマンドライン引数
boto3 ドキュメント
describe_tags は ページングとかいろいろできるっぽい