共计 4277 个字符,预计需要花费 11 分钟才能阅读完成。
什么是无服务器Serveeless
Serverless并不代表没有了服务器,只是用户不再需要关心这些底层资源了。当然,这也意味着用户无法登录服务器,并且也不需要想办法优化它。开发者只需关心最核心的代码片段,跳过复杂的、无聊的其他工作。这些代码完全由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,可以轻易实现快速迭代、极速部署。
腾讯云无服务器云函数(Serverless Cloud Function)可以实现在没有购买和管理服务器时仍能运行代码。只需要进行核心代码的编写及设置代码运行的条件,代码即可在腾讯云基础设施上自动、安全地运行,是许多场景下理想的计算平台。
体验: 使用 SCF 定时备份数据库到 COS
本代码实操教程假设以下情况:
- 需要对数据库定期的导出备份;
- 希望把备份结果放到 COS 以便于随时下载使用
一 准备mysqldump工具(推荐基于Linux环境)
1、创建项目根目录
[root@iZuf616wo7jtytzkhmhmb5Z ~]# mkdir serverless_db2cos
2、配置根目录环境
[url href=https://dev.mysql.com/downloads/mysql]MySQL社区版下载[/url]
以操作系统 Linux – geneic,操作系统版本 x86,64-bit 为例,下载 tar.gz 压缩包并存储在本地。
下载完成后,解压压缩包,可以看到解压后的文件夹内包含有 bin、lib 等目录;而我们要找到的 mysqldump 工具就在 bin 目录下。
同时可以看到 bin 目录下还有 libcrytpo.so.1.0.0 和 libssl.so.1.0.0 两个动态库。这两个库也是工具在运行时所要依赖的库,但在 bin 下的这两个文件实际为文件链接,实际指向分别是 ../lib/libcrypto.so.1.0.0
和 ../lib/libssl.so.1.0.0
,因此这两个真实文件是在 lib 目录下。
因此,为了确保 mysqldump 工具可以运行成功,我们将 bin 目录下的 mysqldump 文件拷贝到我们提前准备的项目根目录下,并给予执行权限。
[v_error]
由于项目目录下的 mysqldump 工具作为二进制程序,需要在云函数的环境中运行,因此需要具有可执行权限,需要在 Linux 或 Mac 环境下为此文件赋予可执行权限后再打包,因此建议在 Linux 或 Mac 环境下执行打包。
我们可以将项目目录放置到 Linux 或 Mac 环境下后,通过在项目目录下执行 `chmod +x mysqldump` 命令,为 mysqldump 工具附加上可执行权限。
[/v_error]
同时将 lib 目录下的 libcrypto.so,libcrypto.so.1.0.0,libssl.so,libssl.so.1.0.0 四个文件也拷贝到项目根目录下。
拷贝完成后的目录如下图:
二 部署云函数
1、编写Python脚本
在项目根目录下创建 index.py 文件,并在文件内输入如下内容并保存
# -*- coding:utf-8 -*-
import os
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging
import time
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
def backup2cos(client,file, bucket, key):
response = client.put_object_from_local_file(
Bucket=bucket,
LocalFilePath=file,
Key=key,
)
return response
def main_handler(event, context):
# ServerLess 调用
DB_HOST = event['dbhost'] #'sh-cdb-irye027y.sql.tencentcdb.com'
DB_PORT = event['dbport'] #'63374'
DB_USER = event['dbuser'] #'root'
DB_USER_PASSWORD = event['dbpwd'] #'abc123!@#'
DB_NAME = event['dbname'] #'cAuth'
SECRET_ID = event['secretid'] #'AKIDQm6iUh2NJ6jL41tVUis9KpY5Rgv49zyC'
SECRET_KEY = event['secretkey'] #'xxxlbNyQo4EMJ5jPGA7sUvHWaSAlxxxxx'
REGION = event['cosregion'] #'ap-shanghai'
BACKUP_BUCKET = event['cosbucket'] #"dbbackup-1253970226"
config = CosConfig(Secret_id=SECRET_ID, Secret_key=SECRET_KEY, Region=REGION, Token="")
client = CosS3Client(config)
timestr = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time()))
db = DB_NAME
filename = db+"-"+timestr+".sql"
filepath = '/tmp' + '/' + filename
print("Start Backup")
try:
dumpcmd = "./mysqldump -h " + DB_HOST + " -P " + DB_PORT + " -u" + DB_USER + " -p'" + DB_USER_PASSWORD + "' " + db + " > " + filepath
except Exception as e:
print(e)
print(dumpcmd)
print(os.popen(dumpcmd).read())
print("Backup script completed")
print("Your backups has been created in '" + filepath + "' file")
print(os.popen('ls -l /tmp').read())
print("Finish backup")
print("Start send to cos")
backup2cos(client,filepath,BACKUP_BUCKET,"/"+filename)
print("Finish send to cos")
return "OK 200"
if __name__ == "__main__":
main_handler("","")
2、安装python依赖包
在代码中,我们使用到了 COS 的 v5 版本 sdk 进行备份后的文件上传操作,因此我们需要安装好依赖便于脚本调用。我们可以在项目根目录通过执行 pip install cos-python-sdk-v5 -t .
命令,来将 COS 的 Python sdk 以及相关依赖安装到项目目录中。
[root@iZuf616wo7jtytzkhmhmb5Z serverless_db2cos]# pip3 install cos-python-sdk-v5 -t .
安装完成后,项目根目录文件如下图所示:
3、云函数打包及创建
在完成以上几部操作以后,项目目录里就有了 mysqldump 工具及依赖的 so 库,有了 cos sdk 及依赖包,以及我们的入口函数文件 index.py。接下来就需要将项目文件打包为 zip 格式以便上传至云函数,完成函数创建。
[root@iZuf616wo7jtytzkhmhmb5Z serverless_db2cos]# zip mysqldump.zip * -r
4、将打包好的zip文件上传至腾讯云COS
[v_notice]
通过如上步骤创建的 zip 包,由于体积稍大,需要通过对象存储 COS 的方式上传。
[/v_notice]
三 创建云函数并测试
1、进入腾讯SCF无服务器云函数
2、在与COS相同地域,建立函数服务
3、选择通过COS上传zip包
4、触发方式
可手动添加触发方式,如定时等,实现定时执行该函数(此处跳过,不做配置)
5、最后,点击完成,完成云函数的部署
6、点击“测试”
7、点击“新建模板”
参考下面的模板,填入相关信息,其中:
[v_notice]
dbhost:需要备份数据库的IP地址,支持CDB及RDS
dbport:需要备份数据库的连接端口
dbuser:数据库用户
dbpwd:数据库密码
dbname:数据库名
secretid:云API秘钥ID,获取方法见: 云API秘钥获取
secretkey:云API秘钥KEY
cosregion:COS所在地域
cosbucket:bucket名
[/v_notice]
{
"dbhost" : "139.224.112",
"dbport" : "3306",
"dbuser" : "root",
"dbpwd" : "123",
"dbname" : "wordpress",
"secretid" : "AKID54rSwEDD",
"secretkey" : "qUI1zjFWZVG",
"cosregion" : "ap-shanghai",
"cosbucket" : "nas-****"
}
8、点击“测试运行”
结果如下:
9、查看COS bucket
后记
完成函数创建后,我们就可以测试函数的运行情况,并完成最终的定时触发配置。
- 通过控制台右上角的测试按键,可以直接触发函数的运行。
- 通过函数的输出日志,可以查看代码的运行情况,检查 dump 文件是否生成正常,是否成功上传到 COS 存储桶中。
- 同时也可以到对应的备份存储桶中,查看生成的文件,检查是否数据正确,备份正常。
确认函数测试运行正常后,可以在触发器中,为函数新增一个定时触发器。我们可以根据自身需要,配置为每天,或每 12 小时,或每月的指定时间运行。定时触发器可以按 crontab 格式编写触发时间,既可以按一定时间周期,也可以指定具体时间运行。
在本代码实操示例教程中,我们通过使用 mysqldump 工具,以及对象存储 COS 的 SDK,实现了数据库的按时备份能力。通过使用云函数,我们无需使用云服务器以及配置 crontab 脚本,就可以实现高可靠的定时运维能力。云函数,以及云函数的定时触发器,在运维过程中可以被广泛使用,实现例如备份、检查、告警、同步等各种能力。