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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
pandas修改DataFrame列名的方法
Apr 08 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python代理工具mitmproxy使用指南
Jul 04 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Python线程协作threading.Condition实现过程解析
Mar 12 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
js读取注册表的键值示例
2013/09/25 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
如何学习Python time模块
2020/06/03 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers