赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 函数计算 FC 2.0
  4. 操作指南
  5. 服务管理
  6. 配置OSS文件系统

配置OSS文件系统

  • 服务管理
  • 发布于 2025-04-16
  • 0 次阅读
文档编辑
文档编辑

对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务。您可以通过为函数计算的服务配置OSS挂载,让服务下的函数使用OSS可以实现类似本地文件系统的操作体验,从而简化资源访问和数据处理流程。

使用限制

  • 函数计算在同一地域下的一个服务最多支持配置5个NAS挂载点和5个OSS挂载点。

  • NAS挂载点和OSS挂载点设置的函数运行环境中的本地目录不能冲突。

    关于配置NAS挂载点的更多信息,请参见配置NAS文件系统。

前提条件

  • 对象存储OSS

    • 开通OSS服务

    • 控制台创建存储空间

  • 函数计算

    • 创建服务。具体操作,请参见创建服务。

      为服务的角色配置权限。启用OSS挂载功能时,需要为函数计算服务配置访问OSS的角色。具体操作,请参见授予函数计算访问其他云服务的权限。

操作步骤

步骤一:配置OSS挂载

函数计算的OSS配置为服务级别,为一个服务配置OSS挂载点后,此服务下的所有函数都可以访问指定OSS存储空间的文件。

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数。
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务操作列的配置。
  3. 在编辑服务页面的存储配置区域,配置以下参数,然后单击保存。

    配置项

    说明

    示例

    挂载 OSS 对象存储

    是否启用OSS文件系统。取值说明如下。

    • 启用:启用OSS文件系统。

    • 禁用:不启用OSS文件系统。

    启用

    OSS挂载点:填写配置OSS挂载点的相关信息。

    Bucket

    选择已创建的存储空间Bucket。如需创建新的OSS存储空间,可以单击下方的创建新的 OSS Bucket跳转到对象存储控制台手动创建。关于使用OSS存储涉及的费用问题,请参见OSS计费概述。

    example-bucket

    Bucket 子目录

    设置Bucket中的子目录,必须为绝对路径。留空或设置为/表示挂载Bucket的根目录。

    /files

    OSS 访问地址

    选择Bucket后,默认选择该Bucket对应的访问地址。可以根据需要选择自定义地址,调整访问地址的值。关于各地域OSS服务的访问地址,请参见访问域名和数据中心。

    说明
    • 如果选择与函数计算的服务相同地域的Bucket,建议使用OSS内网Endpoint作为访问地址。

    • 如果选择不同地域的Bucket,则必须使用OSS外网Endpoint作为访问地址,会产生一定的外网流出流量费用。

    默认地址

    函数本地目录

    设置函数运行环境中的本地目录,必须为/home、/mnt或/data的子目录。

    说明

    设置的函数本地目录不需要您手动创建,直接使用就可以。

    /mnt/oss

    函数本地目录权限

    选择Bucket挂载到函数运行环境中的本地目录后,该目录的访问权限。支持设置为只读或读写权限。

    读写

    说明

    OSS挂载功能依赖服务的网络配置。当您的网络配置只允许函数访问VPC,即设置仅允许指定 VPC 调用函数为是且允许函数访问公网为否时,如需使用OSS外网Endpoint,要求函数能够通过指定的VPC访问公网。具体操作,请参见配置固定公网IP地址。

步骤二:创建函数并在代码中访问OSS挂载的目录文件

完成OSS挂载配置后,您可以通过以下步骤访问OSS挂载的目录下的文件内容,即可以用访问本地文件的方式访问OSS挂载目录下的文件。

  1. 在创建函数页面,配置以下配置项,其他配置保持默认值,单击创建完成函数创建。

    • 创建函数方式:使用内置运行时创建。

    • 基本设置:填写函数名称,请求处理程序类型选择处理事件请求。

    • 函数代码:运行环境选择Python 3.10,代码上传方式选择使用示例代码。

  2. 在函数详情页面,单击函数代码页签,在代码编辑器中编写代码,然后单击部署代码。

    本文以Python函数代码为例,示例代码如下。

    import os
    
    
    def handler(event, context):
        # 挂载目录
        mount_path = '/mnt/oss'
        
        # 列出挂载目录中的文件
        files = os.listdir(mount_path)
        print("Files in OSS mount:", files)  
        # 读取挂载目录中的某个文件
        file_path = os.path.join(mount_path, 'example.txt')
        if os.path.exists(file_path):
            with open(file_path, 'r') as file:
                content = file.read()
                print("Content of example.txt:", content)
        else:
            print("example.txt does not exist.")
        # 向挂载目录中写入文件
        write_path = os.path.join(mount_path, 'output.txt')
        with open(write_path, 'w') as file:
            file.write("Hello, OSS mount!")
            print("Wrote to output.txt in OSS mount.")
        
        return "Function execution completed."
      
    说明

    在上述代码中example.txt需要修改为您挂载的OSS目录下实际存在的文件名称。

  3. 代码部署成功后,单击函数代码页签的测试函数。

    执行完成后,您可以在函数代码页签的下方查看执行结果。在日志输出页签下可以看到读取的OSS目录下example.txt文件的内容,同时在OSS控制台对应的挂载目录下可以看到写入的output.txt文件内容。

常见问题

提示OSS挂载失败,报错信息为bucket not found。

请确认OSS访问地址、Bucket名称是否填写准确。

提示OSS挂载失败,报错信息为host resolv error或deadline exceeded。

请确认Endpoint地址是否填写准确。

  • Endpoint地址中的域名解析失败会导致host resolv error报错。

  • 内网Endpoint不可跨地域使用。使用其他地域的内网Endpoint作为访问地址时,会出现连接超时,导致deadline exceeded报错。

挂载失败,报错信息为invalid credentials。

请确认您为服务配置的RAM角色是否具备访问OSS的权限,权限信息如下所示。更多信息,请参见授予函数计算访问其他云服务的权限。

  • 只读:包括oss:ListObjects和oss:GetObject策略。

  • 读写:包括oss:ListObjects、oss:GetObject、oss:PutObject、oss:DeleteObject、oss:ListParts和oss:AbortMultipartUpload。

说明

oss:ListObjects为Bucket级别操作。因此,当您为特定的Bucket开启访问时,权限策略中需要包含Bucket级别的资源指示,例如acs:oss:*:*:bucketName。更多信息,请参见OSS Resource说明。

读取挂载的文件时,报错信息为Input/output error。

请确认您配置的OSS Bucket的存储类型,其中存储类型为归档存储和冷归档存储时,存放到该Bucket的文件都是冻结状态,这类文件要解冻后才能正常访问。建议您配置的OSS Bucket存储类型为标准存储。

如何查看自己配置的函数本地目录下的文件?

  1. 您可以在函数详情页面,单击实例列表查看实例状态为运行中的列表,选择一个实例,单击该实例操作列的登录实例。

    image

  2. 登录实例成功后,您就可以通过命令查看配置的函数本地目录下的文件信息。示例如下:

    image

函数实例内访问挂载点出现Transport endpoint is not connected。

如果函数实例内存规格较低、内存用量较大等,可能导致OSS挂载功能因内存不足而不可用,产生上述错误。请根据业务情况调高函数内存规格,建议使用OSS挂载点时函数内存规格不低于512 MB。

函数目录下写入的数据能持久保存吗?

函数实例被销毁的时候,在函数目录下写入的数据也会被删除。如果您希望数据可以持久保存,建议您配置挂载。配置NAS文件系统挂载或者配置OSS挂载均可以让数据持久保存。具体操作请参见配置NAS文件系统和配置OSS文件系统。

如何通过权限策略仅允许只读访问指定Bucket?

展开查看权限策略描述示例。请将示例中bucketName替换为指定的Bucket名称。更多信息,请参见RAM Policy概述。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListObjects",
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:*:bucketName",
        "acs:oss:*:*:bucketName/*"
      ],
      "Effect": "Allow"
    }
  ]
}

如何通过权限策略允许读写访问指定Bucket?

展开查看权限策略描述示例。请将示例中bucketName替换为指定的Bucket名称。更多信息,请参见RAM Policy概述。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListObjects",
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:AbortMultipartUpload",
        "oss:ListParts"
      ],
      "Resource": [
        "acs:oss:*:*:bucketName",
        "acs:oss:*:*:bucketName/*"
      ],
      "Effect": "Allow"
    }
  ]
}

如何通过权限策略仅允许只读访问指定Bucket的子目录?

展开查看权限策略描述示例。请将示例中bucketName替换为指定的Bucket名称,bucketPath替换为指定的Bucket子目录。更多信息,请参见RAM Policy概述。

{
  "Version": "1",
  "Statement": [
    {
      "Action": "oss:ListObjects",
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "bucketPath/*"
          ]
        }
      }
    },
    {
      "Action": [
        "oss:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName/bucketPath/*"
      ]
    }
  ]
}

如何通过权限策略允许读写访问指定Bucket的子目录?

展开查看权限策略描述示例。请将示例中bucketName替换为指定的Bucket名称,bucketPath替换为指定的Bucket子目录。更多信息,请参见RAM Policy概述。

{
  "Version": "1",
  "Statement": [
    {
      "Action": "oss:ListObjects",
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "bucketPath/*"
          ]
        }
      }
    },
    {
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:AbortMultipartUpload",
        "oss:ListParts"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName/bucketPath/*"
      ]
    }
  ]
}

通过OSS挂载点写文件的过程中,从OSS侧观察文件为空。

通过OSS挂载点写文件时,一般情况下,系统只在用户主动调用Flush或者关闭文件时,才将写入内容上传至OSS侧。

在OSS挂载点中,执行压缩、解压或文件传输等操作时响应较慢。

OSS本身不支持文件系统API。当您将OSS Bucket挂载为目录之后,函数计算会组合封装OSS API,实现文件系统API的效果。例如,OSS本身不支持随机写,当您需要使用文件系统API变更OSS挂载点上现有的文件时,函数计算会将源文件从OSS全量下载并改写后重新上传到OSS。

当文件系统API与OSS API功能对应时,例如顺序的文件读写,通常操作执行的性能较好。而需要组合封装OSS API实现的操作,例如压缩、解压可能用到的文件随机读写操作,可能需与OSS进行多次交互,故性能略差于本地文件系统。

不同函数实例之间访问OSS挂载点会互相协调同步吗?

不同函数实例之间相互独立,不同实例中查询到的OSS挂载点内容可能不同。例如,通过函数实例A在OSS挂载点中创建文件F后,在函数实例B中可能无法实时查询到该文件。

相关文章

管理服务 2025-04-16 14:22

服务是函数计算的资源管理单位。创建函数前必须先创建服务,服务就像函数的集合,同一个服务下的所有函数共享一些相同的设置,例如服务授权和日志配置等。本文介绍

管理版本 2025-04-16 14:22

函数计算支持版本管理功能,帮助您更高效地管理服务、函数以及触发器。您可以通过版本管理功能发布多个版本的服务,实现软件开发生命周期中的持续集成和发布。本文介绍版本的含义以及如何在函数计算控制台管理版本。

管理别名 2025-04-16 14:22

函数计算支持为服务版本创建别名。结合别名和版本功能,实现软件开发生命周期中的持续集成和发布。本文介绍别名的含义以及如何通过函数计算控制台管理别名。

使用版本和别名实现灰度发布 2025-04-16 14:22

您可以为服务发布一个或多个版本,版本就相当于服务的快照,当您发布版本时,函数计算会为服务生成快照,并自动分配一个版本号与其关联。您还可以为服务的版本创建别名,指向该版本。结合服务的版本和别

配置网络 2025-04-16 14:22

您在函数计算创建的函数,默认可以通过公网调用,无法通过VPC调用。如果您需要函数能够访问VPC内的资源,或允许指定的VPC来调用函数,那么您需要手动为服务配置网络访问能力。网络配置为服务级别,即对服务下的所有函数生效。本文介绍如何通过函数计算控制台为服务配置网络。

配置固定公网IP地址 2025-04-16 14:22

函数计算系统默认的出口IP是动态的,无固定网段。而

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号