Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用腾讯云 Serverless 开发公众号后端

使用腾讯云 Serverless 开发公众号后端

原创
作者头像
陈少文
修改于 2021-08-30 02:42:10
修改于 2021-08-30 02:42:10
3.6K0
举报
文章被收录于专栏:陈少文陈少文

1. Serverless 的使用场景

如果说云计算是希望资源能够像自来水一样,隋开随用、随关随停,那么 Serverless 就是云计算的未来方向之一。相较于 IaaSKubernetes 这些运行时,Serverless 提供更细粒度资源控制的同时,还能提供更大的弹性,允许开发者快速交付功能。

常见的 Serverless 场景有聚合服务、构建轻量服务、海量按需付费,能够覆盖大部分的需求。本文将以腾讯云的 Serverless 服务,构建一个微信公众号的服务后端。

2. 在腾讯云 Serverless 上创建函数服务

目前腾讯云 Serverless 主要提供两种类型:

  • 函数服务,提供一些函数执行的服务
  • Serverless 应用,提供完整应用的运行时

Serverless 应用类型目前并没有提供编译型应用,也没有 Gin 框架,主要是 PHP、Python。但函数服务中,Serverless 提供了一种镜像类型,可以直接运行镜像中的文件。因此,可以提前构建好应用的镜像,再借助函数服务创建应用服务。

2.1 初始化镜像

  • 创建命名空间

打开链接 https://console.cloud.tencent.com/tke2/registry/user/space , 新建一个命名空间,这里我使用的是 shaowenchen

  • 创建一个镜像

点击【新建】,创建一个空的镜像,用于创建函数服务。这里需要记住镜像地址,ccr.ccs.tencentyun.com/shaowenchen/xxx

2.2 创建函数服务

打开链接 https://console.cloud.tencent.com/scf/list-create?rid=1&ns=default&createType=empty

按照上图,依次按照如下步骤操作:

  1. 选择自定义创建
  2. 选择 Web 函数
  3. 选择镜像部署,点击选择镜像, 选中上一步创建的镜像
  4. 完善 Command, 填入镜像中应用服务的启动命令 /app

最后点击 【完成】 创建服务,但是提供的网关地址 https://service-xxx.gz.apigw.tencentcs.com/release/ 并不能打开,因为镜像还是空的。下一步,我们创建项目,推送镜像。

3. 在 Github 上创建后端项目

3.1 使用 Gin 初始化项目

使用 Gin 创建一个后端项目,下面是 main.go 文件。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" "github.com/yaotian/gowechat" "github.com/yaotian/gowechat/mp/message" "github.com/yaotian/gowechat/wxcontext" ) func main() { router := gin.Default() router.Any("/mp/", hello) router.Any("/", func(c *gin.Context) { c.String(http.StatusOK, "OK") }) router.Run(":9000") } func hello(c *gin.Context) { //配置微信参数 config := wxcontext.Config{ AppID: "从公众号管理页获取", AppSecret: "从公众号管理页获取", Token: "从公众号管理页获取", EncodingAESKey: "从公众号管理页获取", } wc := gowechat.NewWechat(config) mp, err := wc.MpMgr() if err != nil { return } // 传入request和responseWriter msgHandler := mp.GetMsgHandler(c.Request, c.Writer) //设置接收消息的处理方法 msgHandler.SetHandleMessageFunc(func(msg message.MixMessage) *message.Reply { //回复消息:演示回复用户发送的消息 text := message.NewText(msg.Content) text.Content = "I get a msg : " + text.Content return &message.Reply{message.MsgTypeText, text} }) //处理消息接收以及回复 err = msgHandler.Handle() if err != nil { fmt.Println(err) return } }

代码实现的效果是,响应用户的输入 xxx,返回消息 I get a msg : xxx, 服务端配置在 /mp/ 路径上。

需要特别注意的是端口需要监听 9000,否则 Serverless 无法响应

3.2 添加 Dockerfile

Dockerfile 内容如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

ARG GO_VERSION=1.16 FROM golang:${GO_VERSION}-alpine AS builder RUN apk update && apk add alpine-sdk git && rm -rf /var/cache/apk/* RUN mkdir -p /builder WORKDIR /builder COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN go build -o ./app ./main.go FROM alpine:latest RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/* WORKDIR / COPY --from=builder /builder/app . EXPOSE 9000

分阶段构建, 将代码编译到 alpine:latest 镜像中, 可执行文件为 /app, 暴露的端口为 9000。

3.3 添加 Github Action

为了方便持续集成,在仓库中新增文件 .github/workflows/build.yaml , 内容如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

name: Go on: push: branches: - "main" jobs: build: name: Build runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Set up Go 1.16 uses: actions/setup-go@v2 with: go-version: 1.16 - name: Login Resigtry if: github.event_name == 'push' run: | echo ${{ secrets.REGISTRY_PASSWORD }} | docker login ccr.ccs.tencentyun.com -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin - name: Build run: | docker build -t ccr.ccs.tencentyun.com/shaowenchen/xxx -f ./Dockerfile . docker push ccr.ccs.tencentyun.com/shaowenchen/xxx:latest

提交代码之后,Github Action 自动编译代码,推送镜像到腾讯云的镜像仓库

4. 公众号配置及测试

4.1 启用公众号服务器配置

如上图,在微信公众号的管理页面,启用服务配置。需要记下如下信息,用于后端代码代码鉴权:

  • AppID
  • AppSecret
  • Token
  • EncodingAESKey

这里的服务器地址就是函数服务的网关地址 https://service-xxx.gz.apigw.tencentcs.com/release/ + mp/ 。由于服务尚未更新,验证无法通过,需要停留在这个页面,等待服务就绪再保存即可。

4.2 配置秘钥更新服务

将上一步获取到的配置填写到 main.go 文件的配置中:

1 2 3 4 5 6

config := wxcontext.Config{ AppID: "从公众号管理页获取", AppSecret: "从公众号管理页获取", Token: "从公众号管理页获取", EncodingAESKey: "从公众号管理页获取", }

提交之后,等待 Github Action 执行完毕,推送镜像成功。

4.3 更新函数服务

虽然服务镜像更新成功,但是函数服务并不会更新。

如上图,我们打开函数管理的页面,选择镜像版本,勾选 latest 提交。提交成功之后,页面会提示拉取镜像、服务更新中,此时打开访问地址,页面响应 OK

此时再去报错公众号服务配置,即可成功。

4.4 发送消息测试

最后,在微信公众号测试一下功能:

在腾讯云的函数服务后端,也可以查看到相关的请求日志。

5. 总结

本文主要以微信公众号后端开发为需求,尝试了一下腾讯云 Serverless 服务。由于目前,腾讯云 Serverless 服务有一定的免费额度,对于个人的一些小项目、Demo 项目,也算够用。本文主要涉及如下内容:

  • 创建了一个腾讯云 Serverless 函数服务
  • 使用 Github Action 创建了一个 Gin 持续集成项目
  • 微信公众号服务器端配置

最终实现了一个能自动响应用户公众号消息输入的功能需求。


原文地址: https://www.chenshaowen.com/blog/develop-a-wechat-backend-using-tencent-serverless.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【玩转腾讯云】TSF使用指南
TSF 全称是腾讯微服务平台 (Tencent Service Framework),它在我的理解中就是整合了微服务组件的各个功能的一站式部署与管理平台,这个平台本身也是免费的,你需要付费的是云服务器的费用。如果你的应用想上云,而且是微服务,不妨考虑TSF,不仅可以减少你的代码开发量而且提供了运维界面。
六个核弹
2021/04/07
9.2K5
Docker最全教程——.NET5进一步拥抱容器技术
.NET 5已经发布多时了,众所周知,其对容器的支持又上了一个台阶。那么主要有哪些变化呢,接下来我们一起来了解吧。
雪雁-心莱科技
2020/12/14
1.3K0
YApi docker部署——基于腾讯云轻量应用服务器
YApi 可视化接口管理平台,是高效、易用、功能强大的 API 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
buzzfrog
2022/04/11
1.8K0
腾讯云上传pushdocker镜像到镜像仓库
青山师
2024/10/09
8660
Kubernetes 应用java程序无法使用jmap,jstack的解决方案
基础环境centos8+kubeadm1.20.5+cilium+hubble环境搭建,线上主要跑的php nodejs java的环境。
对你无可奈何
2021/06/23
3.6K0
【玩转云函数】腾讯云函数 Python 依赖安装
以下内容来自「玩转腾讯云」用户原创文章,已获得授权。 本次作者主要是想利用腾讯云的 Serverless 云函数服务,由于腾讯云函数 Python 的环境只配置了基础的 Python 库,比如流行的 Pandas 库并没有包含在内,这就导致了面板数据类型的分析不能很好的进行。本次文章主要想解决的问题如下: 1. 利用 Docker 部署跟腾讯云函数一致的环境; 2. 由于腾讯云函数采用了 Python 3.6.1 版本,该版本相对而言比较老旧,需要安装适配的 Pandas 版本; 3. 本次依赖安装,需
腾讯云serverless团队
2021/07/20
4.8K0
开源云原生CI/CD框架Tekton国内部署方式
Tekton 是一款功能非常强大而灵活的 CI/CD 开源的云原生框架。致力于提供全功能、标准化的云原生 CI/CD 解决方案。【本文主要是通过流水线自动化的将tekton镜像同步到腾讯云仓库,并部署tekton】
DevOps云学堂
2021/10/27
2.4K0
开源云原生CI/CD框架Tekton国内部署方式
Docker 入门实践
张戈
2017/10/10
8.4K1
Docker 入门实践
第四章 开源项目与部署
输入命令SHOW DATABASES; 可以查看看到创建好的wordpress数据库。
喵喵侠
2022/01/23
6640
从无到有基于腾讯云TKE部署Kubernetes全流程(一)
这里我们希望的是,提供一个腾讯云TKE中部署整个基础环境,以及对部分服务的一个示例。
蒋经纬
2020/06/22
2.1K0
Serverless可观测性的价值
作者简介 杨琪 9 年专注于操作系统、网络、云原生、Serverless 相关技术研发工作。从传统网络到容器网络技术都有所了解,具有丰富的后端研发实践经验。 大家都有对线上系统排障的经验,我一直认为查找bug是计算机行业中最神秘、最有创造性的一项活动,众多老手能够凭借自己丰富的经验以神乎其技的方式迅速找到问题根源,事后无论是本人还是旁观者似乎都很难系统性的描述查找bug的思路,仿佛是灵感一现,模模糊糊觉得是哪里的问题,于是便动手去查。这给计算机行业添加了一些艺术成分,但也暗示着这种方式很难复制。
腾讯云中间件团队
2021/12/10
7950
使用腾讯云容器服务来构建简单web service
本文将介绍使用nginx和php来构建简单web service,核心在于如何配置nginx的upstream,使得nginx能够与后端服务通信。
腾讯云容器服务团队
2018/01/15
4.4K1
使用云函数快速打造公众号自动回复机器人
想法 于上周五发现了一个有趣的仓库: co-wechat(https://github.com/node-webot/co-wechat)。突发奇想,我不要你觉得,我要我觉得,腾讯云云函数配合该库,理论上可以快速搭建一个微信公众号的自动回复机器人。所以就开始查查文档,开搞了。 开搞 步骤一 先用Tencent Serverless Toolkit for VS Code这个VS Code插件生成一个云函数。并根据该文档修改下template.yaml,配置API网关触发器。 去到函数的面板,点击上
腾讯云serverless团队
2019/08/30
4.2K5
使用云函数快速打造公众号自动回复机器人
从零开始搭建腾讯云上的SpringBoot容器化应用
由于最近容器技术的火热,各大云计算厂商都已经提供了独立的容器服务,腾讯云也不例外。腾讯云容器服务的官方文档提供了一个基于Node.js的简单案例供大家上手,考虑到官方的文档并没有提供基于Java的上手教程,再加上容器/微服务技术在Java领域的各种衍生开源组件--如SpringCloud家族的各种神器应用极其广泛,今天有空拿一个简单的带增删改查接口功能的SpringBoot应用外接腾讯云CDB for MySQL来把玩容器服务,正好以此来演示如何从零开始在腾讯云上搭建基于SpringBoot的容器化应用。关于为啥选用SpringBoot框架,我想原因也不必多说,主要还是因为其本身就是一个为容器而生的框架,自带Tomcat服务器而且能以极简的配置构建web服务(相对于SpringMVC而言)。
李想
2018/01/09
4.1K0
从零开始搭建腾讯云上的SpringBoot容器化应用
【腾讯云Serverless】使用云函数快速打造一个智障微信公众号自动回复机器人
于上周五发现了一个有趣的仓库: co-wechat。突发奇想,我不要你觉得,我要我觉得,腾讯云云函数配合该库,理论上可以快速搭建一个微信公众号的自动回复机器人。所以就开始查查文档,开搞了。
Juli
2019/08/26
10.1K5
Web 函数自定义镜像实战:构建图象处理函数
作为一名前端工程师,我们经常会在 H5 , 或者小程序中,使用 Canvas 来处理或生成图片。不过在某些禁用 javascript 场景下,我们往往需要在服务端预先把图片处理好,再返回给不同的客户端进行使用。 本篇文章就主要给大家介绍,如何使用腾讯云 SCF,多快好省的搭建一个图象处理函数。 使用到的技术: 看这篇文章之前,建议同学们可以初步了解一下,下方罗列的一些初级知识: h5 canvas & svg:https://developer.mozilla.org/ Node.js:https://n
腾讯云serverless团队
2021/07/28
9350
TKE操作指南 - 自动化构建,生成Wordpress Docker业务镜像(五)
通过持续集成与持续交付提供优秀的 DevOps 环境,极大提高软件发布效率。如下图所示:
亮哥说TKE
2019/07/30
1.2K0
如何用云应用快速部署一个nodebb的开源论坛
Serverless 云应用是云开发提供的一种无服务器容器托管平台,用户可面向代码/镜像等多种方式使用,无需维护复杂的容器环境,可专注于自身的业务,一键开通后即可享受能自动扩缩容的容器资源。详情可查看产品文档
腾讯云开发TCB
2020/07/30
3.7K0
【玩转腾讯云】腾讯云函数的 Python 依赖安装及测试示例
本次作者主要是想利用腾讯云的 Serverless 云函数服务,由于腾讯云函数 Python 的环境只配置了基础的 Python 库,
数据科学实战
2021/04/22
12.3K1
【玩转腾讯云】腾讯云函数的 Python 依赖安装及测试示例
如何拥有免费的docker仓库
就是我们所有的服务最终都是通过docker容器运行的对吧,所以我们docker容器最终也管理,就像我们有maven仓库一样。但是问题来了,我们的镜像仓储服务用什么呢?
shigen
2023/11/30
4930
如何拥有免费的docker仓库
推荐阅读
相关推荐
【玩转腾讯云】TSF使用指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档