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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

如何把创建ECS(CreateInstance)作为触发器来触发函数计算

發(fā)布時(shí)間:2024/8/23 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何把创建ECS(CreateInstance)作为触发器来触发函数计算 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述

函數(shù)計(jì)算雖然不支持直接集成到ECS的管控事件上,但是函數(shù)計(jì)算本身是支持日志服務(wù)作為觸發(fā)器的。即可以配置日志服務(wù)中l(wèi)ogstore里的增強(qiáng)日志作為觸發(fā)器來觸發(fā)函數(shù)計(jì)算服務(wù)中的函數(shù),同時(shí)可以傳遞project 和 logstore的name以及beginCursor/endCursor 等相關(guān)日志信息作為event到函數(shù)計(jì)算服務(wù),供其做二次處理和加工。

這樣相當(dāng)于提供了一個(gè)思路,即我們可以把創(chuàng)建ECS或者其他相關(guān)的操作想辦法作為日志投遞到日志服務(wù)中,這樣就可以觸發(fā)相關(guān)的函數(shù)計(jì)算服務(wù)了。

那么這種方法是什么呢?一種可行的方式是操作審計(jì)服務(wù)。操作審計(jì)可以記錄所有API級別的用戶記錄,當(dāng)然也包括CreateInstance這類操作。

所以整個(gè)流程就變成了:
開通操作審計(jì)服務(wù)->配置操作審計(jì)跟蹤,將event投遞到日志服務(wù)中->配置日志服務(wù)作為函數(shù)計(jì)算觸發(fā)器并傳遞日志->觸發(fā)函數(shù)

舉個(gè)栗子

開通操作審計(jì)服務(wù)后,創(chuàng)建一個(gè)日志跟蹤

然后創(chuàng)建一個(gè)實(shí)例,可以看到操作審計(jì)記錄了這個(gè)行為

同時(shí)日志服務(wù)里也找到了這個(gè)行為記錄

接下來我們可以配置一個(gè)函數(shù)計(jì)算服務(wù),具體的過程可以參考文中最后的文檔,這里強(qiáng)調(diào)下配置觸發(fā)器的配置,這里要注意的是圖中有關(guān)logstore的配置,上面的是觸發(fā)日志的logstore,下面的是寫日志的lostore,不能搞混。

然后復(fù)制進(jìn)去一段代碼,這段代碼的核心是拿到觸發(fā)event的具體日志信息,然后寫到函數(shù)計(jì)算本地的日志庫里。

# -*- 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

以上配置完成后,一個(gè)控制臺創(chuàng)建ECS(當(dāng)然也包括其他可以被審計(jì)的行為)的行為就可以用來觸發(fā)函數(shù)計(jì)算的函數(shù)了。

結(jié)果

我們把剛才創(chuàng)建的實(shí)例再釋放掉,看到操作審計(jì)的日志

然后我們在函數(shù)計(jì)算的日志庫里也看到了對應(yīng)的日志,這個(gè)日志是剛才操作審計(jì)記錄的日志傳遞給函數(shù)計(jì)算并記錄的。在真正的應(yīng)用場景下,客戶可以拿到這個(gè)日志中的相關(guān)信息做更多操作。

總結(jié)

  • 產(chǎn)品側(cè)無法直接支持的功能,可以看下是否有workaround
  • 很多阿里云產(chǎn)品之間的集成,都可以看下是否可以通過日志服務(wù)來做。

  • 原文鏈接
    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    總結(jié)

    以上是生活随笔為你收集整理的如何把创建ECS(CreateInstance)作为触发器来触发函数计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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