[腾讯云]无服务器云函数SCF体验Serverless(公测中)

1,175次阅读

共计 4277 个字符,预计需要花费 11 分钟才能阅读完成。

什么是无服务器Serveeless

Serverless并不代表没有了服务器,只是用户不再需要关心这些底层资源了。当然,这也意味着用户无法登录服务器,并且也不需要想办法优化它。开发者只需关心最核心的代码片段,跳过复杂的、无聊的其他工作。这些代码完全由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,可以轻易实现快速迭代、极速部署。

腾讯云无服务器云函数(Serverless Cloud Function)可以实现在没有购买和管理服务器时仍能运行代码。只需要进行核心代码的编写及设置代码运行的条件,代码即可在腾讯云基础设施上自动、安全地运行,是许多场景下理想的计算平台。

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

体验: 使用 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.solibcrypto.so.1.0.0libssl.solibssl.so.1.0.0 四个文件也拷贝到项目根目录下。

拷贝完成后的目录如下图:

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

二 部署云函数

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("","")

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

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 .

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

安装完成后,项目根目录文件如下图所示:

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

3、云函数打包及创建

在完成以上几部操作以后,项目目录里就有了 mysqldump 工具及依赖的 so 库,有了 cos sdk依赖包,以及我们的入口函数文件 index.py。接下来就需要将项目文件打包为 zip 格式以便上传至云函数,完成函数创建。

 

[root@iZuf616wo7jtytzkhmhmb5Z serverless_db2cos]# zip mysqldump.zip * -r

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

4、将打包好的zip文件上传至腾讯云COS

[v_notice]

通过如上步骤创建的 zip 包,由于体积稍大,需要通过对象存储 COS 的方式上传。

[/v_notice]

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

三 创建云函数并测试

1、进入腾讯SCF无服务器云函数

2、在与COS相同地域,建立函数服务

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

3、选择通过COS上传zip包

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

4、触发方式

可手动添加触发方式,如定时等,实现定时执行该函数(此处跳过,不做配置)

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

5、最后,点击完成,完成云函数的部署

6、点击“测试”

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

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、点击“测试运行”

结果如下:

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

9、查看COS bucket

[腾讯云]无服务器云函数SCF体验Serverless(公测中)

后记

完成函数创建后,我们就可以测试函数的运行情况,并完成最终的定时触发配置。

  • 通过控制台右上角的测试按键,可以直接触发函数的运行。
  • 通过函数的输出日志,可以查看代码的运行情况,检查 dump 文件是否生成正常,是否成功上传到 COS 存储桶中。
  • 同时也可以到对应的备份存储桶中,查看生成的文件,检查是否数据正确,备份正常。

确认函数测试运行正常后,可以在触发器中,为函数新增一个定时触发器。我们可以根据自身需要,配置为每天,或每 12 小时,或每月的指定时间运行。定时触发器可以按 crontab 格式编写触发时间,既可以按一定时间周期,也可以指定具体时间运行。

在本代码实操示例教程中,我们通过使用 mysqldump 工具,以及对象存储 COS 的 SDK,实现了数据库的按时备份能力。通过使用云函数,我们无需使用云服务器以及配置 crontab 脚本,就可以实现高可靠的定时运维能力。云函数,以及云函数的定时触发器,在运维过程中可以被广泛使用,实现例如备份、检查、告警、同步等各种能力。

 

正文完
 
mervinwang
版权声明:本站原创文章,由 mervinwang 2018-09-12发表,共计4277字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
文章搜索