InfoQServerless 架构下如何实现日志的实时输出?( 三 )


API 网关涉及到的三个函数:
注册函数:主要用来完成数据存储和函数信息修改等操作 , 是用户建立链接时触发的函数;
importjson, osfromqcloud_cos_v5importCosConfigfromqcloud_cos_v5importCosS3Clientfromtencentcloud.commonimportcredentialfromtencentcloud.scf.v20180416importscf_client, modelsregion = os.environ.get("bucket_region")config = CosConfig(Region=region, SecretId=secretId, SecretKey=secretKey, Token=token)client = CosS3Client(config)response = client.put_object(Bucket=os.environ.get("bucket"),Body=json.dumps({"region": region,"namespace": namespace,"function": name}).encode("utf-8"),Key=connid,EnableMD5=False)try:environmentVariablesList = [{"Key":"real_time_log_id","Value": connid},{"Key":"real_time_log_url","Value": transurl},{"Key":"real_time_log","Value":"open"}]cred = credential.Credential(secreetId, secretKey, token=token)client = scf_client.ScfClient(cred, region)req = models.GetFunctionRequestreq.from_json_string(json.dumps({"FunctionName": name,"Namespace": namespace,"ShowCode":"FALSE"}))resp = client.GetFunction(req)environmentVariables = json.loads(resp.to_json_string)["Environment"]["Variables"]foreveVariablesinenvironmentVariables:ifeveVariables["Key"] =="real_time_log_id"oreveVariables["Key"] =="real_time_log_url"oreveVariables["Key"] =="real_time_log":continueenvironmentVariablesList.append(eveVariables)req = models.UpdateFunctionConfigurationRequestreq.from_json_string(json.dumps({"FunctionName": name,"Environment": {"Variables": environmentVariablesList},"Namespace": namespace}))client.UpdateFunctionConfiguration(req)setFunction2Bucket(name, namespace, secreetId, secretKey, token, connid)returnTrueexceptExceptionase:print(e)returnFalseconnectionID = event['websocket']['secConnectionID']ifnotsetFunctionConfigure(event['queryString']['name'],event['queryString']['namespace'],event['queryString']['region'],os.environ.get("TENCENTCLOUD_SECRETID"),os.environ.get("TENCENTCLOUD_SECRETKEY"),os.environ.get("TENCENTCLOUD_SESSIONTOKEN"),connectionID,os.environ.get("url")):returnFalseif'requestContext'notinevent.keys:return{"errNo":101,"errMsg":"not found request context"}return{"errNo":102,"errMsg":"not found web socket"}


推荐阅读