محاسبات سرورلس یک روند محبوب در توسعهٔ ابری است که به توسعهدهندگان اجازه میدهد اپلیکیشنهای مقیاسپذیر، مقرونبهصرفه و رویدادمحور را بدون مدیریت سرورها ایجاد کنند. این مقاله شما را در ساخت یک وباپلیکیشن سرورلس با استفاده از Azure Functions و RapidAPI راهنمایی میکند.
محاسبات سرورلس چیست؟
محاسبات سرورلس یک مدل رایانش ابری است که در آن ارائهدهندهٔ ابر بهصورت پویا تخصیص و فراهمسازی سرورها را مدیریت میکند. یک اپلیکیشن سرورلس در کانتینرهای محاسباتی بدون حالت اجرا میشود که رویدادمحور، موقتی و بهطور کامل توسط ارائهدهندهٔ ابر مدیریت میشوند.
RapidAPI
RapidAPI یک پلتفرم است که توسعهدهندگان را به هزاران API از دستهبندیهای مختلف متصل میکند. در اینجا نحوهٔ ثبتنام و دریافت کلید API آورده شده است.
۱. بازدید از وبسایت RapidAPI: به RapidAPI بروید.
۲. ثبتنام: روی دکمهٔ «Sign Up» در گوشهٔ بالا سمت راست صفحهٔ اصلی کلیک کنید. میتوانید با حساب Google، GitHub، یا Facebook ثبتنام کنید یا با ایمیل خود یک حساب جدید بسازید.
۳. تأیید حساب: پس از ثبتنام، یک ایمیل برای تأیید دریافت خواهید کرد. روی لینک داخل ایمیل کلیک کنید.
۴. دسترسی به داشبورد: بعد از ورود، روی تصویر پروفایل خود در گوشهٔ بالا سمت راست کلیک کنید و سپس «My Apps» را انتخاب کنید. این شما را به صفحهای میبرد که فهرست برنامههای شما را نشان میدهد.
۵. دریافت کلید API:
RapidAPI بهصورت پیشفرض یک برنامهٔ «Default Application» برای شما میسازد. روی آن کلیک کنید تا کلید API خود را ببینید. کلید زیر بخش «Security» قرار دارد.
توجه داشته باشید که کلید API اطلاعات حساس است و باید امن نگه داشته شود. این کلید را عمومی به اشتراک نگذارید. از این کلید برای احراز هویت درخواستها هنگام استفاده از APIها در RapidAPI استفاده خواهید کرد.
Terraform
Terraform یک ابزار متنباز برای زیرساخت بهعنوانکد (IaC) است که توسط HashiCorp توسعه یافته است. این ابزار به شما امکان میدهد زیرساخت مرکز داده را با یک زبان پیکربندی اعلامی تعریف و فراهم کنید. یعنی شما حالت مطلوب زیرساخت را توصیف میکنید و Terraform تعیین میکند چگونه آن را ایجاد کند.
چرا از Terraform استفاده کنیم؟
ویژگیهای کلیدی Terraform شامل موارد زیر است:
▪ مستقل از پلتفرم: میتوانید از Terraform برای مدیریت مجموعهٔ گستردهای از سرویسدهندهها و راهحلهای سفارشی استفاده کنید.
▪ مدیریت وضعیت: Terraform هنگام ایجاد زیرساخت یک فایل state ایجاد میکند تا منابع شما را پیگیری کند و برای تغییر یا حذف منابع ضروری است.
▪ زیرساخت تغییرناپذیر: Terraform زیرساخت را تغییر نمیدهد، بلکه هنگام اعمال تغییرات، منابع قدیمی را با منابع جدید جایگزین میکند.
بهخاطر داشته باشید HashiCorp مجوز Terraform را به Business Source License تغییر داده است. فورک متنباز OpenTofu یک جایگزین مناسب با قابلیتهای مشابه است.
جریان داده (Dataflow)
نمودار زیر جریان دادهٔ یک وباپلیکیشن سرورلس را که از Azure Functions و RapidAPI استفاده میکند نشان میدهد.

این اپلیکیشن از سه مؤلفهٔ اصلی تشکیل شده است:
▪ Frontend: یک صفحهٔ وب استاتیک میزبانیشده در Azure Storage که اطلاعات آبوهوا را نمایش میدهد. صفحهٔ وب از C# برای فراخوانی نقطهٔ پایانی Azure Function با ارسال موقعیت کاربر استفاده میکند.
▪ Azure Function: یک تابع سرورلس که بهعنوان واسط بین فرانتاند و RapidAPI Weather API عمل میکند. تابع موقعیت کاربر را بررسی میکند، درخواست RapidAPI را با کلید API میسازد و دادهٔ آبوهوا را برمیگرداند.
▪ RapidAPI Weather API: یک API که اطلاعات آبوهوا را دربارهٔ هر مکانی ارائه میدهد و برای احراز هویت درخواستها به کلید API نیاز دارد.
این نمودار نشان میدهد داده هنگام تعامل کاربر چگونه بین این اجزا جریان پیدا میکند. اپلیکیشن از مزایای سرورلس مانند مقیاسپذیری، قابلیت اطمینان و کاهش هزینه برخوردار میشود.
راهاندازی محیط توسعه با استفاده از Terraform
در اینجا یک طرح کلی از روند راهاندازی یک محیط توسعه با Terraform آورده شده است:
۱. نصب Terraform:
Terraform را روی سیستم محلی خود دانلود و نصب کنید.
۲. پیکربندی Provider:
در فایل پیکربندی Terraform، ارائهدهندهٔ موردنظر (مانند AWS، GCP، Azure) را مشخص کنید.
۳. نوشتن پیکربندی:
زیرساخت خود را با استفاده از HCL در یک فایل پیکربندی تعریف کنید.
۴. Initialize کردن Terraform:
دستور terraform init را اجرا کنید تا پلاگینهای لازم دانلود شوند.
۵. برنامهریزی و اعمال:
دستور terraform plan را برای مشاهدهٔ تغییرات اجرا کنید. سپس با terraform apply زیرساخت تعریفشده ایجاد میشود.
به یاد داشته باشید که مقادیر پیشفرض را با مقادیر واقعی خود جایگزین کرده و کد را مطابق نیازهای پروژه تنظیم کنید.
Azure Functions
Azure Functions یک راهکار سرورلس است که به شما امکان میدهد کد کمتری بنویسید، زیرساخت کمتری مدیریت کنید و هزینهها را کاهش دهید. در اینجا نحوهٔ راهاندازی زیرساخت پایه با افزودن یک اکانت و محیط توسعه با Terraform آورده شده است.
تحلیل کد Terraform و منابعی که ایجاد میشود
بیایید کد Terraform بالا را بررسی کنیم و منابعی که ایجاد میکند را توضیح دهیم.
۱. گروه منابع (Resource Group):
در Azure، گروه منابع یک ظرف منطقی است که تمام منابعی که در یک اشتراک Azure مستقر میشوند را در خود نگه میدارد. به این معنی که تمام منابع شما به صورت گروهی سازماندهی شده و میتوانید آنها را به طور جمعی مدیریت کنید (به جای مدیریت تکتک). در کد، از منبع azurerm_resource_group برای تعریف گروه منابع استفاده شده است.
۲. حساب ذخیرهسازی (Storage Account):
Azure Storage سرویسی است که ذخیرهسازی امن و مقیاسپذیر برای دادهها در فضای ابری ارائه میدهد. یک حساب ذخیرهسازی، یک فضای نام (namespace) منحصربهفرد در Azure برای دادههای شما فراهم میکند. در کد، از منبع azurerm_storage_account برای تعریف حساب ذخیرهسازی استفاده شده است.
۳. پلن سرویس اپ (App Service Plan):
در Azure، پلن سرویس اپ مجموعهای از منابع محاسباتی است که یک وباپلیکیشن برای اجرا بر روی آن نیاز دارد. این منابع محاسباتی مشابه «مزرعه سرور» (server farm) در هاستینگ وب سنتی هستند. در کد، از منبع azurerm_app_service_plan برای تعریف پلن سرویس اپ استفاده شده است.
۴. فانکشن اپ (Function App):
Azure Functions یک سرویس محاسباتی بدون سرور (serverless) است که به شما امکان میدهد کدهایی را که بر اساس رویداد فعال میشوند، بدون نیاز به تهیه یا مدیریت مستقیم زیرساخت اجرا کنید. فانکشن اپ به شما اجازه میدهد توابع را به عنوان یک واحد منطقی گروهبندی کنید تا مدیریت، استقرار و اشتراک منابع راحتتر شود. در کد، از منبع azurerm_function_app برای تعریف فانکشن اپ استفاده شده است.
در کد ارائهشده، باید جایگزینها (placeholders) را با مقادیر واقعی خودتان جایگزین کنید تا این منابع در محیط Azure شما ایجاد شوند. برای مثال:
- “example-resources” را با نامی که برای گروه منابع میخواهید جایگزین کنید،
- “West Europe” را با منطقه Azure دلخواه خودتان،
- “examplestorageacc” را با نام دلخواه حساب ذخیرهسازی، و به همین ترتیب برای بقیه.
برای ایجاد زیرساخت، کافی است دستور زیر را اجرا کنید:
terraform apply
ساخت وباپلیکیشن سرورلس
اکنون که ابزارها آمادهاند، میتوانیم ساخت وباپلیکیشن را آغاز کنیم.
یافتن و تست APIها با RapidAPI
اینجا فرآیند دستی استفاده از RapidAPI توضیح داده شده است. وقتی در RapidAPI یک API پیدا کردید که میخواهید از آن استفاده کنید، معمولاً از کلید API که هنگام ثبتنام در RapidAPI دریافت کردهاید برای احراز هویت درخواستهای خود به آن API استفاده میکنید.
۱. بازدید از وبسایت RapidAPI: به سایت RapidAPI بروید. این پلتفرمی است که هزاران API در دستههای مختلف را در خود جای داده است.
۲. جستجوی API: از نوار جستجوی بالای صفحه استفاده کنید تا API مناسب نیاز خود را پیدا کنید. میتوانید بر اساس نام API، قابلیت موردنظر یا دستهبندی جستجو کنید.
۳. انتخاب API: روی API موردنظر از نتایج جستجو کلیک کنید تا جزئیات آن را ببینید. این شامل endpointها، پارامترهای قابل قبول، پاسخ بازگشتی و نمونه کد در زبانهای مختلف است.
۴. تست API: در صفحه API میتوانید مستقیماً آن را تست کنید. endpoint موردنظر را انتخاب کنید، پارامترهای لازم را پر کنید و روی دکمه “Test Endpoint” کلیک کنید. RapidAPI درخواست را ارسال کرده و پاسخ را به شما نشان میدهد.
۵. دریافت کلید API: اگر تصمیم به استفاده از API گرفتید، باید در آن subscribe کنید و کلید API خود را دریافت کنید. این کلید برای احراز هویت درخواستها استفاده میشود. برای دیدن کلید، روی عکس پروفایل خود در گوشه بالا-راست کلیک کنید → “My Apps” → روی برنامه خود (بهطور پیشفرض “Default Application”) کلیک کنید تا کلید API نمایش داده شود.
نمونه کد پایتون برای استفاده از کلید API در درخواست به RapidAPI:
import requests
url = "https://weatherapi-com.p.rapidapi.com/current.json"
querystring = {"q": "53.1,-0.13"}
headers = {
"X-RapidAPI-Key": "your-api-key",
"X-RapidAPI-Host": "weatherapi-com.p.rapidapi.com"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())
در این کد، “api-name.p.rapidapi.com” را با host واقعی API، “api-endpoint” را با endpoint واقعی و “your-api-key” را با کلید واقعی خود جایگزین کنید. این کد یک درخواست GET به API ارسال کرده و پاسخ را چاپ میکند.
ایجاد Azure Function App
کد Terraform زیر برای ایجاد یک Azure Function App و یک تابع با تریگر HTTP است. این کد برای ساخت Function App ضروری است.
# Define the provider
provider "azurerm" {
features {}
}
# Create a resource group
resource "azurerm_resource_group" "rg" {
name = "example-resources"
location = "West Europe"
}
# Create a storage account
resource "azurerm_storage_account" "sa" {
name = "examplestorageacc"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
# Create an app service plan
resource "azurerm_app_service_plan" "asp" {
name = "example-appserviceplan"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
sku {
tier = "Standard"
size = "S1"
}
}
# Create a function app
resource "azurerm_function_app" "fa" {
name = "example-functionapp"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
app_service_plan_id = azurerm_app_service_plan.asp.id
storage_connection_string = azurerm_storage_account.sa.primary_connection_string
}
اجزای موجود در کد:
- Provider: مشخص میکند که ارائهدهنده ابری Azure است.
- Resource group: گروهی برای نگهداری منابع مرتبط.
- Storage account: برای ذخیره کدهای فانکشن لازم است.
- App service plan: مجموعه منابع محاسباتی برای اجرای وباپ را تعریف میکند.
- Function app: میزبان اجرای فانکشنها در Azure است و از resource group، storage account و app service plan استفاده میکند.
ساخت یک وباپ ساده
نمونه ساده یک Azure Function به زبان C# که API OpenWeatherMap را از طریق RapidAPI فراخوانی میکند. این فانکشن با درخواست HTTP فعال میشود و آبوهوای فعلی شهر مشخصشده را برمیگرداند.
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Net.Http;
using System.Threading.Tasks;
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string city = req.Query["city"];
using (var client = new HttpClient())
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri($"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=YOUR_API_KEY"),
Headers =
{
{ "x-rapidapi-key", "YOUR_RAPIDAPI_KEY" },
{ "x-rapidapi-host", "community-open-weather-map.p.rapidapi.com" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
dynamic data = JsonConvert.DeserializeObject(body);
return new OkObjectResult($"Temperature in {city}: {data.main.temp}°C");
}
}
}
در این کد:
- فانکشن با درخواست HTTP فعال میشود.
- پارامتر city را از query string میخواند.
- یک درخواست GET به API OpenWeatherMap با شهر مشخصشده ارسال میکند.
- پاسخ API را میخواند، JSON را deserialize میکند و دما را برمیگرداند.
حتماً “YOUR_API_KEY” را با کلید واقعی OpenWeatherMap و “YOUR_RAPIDAPI_KEY” را با کلید RapidAPI خود جایگزین کنید. توجه داشته باشید که در شرایط واقعی به دلایل امنیتی نباید کلیدهای API را مستقیماً در کد قرار دهید. بهتر است از Azure Key Vault یا Managed Identities استفاده کنید.
استقرار و تست Azure Function App
اگر قبلاً یک Function App دارید، عالی است! میتوانید مرحله ساخت را رد کنید و مستقیماً کد را به Function App موجود دیپلوی کنید. روش انجام آن با Azure CLI:
- ورود به Azure: از دستور az login برای ورود به حساب Azure از طریق CLI استفاده کنید.
- دیپلوی Function App: به دایرکتوری پروژه محلی خود بروید و دستور زیر را اجرا کنید: func azure functionapp publish <FunctionAppName>
نمونه اسکریپت:
# Login to Azure
az login
# Navigate to your local project directory
cd path-to-your-local-function-app
# Deploy the function app
func azure functionapp publish your-existing-function-app-name
مقادیر “path-to-your-local-function-app” و “your-existing-function-app-name” را با مقادیر واقعی خود جایگزین کنید.
تست Azure Function App
بعد از دیپلوی، میتوانید با ارسال درخواست HTTP به URL فانکشن آن را تست کنید. فرمت URL معمولاً به این شکل است: https://<Your Function App>.azurewebsites.net/api/<Your Function Name>?code=<your access code>&name=<Enter a name here>
نتیجهگیری: نکات و بهترین روشها
محاسبات بدون سرور (Serverless) پارادایم متفاوتی نسبت به توسعه وب سنتی است. شناخت مزایا و محدودیتهای آن به شما کمک میکند بهترین استفاده را ببرید. مثلاً فانکشنهای serverless بدون حالت (stateless) هستند و زمان اجرای حداکثری دارند که بر طراحی برنامه تأثیر میگذارد. چند نکته دیگر:
- از Terraform برای Infrastructure as Code (IaC) استفاده کنید: Terraform به شما امکان تعریف و مدیریت زیرساخت با زبان پیکربندی declarative را میدهد. این روش امکان نسخهبندی، استفاده مجدد و اشتراک پیکربندیها را فراهم میکند.
- کلیدهای API را امن نگه دارید: هنگام استفاده از APIهای RapidAPI، کلیدها را هرگز در کد سمت کلاینت یا در کنترل منبع قرار ندهید. از Azure Key Vault برای ذخیره و مدیریت امن secrets استفاده کنید.
- خطاها را بهخوبی مدیریت کنید: Azure Functions باید خطاها را بهصورت graceful مدیریت کرده و پیامهای خطای مفید به کلاینت برگردانند. این موضوع بهخصوص هنگام فراخوانی APIها (به دلیل مشکلات شبکه، محدودیت نرخ و …) مهم است.
- عملکرد فانکشن را بهینه کنید: Azure Functions بر اساس زمان اجرا صورتحساب میشوند؛ بهینهسازی کد و استفاده بهینه از APIها هزینه را کاهش میدهد.
- فانکشنها را بهصورت محلی تست کنید: Azure Functions Core Tools امکان اجرای محلی و دیباگ قبل از دیپلوی را فراهم میکند.
- برنامه خود را مانیتور کنید: از Azure Monitor و Application Insights برای رصد عملکرد فانکشنها در محیط تولید استفاده کنید.
- یادگیری را ادامه دهید: دنیای serverless، APIها و IaC دائماً در حال تغییر است. ویژگیها و بهترین روشهای جدید را دنبال کنید.
ساخت اپلیکیشنهای وب بدون سرور با Azure Functions، Terraform و RapidAPI روشی قدرتمند و کارآمد است. با رعایت این نکات و بهترین روشها، برنامههای شما امن، مقیاسپذیر و قابل نگهداری خواهند بود.

