30分钟

无服务器云函数开发实战

无服务器云函数开发实战

实验预计耗时:30分钟

1. 课程背景

1.1 课程目的

腾讯云云函数是腾讯云提供的无服务器(Serverless)执行环境。开发者只需编写简单的、目的单一的云函数,并将它与您的腾讯云基础设施及其他云服务产生的事件关联起来。

本课程实验会带领学员以腾讯云 SCF 为例,搭建一个图书管理的后台,体验腾讯云无服务器云函数 SCF 的基本使用。

1.2 课前知识准备

学习本课程前,学员需要了解以下前置知识:

  • 无服务器云函数
    • 无服务器云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。
    • Serverless 不代表没有服务器,只是用户不再需要关心底层资源。当然,这也意味着用户无法登录服务器,并且也不需要想办法优化它。开发者只需关心最核心的代码片段。这些代码完全由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,可以轻易实现快速迭代、极速部署。

2.实验环境

2.1 实验操作环境

本课程需要以下实验操作环境:

  1. 可以接入互联网的笔记本电脑或者台式机(本实验使用 Windows 系统)
  2. 要求有腾讯云账号,能够访问腾讯云官网https://cloud.tencent.com

2.2 实验架构图

本实验案例以腾讯云云函数为平台,构建一个简单的图书管理系统。实验通过 API 网关把 SCF 的逻辑通过 API 的方式暴露出来,以供调用,最终返回图书信息给用户。本实验的架构图如下所示:

图书管理后台提供的接口有:

  • /article/{articleId} GET。根据图书 id,返回图书的信息。
  • /article/ GET。返回全部图书列表信息。

2.3 实验的数据规划表

资源名称

数据

说明

腾讯云账号

账号:XXXXXXXX、密码:XXXXXXXX

涉及产品如下:API 网关、SCF

3. 实验流程

本实验案例以腾讯云云函数为平台,构建一个简单的图书管理系统,用户可以通过URL访问获取文章信息和文章列表。

本实验涉及两个部分:

  1. 实验环境部署
  2. 测试云函数及API网关

4. 实验步骤

任务1 实验环境部署

【任务目标】

在任务中,您将创建一个函数来实现博客文章的 API 响应。

【任务步骤】

1、新建无服务云函数

1.登录腾讯云官网,进入无服务器云函数控制台,选择函数服务页面。网址为:https://console.cloud.tencent.com/scf?rid=1

2.在函数服务选项卡内,选择广州地域,单击新建,进入新建函数页面。

3.然后填写以下参数信息,单击下一步。如下图所示:

配置

参数

函数名称

bookstore

运行环境

Python 3.6

创建方式

模板函数

模板搜索

api_service

4.保持默认配置,单击完成,完成函数的创建。

5.选择创建好的函数(这里以bookstore为例),点击函数代码页签:

确认代码如下(如已有变更,将代码拷贝到代码编辑框中并保存)。

# -*- coding: utf-8 -*-

import sys
import logging
import json

logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger()
logger.setLevel(level=logging.INFO)

logger.info('Loading function')

testArticleInfo=[
    {"id":1,"category":"blog","title":"hello world","content":"first blog! hello world!","time":"2017-12-05 13:45"},
    {"id":2,"category":"blog","title":"record info","content":"record work and study!","time":"2017-12-06 08:22"},
    {"id":3,"category":"python","title":"python study","content":"python study for 2.7","time":"2017-12-06 18:32"},
]

def main_handler(event,content):
    logger.info('start main_handler')
    if "requestContext" not in event.keys():
        return {"errorCode":410,"errorMsg":"event is not come from api gateway"}
    if event["requestContext"]["path"] != "/article/{articleId}" and event["requestContext"]["path"] != "/article":
        return {"errorCode":411,"errorMsg":"request is not from setting api path"}
    if event["requestContext"]["path"] == "/article" and event["requestContext"]["httpMethod"] == "GET": #获取文章列表
        retList = []
        for article in testArticleInfo:
            retItem = {}
            retItem["id"] = article["id"]
            retItem["category"] = article["category"]
            retItem["title"] = article["title"]
            retItem["time"] = article["time"]
            retList.append(retItem)
        return retList
    if event["requestContext"]["path"] == "/article/{articleId}" and event["requestContext"]["httpMethod"] == "GET": #获取文章内容
        articleId = int(event["pathParameters"]["articleId"])
        for article in testArticleInfo:
            if article["id"] == articleId:
                return article
        return {"errorCode":412,"errorMsg":"article is not found"}
    return {"errorCode":413,"errorMsg":"request is not correctly execute"}

2、新建 API 网关

1.进入 API 网关控制台。

2.新建 API 网关,配置如下图所示,确认无误后点击提交

配置

参数

所属地域

广州

服务名

online_bookstore_api

前端类型

http和https

访问方式

公网

集群类型

共享型

3.API 网关创建成功后,点击 API 网关名称进入该 API 网关的详情页面。

4.单击顶部菜单栏右侧管理API,选择通用API, 单击新建按钮创建 API。

3、创建 ID 搜索的 API 网关

1.创建按照ID获取图书信息的API网关,首先进行前端配置:

配置

参数

API名称

根据ID获取文章信息

前端类型

HTTP

路径

/article/{articleId}

请求方法

GET

鉴权类型

免鉴权

参数配置

参数名:articleId;参数位置:Path;类型:string

2.进行后端配置,注意后端类型选择 cloud_function云函数的名称选择之前创建的无服务器云函数名称,点击下一步

3.选择返回类型JSON,点击完成按钮完成 API 的创建。

4.发布服务,点击提交

4、创建获取列表的 API 网关

1.创建获取图书信息列表的 API 网关,具体步骤和步骤3大体相同,注意接口的路由信息是不一样的。首先点击新建通用 API:

2.前端配置,信息参考如下;

配置

参数

API 名称

获取文章列表

前端类型

HTTP

路径

/article

请求方法

GET

鉴权类型

免鉴权

3.后端配置,信息参考如下;

4.选择返回类型为 JSON,点击完成按钮完成 API 的创建。

5、触发管理

1.进入 SCF 的控制台,选择 Step 1中新建的函数(这里以 bookstore 为例),选择触发管理页签,点击创建触发器。

2.添加无服务云函数(这里以 bookstore 为例)的触发器,填写触发规则如下,确认无误后点击提交

配置

参数

触发方式

API网关触发器

API服务类型

使用已有API服务

API服务

选择已创建的API服务online_bookstore_api

请求方法

ANY

发布环境

发布

鉴权方法

免鉴权

任务2 测试云函数及 API 网关

【任务目标】

对前面任务创建的云函数和 API 进行测试。

【任务步骤】

1、新建测试模板

1.在完成前面实验步骤后,进入新创建的无服务器云函数(这里是 bookstore)详情页,选择函数代码页签,在代码编辑区下方找到当前测试模板,在弹出的下拉框中选择 API Gateway 事件模板

2.点击 API Gateway 事件模板后的小眼睛,修改测试内容

2-1.修改访问的 URL 路径,请求的方法为 GET,如下图所示:

    "path": "/article/{articleId}",
    "httpMethod": "GET",

2-2.定义 URL 路径中的变量

  "pathParameters": {
    "articleId": "1"
  },

2-3.修改 HTTP 请求的方法为 GET(约37行),然后点击提交。

3.创建测试模板进行测试,校验测试结果:

2、验证结果

1.在 API 网关的服务信息栏,查看 API 网关的域名,点击复制。

2.测试新建的 API 网关,注意服务是发布在发布环境中,所以在测试服务时需要在默认外网域名后加上release。

{公网访问地址}/release/article

具体操作结果如下图所示:

3.测试通过图书 ID 查找图书信息的 API:

{公网访问地址}/release/article/1

至此,您已经完成了无服务器云函数开发实战的全部任务。

5. 注意事项

如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。