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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
python多维数组切片方法
Apr 13 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python之用户输入的实例
Jun 22 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
Python 解析简单的XML数据
Jul 24 Python
详解Python 中的 defaultdict 数据类型
Feb 22 Python
python反编译教程之2048小游戏实例
Mar 03 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文件上传的简单实例
2013/10/19 PHP
phplot生成图片类用法详解
2015/01/06 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
Python实现高效求解素数代码实例
2015/06/30 Python
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Python之pymysql的使用小结
2019/07/01 Python
Python占用的内存优化教程
2019/07/28 Python
python 实现字符串下标的输出功能
2020/02/13 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
学习十八大宣传标语
2014/10/09 职场文书
初婚未育证明样本
2015/06/18 职场文书
python - asyncio异步编程
2021/04/06 Python