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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
Python基础中所出现的异常报错总结
Nov 19 Python
python编写Logistic逻辑回归
Dec 30 Python
django 实现编写控制登录和访问权限控制的中间件方法
Jan 15 Python
详解Python中的测试工具
Jun 09 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
Python自动化测试笔试面试题精选
Mar 12 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
python集合的新增元素方法整理
Dec 07 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
使用pip安装python库的多种方式
2019/07/31 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
介绍一下mysql的日期和时间函数
2013/03/28 面试题
银行实习自我鉴定
2013/10/12 职场文书
高级护理专业大学生求职信
2013/10/24 职场文书
小学生安全保证书
2014/02/01 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
空气的环保标语
2014/06/12 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
信仰纪录片观后感
2015/06/08 职场文书
2019财务转正述职报告
2019/06/27 职场文书
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python