【腾讯云TDSQL-C Serverless产品体验】与云函数一起来一次无服务器体验

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

【腾讯云TDSQL-C Serverless产品体验】与云函数一起来一次无服务器体验

本文关键字:腾讯云、云原生、云数据库、Serverless、云函数

文章目录

  • 【腾讯云TDSQL-C Serverless产品体验】与云函数一起来一次无服务器体验
    • 一、产品介绍
      • 1. TDSQL
      • 2. 云函数
    • 二、云函数配置
      • 1. 函数创建
      • 2. API创建
    • 三、TDSQL配置
      • 1. 免费创建
      • 2. 连接测试
        • (1)云端连接
        • (2)外网连接
    • 四、整合测试
      • 1. 数据导入
      • 2. 修改代码
      • 3. 调用测试

一、产品介绍

云原生的概念已经出现好一阵了,各大云服务厂商都在争相打磨自己的相关产品,无论是云数据库还是云函数或是其它的功能性产品都在努力的做到Serverless。这样既方便管理,也能节约成本,同时还能提升效率,作为开发者还是有必要了解一下。

1. TDSQL

TDSQL是腾讯云自研的新一代云原生关系型数据库。支持Serverless计费模式,随用随停,按量付费,并且方便管理,便于快速扩容,兼容MySQL。

2. 云函数

SCF是腾讯云提供的无服务器执行环境,可以在无服务器的情况下运行代码。并且结合云IDE可以直接在线修改,省去了打包发布的麻烦,并且自带多环境切换,更加便于调试和发布上线。

二、云函数配置

1. 函数创建

首先来到函数服务的管理界面:

首先切换地区,因为在后面的例子中,会结合云数据库,所以这里的地区推荐选择上海广州,然后我们点击新建【使用官方模板创建一个函数】:

直接搜索博客可以看到一个基于Python的简单案例,支持API访问,继续点击下一步

这里函数名称可以自定义,注意地域是否正确,描述如果有需要可以修改。

开启日志投递可以看到日志信息,很产生很少的费用,触发器配置这里选择暂不创建即可。然后勾选同意并单击完成。

等待创建后,会自动跳转到函数管理界面,我们可以切换到函数代码来查看在线编辑器,目前已经更换为云IDE:

目前已经有了一个使用静态数据的案例,我们先将完成API的创建,然后再结合TDSQL。

2. API创建

云函数开始运行后,我们需要为其设置访问的API。当然,同样需要在云函数中为其提供响应的支持,在这个例子中,主要提供了两个功能:

  • article【GET】:获取文章列表
  • article/{articleId}【GET】:获取文章内容

如果需要,我们可以扩展更多,现在我们先为已经有的两个功能来创建相应的调用API。首先打开API管理界面【第一次使用需要完成开通和授权流程】:

  • 依次选择服务 - 地域,然后点击新建

  • 自定义服务名后选择共享型即可,继续下一步

  • 勾选公网方便测试,然后点击提交即可。再次点击创建的服务名进入API管理界面:

  • 点击新建创建API:

  • 根据云函数中的定义配置相应的路径,并开启免认证,继续下一步:

  • 后端配置中选择云函数SCF,找到此前创建的Blog,其它如截图所示:

  • 响应结果中更改返回类型为JSON,点击完成:

  • 最后一步勾选测试,点击发布服务:

  • 回到API列表页,切换到API调试,选择test,然后点击发送:


可以看到如下结果:

使用本地工具测试也可通过:

其它API可以使用相同的配置流程。

三、TDSQL配置

1. 免费创建

目前在活动页面可以免费获得分布式数据库TDSQL MySQL版 1核2G一个月:

  • 选择合适地域后,点击立即购买

  • 确认并0元支付:

  • 购买完成后需要一些时间来准备,可以在管理界面查看:

  • 准备完毕后需要进行初始化,点击更多,选择初始化来完成相关配置:

  • 初始化完成后点击实例名称进入管理界面,点击账号管理 - 创建账号

  • 创建一个可以从任意IP连接的用户,主机填写%,其它可根据需要设置:

  • 确认后继续修改用户权限:

  • 为了方便测试,这里全选

2. 连接测试

(1)云端连接
  • 等待用户配置生效后,可以先在云端测试登录:


  • 可以在云端通过SQL完成需要的操作:

(2)外网连接

如果需要开启公网访问,需要按以下步骤操作:

  • 修改网络模式来配置安全组:


  • 在安全组控制台添加一个规则:

  • 检查是否有一个开放所有端口的规则,如果没有,则创建一个:

  • 回到云数据库实例,点击安全组


  • 选择之前配置好的安全组

  • 开启外网地址:


  • 等待开启完毕后,可以看到一长串的外网地址,可以用于本地连接或代码调试:


四、整合测试

现在云函数和数据库都已经就位,接下来稍微修改一下云函数中的代码,改为从数据库中动态读取数据,感兴趣的小伙伴也可以添加更多功能。

1. 数据导入

  • 创建数据库

创建一个blog数据库,编码使用UTF-8:

CREATE DATABASE blog CHARACTER SET utf8mb4;
  • 创建数据表

根据原有代码的样例数据创建一个与之结构相匹配的数据表:

USE blog;CREATE TABLE IF NOT EXISTS articles (id INT PRIMARY KEY AUTO_INCREMENT,category VARCHAR(255) NOT NULL,title VARCHAR(255) NOT NULL,content TEXT NOT NULL,time DATETIME NOT NULL
);
  • 插入数据

将样例数据插入到数据表中:

INSERT INTO articles (category, title, content, time) VALUES
('blog', 'hello world', 'first blog! hello world!', '2017-12-05 13:45:00'),
('blog', 'record info', 'record work and study!', '2017-12-06 08:22:00'),
('python', 'python study', 'python study for 2.7', '2017-12-06 18:32:00');

2. 修改代码

现在我们的所有数据已经在数据库中了,接下来我们做亿点点修改,将样例数据改为查询语句:

# -*- coding: utf-8 -*-import sys
import logging
import json
import pymysql
from datetime import datetimelogging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger()
logger.setLevel(level=logging.INFO)logger.info('Loading function')db_config = {'host': 'sh-xxx.sql.tencentcdb.com','port': 24747,'user': 'blog','password': 'xxx','database': 'blog','charset': 'utf8mb4'
}def get_db_connection():return pymysql.connect(**db_config)def format_datetime(obj):if isinstance(obj, datetime):return obj.strftime('%Y-%m-%d %H:%M:%S')raise TypeError("Type not serializable")def main_handler(event, context):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"}conn = get_db_connection()try:with conn.cursor(pymysql.cursors.DictCursor) as cursor:if event["requestContext"]["path"] == "/article" and event["requestContext"]["httpMethod"] == "GET":  # 获取文章列表cursor.execute("SELECT id, category, title, time FROM articles")articles = cursor.fetchall()for article in articles:article['time'] = format_datetime(article['time'])return articleselif event["requestContext"]["path"] == "/article/{articleId}" and event["requestContext"]["httpMethod"] == "GET":  # 获取文章内容articleId = int(event["pathParameters"]["articleId"])cursor.execute("SELECT * FROM articles WHERE id = %s", (articleId,))article = cursor.fetchone()if article:article['time'] = format_datetime(article['time'])return articleelse:return {"errorCode": 412, "errorMsg": "article is not found"}finally:conn.close()return {"errorCode": 413, "errorMsg": "request is not correctly execute"}

函数代码界面,更新替换代码后,需要点击部署按钮,以发布最新版本。确认右上角显示已部署,测试时也可以考虑开启自动部署,保存后即会部署。

本例中,环境已经内置了PyMySQL来连接数据库,所以我们只需要更新代码就可以了。如果需要安装其它依赖也可以参考文档,使用pip命令进行安装。

3. 调用测试

代码部署完毕后,再次调用API进行测试:

获取某个文章内容的API可以参考如下配置:


至此,我们所有的操作均在无服务器下进行,代码的更新和部署也十分的方便,如果有帮助请点赞留言,支持一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/212034.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UML建模图文详解教程06——顺序图

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著 顺序图概述 顺序图(sequence diagram,也…

网络图简单计算规则

单代号进度网络图(节点法) 概念 计算规则 (顺时针计算法) (TF取之差) (T:持续时间) ES → EF (ES取大EF加T) ↑ T ↑ (TF:总时差&…

Leetcode算法系列| 1. 两数之和(四种解法)

目录 1.题目2.题解解法一:暴力枚举解法二:哈希表解法解法三:双指针(有序状态)解法四:二分查找(有序状态) 1.题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…

JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)进行简化比较。 MERN 技术栈详解 MERN 技术栈包含四大具体组件: MongoDB&am…

Linux快速显示文件行号并跳转

有时候,想要在线上直接查看日志文件,搜索到关键词后,如果一直按n找下去,很麻烦,我们可以先显示出行号,确定好我们要找内容对应的行号,直接跳转过去。 esc进入命令模式,输入:set nu命…

C语言第二十五弹--打印菱形

C语言打印菱形 思路&#xff1a;想要打印一个菱形&#xff0c;可以分为上下两部分&#xff0c;通过观察可以发现上半部分星号的规律是 1 3 5 7故理解为 2对应行数 1 &#xff0c;空格是4 3 2 1故理解为 行数-对应行数-1。 上半部分代码如下 for (int i 0;i < line;i){//上…

【微信小程序】绘制二维码实现及解决canvas层级问题最佳实践

前言 很久没写微信小程序的需求了&#xff0c;今天来活儿要做个二维码扫码相关的需求&#xff0c;本来以为是洒洒水的事情&#xff0c;谁知道也折磨了大半天&#xff0c;今天特此记录一下~ 需求&#xff1a;点击按钮&#xff0c;弹出二维码&#xff0c;二维码内容固定为test …

JavaEE(SpringMVC)期末复习

文章目录 JavaEE期末复习一、单选题&#xff1a; JavaEE期末复习 一、单选题&#xff1a; 1.Spring的核⼼技术是&#xff08; A &#xff09;&#xff1f; A依赖注入 B.JdbcTmplate C.声明式事务 D.资源访问 Spring的核心技术包括依赖注入&#xff08;Dependency Injection&am…

2023年最新前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新

专项练习–持续更新 HTML篇CSS篇JS篇Vue篇TypeScript篇React篇微信小程序篇前端面试题汇总大全二&#xff08;含答案超详细&#xff0c;Vue&#xff0c;TypeScript&#xff0c;React&#xff0c;微信小程序&#xff0c;Webpack 汇总篇&#xff09;-- 持续更新 前端面试题汇总大…

Python中的解析器argparse

import argparse## 构造解析器 argparse.ArgumentParser() parse argparse.ArgumentParser(description"caculateing the area of rectangle")## 添加参数 .add_argument() parse.add_argument("--length",typeint,default20,helpThe length of rectangle…

编译器核心技术概览

编译技术是一门庞大的学科&#xff0c;我们无法对其做完善的讲解。但不同用途的编译器或编译技术的难度可能相差很大&#xff0c;对知识的掌握要求也会相差很多。如果你要实现诸如 C、JavaScript 这类通用用途语言&#xff08;general purpose language&#xff09;&#xff0c…

【前端】必学知识ES6 1小时学会

1.ES6概述 2.let和const的认识 3.let、const、var的区别 4.模板字符串 5.函数默认参数 6.箭头函数【重点】 ​编辑7.对象初始化简写以及案例分析 【重点】 8.对象解构 8.对象传播操作符 9.对象传播操作符案例分析 ​编辑 10.数组Map 11.数组Reduce 12.NodeJS小结 …