日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数计算自动化运维实战 3 -- 事件触发自动创建快照 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

函數(shù)計(jì)算

阿里云函數(shù)計(jì)算是一個(gè)事件驅(qū)動(dòng)的全托管計(jì)算服務(wù)。通過函數(shù)計(jì)算,您無需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳。函數(shù)計(jì)算會(huì)為您準(zhǔn)備好計(jì)算資源,以彈性、可靠的方式運(yùn)行您的代碼,并提供日志查詢,性能監(jiān)控,報(bào)警等功能。借助于函數(shù)計(jì)算,您可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),無需管理和運(yùn)維。更棒的是,您只需要為代碼實(shí)際運(yùn)行消耗的資源付費(fèi),而代碼未運(yùn)行則不產(chǎn)生費(fèi)用。

云監(jiān)控

阿里云云監(jiān)控為云上用戶提供開箱即用的企業(yè)級(jí)開放型一站式監(jiān)控解決方案。涵蓋 IT 設(shè)施基礎(chǔ)監(jiān)控,外網(wǎng)網(wǎng)絡(luò)質(zhì)量撥測(cè)監(jiān)控,基于事件、自定義指標(biāo)、日志的業(yè)務(wù)監(jiān)控。為您全方位提供更高效、更全面、更省錢的監(jiān)控服務(wù)。
云監(jiān)控提供了豐富事件,并且事件還在不斷豐富中(云產(chǎn)品系統(tǒng)事件監(jiān)控), 豐富的事件觸發(fā)自定義處理的函數(shù),可以實(shí)現(xiàn)更加完美的的自動(dòng)化運(yùn)維。

專題傳送門 => 函數(shù)計(jì)算進(jìn)行自動(dòng)化運(yùn)維專題

示例場(chǎng)景

在本文中,重點(diǎn)關(guān)注函數(shù)計(jì)算對(duì) ecs 的重啟事件處理,因?yàn)檫@些 ecs 重啟事件是目前用戶需要很高優(yōu)先級(jí)用戶優(yōu)先級(jí)去響應(yīng)的;假設(shè)之前一臺(tái) ecs 發(fā)生因系統(tǒng)錯(cuò)誤而重啟,用戶可能會(huì)緊急起來做一些驗(yàn)證或者創(chuàng)建快照的處理, 在本示例中,我們對(duì)一臺(tái)因?yàn)橄到y(tǒng)錯(cuò)誤實(shí)例重啟或者因?qū)嵗e(cuò)誤而重啟的機(jī)器進(jìn)行自動(dòng)化處理,比如成功重啟后創(chuàng)建快照處理。

ecs 系統(tǒng)事件

云產(chǎn)品系統(tǒng)事件監(jiān)控

操作步驟

  • 創(chuàng)建函數(shù)(函數(shù)代碼在文末),函數(shù)創(chuàng)建可參考函數(shù)計(jì)算helloworld

注:記得給函數(shù)的 service 的 role 設(shè)置操作 ecs 的權(quán)限

  • 登錄云監(jiān)控控制臺(tái), 創(chuàng)建報(bào)警規(guī)則, 監(jiān)控的事件為ecs 因?qū)嵗e(cuò)誤或西戎錯(cuò)誤重啟開始和結(jié)束


  • mock 調(diào)試

  • 模擬真實(shí)的 ecs 事件
    請(qǐng)參考演練系統(tǒng)事件處理程序? So Easy~

代碼

# -*- 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.credentialssts_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 cltclt = 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 thingsif name in ['Instance:SystemFailure.Reboot:Executed'.lower(), "Instance:InstanceFailure.Reboot:Executed".lower()]:request = DescribeDisksRequest()request.add_query_param("RegionId", "cn-shenzhen")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_detailexcept Exception as e:LOGGER.error(e)

“阿里巴巴云原生微信公眾號(hào)(ID:Alicloudnative)關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)公眾號(hào)。”

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的函数计算自动化运维实战 3 -- 事件触发自动创建快照的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。