这样会更加便利,同时模拟网关,做一个测试方法:
?复制代码
def test():event = {"requestContext": {"serviceId": "service-f94sy04v","path": "/test/{path}","httpMethod": "POST","requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef","identity": {"secretId": "abdcdxxxxxxxsdfs"},"sourceIp": "14.17.22.34","stage": "release"},"headers": {"Accept-Language": "en-US,en,cn","Accept": "text/html,application/xml,application/json","Host": "service-3ei3tii4-251000691.ap-guangzhou.apigateway.myqloud.com","User-Agent": "User Agent String"},"body": json.dumps({"wechat": "12345","nickname": "test","remark": "",}),"pathParameters": {"path": "value"},"queryStringParameters": {"foo": "bar"},"headerParameters": {"Refer": "10.0.2.14"},"stageVariables": {"stage": "release"},"path": "/test/value","queryString": {"foo": "bar","bob": "alice"},"httpMethod": "POST"}print(main_handler(event, None))增加本地测试时,指定test()方法:
?复制代码
if __name__ == "__main__":test()这样,线上触发时会默认执行main_handler, 而本地执行,则会通过test走入main_handler,我们可以边开发,边测试,全部弄好之后再部署到线上 。
线上获取配置信息是通过获取环境变量,本地又该如何执行?我们需要先进行这个操作:
?复制代码
# -*- coding: utf8 -*- import yamlimport osdef setEnv():file = open("/Users/dfounderliu/Documents/code/AIAlbum/serverless.yaml", 'r', encoding="utf-8")file_data = https://www.isolves.com/it/ai/2020-07-24/file.read()file.close()data = yaml.load(file_data)for eveKey, eveValue in data['Conf']['inputs'].items():print(eveKey, eveValue)os.environ[eveKey] = str(eveValue) 这样,我们这个文件就既可以线上直接用,也可以本地直接用了!
那么,Yaml 怎么写?

文章插图
然后,我们可以在部署函数的时候将公共组件引入项目中 。
本地形式:

文章插图
线上形式:

文章插图
项目部署
- 在使用之前,需要先有一个腾讯云的账号,并且开通了 COS、COS、APIGW 以及 CDB 等相关产品权限;
- 将项目 clone 到本地,配置自己的密钥信息、数据库信息 。配置文件在cloudFunction目录下的serverless.yaml中:
# 函数们的整体配置信息Conf:component: "serverless-global"inputs:region: ap-shanghairuntime: Python3.6handler: index.main_handlerinclude_common: ./commonmysql_host: gz-c************************.commysql_user: rootmysql_password: S************************!mysql_port: 6************************0mysql_db: albummini_program_app_id: asdsa************************ddddmini_program_app_secret: fd340c4************************8744eetencent_secret_id: AKID1y************************l1q0kKtencent_secret_key: cCoJ************************FZj5Oatencent_appid: 1256773370cos_bucket: 'album-1256773370'domain: album.0duzahn.com由于我目前使用的是 Serverless Components,没有全局变量等,所以在此处增加了全局变量组件,在这里设置好全局变量,在之后的 Components 中可以直接引用,例如:?复制代码
# 创建存储桶CosBucket:component: '@serverless/tencent-website'inputs:code:src: ./cosregion:${Conf.region}bucketName: ${Conf.cos_bucket}- 安装必备工具,例如必须要安装 Serverless Framework(可以参考: https://cloud.tencent.com/document/product/1154/39005), 同样由于本项目后台开发语言是 Python,您也需要一些 Python 的开发工具以及包管理工具,以及小程序云开发的 IDE;
- 在部分文件夹下安装相对应的依赖:cloudFunction/album/prdiction需要安装 Pillow, opencv,tensorflow,jiebacloudFunction/album/getPhotoSearch需要安装 gensim,jieba 以及 collectionscloudFunction/album/compression需要安装 Pillow
注意,在安装的时候一定要用 centos 操作系统,并且 Python 要 3.6 版本,如果没相对应系统,可以在这里打包对应的依赖: http://serverless.0duzhan.com/app/scf_python_package_download/
推荐阅读
- 基于Bert和通用句子编码的Spark-NLP文本分类
- eHIDS 一款基于eBPF的HIDS开源工具
- 基于零信任的安全架构
- 教你编译一个基于arm的Linux内核,并用qemu模拟器测试
- 基于机器学习的自适应码率算法的进一步探索与改进
- 基于Modbus协议实现Openplc与Kingview的仿真通讯与模拟测试
- 基于oAuth的授权登陆
- 附代码 基于NLP的COVID-19虚假新闻检测
- 如何基于TCP/IP协议进行MFC Socket网络通讯编程
- 内网渗透基础——命令行下安装Microsoft .NET Framework
