背景介紹:目前項(xiàng)目中使用了大量的AWS EC2 Instances作為服務(wù)器,在自動(dòng)化運(yùn)維方面,我們之前一直使用的是AWS CLI命令行工具,然后在Shell腳本中調(diào)用.
最近我想通過(guò)腳本實(shí)現(xiàn)一個(gè)“Clone”的功能,模擬Web Console上的“Launch More Like This”來(lái)創(chuàng)建Instance,但在Shell腳本中實(shí)現(xiàn)起來(lái)感覺(jué)不太舒服,于是就直接利用Python的boto庫(kù)寫了一個(gè),在此分享給大家.
具體內(nèi)容:
腳本地址:https://github.com/mcsrainbow/python-demos/blob/master/demos/awscli.py
相關(guān)示例:溫馨提示:我的Blog頁(yè)面默認(rèn)沒(méi)有采用寬屏模式,如果覺(jué)得下面的代碼不太美觀,可以點(diǎn)擊右上角的“<>”切換到寬屏模式,代碼如下:
- $ ./awscli.py -h
 - usage: awscli.py [-h] (--create | --clone | --terminate) --region REGION
 - [--instance_name INSTANCE_NAME] [--image_id IMAGE_ID]
 - [--instance_type INSTANCE_TYPE] [--key_name KEY_NAME]
 - [--security_group_ids SECURITY_GROUP_IDS]
 - [--subnet_id SUBNET_ID]
 - [--src_instance_name SRC_INSTANCE_NAME]
 - [--dest_instance_name DEST_INSTANCE_NAME]
 - [--private_ip_address PRIVATE_IP_ADDRESS]
 - [--instance_id INSTANCE_ID] [--volume_size VOLUME_SIZE]
 - [--volume_type {standard,io1,gp2}]
 - [--volume_zone VOLUME_ZONE] [--volume_iops VOLUME_IOPS]
 - [--volume_delete_on_termination]
 - [--load_balancer_name LOAD_BALANCER_NAME]
 - [--quick]
 - examples:
 - ./awscli.py --create --region us-west-1 --instance_name idc1-server2
 - --image_id ami-30f01234 --instance_type t1.micro
 - --key_name idc1-keypair1 --security_group_ids sg-eaf01234f
 - --subnet_id subnet-6d901234
 - ./awscli.py --create --region us-west-1 --instance_name idc1-server3
 - --image_id ami-30f01234 --instance_type t1.micro
 - --key_name idc1-keypair1 --security_group_ids sg-eaf01234f
 - --subnet_id subnet-6d901234 --volume_size 10 --volume_type gp2
 - --volume_zone us-west-1a --volume_delete_on_termination
 - --load_balancer_name idc1-elb1 --private_ip_address 172.16.2.23
 - ./awscli.py --clone --region us-west-1 --src_instance_name idc1-server1
 - --dest_instance_name idc1-server2
 - ./awscli.py --clone --region us-west-1 --src_instance_name idc1-server1
 - --dest_instance_name idc1-server3 --private_ip_address 172.16.2.23
 - ./awscli.py --terminate --region us-west-1 --instance_name idc1-server3
 - ./awscli.py --terminate --region us-west-1 --instance_id i-01234abc
 - ./awscli.py --terminate --region us-west-1 --instance_id i-01234abc --quick
 - ...
 - optional arguments:
 - -h, --help show this help message and exit
 - --create create instance
 - --clone clone instance
 - --terminate terminate instance
 - --region REGION
 - --instance_name INSTANCE_NAME
 - --image_id IMAGE_ID
 - --instance_type INSTANCE_TYPE
 - --key_name KEY_NAME
 - --security_group_ids SECURITY_GROUP_IDS
 - --subnet_id SUBNET_ID
 - --src_instance_name SRC_INSTANCE_NAME
 - --dest_instance_name DEST_INSTANCE_NAME
 - --private_ip_address PRIVATE_IP_ADDRESS
 - --instance_id INSTANCE_ID
 - --volume_size VOLUME_SIZE
 - in GiB
 - --volume_type {standard,io1,gp2}
 - --volume_zone VOLUME_ZONE
 - --volume_iops VOLUME_IOPS
 - --volume_delete_on_termination
 - delete volumes on termination
 - --load_balancer_name LOAD_BALANCER_NAME
 - --quick no wait on termination
 - $ ./awscli.py --create --region us-west-1 --instance_name idc1-server1 --image_id ami-30f01234
 - --instance_type t1.micro --key_name idc1-keypair1 --security_group_ids sg-eaf01234f
 - --subnet_id subnet-6d901234 --volume_size 10 --volume_type gp2 --volume_zone us-west-1a
 - --volume_delete_on_termination --load_balancer_name idc1-elb1 --private_ip_address 172.16.2.21
 - 1. Launching instance: idc1-server1
 - 2. Creating tag as instance name: {"Name": idc1-server1}
 - Instance state: pending
 - Instance state: running
 - 3. Creating secondary volume for instance: idc1-server1 as gp2 10G
 - Volume status: available
 - 4. Attaching volume: vol-4ba6a54c to instance: idc1-server1 as device: /dev/sdf
 - 5. Adding instance: idc1-server1 to ELB: idc1-elb1
 - $ ./awscli.py --clone --region us-west-1 --src_instance_name idc1-server1 --dest_instance_name idc1-server2
 - 1. Launching instance: idc1-server2
 - 2. Creating tag as instance name: {"Name": idc1-server2}
 - Instance state: pending
 - Instance state: running
 - 3. Creating secondary volume for instance: idc1-server2 as gp2 10G
 - Volume status: available
 - 4. Attaching volume: vol-5b61635c to instance: idc1-server2 as device: /dev/sdf
 - 5. Adding instance: idc1-server2 to ELB: idc1-elb1
 - $ ./awscli.py --terminate --region us-west-1 --instance_name idc1-server2 //Vevb.com
 - Terminating instance: idc1-server2 id: i-86976d62
 - Instance state: shutting-down
 - Instance state: shutting-down
 - Instance state: terminated
 
新聞熱點(diǎn)
疑難解答
圖片精選