腾讯云函数挂载CFS文件系统的实践

2023-03-28 09:39:49 浏览数 (1)

背景

在云函数开发的过程中,我们难免碰到需要访问本地文件的需求(例如:为了通过ip地址获得城市名称,云函数需要检索近一百MB的ip地址库文件),由于云函数无状态的特性,自身并不与特定服务器和本地硬盘关联,而远程访问COS对象存储等方式,则面临将大文件下载到本地缓存中仅获取寥寥数行信息。这时,挂载CFS文件系统是一个较佳的选择。

下面以Node.js 12.16的云函数环境描述如何使用serverless.yml来配置CFS文件系统。

前置操作

serverless.yml 文件中设置如下配置:

代码语言:txt复制
memorySize: 1024 # 由于ip地址库文件较大,提升内存的大小
代码语言:txt复制
cfs:
    - cfsId: cfs-xxxxxxxx # 文件系统实例 id
      mountInsId: cfs-xxxxxxxx # 文件系统挂载点 id
      localMountDir: /mnt/ # 本地挂载点,云函数目录
      remoteMountDir: / # 远程挂载点,CFS 目录

向CFS中写入文件

代码语言:txt复制
'use strict';
const fs = require('fs');

exports.main_handler = async (event, context) => {
  await fs.promises.writeFile('/mnt/myfolder/myfile.txt', JSON.stringify(event));
  return event;
};

node.js代码片段,将COS中的文件写入到CFS中

腾讯云APPID请在这里查看腾讯云APPID请在这里查看
腾讯云SecretId和SecretKey请在这里查看腾讯云SecretId和SecretKey请在这里查看
代码语言:txt复制
'use strict';

const COS = require('cos-nodejs-sdk-v5')

const APPID = '130*******' // 请替换为您使用的腾讯云APPID
const SECRET_ID = '******' // 请替换为您的 SecretId
const SECRET_KEY = '******' // 请替换为您的 SecretKey
const REGION = 'ap-shanghai' // 我目前使用的都是ap-shanghai,如果后续有变化,请替换为您bucket所在的地域

const cosInst = new COS({
  SecretId: SECRET_ID,
  SecretKey: SECRET_KEY
});

exports.main_handler = async (event, context) => {
    const bucketName = 'kanas';
    const bucket = `${key}-${APPID}`;
    const downloadPath = `/mnt/ipv4.ipdb`;

    cosInst.getObject({
      Bucket: bucket, /* 填入您自己的存储桶,必须字段 */
      Region: REGION,  /* 存储桶所在地域,例如ap-shanghai,必须字段 */
      Key: 'ipv4.ipdb',  /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */
      Output: downloadPath,
    }, function(err, data) {
      console.log(err || data);
    });

    return event
};

参考文档:

云函数挂载 CFS 文件系统: https://cloud.tencent.com/document/product/583/46199

创建文件系统及挂载点: https://cloud.tencent.com/document/product/582/9132

在 Linux 客户端上使用 CFS 文件系统: https://cloud.tencent.com/document/product/582/11523

在云函数 SCF上使用 CFS: https://cloud.tencent.com/document/product/582/47148

云函数tencent-multi-scf配置:

https://github.com/serverless-components/tencent-multi-scf/blob/master/docs/configure.md

0 人点赞