如何把创建ECS(CreateInstance)作为触发器来触发函数计算
問題描述
函數計算雖然不支持直接集成到ECS的管控事件上,但是函數計算本身是支持日志服務作為觸發器的。即可以配置日志服務中logstore里的增強日志作為觸發器來觸發函數計算服務中的函數,同時可以傳遞project 和 logstore的name以及beginCursor/endCursor 等相關日志信息作為event到函數計算服務,供其做二次處理和加工。
這樣相當于提供了一個思路,即我們可以把創建ECS或者其他相關的操作想辦法作為日志投遞到日志服務中,這樣就可以觸發相關的函數計算服務了。
那么這種方法是什么呢?一種可行的方式是操作審計服務。操作審計可以記錄所有API級別的用戶記錄,當然也包括CreateInstance這類操作。
所以整個流程就變成了:
開通操作審計服務->配置操作審計跟蹤,將event投遞到日志服務中->配置日志服務作為函數計算觸發器并傳遞日志->觸發函數
舉個栗子
開通操作審計服務后,創建一個日志跟蹤
然后創建一個實例,可以看到操作審計記錄了這個行為
同時日志服務里也找到了這個行為記錄
接下來我們可以配置一個函數計算服務,具體的過程可以參考文中最后的文檔,這里強調下配置觸發器的配置,這里要注意的是圖中有關logstore的配置,上面的是觸發日志的logstore,下面的是寫日志的lostore,不能搞混。
然后復制進去一段代碼,這段代碼的核心是拿到觸發event的具體日志信息,然后寫到函數計算本地的日志庫里。
# -*- coding: utf-8 -*- import logging import json from aliyun.log import LogClient from time import time def logClient(endpoint, creds):logger = logging.getLogger()logger.info('creds info')logger.info(creds.access_key_id)logger.info(creds.access_key_secret)logger.info(creds.security_token)accessKeyId = 'XXX'accessKey = 'XXX'client = LogClient(endpoint, accessKeyId, accessKey)return client def handler(event, context):logger = logging.getLogger()logger.info('start deal SLS data')logger.info(event.decode().encode())info_arr = json.loads(event.decode())fetchdata(info_arr['source'],context)return 'hello world' def fetchdata(event,context):logger = logging.getLogger()endpoint = event['endpoint']creds = context.credentialsclient = logClient(endpoint, creds)if client == None :logger.info("client creat failed")return Falseproject = event['projectName']logstore = event['logstoreName']start_cursor = event['beginCursor']end_cursor = event['endCursor']loggroup_count = 10shard_id = event['shardId']while True:res = client.pull_logs(project, logstore, shard_id, start_cursor, loggroup_count, end_cursor)res.log_print()next_cursor = res.get_next_cursor()if next_cursor == start_cursor :breakstart_cursor = next_cursor#log_data = res.get_loggroup_json_list()return True以上配置完成后,一個控制臺創建ECS(當然也包括其他可以被審計的行為)的行為就可以用來觸發函數計算的函數了。
結果
我們把剛才創建的實例再釋放掉,看到操作審計的日志
然后我們在函數計算的日志庫里也看到了對應的日志,這個日志是剛才操作審計記錄的日志傳遞給函數計算并記錄的。在真正的應用場景下,客戶可以拿到這個日志中的相關信息做更多操作。
總結
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的如何把创建ECS(CreateInstance)作为触发器来触发函数计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018天猫双11|这就是阿里云!不止有
- 下一篇: 使用kettle导入数据到ADB for