摘要: 函数计算是阿里云上类似lamda的服务。 本文介绍了如何通过日志服务投递ECS创建等行为的日志,从而触发函数计算服务。问题描述函数计算虽然不支持直接集成到ECS的管控事件上,但是函数计算本身是支持日志服务作为触发器的。即可以配置日志服务中logstore里的增强日志作为触发器来触发函数计算服务中的函数,同时可以传递project 和 logstore的name以及beginCursor/endCursor 等相关日志信息作为event到函数计算服务,供其做二次处理和加工。这样相当于提供了一个思路,即我们可以把创建ECS或者其他相关的操作想办法作为日志投递到日志服务中,这样就可以触发相关的函数计算服务了。那么这种方法是什么呢?一种可行的方式是操作审计服务。操作审计可以记录所有API级别的用户记录,当然也包括CreateInstance这类操作。所以整个流程就变成了:开通操作审计服务->配置操作审计跟踪,将event投递到日志服务中->配置日志服务作为函数计算触发器并传递日志->触发函数举个栗子开通操作审计服务后,创建一个日志跟踪然后创建一个实例,可以看到操作审计记录了这个行为同时日志服务里也找到了这个行为记录接下来我们可以配置一个函数计算服务,具体的过程可以参考文中最后的文档,这里强调下配置触发器的配置,这里要注意的是图中有关logstore的配置,上面的是触发日志的logstore,下面的是写日志的lostore,不能搞混。然后复制进去一段代码,这段代码的核心是拿到触发event的具体日志信息,然后写到函数计算本地的日志库里。# -- coding: utf-8 --import loggingimport jsonfrom aliyun.log import LogClientfrom time import timedef 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 clientdef 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.credentials client = logClient(endpoint, creds) if client == None : logger.info(“client creat failed”) return False project = event[‘projectName’] logstore = event[’logstoreName’] start_cursor = event[‘beginCursor’] end_cursor = event[’endCursor’] loggroup_count = 10 shard_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 : break start_cursor = next_cursor #log_data = res.get_loggroup_json_list() return True以上配置完成后,一个控制台创建ECS(当然也包括其他可以被审计的行为)的行为就可以用来触发函数计算的函数了。结果我们把刚才创建的实例再释放掉,看到操作审计的日志然后我们在函数计算的日志库里也看到了对应的日志,这个日志是刚才操作审计记录的日志传递给函数计算并记录的。在真正的应用场景下,客户可以拿到这个日志中的相关信息做更多操作。更多sample可以参考:https://github.com/aliyun/aliyun-log-fc-functions总结产品侧无法直接支持的功能,可以看下是否有workaround很多阿里云产品之间的集成,都可以看下是否可以通过日志服务来做。参考资料https://help.aliyun.com/document_detail/84090.html?spm=a2c4g.11174283.6.619.5a6552120001Hlhttps://help.aliyun.com/document_detail/60781.html?spm=a2c4g.11186623.2.12.62727c9fIeDQwY本文作者:拱卒阅读原文本文为云栖社区原创内容,未经允许不得转载。
...