Script to accomplish: enter instance id
1: Take snapshot of all the volume
2: Get the public ip and log in to the machine and execute the ps command to record the state of the process and the port status before the patch.
3: Get the elb where the machine is located
4: Remove current machine from elb
5: Check if snapshots are complete
6: Snapshots finished after patching
7: Add the instance back to elb after patching is complete.
#!/usr/bin/python # vim: expandtab:tabstop=4:shiftwidth=4 ''' script to get ecr info ''' # Reason: disable invalid-name because pylint does not like our naming convention # pylint: disable=invalid-name import time import boto3 import sys import argparse def get_volume(ec2, instanceId): result = [] instance = (instanceId) volumes = () for volume in volumes: print("Volume attached to this instance is :" + ) () return result def take_snapByInstance(client, instanceId): response = client.create_snapshots( Description='string', InstanceSpecification={ 'InstanceId': instanceId, 'ExcludeBootVolume': False }, TagSpecifications=[ { 'ResourceType': 'snapshot', 'Tags': [ { 'Key': 'orginName', 'Value': 'patch backup'+ instanceId }, ] }, ], DryRun=False, CopyTagsFromSource='volume' ) print("Creating new snapshots for instances:" + response['Snapshots'][0]['SnapshotId']) return response['Snapshots'][0]['SnapshotId'] def get_publicIp(ec2, instanceId): instance = (instanceId) publicIp = instance.public_ip_address return publicIp def take_screenshotOfProcess(public_ip): print("Please run this command on your local machine") print('ssh -t ' + public_ip + ' "sudo netstat -tnpl > "') print('ssh -t ' + public_ip + ' "sudo ps auxf > "') def get_elbInfo(client_elb, ec2, instanceId): bals = client_elb.describe_load_balancers() for elb in bals['LoadBalancerDescriptions']: #print('ELB DNS Name : ' + elb['DNSName']) #check if the elb is the elb of instance if instanceId in elb['Instances']: print("found elb " + elb['DNSName']) else: pass def remove_fromElb(client_elb, elb, instanceId): response = client_elb.deregister_instances_from_load_balancer( LoadBalancerName='elb', Instances=[ { 'InstanceId': instanceId }, ] ) def add_backElb(client_elb, elb, instanceId): response = client.register_instances_with_load_balancer( LoadBalancerName= elb, Instances=[ { 'InstanceId': instanceId }, ] ) def check_snapStatus(ec2, snaps): snapshot = (snaps) () print() return def main(ec2, client, instanceId, client_elb): print("going to paching instanceid: " + instanceId) #get volumes volumes = get_volume(ec2, instanceId) #get public ip public_ip = get_publicIp(ec2, instanceId) #take snapshot snaps = take_snapByInstance(client, instanceId) #take screenshot of procss and port take_screenshotOfProcess(public_ip) #get elb info elb = False #elb = get_elbInfo(client_elb, ec2, instanceId) #remove from elb if elb: ans_remove = input("Are you sure to remove the instance from the elb now? Yes/No") if ans_remove == 'Yes': #remove from instance remove_fromElb(client_elb, elb, instanceId) #check snapshot status snapshotStatus = '' check_snapStatus(ec2, snaps) print("checking staus of snapshots") while True: snapshotStatus = check_snapStatus(ec2, snaps) print(snapshotStatus) if snapshotStatus == 'completed': break else: (10) #paching paching_cmd = 'Your paching command' print(paching_cmd) #add to elb if elb: ans_add = input("please confirm the patching is over , input yes to continue") if ans_add == 'Yes': add_backElb(client_elb, elb, instanceId) if __name__ == "__main__": ec2 = ('ec2', region_name='us-east-1') client = ('ec2', region_name='us-east-1') client_elb = ('elb', region_name='us-east-1') main(ec2, client, 'i-abcasdfa111122', client_elb)
Note that this script does not include the part that links the machine and executes the commands, it simply prints out the commands, which need to be executed manuallytake_screenshotOfProcess
commands that have been patched, this section also references thePrevious postsThe program is fully automated and does not need to be performed manually
Also the Patch command script does not give
summarize
to this article on aws through the boto3 python script to play pach implementation method of the article is introduced to this, more related aws through the boto3 python script to play pach content please search my previous articles or continue to browse the following related articles I hope you will support me more in the future!