Full life cycle cross-provider serverless application management for your fast-growing business
Website β’ Documentation β’ Examples β’ δΈζζζ‘£
ServerlessInsight is a powerful serverless framework for managing serverless applications across multiple cloud providers. It provides a unified interface to deploy, manage, and debug serverless functions and resources using Infrastructure as Code (IaC) principles.
Whether you're building on AWS, Alibaba Cloud, Huawei Cloud, or other providers, ServerlessInsight simplifies your development workflow with:
- Multi-cloud support - Work with multiple cloud providers using a single tool
- Infrastructure as Code - Define your serverless infrastructure in YAML
- Local development - Test your functions locally before deploying
- Type-safe templates - Validate your configurations before deployment
- π Multi-Cloud Provider Support - Deploy to Alibaba Cloud, Huawei Cloud, and more
- π¦ Unified Configuration - Single YAML format for all providers
- π Quick Deployment - Deploy serverless applications with a single command
- π Template Validation - Validate your IaC templates before deployment
- π Local Testing - Run and debug serverless functions locally
- π Template Generation - Generate provider-specific IaC templates
- π API Gateway Integration - Configure HTTP endpoints for your functions
- πΎ Resource Management - Manage storage, databases, and other cloud resources
- π Security First - Built-in validation and security best practices
- π Comprehensive Logging - Debug and monitor your applications
ServerlessInsight supports the following cloud providers:
| Provider | Functions | API Gateway | Storage | Databases | Status |
|---|---|---|---|---|---|
| Alibaba Cloud | β FC3 | β API Gateway | β OSS | β RDS, OTS, ESS | Stable |
| Huawei Cloud | β FunctionGraph | π§ Coming Soon | π§ Coming Soon | π§ Coming Soon | Beta |
| AWS | π Planned | π Planned | π Planned | π Planned | Planned |
| Azure | π Planned | π Planned | π Planned | π Planned | Planned |
| Google Cloud | π Planned | π Planned | π Planned | π Planned | Planned |
| Tencent Cloud | π Planned | π Planned | π Planned | π Planned | Planned |
- Node.js 16.x or higher
- Cloud provider credentials (Alibaba Cloud AccessKey, Huawei Cloud credentials, etc.)
Install ServerlessInsight globally using npm:
npm install -g @geek-fun/serverlessinsightVerify the installation:
si --version# Validate your serverless configuration
si validate <stackName> -f serverless.yml
# Deploy your serverless application
si deploy <stackName> -f serverless.yml -s dev
# Run your application locally for debugging
si local <stackName> -f serverless.yml -s local
# Generate provider-specific template
si template <stackName> -f serverless.yml -t JSON
# Destroy the deployed stack
si destroy <stackName> -f serverless.ymlServerlessInsight uses a simple YAML format to define your serverless infrastructure:
version: 0.0.1
provider:
name: aliyun
region: cn-hongkong
service: my-api-service
functions:
hello_function:
name: hello-world-fn
code:
runtime: nodejs18
handler: index.handler
path: ./src
memory: 512
timeout: 10
environment:
NODE_ENV: production
events:
api_gateway:
type: API_GATEWAY
name: my-api-gateway
triggers:
- method: GET
path: /api/hello
backend: ${functions.hello_function}For more examples, check out the samples directory:
- API Gateway Example - Deploy functions with HTTP endpoints
- Storage Example - Configure OSS buckets
- Database Example - Set up RDS databases
- Table Store Example - Configure OTS table storage
- Elasticsearch Example - Deploy Elasticsearch Serverless
- Custom Domain Example - Configure custom domains
- GPU Functions Example - Deploy GPU-enabled functions
- Huawei Cloud Example - Deploy to Huawei Cloud FunctionGraph
# Clone and setup
git clone https://github.com/geek-fun/serverlessinsight.git
cd serverlessinsight
npm install
# Build and link for development
npm run build
npm link
# Run local development server
si local my-stack -f serverless.yml -s local
# Run tests
npm test
# Lint code
npm run lint:checkWhen running the local development server, you can test bucket operations by accessing files through the LocalStack server:
# List all files in a bucket
curl http://localhost:4567/si_buckets/<bucket_key>/
# Access a specific file from a bucket
curl http://localhost:4567/si_buckets/<bucket_key>/path/to/file.html
# List files in a subdirectory
curl http://localhost:4567/si_buckets/<bucket_key>/subdir/The bucket handler serves files from the directory specified in your bucket's website.code configuration.
ServerlessInsight follows a functional client architecture that cleanly separates cloud provider SDKs from business logic:
βββββββββββββββββββββββββββββββββββββββββββ
β Resource / Planner / Executor Layer β β Provider-agnostic business logic
β (Pure functions, no SDK imports) β
βββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββ
β Functional Client Layer β β Encapsulated SDK operations
β (aliyunClient.ts, tencentClient.ts) β
βββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββ
β Cloud Provider SDKs β β @alicloud/*, tencentcloud-*
βββββββββββββββββββββββββββββββββββββββββββ
- Functional & Pure: All business logic uses pure functions with immutable data
- SDK Encapsulation: Provider SDKs are accessed ONLY through client modules
- Operation Functions: Clients expose high-level operation functions (e.g.,
createFunction,getFunction) - No Classes: Prefer
typeoverinterface, and functional patterns over classes - Minimal Side Effects: File I/O and other side effects are isolated at boundaries
// β
Client exposes operation functions, not raw SDKs
export type AliyunClient = {
fc3: {
createFunction: (config: Fc3FunctionConfig, codeBase64: string) => Promise<void>;
getFunction: (functionName: string) => Promise<Fc3FunctionInfo | null>;
// ... other operations
};
// ... other services
};
// β
Resource layer uses clean client API
const client = createAliyunClient(context);
const codeBase64 = readFileAsBase64(codePath);
await client.fc3.createFunction(config, codeBase64);This architecture enables:
- Better Testing: Mock client operations instead of SDKs
- Maintainability: Provider changes isolated to client layer
- Type Safety: Strong typing throughout the stack
- Code Reuse: Shared client operations across resources
ServerlessInsight uses a state-based deployment model that tracks all deployed resources in a local state file (.serverlessinsight/state.json). This enables:
- Incremental deployments - Only changed resources are updated
- Drift detection - Identifies differences between local state and cloud resources
- Safe destruction - Knows which resources to clean up
When deploying multiple resources, if one fails, ServerlessInsight ensures that:
- Successfully deployed resources are always saved to state - Even if subsequent resources fail, your state file will contain all resources that were successfully created/updated/deleted
- Clear error reporting - You'll see which resources succeeded and which failed
- Easy retry - Simply run
deployagain to continue from where you left off
Example partial failure output:
β οΈ PARTIAL DEPLOYMENT FAILURE: 2 resource(s) succeeded, but functions.api_handler failed.
State has been saved for successfully deployed resources. Run deploy again to retry failed resources.
Next steps: 1) Review the error above, 2) Fix any configuration issues, 3) Run deploy again to continue.
The state file is stored in .serverlessinsight/state.json in your project directory. This file:
- Should be committed to version control for team collaboration
- Contains resource metadata and identifiers
- Is automatically updated after each successful operation
If you encounter state drift (cloud resources exist that aren't in your state file):
- Manual import - Currently, resources must be manually added to the state file
- Clean start - Delete the state file and resources in the cloud, then redeploy
π‘ Tip: Always backup your state file before making manual modifications.
For comprehensive documentation, visit serverlessinsight.geekfun.club
Additional resources:
We welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Join our community to get help, share ideas, and contribute:
- GitHub Issues - Report bugs or request features
- Website - serverlessinsight.geekfun.club
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
ServerlessInsight is built with these amazing technologies:
- Node.js - JavaScript runtime
- TypeScript - Type-safe JavaScript
- Commander.js - CLI framework
- Alibaba Cloud ROS CDK - Cloud infrastructure SDK
Made with β€οΈ by the geek-fun team