boto3でEC2インスタンスの一覧表示とスタート/ストップ

前々からコンソールで作りたいと思っていたec2インスタンスの制御をboto3を使って作成してみました。

import sys
import boto3

ACCESS_KEY = 'アクセスキー'
SECRET_KEY = 'シークレットアクセスキー'
REGION_NAME = 'ap-northeast-1'

def get_ec2_client(region = REGION_NAME):
    '''ec2クライアントの作成.'''
    ec2 = boto3.session.Session(
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY).client('ec2', region)
    return ec2

def list_ec2_servers():
    '''ec2インスタンス一覧表示.'''
    ec2 = get_ec2_client()
    instances = ec2.describe_instances()
    instance_list = []
    for reservations in instances['Reservations']:
        for instance in reservations['Instances']:
            tags = parse_keyvalue_sets(instance['Tags'])
            state = instance['State']['Name']
            print(instance['InstanceId'] + "\t" + tags['Name'] + "\t" + state)

def parse_keyvalue_sets(tags):
    '''Tagsリストのパーサ.'''
    result = {}
    for tag in tags:
        key = tag['Key']
        val = tag['Value']
        result[key] = val
    return result

def shutdown_ec2_server(server):
    '''インスタンスのストップ.'''
    ec2 = get_ec2_client()
    print('stop ... ' + server)
    if (server == 'all'):
        instances = ec2.describe_instances()
        instance_list = []
        for reservations in instances['Reservations']:
            for instance in reservations['Instances']:
                instance_list.append(instance['InstanceId'])
        ec2.stop_instances(InstanceIds=instance_list)
    else:
        ec2.stop_instances(InstanceIds=[server])

def start_ec2_server(server):
    '''インスタンスの起動.'''
    print('start ... ' + server)
    ec2 = get_ec2_client()
    ec2.start_instances(InstanceIds=[server])

def parse_params():
    '''コマンドライン引数の処理.'''
    result = {}
    args = sys.argv
    if (len(args) < 2):
        return False

    action = ""
    if (args[1] != ""):
        action = args[1]

    if (action == 'list' or action == 'up' or action == 'down'):
        result['action'] = action
    else:
        print('エラー:実行できないアクションです')
        return False

    if ((action == 'up' or action == 'down') and len(args) < 3): print('エラー:引数が足りません') return False if (len(args) > 2):
        result['target'] = args[2]

    return result

def show_usege():
    print('Usage:')
    print('python server.py list : 設定されたキーで見れるサーバ一覧')
    print('python server.py up [server] : サーバ起動')
    print('python server.py down [server] : サーバ停止')
    print('python server.py down all : 全サーバ停止')
    pass

params = parse_params()
if (params == False):
    show_usege()
    exit()

if (params['action'] == 'list'):
    list_ec2_servers()
elif (params['action'] == 'up'):
    start_ec2_server(params['target'])
elif (params['action'] == 'down'):
    shutdown_ec2_server(params['target'])

自分で使う用ということで、エラー処理などはちゃんと実装していませんが、、アクセスキーとシークレットアクセスキーを取得したものに変更すれば動作するようになると思います。