@@ -214,58 +214,126 @@ def get_deployment(self) -> AbstractDeployment:
214214 return RemoteDeployment .from_config (self )
215215
216216
217- class FC3DeploymentConfig (DeploymentConfig ):
218- """Configuration for Alibaba Cloud Function Compute 3.0 deployment.
217+ class FCDeploymentConfig (DeploymentConfig ):
218+ """Configuration for Alibaba Cloud Function Compute deployment.
219219
220- This deployment type enables serverless sandbox execution using FC3
220+ This deployment type enables serverless sandbox execution using FC
221221 with WebSocket session management for stateful operations.
222+
223+ FC (Function Compute) is Alibaba Cloud's serverless compute service:
224+ https://www.alibabacloud.com/product/function-compute
225+
226+ Configuration Hierarchy:
227+ ┌─────────────────────────────────────────────────────────────────────┐
228+ │ FCConfig (Admin 服务级) - 本文件 │
229+ │ - Admin 启动时加载,提供默认值和凭证 │
230+ │ - 服务级设置 (region, account_id, credentials) │
231+ └─────────────────────────────────────────────────────────────────────┘
232+ │
233+ │ merge_with_fc_config()
234+ ▼
235+ ┌─────────────────────────────────────────────────────────────────────┐
236+ │ FCDeploymentConfig (API 调用级) │
237+ │ - 每个 sandbox API 请求创建 │
238+ │ - session_id 与 ROCK sandbox_id 1:1 映射 │
239+ │ - 用于调用已部署的 FC 函数,不涉及函数部署 │
240+ │ - sandbox_ttl/sandbox_idle_timeout: ROCK 内部沙箱生命周期管理 │
241+ └─────────────────────────────────────────────────────────────────────┘
242+ │
243+ │ 调用已部署的 FC 函数
244+ ▼
245+ ┌─────────────────────────────────────────────────────────────────────┐
246+ │ s.yaml (FC 函数部署配置) │
247+ │ - 定义 FC 函数资源规格,通过 `s deploy` 部署 │
248+ │ - Session affinity, memory, CPU, timeout 等 │
249+ │ - 位置: rock/deployments/fc_rocklet/{runtime,container,adapter}/ │
250+ │ - 函数部署是前置条件,Admin 调用时函数已存在 │
251+ └─────────────────────────────────────────────────────────────────────┘
252+
253+ The session_id serves as both the FC session identifier (for WebSocket
254+ stateful invocation routing) and the ROCK sandbox_id (for business logic).
222255 """
223256
224- type : Literal ["fc3" ] = "fc3"
225- """Deployment type discriminator."""
257+ type : Literal ["fc" ] = "fc"
258+ """Deployment type discriminator for JSON/YAML parsing."""
259+
260+ session_id : str | None = None
261+ """FC session identifier for stateful invocation routing.
262+
263+ This serves as both:
264+ - FC native session_id: Routes WebSocket requests to the same function instance
265+ - ROCK sandbox_id: Used for lifecycle management, billing, and state tracking
226266
227- function_name : str = "rock-rocklet-rt"
228- """FC3 function name for the sandbox runtime."""
267+ If None, will be auto-generated as 'fc-{uuid}'.
268+ """
269+
270+ # Connection settings (optional, use FCConfig defaults if not provided)
271+ function_name : str | None = None
272+ """FC function name. If None, uses FCConfig.function_name."""
229273
230- region : str = "cn-hangzhou"
231- """Alibaba Cloud region for the FC3 function ."""
274+ region : str | None = None
275+ """Alibaba Cloud region. If None, uses FCConfig.region ."""
232276
233277 account_id : str | None = None
234- """Alibaba Cloud account ID."""
278+ """Alibaba Cloud account ID. If None, uses FCConfig.account_id. """
235279
236280 access_key_id : str | None = None
237- """Alibaba Cloud AccessKey ID for authentication ."""
281+ """AccessKey ID. If None, uses FCConfig.access_key_id ."""
238282
239283 access_key_secret : str | None = Field (default = None , repr = False , exclude = True )
240- """Alibaba Cloud AccessKey Secret for authentication ."""
284+ """AccessKey Secret. If None, uses FCConfig.access_key_secret ."""
241285
242286 security_token : str | None = None
243- """Alibaba Cloud STS security token for temporary credentials ."""
287+ """STS security token. If None, uses FCConfig.security_token ."""
244288
245- memory : int = 4096
246- """Memory allocation in MB for the FC3 function."""
289+ # Resource settings (optional, use FCConfig defaults if not provided)
290+ memory : int | None = None
291+ """Memory in MB. If None, uses FCConfig.default_memory."""
247292
248- cpus : float = 2.0
249- """CPU cores allocated for the FC3 function ."""
293+ cpus : float | None = None
294+ """CPU cores. If None, uses FCConfig.default_cpus ."""
250295
251- session_affinity_header : str = "x-rock-session-id"
252- """Header field name for session affinity."""
296+ # Timeout settings (optional, use FCConfig defaults if not provided, all in seconds)
297+ sandbox_ttl : int | None = None
298+ """Sandbox time-to-live in seconds. If None, uses FCConfig.default_session_ttl."""
253299
254- sandbox_ttl_minutes : int = 10
255- """Time-to-live in minutes for sandbox auto-cleanup ."""
300+ sandbox_idle_timeout : int | None = None
301+ """Sandbox idle timeout in seconds. If None, uses FCConfig.default_session_idle_timeout ."""
256302
257- timeout : float = 30.0
258- """Request timeout in seconds for FC3 API calls ."""
303+ timeout : float | None = None
304+ """Request timeout in seconds. If None, uses FCConfig.default_timeout ."""
259305
260306 def get_deployment (self ) -> AbstractDeployment :
261- from rock .deployments .fc3 import FC3Deployment
307+ from rock .deployments .fc import FCDeployment
262308
263- return FC3Deployment .from_config (self )
309+ return FCDeployment .from_config (self )
264310
265- @property
266- def auto_clear_time (self ) -> int :
267- """Alias for sandbox_ttl_minutes for compatibility."""
268- return self .sandbox_ttl_minutes
311+ def merge_with_fc_config (self , fc_config : "FCConfig" ) -> "FCDeploymentConfig" :
312+ """Merge this config with FCConfig defaults.
313+
314+ Args:
315+ fc_config: Admin-level FC configuration with defaults.
316+
317+ Returns:
318+ New FCDeploymentConfig with all fields populated.
319+ """
320+ from rock .config import FCConfig
321+
322+ return FCDeploymentConfig (
323+ type = self .type ,
324+ session_id = self .session_id ,
325+ function_name = self .function_name or fc_config .function_name ,
326+ region = self .region or fc_config .region ,
327+ account_id = self .account_id or fc_config .account_id ,
328+ access_key_id = self .access_key_id or fc_config .access_key_id ,
329+ access_key_secret = self .access_key_secret or fc_config .access_key_secret ,
330+ security_token = self .security_token or fc_config .security_token ,
331+ memory = self .memory or fc_config .default_memory ,
332+ cpus = self .cpus or fc_config .default_cpus ,
333+ sandbox_ttl = self .sandbox_ttl or fc_config .default_session_ttl ,
334+ sandbox_idle_timeout = self .sandbox_idle_timeout or fc_config .default_session_idle_timeout ,
335+ timeout = self .timeout or fc_config .default_timeout ,
336+ )
269337
270338
271339def get_deployment (config : DeploymentConfig ) -> AbstractDeployment :
0 commit comments