本项目将演示通过华为云FunctionGraph实现抢红包场景,让开发者上手体验FunctionGraph。
拉取代码
cd D://
git clone https://gitee.com/HuaweiCloudDeveloper/huaweicloud-serverless-function-graph-red-envelope-python-sample.git
创建函数
步骤一
步骤二
创建委托
步骤一
步骤二
步骤三 可以根据函数所需云服务定制权限限制的权限,Tenant Administrator为除了iam用户权限所有云服务权限。函数主要用到服务有DIS,DMS以及VPC的访问权限
步骤四 选择已创建的委托,并点击保存
上传函数
步骤一
步骤二
设置VPC
步骤一 建议选择与其他服务实例(Kafka, redis, influxdb)相同的VPC及子网,并点击保存
设置环境变量
注意:环境变量填写完,请点击保存。
KAFKA_CLUSTERS
注1:KAFKA_CLUSTERS的值格式应为["ip:port", "ip:port"], 例["110.110.111.11:9092", "110.110.111.12:9092"]
REDIS_HOST、REDIS_PORT、REDIS_PASSWORD
注1:REDIS_PASSWORD为创建服务实例时设置密码
注2:这里的Redis服务是分布式缓存服务 Redis版
INFLUX_HOST、INFLUX_PORT、INFLUX_USERNAME、INFLUX_PASSWORD
注1:INFLUX_PASSWORD为创建服务实例时设置密码
绑定API网关专享版触发器
步骤一 创建触发器
步骤二 选择APIG专享版
步骤三 创建成功
制作依赖/上传依赖
步骤一 制作依赖(本步骤可以选择跳过,已有制作好的依赖包直接上传,red_envelope_function\dependency.zip)
环境准备:制作函数依赖包推荐在EulerOS环境中进行,原因函数执行的操作系统为EulerOS,使用其他系统打包可能会因为底层依赖库的原因,运行出问题,比如找不到动态链接库。
编写requirements.txt文件。
vi /tmp/requirements.txt
将所有需要的包写入其中,例:
influxdb==5.3.1
kafka-python==2.0.2
redis==4.3.4
python-redis-lock==3.7.0
requests==2.28.1
安装第三方依赖包
pip install -r /tmp/requirements.txt --target=/tmp/dependency -i https://repo.huaweicloud.com/repository/pypi/simple --extra-index-url=https://pypi.tuna.tsinghua.edu.cn/simple --extra-index-url=https://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn --trusted-host pypi.mirrors.ustc.edu.cn
注意:可能会出现个别包版本不存在的情况,可以尝试更改-i参数后面的镜像源地址
切换到依赖包的安装目录
cd /tmp/dependency
打包所有依赖到zip文件(zip找不到,下载并安装zip)
zip -rq dependency.zip *
下载dependency.zip到本地
步骤二 上传依赖
测试前准备
步骤一 购买NAT网关,并通过NAT网关开通DNAT规则,让本地PC可以访问Kafka及influxdb。(假设使用的同VPC下的ECS,该步骤可跳过,可使用各服务实例的内网地址)
Kafka内网IP三选一
Influxdb内网IP二选一
步骤二 添加本地PC环境变量
KAFKA_CLUSTERS变量值填入"[弹性公网ip:公网端口]",例如"101.0.0.1:9090"(具体值在下一张图)
INFLUX_HOST
INFLUX_PORT
INFLUX_USER,INFLUX_PASSWORD如上操作,为创建influxdb时设置账户密码。
步骤三 代码创建influxdb中databases。
注意:运行程序时环境变量没生效请重启Pycharm
注意:报错找不到相关依赖,请打开Pycharm终端执行命令 pip install -r requirements.txt
步骤四 代码创建kafka中topic(如果已设置自动创建topic可以忽略此步骤)。
本地部署
前提条件
- 本地已配置KAFKA_CLUSTERS环境变量,并测试连接成功
步骤一 运行Websocket APP
步骤二 修改 项目根目录/red_envelope_front/.env.development 文件
注意:VUE_APP_DOMAIN可以使用API分组自动生成的子域名,因子域名没有备案请参考2.5 常见问题 3 进行相关操作
步骤三 新建终端,运行前端代码
cd red_envelope_front
npm install
npm run dev
步骤四 打开Chrome浏览器,访问前端页面
步骤五 测试各功能
OBS + CCI + DNS + APIG部署
项目描述
通过OBS托管静态页面,CCI部署WebSocket APP,APIG统一后端服务入口。因OBS无法通过Nginx作为代理服务器代理转发请求, 所以需要两个域名分别解析前端页面及APIG网关,通过浏览器访问时,会出现跨域问题。前提条件
- 拥有已备案通过的公网域名,详见域名注册
- CCI, APIG, KAFKA, INFLUXDB, REDIS都在同一个VPC内
步骤一 制作WebSocket APP镜像及CCI部署WebSocket APP(操作在linux环境下完成)
拉取代码
cd /tmp
进入项目根目录
cd huaweicloud-serverless-function-graph-red-envelope-python-sample
登录华为云SWR(可在SWR总览右侧登录指令复制登录命令)
docker login xxx
注意:留意所在Region
docker build -t red_envelope_websocket:test .
docker tag red_envelope_websocket:test swr.cn-south-1.myhuaweicloud.com/{组织名}/red_envelope_websocket:test
docker push swr.cn-south-1.myhuaweicloud.com/{组织名}/red_envelope_websocket:test
注意:请根据自定义组织名修改命令行中组织名
CCI页面操作步骤,单击创建无状态负载
注意:因业务逻辑原因,POD数量只需1个。
步骤二 WebSocket APP绑定APIG接口
后端服务地址于websocket工作负载页面-访问配置-内网访问地址,如下图:
步骤三 APIG绑定域名
步骤四 修改 项目根目录/red_envelope_front/.env.production 文件
步骤五 构建前端代码
通过PyCharm新建终端,切换目录
cd red_envelope_front
npm run build
步骤六 上传前端代码至OBS(建议通过OBS Browser+ 上传)
步骤七 配置静态页面托管
步骤八 配置自定义域名
步骤九 DNS解析
OBS静态页面域名,如下图:
步骤十 配置跨域预校验OPTION请求
步骤十一 打开Chrome浏览器,访问前端页面
步骤十二 测试各功能
- windows
修改 C:\WINDOWS\system32\drivers\etc\hosts 文件。
打开cmd,测试域名是否能访问。
ping 域名
- linux
修改 /etc/hosts 文件。
vim /etc/hosts
ping 域名
注意:域名是网址的组成部分,例如http://localhost.com/test 中localhost.com为域名
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。