پرش به مطلب اصلی

معرفی Functions (Serverless)

🖼️
صفحه لیست Functions در داشبوردplaceholder — تصویر را اینجا جایگزین کنید

ابرکلیک Functions را با قابلیت scale-to-zero ارائه می‌دهد. کد شما فقط هنگام دریافت درخواست اجرا می‌شود و در زمان بیکاری هیچ هزینه‌ای ندارید.


نوع Functions

دو نوع Function پشتیبانی می‌شود:

  1. handler — کد را مستقیم paste یا آپلود کنید. ابرکلیک build را انجام می‌دهد. محدودیت حجم: ~256KB برای paste، یا tarball.
  2. container — یک image از پیش build‌شده deploy کنید. برای سناریوهای پیشرفته‌تر یا dependency‌های سنگین.

runtime‌های پشتیبانی‌شده (برای نوع handler)

  • node — Node.js
  • python — Python
  • go — Go
اطلاع

فیلد handlerRuntime برای نوع handler الزامی است. برای نوع container این فیلد را وارد نکنید.


منابع Function (sourceType)

نوعتوضیح
uploadکد inline (paste) یا tarball آپلود
imageimage از پیش build‌شده (برای نوع container)
gitکلون از مخزن Git

پیکربندی و مقادیر پیش‌فرض

فیلدپیش‌فرضتوضیح
memoryMb256حافظه تخصیصی (MB)
timeoutSec30حداکثر زمان اجرا (ثانیه)
minReplicas0حداقل تعداد نمونه (0 = scale-to-zero)
maxReplicas3حداکثر تعداد نمونه
targetConcurrency10تعداد درخواست همزمان در هر نمونه
نکته

با تنظیم 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

مطالب مرتبط