Skip to content

Session 命令操作

session 命令是用于管理函数会话的命令。会话(Session)是长时间运行的执行上下文,可以在多次函数调用之间保持状态,适用于需要保持连接或上下文的场景,如数据库连接、WebSocket 连接等。

会话功能允许您:

  • 创建具有特定生命周期的会话
  • 在会话之间保持状态和资源
  • 管理会话的生命周期和配置
  • 查询和监控会话状态

命令解析

当执行命令 session -h/session --help 时,可以获取帮助文档。

session create 命令

session create 命令是创建新会话的命令。

当执行命令 session create -h/session create --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,取值范围参见函数计算开服地域
function-name - 必填 创建 Session 的函数名称
qualifier - 必填 用于指定 Session 所属的版本或别名
session-id - 选填 自定义会话 ID,如不指定则系统自动生成
session-ttl-in-seconds st 选填 会话生命周期,单位为秒,取值范围 0-21600,默认值为 21600
session-idle-timeout-in-seconds si 选填 会话闲置过期时间,单位为秒,取值范围 0-21600,默认值为 1800
disable-session-id-reuse dsr 选填 禁用会话 ID 重用,设置后每次创建会话都会生成新的会话 ID
nas-config - 选填 NAS 配置,配置后 Session 关联的实例可以访问指定 NAS 资源,JSON 格式
oss-mount-config - 选填 OSS 挂载配置,配置后 Session 关联的实例可以访问指定 OSS 资源,JSON 格式
polar-fs-config - 选填 PolarFS 配置,配置后 Session 关联的实例可以访问指定 PolarFS 文件系统资源,JSON 格式

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名以及版本或别名等,例如:
# 创建一个默认生命周期的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST -a default

# 创建一个指定生命周期和闲置过期时间的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --session-ttl-in-seconds 600 --session-idle-timeout-in-seconds 300 -a default

# 创建带有自定义会话 ID 的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --session-id my-custom-session -a default

# 创建带有自定义会话 ID 且禁用重用的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --session-id my-custom-session --disable-session-id-reuse -a default

# 创建带有 NAS 配置的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --nas-config '{"userId": 1000, "groupId": 1000, "mountPoints": [{"serverAddr": "example.nas.aliyuncs.com:/", "mountDir": "/mnt/nas", "enableTLS": true}]}' -a default

# 创建带有 OSS 挂载配置的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --oss-mount-config '{"mountPoints": [{"bucketName": "my-bucket", "bucketPath": "cn-hangzhou", "endpoint": "oss-cn-hangzhou.aliyuncs.com", "mountDir": "/mnt/oss", "readOnly": false}]}' -a default

# 创建带有 PolarFS 配置的会话
$ s cli fc3 session create --region cn-hangzhou --function-name my-function --qualifier LATEST --polar-fs-config '{"userId": 1000, "groupId": 1000, "mountPoints": [{"instanceId": "pc-xxx", "remoteDir": "/", "mountDir": "/mnt/polar"}]}' -a default

session get 命令

session get 命令是获取会话详情的命令。

当执行命令 session get -h/session get --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,取值范围参见函数计算开服地域
function-name - 必填 会话所属函数名称
session-id - 必填 查询的会话 ID 值
qualifier - 必填 查询的会话 ID 关联的函数别名或版本信息

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名、会话 ID 以及版本或别名等,例如:
$ s cli fc3 session get --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST -a default

session update 命令

session update 命令是更新会话的命令。

当执行命令 session update -h/session update --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,取值范围参见函数计算开服地域
function-name - 必填 函数名
session-id - 必填 待更新的会话 ID 值
qualifier - 必填 待更新的 SessionID 关联的函数别名或版本信息
session-ttl-in-seconds st 选填 会话生命周期,单位为秒,取值范围 0-21600
session-idle-timeout-in-seconds si 选填 会话闲置过期时间,单位为秒,取值范围 0-21600
disable-session-id-reuse dsr 选填 禁用会话 ID 重用
nas-config - 选填 更新 NAS 配置,JSON 格式
oss-mount-config - 选填 更新 OSS 挂载配置,JSON 格式
polar-fs-config - 选填 更新 PolarFS 配置,JSON 格式

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名、会话 ID 以及版本或别名等,例如:
# 更新会话生命周期
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --session-ttl-in-seconds 900 -a default

# 同时更新会话生命周期和闲置过期时间
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --session-ttl-in-seconds 900 --session-idle-timeout-in-seconds 300 -a default

# 更新会话并禁用会话 ID 重用
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --disable-session-id-reuse -a default

# 更新会话 NAS 配置
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --nas-config '{"userId": 1000, "groupId": 1000, "mountPoints": [{"serverAddr": "example.nas.aliyuncs.com:/", "mountDir": "/mnt/nas", "enableTLS": true}]}' -a default

# 更新会话 OSS 挂载配置
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --oss-mount-config '{"mountPoints": [{"bucketName": "my-bucket", "bucketPath": "cn-hangzhou", "mountDir": "/mnt/oss", "readOnly": false}]}' -a default

# 更新会话 PolarFS 配置
$ s cli fc3 session update --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST --polar-fs-config '{"userId": 1000, "groupId": 1000, "mountPoints": [{"instanceId": "pc-xxx", "mountDir": "/mnt/polar", "remoteDir": "/"}]}' -a default

session list 命令

session list 命令是列出会话的命令。

当执行命令 session list -h/session list --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,取值范围参见函数计算开服地域
function-name - 必填 函数名
qualifier - 选填 指定调用的版本或者别名, 默认为 LATEST
limit - 选填 返回的会话数量,如不填写默认返回 20 条
next-token - 选填 分页起始标记
session-status - 选填 需要过滤的会话状态,默认返回所有 Active/Expired/Paused 状态的会话信息,也可指定 Active 仅获取活跃的会话信息,或指定 Expired 仅获取过期的会话信息,或指定 Paused 仅获取暂停的会话信息
session-id - 选填 过滤的 SessionId 值,如指定,可返回此会话关联的所有 Active/Expired 状态信息

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区和函数名等,例如:
# 列出所有会话
$ s cli fc3 session list --region cn-hangzhou --function-name my-function -a default

# 列出最多 10 个会话
$ s cli fc3 session list --region cn-hangzhou --function-name my-function --limit 10 -a default

# 根据版本或别名列出会话
$ s cli fc3 session list --region cn-hangzhou --function-name my-function --qualifier LATEST -a default

session remove 命令

session remove 命令是删除会话的命令。

当执行命令 session remove -h/session remove --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,取值范围参见函数计算开服地域
function-name - 必填 函数名称
session-id - 必填 需要删除的会话 Id 值
qualifier - 必填 需要删除的 SessionId 关联的函数别名或版本信息

当前命令还支持部分全局参数(例如-a/--access, --debug等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名、会话 ID 以及版本或别名等,例如:
# 删除指定会话
$ s cli fc3 session remove --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST -a default

# 直接删除指定会话,不进行确认
$ s cli fc3 session remove --region cn-hangzhou --function-name my-function --session-id session-123 --qualifier LATEST -y -a default

session pause 命令

session pause 命令是暂停会话(Sandbox 深休眠)的命令。调用后,系统将会话关联实例的完整运行状态(内存、文件系统、进程)保存为快照并销毁实例,暂停期间不产生 CPU 和内存费用。

白名单功能:Sandbox 深休眠目前为白名单功能,默认不开放。仅支持新加坡(cn-singapore)和香港(cn-hongkong)地域。如需使用,请提交工单申请开通,并提供函数名称前缀和账号 ID。

当执行命令 session pause -h/session pause --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,当前仅支持新加坡(cn-singapore)和香港(cn-hongkong
function-name - 必填 函数名称,需以 polarfs-performance-pause-resume- 开头
session-id - 必填 需要暂停的会话 ID 值
qualifier - 必填 需要暂停的 SessionID 关联的函数别名或版本信息

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名、会话 ID 以及版本或别名等,例如:
# 暂停指定会话(当前仅支持新加坡和香港地域,函数名需以 polarfs-performance-pause-resume- 开头)
$ s cli fc3 session pause --region cn-hongkong --function-name polarfs-performance-pause-resume-my-function --session-id session-123 --qualifier LATEST -a default

session resume 命令

session resume 命令是恢复已暂停会话(Sandbox 深休眠)的命令。调用后,系统基于快照将实例恢复至新执行环境,回到暂停前的状态。

白名单功能:Sandbox 深休眠目前为白名单功能,默认不开放。仅支持新加坡(cn-singapore)和香港(cn-hongkong)地域。如需使用,请提交工单申请开通,并提供函数名称前缀和账号 ID。

当执行命令 session resume -h/session resume --help 时,可以获取帮助文档。

参数解析

参数全称 参数缩写 Cli 模式下必填 参数含义
region - 必填 地域名称,当前仅支持新加坡(cn-singapore)和香港(cn-hongkong
function-name - 必填 函数名称,需以 polarfs-performance-pause-resume- 开头
session-id - 必填 需要恢复的会话 ID 值
qualifier - 必填 需要恢复的 SessionID 关联的函数别名或版本信息
file-system-only fso 选填 仅恢复文件系统挂载,不恢复实例运行。适用于只需恢复存储访问而不需要立即恢复计算的场景

当前命令还支持部分全局参数(例如 -a/--access, --debug 等),详情可参考 Serverless Devs 全局参数文档

操作案例

  • 纯命令行形式,需要指定函数所在地区、函数名、会话 ID 以及版本或别名等,例如:
# 恢复指定会话(完全恢复,包括实例和文件系统,当前仅支持新加坡和香港地域,函数名需以 polarfs-performance-pause-resume- 开头)
$ s cli fc3 session resume --region cn-hongkong --function-name polarfs-performance-pause-resume-my-function --session-id session-123 --qualifier LATEST -a default

# 仅恢复文件系统挂载(不恢复实例运行)
$ s cli fc3 session resume --region cn-hongkong --function-name polarfs-performance-pause-resume-my-function --session-id session-123 --qualifier LATEST --file-system-only -a default

注意事项

在使用 Session 功能时,请注意以下几点:

  1. Session 是有状态的执行环境,会保持函数实例的持续运行,因此会产生持续的计费。
  2. Session 的生命周期和空闲超时时间设置需要合理规划,避免资源浪费。
  3. Session 功能适用于需要保持状态的长时间运行任务,如机器学习推理、数据处理流水线等场景。
  4. Session 不再需要时,请及时删除以避免不必要的费用。
  5. Session 的数量和资源使用受到函数计算服务的配额限制。

Sandbox 深休眠(暂停与恢复会话)

Sandbox 深休眠基于函数计算 Session 能力,调用 PauseSession 后,系统将会话关联实例的完整运行状态(内存、文件系统、进程)保存为快照并销毁实例;调用 ResumeSession 后,系统基于快照将实例恢复至新执行环境,回到暂停前的状态。

成本影响:暂停后实例被销毁,不产生 CPU 和内存费用。相比浅休眠(Idle 状态仍收取内存费用),深休眠可进一步降低长期持有 Sandbox 实例的成本。

典型场景

  • AI Sandbox 开发环境:Sandbox 安装依赖和工具后,通过深休眠保存环境状态,下次使用时快速恢复,无需重新初始化。
  • 按需启停的长周期任务:长时间保留工作状态但不持续运行,例如可中断后继续的数据处理任务。

重要:Sandbox 深休眠目前为白名单功能,默认不开放。如需使用,请提交工单申请开通,并提供函数名称前缀和账号 ID。仅支持新加坡(cn-singapore)和香港(cn-hongkong)地域。

前置条件

函数需满足以下条件:

配置项 要求 说明
会话亲和 必须开启 支持 HeaderField 亲和或 Cookie 亲和,不支持 MCP 亲和类型
实例隔离 必须开启会话隔离 确保一个会话对应一个独立实例(Sandbox 模式)
运行时类型 自定义镜像(Custom Container) 不支持内置运行时和自定义运行时
实例规格 仅支持 CPU 实例 不支持 GPU 实例
CPU / 内存规格 无特殊限制 按需选择
函数命名 需以 polarfs-performance-pause-resume- 开头 使用暂停/恢复功能的函数名称必须包含此前缀

函数配置示例

edition: 3.0.0
name: fc-session-pause-demo
access: default

resources:
  sessionDemo:
    component: fc3
    props:
      region: cn-hongkong
      functionName: polarfs-performance-pause-resume-mySessionFn
      runtime: custom-container
      cpu: 2
      memorySize: 4096
      diskSize: 512
      timeout: 60
      instanceConcurrency: 200
      internetAccess: true
      instanceIsolationMode: SESSION_EXCLUSIVE
      sessionAffinity: GENERATED_COOKIE
      sessionAffinityConfig:
        sessionConcurrencyPerInstance: 1
        sessionIdleTimeoutInSeconds: 1800
        sessionTTLInSeconds: 86400
      customContainerConfig:
        image: registry.cn-hongkong.aliyuncs.com/my-repo/my-image:latest
        port: 9000
        healthCheckConfig:
          httpGetUrl: /health
          initialDelaySeconds: 1
          periodSeconds: 3
          timeoutSeconds: 1
          failureThreshold: 3
          successThreshold: 1

暂停与恢复操作流程

# 1. 创建 Session(当前仅支持新加坡和香港地域,函数名需以 polarfs-performance-pause-resume- 开头,需白名单开通)
$ s cli fc3 session create --region cn-hongkong --function-name polarfs-performance-pause-resume-mySessionFn --qualifier LATEST -a default
# → 返回 sessionId

# 2. 暂停 Session(保存快照,销毁实例,不再计费)
$ s cli fc3 session pause --region cn-hongkong --function-name polarfs-performance-pause-resume-mySessionFn --session-id <sessionId> --qualifier LATEST -a default

# 3. 恢复 Session(基于快照恢复实例,回到暂停前状态)
$ s cli fc3 session resume --region cn-hongkong --function-name polarfs-performance-pause-resume-mySessionFn --session-id <sessionId> --qualifier LATEST -a default

# 3'. 仅恢复文件系统挂载(不恢复实例运行,适用于只需恢复存储访问的场景)
$ s cli fc3 session resume --region cn-hongkong --function-name polarfs-performance-pause-resume-mySessionFn --session-id <sessionId> --qualifier LATEST --file-system-only -a default

会话状态流转

开启深休眠功能后,Session 在原有生命周期基础上新增 Pausing、Paused、Resuming 三个状态:

当前状态 触发操作 / 事件 目标状态
(初始) CreateSession 或 InvokeFunction Active
Active PauseSession Pausing
Pausing 快照完成,实例销毁 Paused
Paused ResumeSession Resuming
Resuming 实例恢复完成 Active
Active TTL 超时或 Idle 超时 Expired
Active DeleteSession Deleted
Paused DeleteSession Deleted

各状态含义与计费:

状态 含义 是否计费
Active 会话活跃,实例就绪,可处理请求 是(按实例运行计费)
Pausing 正在保存快照,实例 CPU 已冻结 是(快照过程中仍计费)
Paused 快照已保存,实例已销毁 否(不产生 CPU 和内存费用)
Resuming 正在从快照恢复实例 是(恢复过程中开始计费)
Expired 会话过期(TTL 或 Idle 超时)
Deleted 用户主动删除会话

操作与状态约束

操作 允许的 Session 状态 说明
PauseSession Active 仅 Active 状态可暂停
ResumeSession Paused 仅 Paused 状态可恢复
UpdateSession 不允许 Pausing、Paused、Resuming 状态均不允许更新
DeleteSession 仅 Paused 状态允许 Pausing 和 Resuming 中间状态不允许删除
InvokeFunction 不允许 Pausing、Paused、Resuming 状态均不接受新请求

暂停与恢复行为说明

暂停后

  • 实例被销毁,不产生 CPU 和内存费用
  • Session 不接受函数调用请求
  • 通过 GetSession / ListSessions 可查询 Paused 状态的 Session,但通过 ListInstances 无法查询已销毁的实例

恢复后

  • Session TTL 不重置,仍从原始创建时间累计。剩余 TTL 继续扣减暂停期间的时长,例如 TTL 为 24 小时,运行 6 小时后暂停,暂停 2 小时后恢复,剩余 TTL 为 16 小时(24 - 6 - 2 = 16)
  • 可继续接受函数调用
  • 暂停前的网络连接(WebSocket、gRPC 长连接)不会恢复,需重新建立
  • 支持反复暂停和恢复

函数版本相关限制

  • 非 LATEST 版本:Session 关联的函数版本必须已开启会话亲和 + 会话隔离,否则不支持 PauseSession 和 ResumeSession
  • LATEST 版本
  • 必须开启会话亲和 + 会话隔离
  • PauseSession 限制:如果 Session 关联的实例上存在多个 Session,不允许执行 PauseSession
  • ResumeSession 限制:如果暂停后、恢复前,LATEST 版本的函数配置发生变更(元数据版本变化),不允许执行 ResumeSession

--file-system-only 参数说明

--file-system-onlysession resume 的可选参数,设置后仅恢复会话关联的文件系统挂载(NAS、OSS、PolarFS),但不恢复实例运行。适用于以下场景:

  • 需要从暂停的 Session 中读取存储数据,但不需要立即恢复计算
  • 在另一个活跃实例中访问暂停 Session 的挂载存储
  • 分阶段恢复:先恢复存储确认数据完整性,再恢复实例

常见问题

暂停后的 Session 是否会自动过期?

会。Session TTL 在暂停期间仍继续累计。如果 Paused 状态下达到 TTL 上限,Session 自动过期。建议暂停前确认剩余 TTL 是否满足需求。

恢复后 Session TTL 如何计算?

TTL 不因 ResumeSession 重置,始终从 Session 创建时间计算。例如,TTL 为 24 小时,创建 6 小时后暂停,暂停 2 小时后恢复,剩余 TTL 为 16 小时(24 - 6 - 2 = 16)。

是否支持多次暂停和恢复?

支持。Active 状态可执行 PauseSession,Paused 状态可执行 ResumeSession,可反复操作。

LATEST 版本函数修改配置后能否恢复?

不能。在 PauseSession 之后、ResumeSession 之前修改 LATEST 版本的函数配置(导致元数据版本变化),系统将拒绝 ResumeSession 并返回错误。即使先恢复再修改配置,已恢复的实例仍使用暂停前的旧配置。如需使用最新配置,删除当前会话并创建新会话。

暂停时实例上有正在执行的请求会怎样?

PauseSession 后系统立即冻结实例 CPU。正在执行的请求将因 CPU 冻结而超时失败。建议确认实例上无活跃请求后再执行暂停。

NAS 动态挂载最佳实践

Session 级 NAS 动态挂载是指在 session create 时动态指定 NAS 配置——每个 Session 可以挂不同的 NAS 子目录,实现数据隔离。相比函数级静态挂载(在 s.yaml 里写 nasConfig,部署后固定),动态挂载灵活性更高,适合多租户场景。

函数级静态挂载 Session 级动态挂载
挂载时机 函数部署时固定 session create 时动态指定,session update 时可更新
数据隔离 所有实例共享同一目录 每个 Session 可挂独立子目录
配置位置 s.yaml → 函数的 nasConfig session create/update --nas-config
适用场景 共享存储 多租户 AI 推理、按用户隔离数据

前置条件

使用 Session 级 NAS 动态挂载前,需确保:

  1. 函数已配置 VPC — NAS 挂载需要 VPC 网络,函数需已有 vpcConfig
  2. 函数已开启实例隔离模式 — 需配置 instanceIsolationMode + session 隔离
  3. NAS 文件系统已创建 — 需在 NAS 控制台提前创建文件系统、添加 VPC 挂载点、创建远端目录
  4. RAM 角色已有 NAS 访问权限

函数配置示例(VPC + 实例隔离):

edition: 3.0.0
name: fc-session-nas-demo
access: default

resources:
  sessionDemo:
    component: fc3
    props:
      region: cn-hangzhou
      functionName: mySessionFn
      runtime: custom.debian10
      handler: index.handler
      code: ./code
      memorySize: 512
      timeout: 60

      # VPC 配置(必须,NAS 需要)
      vpcConfig:
        vpcId: vpc-xxxxxxxxx
        securityGroupId: sg-xxxxxxxxx
        vSwitchIds:
          - vsw-xxxxxxxxx

      # 实例隔离模式(必须,session 需要)
      instanceIsolationMode: recycle

NAS 动态挂载实操

为不同租户创建独立 Session,挂载各自专属 NAS 子目录:

# tenant-a — 挂载其专属 NAS 子目录
$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --nas-config '{"userId":65534,"groupId":65534,"mountPoints":[{"serverAddr":"0cd8a4a23.cn-hangzhou.nas.aliyuncs.com:/tenant-a","mountDir":"/mnt/nas","enableTLS":false}]}' -a default

# tenant-b — 挂载其专属 NAS 子目录(数据隔离)
$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --nas-config '{"userId":65534,"groupId":65534,"mountPoints":[{"serverAddr":"0cd8a4a23.cn-hangzhou.nas.aliyuncs.com:/tenant-b","mountDir":"/mnt/nas","enableTLS":false}]}' -a default

每个 Session 返回一个 sessionId,后续调用时通过 sessionId 访问该 Session 的专属 NAS 目录,完全隔离,互不可见。

--nas-config 参数详解

--nas-config 的 JSON 结构如下:

{
  "userId": 65534,
  "groupId": 65534,
  "mountPoints": [
    {
      "serverAddr": "挂载点域名:NAS远端目录路径",
      "mountDir": "/mnt/nas",
      "enableTLS": false
    }
  ]
}
参数 说明
userId / groupId POSIX 身份,决定函数进程对 NAS 文件的读写权限。常用 65534(nobody)或 0(root)
serverAddr 合并格式:<NAS挂载点域名>:<NAS远端目录>,如 0cd8a4a23.cn-hangzhou.nas.aliyuncs.com:/tenant-a
mountDir 函数容器内的本地挂载路径,如 /mnt/nas。不能以 /home/tmp 开头
enableTLS TLS 加密传输。通用型 NAS 设 false;极速型 NAS 可设 true

多挂载点示例:

$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --nas-config '{"userId":65534,"groupId":65534,"mountPoints":[{"serverAddr":"nas1.cn-hz.nas.aliyuncs.com:/data","mountDir":"/mnt/data","enableTLS":false},{"serverAddr":"nas2.cn-hz.nas.aliyuncs.com:/models","mountDir":"/mnt/models","enableTLS":true}]}' -a default

OSS 和 PolarFS 动态挂载

Session create 还支持 OSS 和 PolarFS 动态挂载:

# OSS 动态挂载
$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --oss-mount-config '{"mountPoints":[{"bucketName":"my-bucket","bucketPath":"/session-data","endpoint":"http://oss-cn-hangzhou-internal.aliyuncs.com","mountDir":"/mnt/oss","readOnly":false}]}' -a default

# PolarFS 动态挂载
$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --polar-fs-config '{"userId":65534,"groupId":65534,"mountPoints":[{"instanceId":"pc-xxx","mountDir":"/mnt/polar","remoteDir":"/"}]}' -a default

# NAS + OSS 组合挂载
$ s cli fc3 session create --region cn-hangzhou --function-name mySessionFn --qualifier LATEST --nas-config '{"userId":65534,"groupId":65534,"mountPoints":[{"serverAddr":"xxx.nas.aliyuncs.com:/data","mountDir":"/mnt/nas","enableTLS":false}]}' --oss-mount-config '{"mountPoints":[{"bucketName":"my-bucket","endpoint":"http://oss-cn-hangzhou-internal.aliyuncs.com","mountDir":"/mnt/oss","readOnly":true}]}' -a default

静态挂载与动态挂载共存

函数级 nasConfig(静态)和 Session 级 nasConfig(动态)可以共存:

  • 静态挂载:所有实例共享的存储,如公共模型文件
  • 动态挂载:每个 Session 专属的存储,如用户私有数据

注意:静态和动态的 userId/groupId 必须一致,否则会有权限冲突。

NAS 动态挂载限制与注意事项

  1. VPC 必须在函数级配置 — Session 创建不接受 vpcConfig,依赖函数已有的 VPC
  2. NAS 远端目录需提前创建 — 函数计算不会自动创建目录,需通过 ECS 先挂 NAS 创建
  3. 最多 5 个挂载点 — NAS + OSS + PolarFS 挂载点总数不超过 5
  4. mountDir 不能冲突 — NAS 和 OSS 挂载点不能共用同一个本地目录路径
  5. enableTLS 必须与 NAS 挂载点一致 — 挂载点未开加密但设 true 会导致挂载失败

完整示例:多租户 AI 推理

场景:每个用户 Session 挂载独立模型和数据目录,实现完全数据隔离。

# 1. 部署函数(需已配置 VPC 和实例隔离模式)
$ s deploy

# 2. 为 tenant-a 创建 Session,挂载其专属模型和数据目录
$ s cli fc3 session create --region cn-hangzhou --function-name aiInferenceFn --qualifier LATEST --session-ttl-in-seconds 7200 --nas-config '{"userId":1000,"groupId":1000,"mountPoints":[{"serverAddr":"nas-id.cn-hangzhou.nas.aliyuncs.com:/models/tenant-a","mountDir":"/mnt/models","enableTLS":false},{"serverAddr":"nas-id.cn-hangzhou.nas.aliyuncs.com:/data/tenant-a","mountDir":"/mnt/data","enableTLS":false}]}' -a default
# → 返回 sessionId: sess-tenant-a-xxxxx

# 3. 为 tenant-b 创建 Session
$ s cli fc3 session create --region cn-hangzhou --function-name aiInferenceFn --qualifier LATEST --session-ttl-in-seconds 7200 --nas-config '{"userId":1000,"groupId":1000,"mountPoints":[{"serverAddr":"nas-id.cn-hangzhou.nas.aliyuncs.com:/models/tenant-b","mountDir":"/mnt/models","enableTLS":false},{"serverAddr":"nas-id.cn-hangzhou.nas.aliyuncs.com:/data/tenant-b","mountDir":"/mnt/data","enableTLS":false}]}' -a default
# → 返回 sessionId: sess-tenant-b-xxxxx

# 4. 函数代码中根据 sessionId 访问 /mnt/models 和 /mnt/data
#    tenant-a 的 Session 只能看到 /models/tenant-a 和 /data/tenant-a
#    tenant-b 的 Session 只能看到 /models/tenant-b 和 /data/tenant-b

更多信息请参考阿里云文档 动态挂载文件存储 NASNASMountConfig 结构