ServerLess之云函数实践

Stella981
• 阅读 736

  ServerLess之云函数实践-天气API

  前言

  云计算是大势所趋

  Serverless 架构即“⽆服务器”架构,它是一种全新的架构方式,是云计算时代⼀种⾰命性的架构模式

  FaaS(Function as a Service - 函数即服务) 是在无状态容器中运行的事件驱动型计算的执行模型

  ☁️云函数算是FaaS的一种具体的形式,由云商(腾讯云,阿里云,七牛云等等)提供计算平台,开发者只需关注函数逻辑的实现,将服务器相关的配置管理工作统统交给云商去做,不再花大精力去管理服务器

  我们只需要提供一段代码,由云商研制的 FaaS 方案帮我们选择语言对应技术栈的最佳实践,基于内置的扩展机制按实际需要,进行动态扩展计算资源,轻松部署服务到公网,并提供可靠的监控、报警保障,不需要以前一样,服务器资源不是大部分时间处于闲置状态,就是遇到超大浏览需要紧急扩容

  给 FaaS 一个函数,就能上线一个高可用的服务

  简单的服务接口开发的专业性要求降低了,前端有了更大的发挥空间,包括但不限于:

  BFF(Backend For Frontend)

  SSR(Server-Side Rendering)

  上面简单的介绍了一下“云函数”,有一点抽象,下面就结合实操,来搞一个”实用的“

ServerLess之云函数实践

  ☁️搞一个简单的天气查询API

  就像这样的:点我体验

  参数:cityId 地区参照表

  所使用到的技术与平台

  Node.js (云函数选用JavaScript语言)

  腾讯云 - 免费的云函数服务

  阿里云 - 免费的墨迹天气查询服务

  下面开始手把手教程

  腾讯云侧

  1. 注册账号

  注册腾讯云账号并登录

  https://cloud.tencent.com/

  2. 进入控制台

  点击右上角进入控制台

ServerLess之云函数实践

  3. 云函数-函数服务

  左上角选择云产品,输入云函数,选择 云函数-函数服务

ServerLess之云函数实践

  4. 新建云函数

  新建一个云函数

ServerLess之云函数实践

  5. 录入基本信息

  符合规范的函数名称

  环境选择一个Node.js的环境

  选择空白函数

  然后下一步

ServerLess之云函数实践

  6. 完成创建

  直接点击完成,什么都不更改

ServerLess之云函数实践

  7. 触发器

  然后来到这个界面,点击触发管理

ServerLess之云函数实践

  8. 创建触发器

  创建触发器,填写相关信息

  触发方式-API网关触发

  请求方法-GET

  鉴权方法-免鉴权

ServerLess之云函数实践

  9. 大功告成

  体验一下生成的触发器链接

ServerLess之云函数实践

  10. 观察接口

  观察响应结果与我们的代码

  响应结果

ServerLess之云函数实践

  我们的云函数代码

ServerLess之云函数实践

  关注红色框中的内容

  执行方法:index.main_handler

  index 对应的就是 index.jsmain_handler就是就是index.js中对外暴露的 main_handler方法

  再看代码

  'use strict';

  exports.main_handler = async (event, context) => {

  console.log("Hello World")

  console.log(event)

  console.log(event["non-exist"])

  console.log(context)

  return event

  };

  根据上上图返回的结果可知其对应的是event里面的内容: 即我们可以在event中取到我们请求的参数,header,body等信息,便于我们执行后续逻辑

  context的内容(console.log的内容)在哪里看?

  11. 日志查询

ServerLess之云函数实践

  在日志查询面板可以查询到我们接口的调用信息,响应状态与log的内容

  12. 安装依赖的模块

  这个和本地安装差不多,一个敲命令,一个点按钮

  我们使用本地终端创建一个package.json文件

  npm init -y

ServerLess之云函数实践

  package.json

  {

  "name": "faas",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

  "test": "echo \"Error: no test specified\" && exit 1"

  },

  "keywords": [],

  "author": "",

  "license": "ISC"

  }

  如安装axios,本地执行安装先

  yarn add axios

  # or

  npm i axios

  此时的package.json

  {

  "name": "faas",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

  "test": "echo \"Error: no test specified\" && exit 1"

  },

  "keywords": [],

  "author": "",

  "license": "ISC",

  "dependencies": {

  "axios": "^0.21.0"

  }

  }

  在平台上创建一个 package.json文件,并把上述内容粘贴进去,ctrl/command + S 保存修改的内容

ServerLess之云函数实践

ServerLess之云函数实践

  选择在线安装依赖,然后点击保存

ServerLess之云函数实践

  安装完成后 会出现 node_modules目录

ServerLess之云函数实践

  JS云函数创建相关流程,差不都陈述完毕

  下面开始我们的代码编写

  天气云函数编写

  代码同步到线上的方式

  可以本地编辑后上传文件

  使用腾讯云的cli工具上传

  复制粘贴

  这里比较简单我们就复制粘贴了

  先简单编写一下大体结构,然后点击保存,再访问刚刚的触发器链接观察返回的结果

  index.js

  'use strict';

  const http = require('axios').default

  function getNowWeather(cityId = 3) {

  // 待编写

  return {

  data:{

  cityId

  }

  }

  }

  exports.main_handler = async (event, context) => {

  // 结构取得url中传递的参数

  const { queryString: { cityId } } = event

  return getNowWeather(cityId)

  };

  下面实现getNowWeather的逻辑就要用到阿里云的服务了

  阿里云侧

  先白嫖个服务

  阿里云-免费版气象天气服务(cityid)-墨迹天气

  根据其文档中的请求示例,我们先构建出 Node版本的方法

  const http = require('axios').default

  function getNowWeather(cityId = 3) {

  const token = ''

  const appcode = ''

  const nowStatusURL = 'http://freecityid.market.alicloudapi.com/whapi/json/alicityweather/briefcondition' // 精简实况的请求URL

  const data = `cityId=${cityId}&token=${token}` // 请求参数

  const headers = { // header

  'Authorization': `APPCODE ${appcode}`,

  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'

  }

  // 发送请求

  return http.post(nowStatusURL, data, {

  headers

  }).then(res => res.data)

  }

  购买服务后根据文档找到token与appcode即可

  控制台->API网关->华北2(北京)

ServerLess之云函数实践

  为了节约查找token与appcode的时间,下面列一下步骤(吐槽,阿里云的文档太拦了,不方便信息定位)

  token与appcode

  API网关页面地址

  token: 应用管理->选择一个应用->已授权API列表->选择自己要查看的API->点击调试API->调试面板的token参数即是所需参数

  appcode: 应用管理->选择一个应用->AppCode面板

ServerLess之云函数实践

   郑州做人流多少钱http://www.hnzzxb.com/

ServerLess之云函数实践

  最终代码

ServerLess之云函数实践

郑州人流医院http://www.zztjyyfk.com/

  index.js

  'use strict';

  const http = require('axios').default

  function getNowWeather(cityId = 3) {

  const token = ''

  const appcode = ''

  const nowStatusURL = 'http://freecityid.market.alicloudapi.com/whapi/json/alicityweather/briefcondition' // 精简实况的请求URL

  const data = `cityId=${cityId}&token=${token}` // 请求参数

  const headers = { // header

  'Authorization': `APPCODE ${appcode}`,

  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'

  }

  // 发送请求

  return http.post(nowStatusURL, data, {

  headers

  }).then(res => res.data)

  }

  exports.main_handler = async (event, context) => {

  const {queryString:{cityId}} = event

  return await getNowWeather(cityId)

  };

  触发器链接

  最后

  到此一个云函数就开发完毕了

  可以感觉到,如果熟悉创建流程了,只需要几分钟就能创建一个提供服务的API,极大的节约了成本

  不懂服务端部署,服务器运维,Linux的开发者可以通过 云函数+云数据库(关系数据库,非关系数据库) 快速搭建一个后端服务

  文件存储服务可以使用OSS

  开发者只需要通过云函数调用各服务提供的API即可完成一个后端服务的构建

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这