通过在函数上挂载 TOS Bucket,可以实现数据的持久化存储和多函数间共享。本文为您介绍如何使用函数服务对挂载的 TOS Bucket 进行读写。
通过在函数上挂载 TOS Bucket,一方面可以实现数据的持久化存储和多函数间共享;另一方面,函数可以像访问本地文件系统一样访问 TOS,简化资源访问和数据处理流程。
对象存储 TOS
已开通火山引擎对象存储 TOS。
已在函数待部署地域,创建 TOS Bucket,详细操作可参见 创建存储桶。
已获取 API 访问密钥,要求访问密钥具有 TOS 的访问权限。具体操作可参见 Access Key(密钥)管理 和 创建用户并授权。
注意
为了更好地进行权限管控,推荐使用最小化授权的 IAM 用户密钥,不建议直接使用火山引擎账号密钥或使用权限过大的 IAM 用户密钥。
函数服务
已开通火山引擎函数服务。
登录 函数服务控制台。
在顶部导航栏,选择目标地域。
在 函数列表 页面,单击 创建函数,选择 创建「事件函数」。
基础配置
自定义函数名称和备注信息。
函数代码
高级配置
启用存储配置的 TOS 挂载功能,其他参数保持默认。
配置项 | 说明 |
---|---|
AKSK | 输入访问密钥 Access Key ID 和 Secret Access Key,用于授权函数服务使用 TOS。该访问密钥必须具有 TOS 的读写权限。 |
TOS 挂载 | 添加 TOS 挂载点,本示例添加 1 个 TOS 挂载点。
|
单击 确定,完成函数创建。
本文使用以下代码示例为您演示如何读写挂载的 TOS Bucket。
说明
本代码逻辑仅供参考,实际使用时请根据您的业务场景按需修改。
在当前函数的代码页签,单击 index.py 文件,使用以下代码覆盖原有内容,并单击 保存。
import json import os def handler(event, context): print(f"received new request, event content: {event}") # 挂载点本地目录。请与实际保持一致。 mount_path = '/mnt/tos' # 读取挂载目录中的某个文件。实际使用时,请将 tos.txt 替换为挂载目录中存在的文件。 file_path = os.path.join(mount_path, 'tos.txt') if os.path.exists(file_path): with open(file_path, 'r') as file: content = file.read() print("Content of tos.txt:", content) else: print("tos.txt does not exist.") # 向挂载目录中写入文件。 write_path = os.path.join(mount_path, 'output.txt') with open(write_path, 'w') as file: file.write("Hello, TOS mount!") print("Wrote to output.txt in TOS mount.") result = { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json' }, 'body': json.dumps({ 'message': 'Hello veFaaS TOS mount!' }) } return result
将函数的当前代码和配置发布至线上。
在函数详情页面,单击右上角的 发布。
函数版本使用 Latest。其他参数保持默认。
单击 确定。等待函数发布完成。
测试函数,验证函数的返回结果是否符合预期。
在函数详情页面,单击右上角的 测试。
在弹出的函数测试页面,配置触发器类型和测试请求。
单击 测试。等待测试结果。
如图所示:函数返回了预期的内容,符合预期。
查看函数的实例日志,确认是否完成了预期的文件读写。
说明
函数存在多个实例时,建议逐一查看实例日志,锁定实际处理请求的实例。
如图所示:函数返回了 TOS 挂载目录下 tos.txt 的内容,并在 TOS 挂载目录下写入了 output.txt 文件。
登录 TOS 控制台,查看对应的挂载目录下是否写入了 output.txt 文件。
如图所示:目标 Bucket 的 /docdemo
目录下写入了 output.txt 文件。