如何把建立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.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.5a6552120001Hl
- https://help.aliyun.com/document_detail/60781.html?spm=a2c4g.11186623.2.12.62727c9fIeDQwY
作者:拱卒
原文連結
本文為雲棲社群原創內容,未經允許不得轉