开发者社区 > 博文 > 实操干货 | Serverless快速构建疫情信息收集后端
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

实操干货 | Serverless快速构建疫情信息收集后端

  • 京东科技开发者
  • 2020-04-26
  • IP归属:北京
  • 206040浏览

1 概述


Serverless让开发者能够以更高的灵活性和更低的成本构建现代应用程序。开发者无需配置和管理服务器等基础设施,可将全部精力投入核心业务。

函数服务作为Serverless架构中的核心计算组件,可应用于各类Serverless架构,主要包括两大类:Web、移动、IoT、AI等无服务器后端和数据处理系统后端。其中,Web、移动serverless后端的典型场景应用最为广泛,本文介绍如何使用函数服务+API网关构建疫情信息收集后端,主要包括问卷提交和问卷数据查看两个函数场景。

 

操作流程

本指南的操作流程分为如下4个步骤:

1、 创建数据库用于存储问卷结果

2、 创建并测试问卷提交函数

3、 创建API网关触发器,通过API验证函数执行

4、 创建并测试请求问卷数据函数

 

使用的云服务

本指南涉及到的云产品服务及用途如下:

序号

云产品

功能及用途

1

函数服务

创建函数,处理业务逻辑

2

API网关

作为函数服务触发器,提供前端调用

3

云缓存Redis

存储问卷结果

4

私有网络

用户创建函数和Redis的私有网络环境

 

2 操作指南


2.1 step1创建数据库存储问卷结果

2.1.1 前提准备

创建云缓存Redis和函数时,需要用到私有网络 和 子网 信息

1 创建VPC

l  选择云服务->网络->私有网络,进入私有网络VPC列表页面

l  在私有网络页面,选中华北-北京地域,单击“创建”按钮。

                                              1.png

 

l  配置网络名称为survey的私有网络,CIRD默认即可

1.png

l  单击“确定”按钮,完成子网创建。

 

2 创建子网

l  在私有网络页面,选择菜单中的子网,选中华北-北京地域,单击“创建”按钮

1.png

 

l  在私有网络survey下,配置名称为survey-subnet的子网即可

1.png

l  单击“确定”按钮,完成子网创建。

 

2.1.2 创建Redis数据库

1.登录京东智联云控制台,选择云服务->数据库与缓存->云缓存Redis。

2.在云缓存Redis页面,选中华北-北京地域,单击“创建”按钮。

3.选择“按配置”方式,创建一个Redis实例,规格为:标准版4.0、4G标准版;网络选择刚才创建的私有网络和子网;部署方案选择主从跨可用区A、B;密码选择免密访问(为了您的数据库访问安全,生产环境建议设置访问密码,此处为演示示例选择免密访问)。

1.png

 

4.单击“立即购买”,即可在Redis控制台列表创建出此实例

1.png

5.单击实例名称,查看实例详情,在“访问信息”中获取redis实例的访问域名和端口号,在后面函数代码访问数据库时会用到。

1.png

 

2.2 step2:创建并测试提交问卷函数

2.2.1 创建函数用于提交问卷

函数功能:通过API提交用户问卷答案至redis存储

1.  登录京东智联云控制台,选择云服务->弹性计算->函数服务。

2.   在函数服务页面,选择右侧菜单中的“函数列表”,在华北-北京地域,单击“新建函数”按钮。

1.png

 

3.创建survey-submit函数

请求用户PIN,问卷版本version,用户答案submit,上传至数据库,将入口文件index.py与依赖库redis SDK打包上传至函数服务。

创建survey-submit函数第一步:函数代码。创建运行时为Python2.7,函数名称为,survey-submit的函数,函数入口默认index.handler,代码配置处选择代码包上传,并将函数入口文件index.py与京东云redis的SDK至于同一个文件夹中,在本地打包为.zip格式,在选择文件处上传。上传完成后,单击下一步。

1.png

 

此处,提交问卷答案逻辑的函数入口文件的index.py代码如下:

#coding=utf-8

 

import json

import redis

import sys

 

'''

上传问卷结果

'''

 

def handler(event,context):

    if not bool(event):

        result = {

            'statusCode': 200,

            'headers': {},

            'body': "",

        }

     

        return result

 

    sys.setdefaultencoding('utf8')

 

    # get request data

    body = event['detail']['body']

    body = json.loads(body)

   

    if type(body) == unicode:

      body = json.loads(body)

     

    pin = body.get('pin', "")

    version = str(body.get('version', ""))

    submit = body.get('submit', "")

    print(pin)

    print(version)

    print(json.dumps(submit))

 

    # action

    r = redis.Redis(host='此处填入已创建redis实例的访问域名', port=6379, db=0)

   

    old = r.hget('submit_' + version, pin)

    if old != None :

      data = {'code': 1, 'desc': 'user have submitted'}

      data = json.dumps(data)

      result = {

        'statusCode': 200,

        'headers': {},

        'body': data,

      }

      return result

   

    submit = json.dumps(submit)

    r.hset('submit_' + version, pin, submit)

 

    data = {'code': 0, 'desc': 'success'}

    data = json.dumps(data)

    result = {

        'statusCode': 200,

        'headers': {},

        'body': data,

    }

 

return result 

 

4.创建survey-submit函数第二步:函数配置。默认函数执行内存和执行时间,单击高级配置,在私有网络和子网中选择刚才创建的私有网络和子网,确保与数据库redis实例所在的网络环境相同,单击下一步。

1.png

5.创建survey-submit函数第三步:触发方式。默认不创建触发器,单击完成,即可在函数列表控制台查看函数。

1.png

2.2.2 函数测试

1. 单击函数名称,进入函数详情,在右上角下拉菜单选择“配置测试事件”。

1.png

2.创建新的测试事件,模板选择API Gateway-event-template,事件名称test,将事件模板中“body”字符串替换为

"body": "{\"pin\": \"Jdcloud_0423\",\"version\": \"1\",\"submit\": [{\"option\": [\"A\"]}]}",

Body中将包含问卷提交内容:用户PIN、问卷版本version和问卷答案submit,单击完成测试事件创建。

1.png

 

3.函数测试:函数详情页面,右上方““选择测试事件””下拉菜单选择刚配置的“test”,单击测试,页面会弹出执行结果,在执行结果中,可查看函数返回及日志信息,验证函数测试成功。

1.png

2.3 step3创建API网关触发器,通过API调用函数执行

2.3.1 创建API

1. 登录京东智联云控制台,选择云服务->互联网中间件->API网关。

2. 在API网关页面,选择右侧菜单中的“开放API”—“API分组管理”,在华北-北京地域,单击“创建分组”按钮。

1.png

3.创建名称为submit的API分组,详情如下:

1.png

4.完成后直接单击“管理API”或从API分组列表中单击此API分组进入“API分组管理”,在“API列表”中选择“新建API”,创建名称为:submit,子路径为POST  /submit的API,其他默认不变,完成API创建。

1.png

 

2.3.2 函数绑定API触发器

1.为survey-submit函数绑定刚创建API触发器,在函数详情页面,选择“触发器”选项,绑定刚创建的API为API网关触发器,详情如下:

1.png

 

2.创建完成后,可以在触发器列表看到已绑定的API触发器,由于API未发布,所以状态为已停止。

1.png

3. 单击触发器名称“submit”跳转至API网关—API分组管理-API列表页面,对此API进行发布。

1.png

4.将此API发布至测试/预发/线上环境,若未配置环境中API分组的默认后端,可先行配置为mock后端,完成。(API请求会先请求到API对应的后端,若无法请求到会请求API分组的默认后端)

1.png

5.API发布完成后,在函数触发器列表可查看触发器状态为“已开启”,根据测试URL可访问此API,触发函数执行。

1.png

2.3.3 接口工具测试API与函数

1.通过测试工具测试API接口和函数,请求与刚才控制台测试重复的用户pin,在response中返回重复提交

1.png

 

2.请求一个新的用户pin,response返回成功,已将提交内容记录至redis中。

1.png


2.4   Step4:创建并测试请求问卷数据函数

函数功能:通过请求返回数据库中存储的问卷数据

2.4.1 创建函数

1.      与step2方法相同,在函数服务控制台创建一个新的函数。第一步函数代码:运行时为python2.7,函数名为query_1024_data,函数入口默认index.handler,代码配置处选择代码包上传,并将函数入口文件index.py与京东云redis的SDK至于同一个文件夹中,在本地打包为.zip格式,在选择文件处上传。上传完成后,单击下一步。

其中index.py函数如下:

#coding=utf-8

 

import json

import redis

 

'''

查询问卷结果

'''

 

def handler(event,context):

    # action

    r = redis.Redis(host='此处填入已创建redis实例的访问域名', port=6379, db=0)

 

    result = r.hgetall('submit_2')

    for key, value in result.items():

      print(key, ':', json.loads(value))

 

2.      第二步函数配置,与survey-submit相同。

3.      第三部,默认不创建触发器,完成

2.4.2 函数测试

方法与2.2.2 函数测试相同,通过控制台测试可查看问卷结果

1.      创建一个空的测试事件;

2.      选择该测试事件进行控制台测试

3.      查看函数执行结果(问卷内容及格式都可以根据实际场景定义),如下:

1.png


3 结束


以上,完成function问卷后端的开发,下面就可以和前端页面开发联调了,实际使用中还可通过函数版本、别名功能方便管理线上函数迭代发布。

                                  



共0条评论
文章数
544
阅读量
5632561

相关产品

  • 云缓存 Redis
    高性能、易扩展,兼容Redis的分布式存储和缓存服务
  • 私有网络
    安全隔离的网络空间,灵活部署
  • API 网关
    API网关,是API的托管服务。提供API的全生命周期管理,包含发布、管理、运行、维护、下线等。