معرفی Functions (Serverless)
ابرکلیک Functions را با قابلیت scale-to-zero ارائه میدهد. کد شما فقط هنگام دریافت درخواست اجرا میشود و در زمان بیکاری هیچ هزینهای ندارید.
نوع Functions
دو نوع Function پشتیبانی میشود:
- handler — کد را مستقیم paste یا آپلود کنید. ابرکلیک build را انجام میدهد. محدودیت حجم: ~256KB برای paste، یا tarball.
- container — یک image از پیش buildشده deploy کنید. برای سناریوهای پیشرفتهتر یا dependencyهای سنگین.
runtimeهای پشتیبانیشده (برای نوع handler)
node— Node.jspython— Pythongo— Go
فیلد handlerRuntime برای نوع handler الزامی است. برای نوع container این فیلد را وارد نکنید.
منابع Function (sourceType)
| نوع | توضیح |
|---|---|
upload | کد inline (paste) یا tarball آپلود |
image | image از پیش buildشده (برای نوع container) |
git | کلون از مخزن Git |
پیکربندی و مقادیر پیشفرض
| فیلد | پیشفرض | توضیح |
|---|---|---|
memoryMb | 256 | حافظه تخصیصی (MB) |
timeoutSec | 30 | حداکثر زمان اجرا (ثانیه) |
minReplicas | 0 | حداقل تعداد نمونه (0 = scale-to-zero) |
maxReplicas | 3 | حداکثر تعداد نمونه |
targetConcurrency | 10 | تعداد درخواست همزمان در هر نمونه |
با تنظیم minReplicas=0 هنگام بیکاری هیچ هزینهای نمیپردازید. اولین درخواست کمی تأخیر (cold start) خواهد داشت.
ایجاد Function از طریق داشبورد
۱. به بخش Functions بروید و Function جدید را بزنید.
۲. نام (name) و projectId را انتخاب کنید.
۳. نوع (kind): handler یا container.
۴. برای handler: runtime مشخص کنید و کد را paste یا tarball آپلود کنید.
۵. entry point را وارد کنید — مثلاً index.handler.
۶. تنظیمات حافظه و timeout را مشخص کنید.
۷. روی ایجاد کلیک کنید.
پس از ایجاد، یک invokeUrl دریافت میکنید:
https://fn-<id>.apps.abrclick.cloud
ایجاد Function از طریق API
Endpoint: POST /v1/projects/:projectId/functions
Body:
{
"name": "my-handler-fn",
"kind": "handler",
"handlerRuntime": "node",
"sourceType": "upload",
"entrypoint": "index.handler",
"memoryMb": 512,
"timeoutSec": 60,
"minReplicas": 0,
"maxReplicas": 5
}
Response:
{
"data": {
"id": "fn-abc123",
"name": "my-handler-fn",
"status": "creating",
"invokeUrl": "https://fn-abc123.apps.abrclick.cloud",
"createdAt": "2026-07-20T10:00:00Z"
}
}
مثال واقعی — handler نوع Node.js
کد Function (index.js)
exports.handler = async (event) => {
const name = event.queryStringParameters?.name || 'مهمان';
return {
statusCode: 200,
headers: { 'Content-Type': 'application/json; charset=utf-8' },
body: JSON.stringify({ message: `سلام ${name}!` })
};
};
ایجاد از طریق API
curl -X POST https://api.abrclick.cloud/v1/projects/my-project/functions \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "greeting-fn",
"kind": "handler",
"handlerRuntime": "node",
"sourceType": "upload",
"code": "exports.handler = async (event) => { ... }",
"entrypoint": "index.handler",
"memoryMb": 256,
"timeoutSec": 30,
"minReplicas": 0,
"maxReplicas": 3
}'
فراخوانی Function
curl "https://fn-abc123.apps.abrclick.cloud?name=علی"
پاسخ:
{ "message": "سلام علی!" }
Triggers (محرکها)
Functions میتوانند با سه نوع trigger اجرا شوند:
۱. HTTP (پیشفرض)
درخواست HTTP مستقیم به invokeUrl.
۲. Cron (زمانبندی)
اجرای خودکار در زمانهای مشخص:
{
"type": "cron",
"schedule": "0 3 * * *"
}
این Function هر روز ساعت ۳ صبح اجرا میشود.
۳. Queue (صف پیام)
اجرای خودکار هنگام دریافت پیام از صف:
{
"type": "queue",
"queueRef": "orders"
}
برای ایجاد trigger از endpoint POST /v1/functions/:id/triggers استفاده کنید.
مدیریت Functions
لیست Functions
# از طریق API
GET /v1/projects/:projectId/functions
جزئیات یک Function
# از طریق API
GET /v1/functions/:id
ویرایش Function
# از طریق API
PATCH /v1/functions/:id
Body (فقط فیلدهایی که میخواهید تغییر دهید):
{
"memoryMb": 1024,
"timeoutSec": 90
}
حذف Function
# از طریق API
DELETE /v1/functions/:id
وضعیتهای Function
| وضعیت | توضیح |
|---|---|
creating | در حال ایجاد |
building | در حال build (برای نوع handler) |
active | آماده دریافت درخواست |
error | خطا در build یا راهاندازی |
stopped | متوقفشده توسط کاربر |
رفع خطاهای رایج
خطا: handler not found
علت: مسیر entrypoint اشتباه است.
راهحل: اگر فایل شما index.js است و تابع handler صادر شده، entrypoint باید index.handler باشد.
خطا: timeout exceeded
علت: Function بیش از timeoutSec طول کشیده.
راهحل: مقدار timeoutSec را افزایش دهید یا کد را بهینه کنید.
خطا: out of memory
علت: حافظه تخصیصی کافی نیست.
راهحل: memoryMb را افزایش دهید (مثلاً از ۲۵۶ به ۵۱۲ یا ۱۰۲۴).
خطا: handlerRuntime is required
علت: برای نوع handler فیلد handlerRuntime وارد نشده.
راهحل: یکی از node، python، یا go را انتخاب کنید.
API endpoints کامل
| روش | مسیر | توضیح |
|---|---|---|
| GET | /v1/projects/:projectId/functions | لیست Functions |
| POST | /v1/projects/:projectId/functions | ایجاد Function |
| GET | /v1/functions/:id | جزئیات Function |
| PATCH | /v1/functions/:id | ویرایش Function |
| DELETE | /v1/functions/:id | حذف Function |
| GET | /v1/functions/:id/triggers | لیست triggers |
| POST | /v1/functions/:id/triggers | ایجاد trigger |
| DELETE | /v1/functions/:id/triggers/:triggerId | حذف trigger |
مطالب مرتبط
- Cron Jobs — زمانبندی دستورات در اپلیکیشنها
- Environment Variables — مدیریت متغیرهای محیطی