神剑山庄资源网 Design By www.hcban.com

脚本要实现的功能:输入instance id

1:将所有的volume take snapshot

2:  获取public ip 并登陆机器执行 ps 命令记录patch前进程状态已经端口状态

3:获取机器所在的elb

4:  从elb中移除当前机器

5:检查snapshots是否完成

6:snapshots完成后patching

7:  patching完成后将instance加回到elb

#!/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 = ec2.Instance(instanceId)
  volumes = instance.volumes.all()
  for volume in volumes:
    print("Volume attached to this instance is :" + volume.id)
    result.append(volume.id)
  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 = ec2.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 > disk.listen"')
  print('ssh -t ' + public_ip + ' "sudo ps auxf > disk.ps"')
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 = ec2.Snapshot(snaps)
  snapshot.load()
  print(snapshot.state)
  return snapshot.state
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")
    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:
      time.sleep(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 = boto3.resource('ec2', region_name='us-east-1')
  client = boto3.client('ec2', region_name='us-east-1')
  client_elb = boto3.client('elb', region_name='us-east-1')
  main(ec2, client, 'i-abcasdfa111122', client_elb)

注意,本脚本并未包含链接机器并执行命令的部分,仅仅是打印出命令,需要手动执行 take_screenshotOfProcess 已经patch的命令,此部分也参考之前的文章,完全自动化,不需要手动执行

另外Patch命令脚本中并未给出

总结

标签:
aws,boto3,python,pach,AWS,Python,boto3

神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网 免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com

评论“aws 通过boto3 python脚本打pach的实现方法”

暂无aws 通过boto3 python脚本打pach的实现方法的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。