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 相关文章推荐
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
详解supervisor使用教程
Nov 21 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python学习之hook钩子的原理和使用
Oct 25 Python
Python 加密与解密小结
Dec 06 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
python实现简单学生信息管理系统
Apr 09 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
Django filter动态过滤与排序实现过程解析
Nov 26 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
世界上第一台立体声收音机
2021/03/01 无线电
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
解决uWSGI的编码问题详解
2017/03/24 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
市场营销专业个人自荐信格式
2013/09/21 职场文书
希特勒的演讲稿
2014/05/23 职场文书
校车安全管理责任书
2015/05/11 职场文书
安全生产标语口号
2015/12/26 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
TV动画《间谍过家家》公开PV
2022/03/20 日漫