You need to enable JavaScript to run this app.
导航
使用函数服务读写 TOS 挂载目录
最近更新时间:2024.09.06 19:27:21首次发布时间:2024.03.13 10:39:40

通过在函数上挂载 TOS Bucket,可以实现数据的持久化存储和多函数间共享。本文为您介绍如何使用函数服务对挂载的 TOS Bucket 进行读写。

场景介绍

通过在函数上挂载 TOS Bucket,一方面可以实现数据的持久化存储和多函数间共享;另一方面,函数可以像访问本地文件系统一样访问 TOS,简化资源访问和数据处理流程。

前提条件

  • 对象存储 TOS

    注意

    为了更好地进行权限管控,推荐使用最小化授权的 IAM 用户密钥,不建议直接使用火山引擎账号密钥或使用权限过大的 IAM 用户密钥。

  • 函数服务
    已开通火山引擎函数服务。

操作步骤

步骤一:创建函数并挂载 TOS

  1. 登录 函数服务控制台

  2. 在顶部导航栏,选择目标地域。

  3. 函数列表 页面,单击 创建函数,选择 创建「事件函数」

    • 基础配置
      自定义函数名称和备注信息。

    • 函数代码

      • 运行时:选择 Python
      • 代码模板:选择 vefaas-python38-default
    • 高级配置
      启用存储配置的 TOS 挂载功能,其他参数保持默认。

      alt

      配置项说明
      AKSK输入访问密钥 Access Key ID 和 Secret Access Key,用于授权函数服务使用 TOS。该访问密钥必须具有 TOS 的读写权限。

      TOS 挂载

      添加 TOS 挂载点,本示例添加 1 个 TOS 挂载点。

      • Bucket:选择待挂载的 TOS Bucket。

      • 访问地址:选择 Bucket 后将自动获取。

      • Bucket 子目录:选择函数要访问的 Bucket 子目录。必须以/开头。本示例为/docdemo

      • 本地目录:配置函数运行环境中的本地目录。本示例为/mnt/tos

      • 权限:本示例选择读写权限,允许函数对 Bucket 挂载的本地目录进行读写操作。

  4. 单击 确定,完成函数创建。

步骤二:在线编辑代码

本文使用以下代码示例为您演示如何读写挂载的 TOS Bucket。

说明

本代码逻辑仅供参考,实际使用时请根据您的业务场景按需修改。

  1. 在当前函数的代码页签,单击 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
    

步骤三:发布函数

将函数的当前代码和配置发布至线上。

  1. 在函数详情页面,单击右上角的 发布

  2. 函数版本使用 Latest。其他参数保持默认。

  3. 单击 确定。等待函数发布完成。

结果验证

  1. 测试函数,验证函数的返回结果是否符合预期。

    1. 在函数详情页面,单击右上角的 测试

    2. 在弹出的函数测试页面,配置触发器类型和测试请求。

      • 触发器类型:选择 API 网关触发器。
      • 测试请求:保持默认。
    3. 单击 测试。等待测试结果。
        如图所示:函数返回了预期的内容,符合预期。

  2. 查看函数的实例日志,确认是否完成了预期的文件读写。

    1. 切换至资源管理页签。
    2. 在实例列表中,选择运行中的实例,单击 日志,进入实例日志页面。

      说明

      函数存在多个实例时,建议逐一查看实例日志,锁定实际处理请求的实例。

    如图所示:函数返回了 TOS 挂载目录下 tos.txt 的内容,并在 TOS 挂载目录下写入了 output.txt 文件。

  3. 登录 TOS 控制台,查看对应的挂载目录下是否写入了 output.txt 文件。
     如图所示:目标 Bucket 的 /docdemo 目录下写入了 output.txt 文件。