- Cloud Functions Development
- Use this skill when developing, deploying, and managing CloudBase cloud functions. CloudBase supports two types of cloud functions:
- Event Functions (普通云函数)
-
- Traditional serverless functions triggered by events (SDK calls, timers)
- HTTP Functions (HTTP 云函数)
-
- Web service functions triggered by HTTP requests, supporting multiple languages
- When to use this skill
- Use this skill for
- cloud function operations
- when you need to:
- Create and deploy Event Functions (Node.js)
- Create and deploy HTTP Functions (Node.js/Python/Go/Java)
- Understand runtime limitations and selection
- Query function logs and monitor execution
- Invoke cloud functions from applications
- Configure HTTP access for cloud functions
- Implement SSE (Server-Sent Events) or WebSocket
- Do NOT use for:
- CloudRun backend services (use
- cloudrun-development
- skill)
- Complex container-based services (use
- cloudrun-development
- skill)
- Database operations (use database skills)
- How to use this skill (for a coding agent)
- Choose the right function type
- Event Function
-
- For SDK calls, scheduled tasks, event-driven scenarios
- HTTP Function
-
- For Web APIs, REST services, SSE/WebSocket, multi-language support
- Understand runtime limitations
- Runtime
- CANNOT be changed
- after function creation
- Must select correct runtime during initial creation
- If runtime needs to change, must delete and recreate function
- Deploy functions correctly
- MCP Tool
-
- Use
- createFunction
- with
- type: "Event"
- or
- type: "HTTP"
- CLI
-
- Use
- tcb fn deploy
- (Event) or
- tcb fn deploy --httpFn
- (HTTP)
- HTTP Functions require
- scf_bootstrap
- file in the function directory
- Provide correct
- functionRootPath
- (parent directory of function folder)
- Query logs properly
- Use
- getFunctionLogs
- for log list (basic info)
- Use
- getFunctionLogDetail
- with RequestId for detailed logs
- Note time range limitations (max 1 day interval)
- Function Types Comparison
- Feature
- Event Function (普通云函数)
- HTTP Function (HTTP 云函数)
- Trigger
- Event-driven (SDK, timer)
- HTTP request
- Entry Point
- exports.main = async (event, context) => {}
- Web Server (Express/Flask/Gin etc.)
- Port
- No port required
- Must listen on port 9000
- Bootstrap
- Not required
- Requires
- scf_bootstrap
- Connection
- Short connection
- Supports long connection
- Languages
- Node.js only
- Node.js, Python, Go, Java
- Protocols
- N/A
- HTTP, SSE, WebSocket
- Use Cases
- Event processing, scheduled tasks
- Web APIs, REST services, real-time streaming
- Core Knowledge - Event Functions
- Runtime Environment
- ⚠️ CRITICAL: Runtime cannot be modified after function creation
- Once a cloud function is created with a specific runtime, the runtime
- cannot be changed
- . If you need a different runtime:
- Delete the existing function
- Create a new function with the desired runtime
- Supported Node.js Runtimes:
- Nodejs18.15
- (Default, Recommended)
- Nodejs16.13
- Nodejs14.18
- Nodejs12.16
- Nodejs10.15
- Nodejs8.9
- Runtime Selection Guidelines:
- Use
- Nodejs18.15
- for new projects (default, most modern)
- Choose older versions only if dependencies require specific Node.js versions
- Consider security updates and support lifecycle
- Test thoroughly with selected runtime before deployment
- Event Function Structure
- Event functions require:
- Function Directory
-
- Contains function code
- Must have
- index.js
- (or specified entry file)
- Must export handler:
- exports.main = async (event, context) => {}
- Include
- package.json
- with dependencies
- Function Root Path
-
- Parent directory containing function directories
- Example: If function is at
- /project/cloudfunctions/myFunction/
- functionRootPath
- should be
- /project/cloudfunctions/
- Important
-
- Do NOT include function name in root path
- Entry Point
-
- Default is
- index.js
- with
- exports.main
- Can be customized via
- handler
- parameter
- Event Function Deployment
- Creating New Functions:
- Use
- createFunction
- tool (see MCP tool documentation for full parameter list):
- Important
-
- Always specify
- func.runtime
- explicitly (defaults to
- Nodejs18.15
- )
- Provide
- functionRootPath
- as parent directory of function folders (absolute path)
- Use
- force=true
- to overwrite existing function
- Updating Function Code:
- Use
- updateFunctionCode
- tool:
- ⚠️ Note
- Only updates code, cannot change runtime If runtime needs to change, delete and recreate function Deployment Best Practices: Always specify runtime explicitly when creating functions Use absolute paths for functionRootPath Don't upload node_modules - dependencies installed automatically Test locally before deployment when possible Use environment variables for configuration, not hardcoded values Core Knowledge - HTTP Functions HTTP Function Overview HTTP Functions are optimized for Web service scenarios, supporting standard HTTP request/response patterns. Key Characteristics: Must listen on port 9000 (platform requirement) Requires scf_bootstrap startup script Supports multiple languages: Node.js, Python, Go, Java Supports HTTP, SSE, WebSocket protocols scf_bootstrap Startup Script ⚠️ CRITICAL: HTTP Functions require scf_bootstrap file Requirement Description File name Must be exactly scf_bootstrap (no extension) Permission Must have execute permission ( chmod +x scf_bootstrap ) Port Must start server on port 9000 Line endings Must use LF (Unix), not CRLF (Windows) Examples:
Node.js
!/bin/bash
node index.js
Python
!/bin/bash
export PYTHONPATH = "./third_party: $PYTHONPATH " /var/lang/python310/bin/python3.10 app.py
Go
!/bin/bash
./main
Java
!/bin/bash
java -jar *.jar HTTP Function Structure & Example my-http-function/ ├── scf_bootstrap # Required: startup script ├── package.json # Dependencies └── index.js # Application code Node.js Example (Express): const express = require ( 'express' ) ; const app = express ( ) ; app . get ( '/' , ( req , res ) => res . json ( { message : 'Hello!' } ) ) ; app . listen ( 9000 ) ; // Must be port 9000 HTTP Function Deployment MCP Tool: createFunction ( { func : { name : "myHttpFunction" , type : "HTTP" , // Required for HTTP Function protocolType : "HTTP" , // "HTTP" (default) or "WS" (WebSocket) timeout : 60 } , functionRootPath : "/path/to/functions" , force : false } ) CLI: tcb fn deploy < name
--httpFn
HTTP Function
tcb fn deploy < name
--httpFn --ws
With WebSocket
⚠️ Notes:
Function type
cannot be changed
after creation
HTTP Functions do NOT auto-install dependencies; include
node_modules
or use layers
Invoking HTTP Functions
Method 1: HTTP API (with Access Token)
curl
-L
'https://{envId}.api.tcloudbasegateway.com/v1/functions/{name}?webfn=true'
\
-H
'Authorization: Bearer
Access via default domain
curl https:// { envId } . { region } .app.tcloudbase.com/ { path }
Access via custom domain
- curl
- https://your-domain.com/
- {
- path
- }
- Method
- Auth Required
- Use Case
- HTTP API (
- ?webfn=true
- )
- Yes (Bearer Token)
- Server-to-server
- HTTP Access Service
- Optional
- Browser, public APIs
- SSE & WebSocket Support
- SSE (Server-Sent Events):
- Enabled by default, for server-to-client streaming (AI chat, progress updates).
- // Server
- res
- .
- setHeader
- (
- 'Content-Type'
- ,
- 'text/event-stream'
- )
- ;
- res
- .
- write
- (
- `
- data:
- ${
- JSON
- .
- stringify
- (
- {
- content
- :
- 'Hello'
- }
- )
- }
- \n\n
- `
- )
- ;
- // Client
- const
- es
- =
- new
- EventSource
- (
- 'https://your-domain/stream'
- )
- ;
- es
- .
- onmessage
- =
- (
- e
- )
- =>
- console
- .
- log
- (
- JSON
- .
- parse
- (
- e
- .
- data
- )
- )
- ;
- WebSocket:
- Enable via
- protocolType: "WS"
- in
- createFunction
- . For bidirectional real-time communication.
- Limit
- Value
- Idle timeout
- 10 - 7200 seconds
- Max message size
- 256KB
- const
- wss
- =
- new
- WebSocket
- .
- Server
- (
- {
- port
- :
- 9000
- }
- )
- ;
- wss
- .
- on
- (
- 'connection'
- ,
- (
- ws
- )
- =>
- {
- ws
- .
- on
- (
- 'message'
- ,
- (
- msg
- )
- =>
- ws
- .
- send
- (
- `
- Echo:
- ${
- msg
- }
- `
- )
- )
- ;
- }
- )
- ;
- Function Logs
- Querying Logs:
- Primary Method:
- Use
- getFunctionLogs
- and
- getFunctionLogDetail
- tools (see MCP tool documentation).
- Alternative Method (Plan B):
- If tools unavailable, use
- callCloudApi
- :
- Get Log List
- - Use
- GetFunctionLogs
- action:
- callCloudApi({
- service: "tcb",
- action: "GetFunctionLogs",
- params: {
- EnvId: "{envId}",
- FunctionName: "functionName",
- Offset: 0,
- Limit: 10,
- StartTime: "2024-01-01 00:00:00",
- EndTime: "2024-01-01 23:59:59",
- LogRequestId: "optional-request-id",
- Qualifier: "$LATEST"
- }
- })
- Get Log Details
- - Use
- GetFunctionLogDetail
- action (requires LogRequestId from step 1):
- callCloudApi({
- service: "tcb",
- action: "GetFunctionLogDetail",
- params: {
- StartTime: "2024-01-01 00:00:00",
- EndTime: "2024-01-01 23:59:59",
- LogRequestId: "request-id-from-log-list"
- }
- })
- Log Query Limitations:
- Offset + Limit
- cannot exceed 10000
- StartTime
- and
- EndTime
- interval cannot exceed 1 day
- Use pagination for large time ranges
- Log Query Best Practices:
- Query logs within 1-day windows
- Use RequestId for specific invocation debugging
- Combine list and detail queries for comprehensive debugging
- Check logs after deployment to verify function behavior
- Invoking Event Functions
- From Web Applications:
- import
- cloudbaseSDK
- from
- "@cloudbase/js-sdk"
- ;
- const
- cloudbase
- =
- cloudbaseSDK
- .
- init
- (
- {
- env
- :
- 'your-env-id'
- ,
- region
- :
- 'ap-shanghai'
- ,
- accessKey
- :
- 'your-access-key'
- }
- )
- ;
- // Call event function
- const
- result
- =
- await
- cloudbase
- .
- callFunction
- (
- {
- name
- :
- "functionName"
- ,
- data
- :
- {
- / function parameters /
- }
- }
- )
- ;
- From Mini Programs:
- wx
- .
- cloud
- .
- callFunction
- (
- {
- name
- :
- "functionName"
- ,
- data
- :
- {
- / function parameters /
- }
- }
- )
- .
- then
- (
- res
- =>
- {
- console
- .
- log
- (
- res
- .
- result
- )
- ;
- }
- )
- ;
- From Node.js Backend:
- const
- cloudbase
- =
- require
- (
- "@cloudbase/node-sdk"
- )
- ;
- const
- app
- =
- cloudbase
- .
- init
- (
- {
- env
- :
- "your-env-id"
- }
- )
- ;
- const
- result
- =
- await
- app
- .
- callFunction
- (
- {
- name
- :
- "functionName"
- ,
- data
- :
- {
- / function parameters /
- }
- }
- )
- ;
- From HTTP API:
- Use CloudBase HTTP API to invoke event functions:
- Endpoint:
- https://{envId}.api.tcloudbasegateway.com/v1/functions/{functionName}
- Requires authentication token (Bearer Token)
- See
- http-api
- skill for details
- HTTP Access Configuration (for Event Functions)
- HTTP Access vs HTTP API:
- HTTP API
-
- Uses CloudBase API endpoint with authentication token
- HTTP Access
-
- Creates direct HTTP/HTTPS endpoint for standard REST API access without SDK
- Creating HTTP Access:
- Primary Method:
- Use
- createFunctionHTTPAccess
- tool (see MCP tool documentation).
- Alternative Method (Plan B):
- If tool unavailable, use
- callCloudApi
- with
- CreateCloudBaseGWAPI
- :
- callCloudApi({
- service: "tcb",
- action: "CreateCloudBaseGWAPI",
- params: {
- EnableUnion: true,
- Path: "/api/users",
- ServiceId: "{envId}",
- Type: 6,
- Name: "functionName",
- AuthSwitch: 2,
- PathTransmission: 2,
- EnableRegion: true,
- Domain: "" // Use "" for default domain, or custom domain name
- }
- })
- Key Parameters:
- Type: 6
- - Cloud Function type (required)
- AuthSwitch: 2
- - No auth (1 = with auth)
- Domain: "*"
- - Default domain, or specify custom domain
- Access URL:
- https://{envId}.{region}.app.tcloudbase.com/{path}
- or
- https://{domain}/{path}
- Function Configuration
- Environment Variables:
- Set via
- func.envVariables
- when creating/updating:
- {
- envVariables
- :
- {
- "DATABASE_URL"
- :
- "mysql://..."
- ,
- "API_KEY"
- :
- "secret-key"
- }
- }
- ⚠️ CRITICAL: Environment Variable Update Constraint
- When updating environment variables for existing functions:
- MUST first query current environment variables
- using
- getFunctionList
- with
- action=detail
- to get the function's current configuration
- MUST merge
- new environment variables with existing ones
- DO NOT directly overwrite
- - this will delete existing environment variables not included in the update
- Correct Update Pattern:
- // 1. First, get current function details
- const
- currentFunction
- =
- await
- getFunctionList
- (
- {
- action
- :
- "detail"
- ,
- name
- :
- "functionName"
- }
- )
- ;
- // 2. Merge existing envVariables with new ones
- const
- mergedEnvVariables
- =
- {
- ...
- currentFunction
- .
- EnvVariables
- ,
- // Existing variables
- ...
- newEnvVariables
- // New/updated variables
- }
- ;
- // 3. Update with merged variables
- await
- updateFunctionConfig
- (
- {
- funcParam
- :
- {
- name
- :
- "functionName"
- ,
- envVariables
- :
- mergedEnvVariables
- }
- }
- )
- ;
- Why This Matters:
- Direct overwrite will
- delete
- all environment variables not included in the update
- This can break function functionality if critical variables are removed
- Always preserve existing configuration when making partial updates
- Timeout Configuration:
- Set via
- func.timeout
- (in seconds):
- Default timeout varies by runtime
- Maximum timeout depends on runtime version
- Consider function execution time when setting
- Timer Triggers:
- Configure via
- func.triggers
- :
- Type:
- timer
- (only supported type)
- Config: Cron expression (7 fields: second minute hour day month week year)
- Examples:
- "0 0 2 1 * * *"
- - 2:00 AM on 1st of every month
- "0 30 9 * * * *"
- - 9:30 AM every day
- VPC Configuration:
- For accessing VPC resources:
- {
- vpc
- :
- {
- vpcId
- :
- "vpc-xxxxx"
- ,
- subnetId
- :
- "subnet-xxxxx"
- }
- }
- MCP Tools Reference
- Function Management:
- getFunctionList
- - List functions or get function details
- createFunction
- - Create cloud function (supports both Event and HTTP types via
- type
- parameter)
- type: "Event"
- - Event Function (default)
- type: "HTTP"
- - HTTP Function
- protocolType: "WS"
- - Enable WebSocket for HTTP Function
- updateFunctionCode
- - Update function code (runtime cannot change)
- updateFunctionConfig
- - Update function configuration (⚠️ when updating envVariables, must first query and merge with existing values to avoid overwriting)
- Logging:
- getFunctionLogs
- - Get function log list (basic info)
- getFunctionLogDetail
- - Get detailed log content by RequestId
- callCloudApi
- (Plan B) - Use
- GetFunctionLogs
- and
- GetFunctionLogDetail
- actions if direct tools unavailable
- HTTP Access:
- createFunctionHTTPAccess
- - Create HTTP access for function (supports both Event and HTTP types via
- type
- parameter)
- callCloudApi
- (Plan B) - Use
- CreateCloudBaseGWAPI
- action if direct tool unavailable
- Triggers:
- manageFunctionTriggers
- - Create or delete function triggers
- CLI Commands:
- tcb fn deploy
- - Deploy Event Function
- tcb fn deploy
--httpFn - - Deploy HTTP Function
- tcb fn deploy
--httpFn --ws - - Deploy HTTP Function with WebSocket
- tcb fn deploy --all
- - Deploy all functions in config
- Common Patterns
- Error Handling
- exports
- .
- main
- =
- async
- (
- event
- ,
- context
- )
- =>
- {
- try
- {
- // Function logic
- return
- {
- code
- :
- 0
- ,
- message
- :
- "Success"
- ,
- data
- :
- result
- }
- ;
- }
- catch
- (
- error
- )
- {
- return
- {
- code
- :
- -
- 1
- ,
- message
- :
- error
- .
- message
- ,
- data
- :
- null
- }
- ;
- }
- }
- ;
- Environment Variable Usage
- exports
- .
- main
- =
- async
- (
- event
- ,
- context
- )
- =>
- {
- const
- apiKey
- =
- process
- .
- env
- .
- API_KEY
- ;
- const
- dbUrl
- =
- process
- .
- env
- .
- DATABASE_URL
- ;
- // Use environment variables
- }
- ;
- Database Operations
- const
- cloudbase
- =
- require
- (
- "@cloudbase/node-sdk"
- )
- ;
- const
- app
- =
- cloudbase
- .
- init
- (
- {
- env
- :
- process
- .
- env
- .
- ENV_ID
- }
- )
- ;
- exports
- .
- main
- =
- async
- (
- event
- ,
- context
- )
- =>
- {
- const
- db
- =
- app
- .
- database
- (
- )
- ;
- const
- result
- =
- await
- db
- .
- collection
- (
- "users"
- )
- .
- get
- (
- )
- ;
- return
- result
- ;
- }
- ;
- Best Practices
- General Best Practices
- Runtime Selection
-
- Always specify runtime explicitly, use
- Nodejs18.15
- for new projects
- Code Organization
-
- Keep functions focused and single-purpose
- Error Handling
-
- Always implement proper error handling
- Environment Variables
-
- Use env vars for configuration, never hardcode secrets
- Logging
-
- Add meaningful logs for debugging
- Testing
-
- Test functions locally when possible before deployment
- Security
-
- Implement authentication/authorization for HTTP access
- Performance
-
- Optimize cold start time, use connection pooling for databases
- Monitoring
-
- Regularly check logs and monitor function performance
- Documentation
-
- Document function parameters and return values
- HTTP Function Specific Best Practices
- Port Configuration
-
- Always listen on port 9000
- scf_bootstrap
-
- Ensure correct file permissions and LF line endings
- Health Check
-
- Add
- /health
- endpoint for monitoring
- CORS
-
- Configure CORS headers for browser access
- Graceful Shutdown
-
- Handle process signals properly
- Dependencies
-
- Include
- node_modules
- in package or use layers (no auto-install for HTTP Functions)
- Timeout
-
- Set appropriate timeout for long-running SSE/WebSocket connections
- Error Responses
- Return proper HTTP status codes and error messages Choosing Between Event and HTTP Functions Scenario Recommended Type SDK/Mini Program calls Event Function Scheduled tasks (cron) Event Function REST API / Web services HTTP Function SSE streaming (AI chat) HTTP Function WebSocket real-time HTTP Function File upload/download HTTP Function Multi-language support HTTP Function