در دنیای DevOps امروز، جایی برای تنظیمات دستی باقی نمانده است. تیمهای نرمافزاری و زیرساختی به سمت Infrastructure as Code (IaC) حرکت کردهاند تا بتوانند زیرساختها را مثل کد نرمافزار مدیریت کنند؛ قابل نسخهسازی، تستپذیر و تکرارپذیر. وقتی پای پایگاه دادهها وسط میآید، پیچیدگی دوچندان میشود: ساخت دیتابیس، تنظیم دسترسی، ایجاد کاربران و هماهنگی با محیطهای مختلف (Dev ،Staging ،Production).
در این مقاله، یاد میگیریم، چطور با استفاده از Terraform، این فرآیندها را خودکار کنیم و دیتابیسها را در چرخهی CI/CD ادغام کنیم.
مفهوم Infrastructure as Code (IaC)
IaC به معنی مدیریت و تأمین زیرساختهای فناوری اطلاعات از طریق کد قابلاجرا و نسخهپذیر است. بهجای پیکربندی دستی ماشینها، شبکهها یا پایگاهدادهها، همه چیز در قالب فایلهای کد (مثل .tf در Terraform) تعریف میشود.
مزایای اصلی IaC
- تکرارپذیری: محیطهای توسعه و تولید همیشه یکسان هستند.
- سرعت استقرار: زیرساختها در چند ثانیه آماده میشوند.
- امنیت و انطباق: کنترل دقیق روی دسترسیها و تنظیمات.
- قابلیت ادغام با DevOps :IaC بهصورت خودکار در CI/CD اجرا میشود.
چرا Terraform؟
Terraform یکی از محبوبترین ابزارهای IaC است که توسط HashiCorp توسعه داده شده.
ویژگی مهم آن، پشتیبانی از صدها Provider است. از AWS و Azure گرفته تا SQL Server ،PostgreSQL ،MySQL ،MongoDB و حتی Kubernetes.
ویژگیهای کلیدی Terraform
- تعریف زیرساخت با زبان HCL (HashiCorp Configuration Language)
- اجرای خودکار تغییرات (Plan → Apply)
- مدیریت State برای ردیابی منابع
- سازگار با ابزارهای CI/CD (GitHub Actions ,Jenkins ,GitLab CI و …)
Terraform برای دیتابیسها
Terraform نه فقط برای ساخت ماشین و شبکه، بلکه برای ایجاد و مدیریت پایگاه دادهها هم کاربرد دارد.
مثلاً:
- ایجاد یک SQL Server Database در Azure
- تنظیم User و Role در PostgreSQL
- ساخت RDS Instance در AWS
- مدیریت Connection Stringها بهصورت امن با Vault
نمونه Providerها
| دیتابیس | Provider Terraform | توضیح |
|---|---|---|
| SQL Server | mssql | مدیریت دیتابیس، کاربر و Role |
| PostgreSQL | postgresql | ایجاد Schema، Table، User |
| MySQL | mysql | ساخت دیتابیس و تنظیم دسترسی |
| Azure SQL | azurerm | ساخت Resource Group ،Server و Database |
| AWS RDS | aws | ساخت Instance و Backup Policy |
مثال کاربردی: ایجاد پایگاهداده SQL Server با Terraform
فرض کنید تیم لاندا میخواهد برای محیط Staging یک SQL Server و دیتابیس جدید بسازد.
فایل زیر را در مسیر main.tf ذخیره میکنیم:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-lambda-sql"
location = "East US"
}
resource "azurerm_sql_server" "server" {
name = "lambdasqlserver"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
version = "12.0"
administrator_login = "sqladmin"
administrator_login_password = "L@mbda2025!"
}
resource "azurerm_sql_database" "db" {
name = "LandaDB_Staging"
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
server_name = azurerm_sql_server.server.name
sku_name = "S0"
}
سپس اجرا میکنیم:
terraform init
terraform plan
terraform apply
نتیجه: در کمتر از ۱ دقیقه، یک SQL Server و دیتابیس جدید ایجاد میشود.
اتصال DevOps به Terraform
Terraform بهخوبی با ابزارهای DevOps ادغام میشود.
در اینجا یک مثال از GitHub Actions را میبینیم که بهصورت خودکار با هر Push، تغییرات زیرساختی را اعمال میکند.
name: Deploy SQL Infrastructure
on:
push:
branches:
- main
jobs:
terraform:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Terraform Init
run: terraform init
- name: Terraform Plan
run: terraform plan
- name: Terraform Apply
run: terraform apply -auto-approve
با این روش، ساخت یا تغییر هر دیتابیس در pipeline خودکار میشود، بدون دخالت انسانی.
مدیریت State
Terraform فایل terraform.tfstate را برای ردیابی وضعیت زیرساخت ذخیره میکند.
برای محیطهای تیمی، بهتر است این فایل در Remote Backend (مثل Azure Blob یا AWS S3) نگهداری شود تا همه اعضا وضعیت مشترکی ببینند.
مثلاً برای Azure:
terraform {
backend "azurerm" {
resource_group_name = "rg-tfstate"
storage_account_name = "tfstatestorage"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
Secrets Management در Terraform
برای نگهداری امن پسوردها و Connection Stringها، از Vault یا Azure Key Vault استفاده میشود:
data "azurerm_key_vault_secret" "db_password" {
name = "sql-admin-pass"
key_vault_id = azurerm_key_vault.kv.id
}
resource "azurerm_sql_server" "server" {
name = "lambda-sql"
administrator_login = "sqladmin"
administrator_login_password = data.azurerm_key_vault_secret.db_password.value
}
این یعنی رمزها در فایل کد ذخیره نمیشوند، بلکه در Vault بهصورت امن مدیریت میشوند.
سناریوی چندمحیطی (Dev ,Test ,Prod)
میتوانید متغیرهایی برای هر محیط تعریف کنید:
variable "env" {
default = "dev"
}
resource "azurerm_sql_database" "db" {
name = "LandaDB_${var.env}"
# ...
}
با اجرای:
terraform apply -var="env=prod"
دیتابیس مخصوص Production ساخته میشود.
مزایا و معایب استفاده از Terraform برای دیتابیسها
| مزایا | معایب |
|---|---|
| اتوماسیون کامل ایجاد دیتابیس | پیچیدگی مدیریت State در محیطهای بزرگ |
| هماهنگی بین محیطها | نیاز به هماهنگی دقیق بین DevOps و DBA |
| افزایش امنیت و انطباق | خطر حذف ناخواسته دیتابیس در Apply اشتباه |
| کاهش خطای انسانی | یادگیری اولیه Terraform |
Terraform + SQL Server 2025
در نسخههای جدید SQL Server، APIهای مدیریتی Azure SQL و Managed Instance کاملاً با Terraform هماهنگ شدهاند.
در نتیجه میتوان با IaC نهتنها سرور و دیتابیس، بلکه Policy ،Backupو Role Access را هم کنترل کرد.
نتیجهگیری
در سال ۲۰۲۵، استفاده از Infrastructure as Code برای دیتابیسها دیگر یک گزینه لوکس نیست؛ بلکه استاندارد حیاتی برای تیمهای حرفهای DevOps است. Terraform با انعطاف بالا، سازگاری با Cloudهای مختلف و امنیت Vault، امکان مدیریت دیتابیسها را دقیق، سریع و ایمن میکند.
اگر تا امروز مدیریت دیتابیسها را دستی انجام میدادید، وقت آن است که آنها را کد کنید و در CI/CD ادغام کنید.
سوالات متداول (FAQ)
۱. آیا Terraform میتواند جداول یا Stored Procedure بسازد؟
بهصورت مستقیم خیر؛ Terraform برای مدیریت زیرساخت است. برای اسکریپتهای دیتابیس باید از ابزارهایی مثل Flyway یا Liquibase در Pipeline استفاده شود.
۲. آیا Terraform برای دیتابیسهای On-Prem هم کار میکند؟
بله، با Providerهای SQL Server یا PostgreSQL میتوان به سرورهای داخلی متصل شد.
۳. تفاوت Terraform با ARM Template یا CloudFormation چیست؟
Terraform چندپلتفرمی و سادهتر است؛ درحالیکه ARM و CloudFormation مخصوص یک Cloud خاص هستند.
تماس و مشاوره با لاندا در خصوص خدمات DevOps و IaC
تیم لاندا با تجربه در پیادهسازی DevOps ،Terraform و CI/CD برای زیرساختهای دادهای، به سازمانها کمک میکند تا:
- ساخت دیتابیس را خودکار کنند.
- IaC و Vault را بهصورت ایمن پیادهسازی کنند.
- مانیتورینگ و Policyهای SQL را در Pipeline ادغام کنند.

و سپس «افزودن به صفحه اصلی» ضربه بزنید
و سپس «افزودن به صفحه اصلی» ضربه بزنید

نظری داده نشده