发生了变化 触发器函数不能读它_如何把创建ECS(CreateInstance)作为触发器来触发函数计算...

866d3e9c2aae1ecf31394c792fdac97c.png

问题描述

函数计算虽然不支持直接集成到ECS的管控事件上,但是函数计算本身是支持日志服务作为触发器的。即可以配置日志服务中logstore里的增强日志作为触发器来触发函数计算服务中的函数,同时可以传递project 和 logstore的name以及beginCursor/endCursor 等相关日志信息作为event到函数计算服务,供其做二次处理和加工。

这样相当于提供了一个思路,即我们可以把创建ECS或者其他相关的操作想办法作为日志投递到日志服务中,这样就可以触发相关的函数计算服务了。

那么这种方法是什么呢?一种可行的方式是操作审计服务。操作审计可以记录所有API级别的用户记录,当然也包括CreateInstance这类操作。

所以整个流程就变成了:开通操作审计服务->配置操作审计跟踪,将event投递到日志服务中->配置日志服务作为函数计算触发器并传递日志->触发函数

举个例子

开通操作审计服务后,创建一个日志跟踪

2e98c2689a5af97c6817ce279d184956.png

然后创建一个实例,可以看到操作审计记录了这个行为

cf5edd2cb7024c663bdba78b63601245.png

同时日志服务里也找到了这个行为记录

bed65afe1dfddd614a326e8b66b58123.png

接下来我们可以配置一个函数计算服务,具体的过程可以参考文中最后的文档,这里强调下配置触发器的配置,这里要注意的是图中有关logstore的配置,上面的是触发日志的logstore,下面的是写日志的lostore,不能搞混。

bb5b92ee5ed762651b9ba56885379915.png

然后复制进去一段代码,这段代码的核心是拿到触发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.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(当然也包括其他可以被审计的行为)的行为就可以用来触发函数计算的函数了。

结果

我们把刚才创建的实例再释放掉,看到操作审计的日志

fde8ef2879285e9cbfa1d9e78bd3f6e9.png

10f359501fc04c0be9ddb428859c6bc9.png

然后我们在函数计算的日志库里也看到了对应的日志,这个日志是刚才操作审计记录的日志传递给函数计算并记录的。在真正的应用场景下,客户可以拿到这个日志中的相关信息做更多操作。

331a051f0ba0e6aeb1bbe6cac042a0eb.png

更多sample参考

总结

  1. 产品侧无法直接支持的功能,可以看下是否有workaround
  2. 很多阿里云产品之间的集成,都可以看下是否可以通过日志服务来做。

参考资料

函数计算-示例介绍

日志服务-开发指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值