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 功能时,请注意以下几点:
- Session 是有状态的执行环境,会保持函数实例的持续运行,因此会产生持续的计费。
- Session 的生命周期和空闲超时时间设置需要合理规划,避免资源浪费。
- Session 功能适用于需要保持状态的长时间运行任务,如机器学习推理、数据处理流水线等场景。
- Session 不再需要时,请及时删除以避免不必要的费用。
- 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-only 是 session 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 动态挂载前,需确保:
- 函数已配置 VPC — NAS 挂载需要 VPC 网络,函数需已有
vpcConfig - 函数已开启实例隔离模式 — 需配置
instanceIsolationMode+ session 隔离 - NAS 文件系统已创建 — 需在 NAS 控制台提前创建文件系统、添加 VPC 挂载点、创建远端目录
- 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 动态挂载限制与注意事项
- VPC 必须在函数级配置 — Session 创建不接受
vpcConfig,依赖函数已有的 VPC - NAS 远端目录需提前创建 — 函数计算不会自动创建目录,需通过 ECS 先挂 NAS 创建
- 最多 5 个挂载点 — NAS + OSS + PolarFS 挂载点总数不超过 5
- mountDir 不能冲突 — NAS 和 OSS 挂载点不能共用同一个本地目录路径
- 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
更多信息请参考阿里云文档 动态挂载文件存储 NAS 和 NASMountConfig 结构