aws 通过boto3 python脚本打pach的实现方法


Posted in Python onMay 10, 2020

脚本要实现的功能:输入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? 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:
      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 通过boto3 python脚本打pach内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
对于Python装饰器使用的一些建议
Jun 03 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
tensorflow 限制显存大小的实现
Feb 03 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
python爬虫请求头设置代码
Jul 28 Python
python运行脚本文件的三种方法实例
Jun 25 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 #Python
基于python实现上传文件到OSS代码实例
May 09 #Python
使用python创建生成动态链接库dll的方法
May 09 #Python
浅析python 动态库m.so.1.0错误问题
May 09 #Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 #Python
Python发送邮件封装实现过程详解
May 09 #Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 #Python
You might like
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
基于滚动条位置判断的简单实例
2017/12/14 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
利用python获得时间的实例说明
2013/03/25 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python实现井字棋小游戏
2020/03/04 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
财政专业求职信范文
2014/02/19 职场文书
家长通知书教师评语
2014/04/17 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
班主任对学生的评语
2014/04/26 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
2015年党总支工作总结
2015/05/25 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
检讨书之工作不认真
2019/08/14 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python