函数计算自动化运维实战3 -- 事件触发自动创建快照

简介: 函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码, 而云监控可以监测到具体的ecs事件,并且可以把这事件的处理交给函数,完美实现事件驱动的自动化运维

函数计算

阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。更棒的是,您只需要为代码实际运行消耗的资源付费,而代码未运行则不产生费用。

云监控

阿里云云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方案。涵盖IT设施基础监控,外网网络质量拨测监控,基于事件、自定义指标、日志的业务监控。为您全方位提供更高效、更全面、更省钱的监控服务。

云监控提供了丰富事件,并且事件还在不断丰富中(云产品系统事件监控), 丰富的事件触发自定义处理的函数,可以实现更加完美的的自动化运维。

专题传送门 => 函数计算进行自动化运维专题

示例场景

在本文中,重点关注函数计算对ecs的重启事件处理,因为这些ecs重启事件是目前用户需要很高优先级用户优先级去响应的;假设之前一台ecs 发生因系统错误而重启,用户可能会紧急起来做一些验证或者创建快照的处理, 在本示例中,我们对一台因为系统错误实例重启或者因实例错误而重启的机器进行自动化处理,比如成功重启后创建快照处理。

ecs 系统事件
image

云产品系统事件监控
image

操作步骤

注:记得给函数的service的role设置操作ecs的权限

image

  • 登录云监控控制台, 创建报警规则, 监控的事件为ecs 因实例错误或西戎错误重启开始和结束
    image

image
image

  • mock调试
    image

image

image

代码

# -*- coding: utf-8 -*-
import logging
import json, random, string, time
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DeleteSnapshotRequest import DeleteSnapshotRequest
from aliyunsdkecs.request.v20140526.CreateSnapshotRequest import CreateSnapshotRequest
from aliyunsdkecs.request.v20140526.DescribeDisksRequest import DescribeDisksRequest
from aliyunsdkcore.auth.credentials import StsTokenCredential

LOGGER = logging.getLogger()
clt = None

def handler(event, context):
  creds = context.credentials
  sts_token_credential = StsTokenCredential(creds.access_key_id, creds.access_key_secret, creds.security_token)
  '''
  {
    "product": "ECS",
    "content": {
        "executeFinishTime": "2018-06-08T01:25:37Z",
        "executeStartTime": "2018-06-08T01:23:37Z",
        "ecsInstanceName": "timewarp",
        "eventId": "e-t4nhcpqcu8fqushpn3mm",
        "eventType": "InstanceFailure.Reboot",
        "ecsInstanceId": "i-bp18l0uopocfc98xxxx" 
    },
    "resourceId": "acs:ecs:cn-hangzhou:123456789:instance/i-bp18l0uopocfc98xxxx",
    "level": "CRITICAL",
    "instanceName": "instanceName",
    "status": "Executing",
    "name": "Instance:SystemFailure.Reboot:Executing", 
    "regionId": "cn-hangzhou"
  }
  '''

  evt = json.loads(event)
  content = evt.get("content");
  ecsInstanceId = content.get("ecsInstanceId");
  regionId = evt.get("regionId");

  global clt
  clt = client.AcsClient(region_id=regionId, credential=sts_token_credential)
  name = evt.get("name");
  name = name.lower()

  if name in ['Instance:SystemFailure.Reboot:Executing'.lower(), "Instance:InstanceFailure.Reboot:Executing".lower()]:
    pass
    # do other things
  
  if name in ['Instance:SystemFailure.Reboot:Executed'.lower(), "Instance:InstanceFailure.Reboot:Executed".lower()]:
    request = DescribeDisksRequest()
    request.add_query_param("RegionId", regionId)
    request.set_InstanceId(ecsInstanceId)
    response = _send_request(request)
    disks = response.get('Disks').get('Disk', [])
    for disk in disks:
      diskId = disk["DiskId"]
      SnapshotId = create_ecs_snap_by_id(diskId)
      LOGGER.info("Create ecs snap sucess, ecs id = %s , disk id = %s ", ecsInstanceId, diskId)
    
def create_ecs_snap_by_id(disk_id):
    LOGGER.info("Create ecs snap, disk id is %s ", disk_id)
    request = CreateSnapshotRequest()
    request.set_DiskId(disk_id)
    request.set_SnapshotName("reboot_" + ''.join(random.choice(string.ascii_lowercase) for _ in range(6)))
    response = _send_request(request)
    return response.get("SnapshotId")

# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action_with_exception(request)
        LOGGER.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        LOGGER.error(e) 
相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
机器学习/深度学习 并行计算 Shell
docker 获取Nvidia 镜像 | cuda |cudnn
本文分享如何使用docker获取Nvidia 镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。
8518 0
|
10月前
|
人工智能 文字识别 并行计算
为什么别人用 DevPod 秒启 DeepSeek-OCR,你还在装环境?
DevPod 60秒极速启动,一键运行DeepSeek OCR大模型。告别环境配置难题,云端开箱即用,支持GPU加速、VSCode/Jupyter交互开发,重塑AI原生高效工作流。
1011 35
|
2月前
|
人工智能 安全 BI
年轻人开始告别“左右滑社交交友经济”:2026社交交友App源码必须内置的6大吸金玩法
2026年的社交交友赛道,底层逻辑正在发生根本性重构——泛流量已不值钱,精准的情绪价值和真实的连接才值钱。
|
2月前
|
人工智能 机器人 API
最新Hermes必装技能清单(含安装包)
本文介绍Hermes平台五大必装核心技能:Universal Search(实时精准检索)、Advanced Memory(三层记忆系统)、Automation Pro(智能任务自动化)、Creative Writer(风格化内容创作)和Voice Assistant Plus(多步语音交互),助AI助手升级为真正懂你、高效可靠的“AI合伙人”。点击链接立即下载安装!
|
10月前
|
人工智能 算法 UED
从"AI投毒者"到"信息营养师":GEO运营的价值观革命
与“AI投毒”的短视做法截然不同,真正的GEO运营应当致力于成为AI系统的“信息共建者”。对AI深层知识掌握足够多的朋友都知道,人工智能的三要素:数据、算法和算力。数据是人工智能的一切构建的基础,而训练AI的初期数据多来自互联网,但这些是早起的网络数据,它也会存在着如不完整、不正确和不客观等情况。
|
5月前
|
传感器 人工智能 弹性计算
OpenClaw火爆全网!一分钟看懂它是什么?怎么部署?小白也能玩转AI神器!
2026年初爆火的OpenClaw(“小龙虾AI”)是一款本地优先、开源的AI智能体框架,不止聊天,更能自动执行文件整理、浏览器操作、系统命令、IM协同等真实任务。支持阿里云一键部署,小白两步即可上手,助力办公提效、生活管理与学习自动化。
702 3
|
5月前
|
人工智能 弹性计算 自然语言处理
阿里云学生专属算力包:AI时代下大学生的“数字装备”新选择
阿里云学生专属算力包,19元享高性价比云端AI资源,含练手/毕设/科创三档套餐。配套“AI简历”个人主页,支持视频、交互Demo与GitHub直链,5分钟自然语言一键部署,助力大学生用作品说话,提升就业竞争力。
764 7
|
人工智能 运维 Kubernetes
别再手动敲命令了!运维自动化才是打工人的“自救之道”
别再手动敲命令了!运维自动化才是打工人的“自救之道”
432 8

热门文章

最新文章

相关产品

  • 函数计算