Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Serverless 应用开发指南:基于 Serverless 与 Lambda 的微信公共平台

Serverless 应用开发指南:基于 Serverless 与 Lambda 的微信公共平台

作者头像
Phodal
发布于 2018-01-29 06:14:31
发布于 2018-01-29 06:14:31
4.3K00
代码可运行
举报
文章被收录于专栏:phodalphodal
运行总次数:0
代码可运行

Serverless 在事件驱动方面具有天然的优势,其中之一就是聊天机器人。可要做聊天机器人不是一件容易的事,微信和 QQ 都只能用 Hack 的方式进行。

于是,便想到微信公众号是不是一个更好的选择。当用户输入一个关键词时,做出相应的回复。总体上来说,他们之间是差不多的。这个时候,就可以开始尝试一个在线上运行的 Serverless 服务。

在这件事上,有这么几个步骤:

  • 创建 Serverless 服务
  • 引入 node-wechat
  • 配置 APP_ID 和 TOKEN 等
  • 配置 Route 53 与 API Gateway
  • 添加微信公众平号服务
  • 部署

创建 Serverless 服务

首先,让我们创建我们的服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverless create --template aws-nodejs --path serverless-wechat

这个步骤依旧是这么的简单。

引入 node-wechat

然后我找到了 node-wechat 库,它使用 express 来做路由,示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const express = require('express');const app = express();var wechat = require('wechat');var config = {  token: 'token',  appid: 'appid',  encodingAESKey: 'encodinAESKey',  checkSignature: true // 可选,默认为true。由于微信公众平台接口调试工具在明文模式下不发送签名,所以如要使用该测试工具,请将其设置为false};app.use(express.query());app.use('/wechat', wechat(config, function (req, res, next) {  // 微信输入信息都在req.weixin上  var message = req.weixin;  if (message.FromUserName === 'diaosi') {    // 回复屌丝(普通回复)    res.reply('hehe');  }}));

上面便是我们的 index.js 文件。

然后就是使用类似于《Serverless 应用开发指南:Serverless + Express 的 React 服务端渲染》中的方法,使用 aws-serverless-express 来做出一层代理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const awsServerlessExpress = require('aws-serverless-express');const app = require('./index');const server = awsServerlessExpress.createServer(app);exports.runserver = (event, context) => {   console.log("EVENT: " + JSON.stringify(event));   awsServerlessExpress.proxy(server, event, context)}

接下来就是进行相关的配置。

配置 APP_ID 和 TOKEN 等

首先,修改我们的 index.js 文件中的配置相关代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let config = {  token: process.env.TOKEN,  appid: process.env.APP_ID,  encodingAESKey: process.env.AESKey,  checkSignature: true};

token、id、encodingAESKey 将从 serverless.yml 文件中读取。我们的 serverless.yml 文件将从另外的文件中读取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
functions:  runserver:    handler: handler.runserver    events:      - http: ANY /      - http: 'ANY {proxy+}'    environment:      TOKEN: ${file(./config.yml):TOKEN}      APP_ID: ${file(./config.yml):APP_ID}      AESKey: ${file(./config.yml):AESKey}

即从 config.yml 中读取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TOKEN: TOKENAPP_ID: APP_IDAESKey: AESKey

这是为了确保我们可以保护密钥的安全。

一切准备就绪,执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverless deploy

就会生成对应的 API:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stack: serverless-wechat-devapi keys:  Noneendpoints:  ANY - https://e8tct5f0v2.execute-api.us-east-1.amazonaws.com/dev  ANY - https://e8tct5f0v2.execute-api.us-east-1.amazonaws.com/dev/{proxy+}functions:  runserver: serverless-wechat-dev-runserver

于是,我将这个地址填到了公众号后台,发现公号不支持 API Gateway。只能想办法使用自定义的域名,随后就需要使用 Route 53 来创建了。

配置 Route 53 与 API Gateway

如之前在《Serverless 应用开发指南: API Gateway 与 Route53 自定义域名》中所说,按下面的步骤就可以配置 Route 53 了。

在 Route 53 上注册有域名,如果没有的话,需要转到 Route 53。

然后,才能为你的域名请求一个证书

需要选择的区域是 us-east-1,这个 region 才能与 API Gateway 一起工作。

在这个过程中,需要验证域名的所有权。所以,你需要先找个地方注册域名邮箱,如我使用的是网易的域名邮箱。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ yarn add --dev serverless-domain-manager

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install serverless-domain-manager --save-dev
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plugins:  - serverless-domain-managercustom:  customDomain:    domainName: wechat.wdsm.io    basePath: ''    stage: ${self:provider.stage}    createRoute53Record: true
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverless create_domain

日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Serverless: Domain was created, may take up to 40 mins to be initialized.

AWS CLI 查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{    "items": [        {            "certificateArn": "arn:aws:acm:us-east-1:706605665335:certificate/278c252a-7aaf-41df-bcf1-adc279347557",            "distributionDomainName": "d1pp7oijqquj95.cloudfront.net",            "certificateUploadDate": 1509592737,            "domainName": "wechat.wdsm.io"        }    ]}

现在,再执行 serverless deploy 就可以完成整个步骤了。

添加微信公众平号服务

然后,我们可以创建几个简单的服务,比如从 Google 搜索内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
google(keyword, function (err, res) {  let result = R.map(R.compose(updateItemField, R.values, R.pick(['title', 'link'])))(res.links);  response.reply('你想要在 Google 上搜索的内容有: ' + result);});

又或者是,搜索我博客的相关内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
request.get('https://www.phodal.com/api/app/blog_detail/?search=' + keyword, {  headers: {    'User-Agent': 'google'  }}, function (error, res, body) {  if (res.statusCode === 200) {    let parsed = JSON.parse(body);    const data = parsed;    var result = R.map(R.compose(updatePhodalItemField, R.values, R.pick(['title', 'slug'])))(data);    response.reply({      content: '在『 phodal.com 』上有 x 个结果,前 10 个如下:' + result,      type: 'text'    });  }});

最后代码见:https://github.com/phodal/mp/blob/master/index.js

部署

最后,让我们愉快地执行 serverless deploy,对应的日志如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stack: serverless-wechat-devapi keys:  Noneendpoints:  ANY - https://e8tct5f0v2.execute-api.us-east-1.amazonaws.com/dev  ANY - https://e8tct5f0v2.execute-api.us-east-1.amazonaws.com/dev/{proxy+}functions:  runserver: serverless-wechat-dev-runserverServerless Domain Manager SummaryDomain Name  wechat.wdsm.ioDistribution Domain Name  d1pp7oijqquj95.cloudfront.net

结果你想用这个服务,那么只需要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverless install -u https://github.com/phodal/mp -mp

执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn install

再创建你的 config.yml 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp config.yml.template config.yml

最后,就可以愉快地部署了。

如果你是为测试,你可以执行 serverless remove 来删除服务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 phodal 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Serverless 应用开发指南:serverless 的 hello, world
在翻译了几篇 serverless 与物联网相关的文章之后,我开始想着好好掌握一下 serverless 的相关知识。 我对于 serverless 的第一认知是:Serverless 是由一堆云服务构建后端服务的,如存储、计算、授权都是由不同的服务来构建的。而作为一个开发人员,我们所要做的就是了解如何搭配不同的云服务。 因此,在进行更多的定义之前,我打算先熟悉一下 serverless,以便于我更好地了解什么是 serverless 应用开发。 Serverless 框架 hello, world 考虑到
Phodal
2018/01/29
5.9K1
Serverless|Framework——图文玩转 AWS Lambda
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand i
用户4172423
2020/10/23
2.5K0
Serverless|Framework——图文玩转 AWS Lambda
使用 Node.js 快速开启 ServerLess Functions:入门实践指南
近一年来我在很多地方看到 ServerLess 这一词出现,概念介绍的相对比较多,但是真正实践的还是很少,也是出于对新技术的好奇,所以我打算进一步的对 ServerLess 做一个了解,以便体验到 ServerLess 能给我们带来什么便捷,最好的例子还是先从一个 Hello World 开始。
五月君
2020/02/11
2.7K0
使用 Node.js 快速开启 ServerLess Functions:入门实践指南
用AWS部署一个无服务架构的个人网站
在这篇文章里我想介绍下怎样利用AWS(hjlouyoujuqi360com)部署一个无服务架构的个人网站。这个个人网站将具备以下特点:
用户4199102
2018/12/13
3.9K0
使用 Serverless + 飞书打造你的个性化消息提醒系统
如果每件事都花时间去关注,那我们的时间必然会不够用,那有没有什么办法可以让这些消息集中起来并且及时推送呢?在这里我想向大家推荐一个解决方案,那就是使用 Serverless + 飞书打造属于自己的个性化消息提醒系统。
腾讯云serverless团队
2020/07/09
1.8K0
【腾讯云Serverless】记一次使用腾讯云Serverless的VS Code插件来定位问题
该库封装了微信公共平台消息接口,并将其作为中间件的形式,配合express,koa等框架使用。
Juli
2019/08/24
11.9K0
微信公众号接入deepseek
deepseek的api可以用华为云或者腾讯云,官网api经常崩,没有免费额度了。本来想用硅基流动的,但是速度很慢,还是腾讯云快多了。
用户6841540
2025/02/15
2180
使用 ServerLess, Nodejs, MongoDB Atlas cloud 构建 REST API
MongoDB Atlas 是一个在云端的数据库,免去了数据库的搭建、维护,通过其提供的 Web UI 能够让你在 5 分钟之内快速搭建一个 Clusters。Node.js 是一个 JavaScript 的运行时,在 JavaScript 中函数做为一等公民,享有着很高的待遇,通常使用 Node.js 我们可以快速的搭建一个服务,而 ServerLess 是一种 “无服务器架构”,从技术角度来讲是 FaaS 和 BaaS 的结合,FaaS(Function as a Service)是一些运行函数的平台。
五月君
2020/01/16
3K0
使用 ServerLess, Nodejs, MongoDB Atlas cloud 构建 REST API
使用 AWS、k3s、Rancher、Vault 和 ArgoCD 在 Kubernetes 上集成 GitOps
最近我写了一篇关于 CI 和 CD 之间核心区别的文章,我觉得是时候把这些理论运用到实际当中了。
LinuxSuRen
2020/11/09
2.5K0
使用 AWS、k3s、Rancher、Vault 和 ArgoCD 在 Kubernetes 上集成 GitOps
serverless从入门到实践总结篇
虚拟主机已经是快被淘汰掉的上一代产物了。云计算涌现出很多改变传统 IT 架构和运维方 式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升 效率是云服务永恒的主题。Serverless 的出现真正的解决了降低成本、提升效率的问题。它真正做到了弹性伸缩、高并发、按需收费、备份容灾、日志监控等。
前端进阶之旅
2022/07/04
4.4K1
serverless从入门到实践总结篇
【云原生攻防研究 】针对AWS Lambda的运行时攻击
笔者在上一篇文章《Serverless安全研究— Serverless安全风险》中介绍了责任划分原则。对于开发者而言, Serverless因其服务端托管云厂商安全能力强的特点,实际上降低了总体的安全风险。
绿盟科技研究通讯
2020/12/14
2.1K0
【云原生攻防研究 】针对AWS Lambda的运行时攻击
【玩转腾讯云】使用Serverless+飞书打造你的个性化消息提醒系统
如果每件事都花时间去关注,那我们的时间必然会不够用,那有没有什么办法可以让这些消息集中起来并且及时推送呢?在这里我想向大家推荐一个解决方案,那就是使用Serverless+飞书打造属于自己的个性化消息提醒系统。
用户1358150
2020/04/08
2.4K0
【玩转腾讯云】使用Serverless+飞书打造你的个性化消息提醒系统
如何开发一个 Serverless Express 组件?(附源码)
Python 是一种热门的编程语言,Serverless 是近年来迅速兴起的一个技术概念,基于Serverless架构能构建出多种应用场景,适用于各行各业。
腾讯云serverless团队
2020/03/25
9370
如何优雅地部署一个 Serverless Next.js 应用
上一篇《前端福音:Serverless 和 SSR 的天作之合》,详细介绍了 SSR 相关知识,同时也提到了 Serverless 给 SSR 方案带来的福利。但它只是将 Next.js 应用部署到 Serverless 服务上而已,并不适合实际生产业务。为此本篇专门针对 Next.js 的 SSR 方案进行了探索和优化,一步一步带大家了解,如何基于 Serverless 架构部署一个实际的线上业务。
腾讯云serverless团队
2020/07/17
3.2K0
如何优雅地部署一个 Serverless Next.js 应用
Serverless + Egg.js 后台管理系统实战
作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它的高扩展性和丰富的插件,极大的提高了开发效率。开发者只需要关注业务就好,比如要使用 redis,引入 egg-redis 插件,然后简单配置就可以了。正因为如此,第一次接触它,我便喜欢上了它,之后也用它开发过不少应用。
网站运维工程师
2020/03/11
5K0
使用腾讯云 Serverless 开发公众号后端
如果说云计算是希望资源能够像自来水一样,隋开随用、随关随停,那么 Serverless 就是云计算的未来方向之一。相较于 IaaS、Kubernetes 这些运行时,Serverless 提供更细粒度资源控制的同时,还能提供更大的弹性,允许开发者快速交付功能。
陈少文
2021/08/28
3.5K0
使用腾讯云 Serverless 开发公众号后端
Serverless + Egg.js 后台管理系统实战
作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它的高扩展性和丰富的插件,极大的提高了开发效率。开发者只需要关注业务就好,比如要使用 redis,引入 egg-redis 插件,然后简单配置就可以了。正因为如此,第一次接触它,我便喜欢上了它,之后也用它开发过不少应用。 有了如此优秀的框架,那么如何将一个 Egg.js 的服务迁移到 Serverless 架构上呢? 背景 我在文章《基于 Serverless Com
腾讯云serverless团队
2020/03/20
4.5K0
开发者:Serverless 从懵比到实战
作者介绍:陌小路,哔哩哔哩前端 GitHub:https://github.com/STDSuperman 本文选自「掘金x腾讯云征文|万物皆可 Serverless」 原文链接:https://juejin.cn/post/6895346770177687566 Serverless 是一种执行模型(execution model)。在这种模型中,云服务商负责通过动态地分配资源来执行一段代码。云服务商仅仅收取执行这段代码所需要资源的费用。代码通常会被运行在一个无状态的容器内,并且可被多种事件触发(htt
腾讯云serverless团队
2021/01/05
1.1K0
如何搭建一个高效安全的API开放平台:完整步骤指南
在当今数字化时代,API(应用程序编程接口)已成为连接不同系统和服务的桥梁。一个设计良好的API开放平台能够为企业带来巨大的商业价值和技术优势。本文将详细介绍从零开始搭建一个API开放平台的完整步骤,涵盖技术选型、架构设计、安全防护和运维管理等关键环节。
编程小白狼
2025/04/24
1180
如何将传统 Web 框架部署到 Serverless
因为 Serverless 的“无服务器架构”应用相比于传统应用有很多优点,比如:无需关心服务器、免运维、弹性伸缩、按需付费、开发可以更加关注业务逻辑等等,所以现在 Serverless 应用已经逐渐广泛起来。
政采云前端团队
2022/12/01
2.7K0
如何将传统 Web 框架部署到 Serverless
推荐阅读
相关推荐
Serverless 应用开发指南:serverless 的 hello, world
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验