پرووایدر Terraform
پرووایدر Terraform با نام ariaservice/arianet منابع ابر آریانت را به صورت کد مدیریت میکند: سرورها، دیسکها، شبکههای خصوصی (زیرشبکهها، مسیرها)، فایروالها، IPهای شناور، لود بالانسرها (سرویسها، هدفها) و کلیدهای SSH حساب شما. به Terraform نسخه ۱.۰ یا بالاتر نیاز دارد.
- رجیستری: registry.terraform.io/providers/ariaservice/arianet (نسخه فعلی 0.1.0)
- سورس: github.com/ariaservice/terraform-provider-arianet
- صفحه معرفی: ariaservice.net/developers/terraform
پرووایدر از وب سرویس ابر استفاده میکند؛ مستندات کامل هر resource در رجیستری است.
راهاندازی پرووایدر
terraform {
required_providers {
arianet = {
source = "ariaservice/arianet"
version = "~> 0.1"
}
}
}
provider "arianet" {
# Read from ARIANET_TOKEN when not set here.
token = var.arianet_token
}
variable "arianet_token" {
type = string
sensitive = true
}
سپس terraform init را اجرا کنید.
احراز هویت
در cloud.ariaservice.net/users/api-tokens یک توکن شخصی API با دسترسیهای cloud:servers:read و cloud:servers:write بسازید (اگر arianet_ssh_key را مدیریت میکنید، دسترسیهای کلید SSH یعنی ssh-keys:read / ssh-keys:write را هم اضافه کنید). توکن را در فایل .tf ننویسید و آن را export کنید:
export ARIANET_TOKEN="paste-your-token-here"
terraform plan
آرگومانهای پرووایدر
| آرگومان | متغیر محیطی | پیشفرض | توضیح |
|---|---|---|---|
token | ARIANET_TOKEN | الزامی | توکن API (حساس) |
endpoint | ARIANET_API_URL | https://api.ariaservice.net | آدرس ریشه API؛ باید https باشد (http فقط برای localhost) |
poll_interval | 2s | فاصله بررسی action در حال اجرا؛ تا ۱۰ ثانیه افزایش مییابد | |
max_retries | 5 | تعداد تکرار برای HTTP 429 (با رعایت Retry-After و در غیر این صورت RateLimit-Reset) و برای خواندن روی 502/503/504 |
عملیات طولانی یک action برمیگردانند و پرووایدر تا پایان آن صبر میکند؛ سقف انتظار با بلوک timeouts هر resource تعیین میشود (مثلاً timeouts { create = "20m" }). منبعی که هنگام refresh پاسخ 404 بدهد از state حذف میشود.
Resourceها
| Resource | کاربرد |
|---|---|
arianet_server | سرور ابری. تغییر plan_id اندازه آن را در جا تغییر میدهد؛ backups پشتیبان روزانه را روشن/خاموش میکند؛ keep_backups / delete_snapshots سرنوشت نسخههای آن هنگام destroy را تعیین میکنند. |
arianet_volume | دیسک بلاکی (size بر حسب GB؛ افزایش اندازه در جا انجام میشود). |
arianet_volume_attachment | اتصال دیسک به سرور. |
arianet_network | شبکه خصوصی (ip_range و subnet_ip_range اختیاری برای اولین زیرشبکه). |
arianet_network_subnet | زیرشبکه اضافه برای یک شبکه. |
arianet_network_route | مسیر ایستا (destination ← gateway) در یک شبکه. |
arianet_firewall | فایروال با بلوکهای rule و apply_to اختیاری (سرورها یا label selector). |
arianet_firewall_attachment | اعمال فایروال روی سرورها (server_ids) یا label selectorها (label_selectors). |
arianet_floating_ip | آدرس شناور IPv4 یا IPv6، با server_id و DNS معکوس (dns_ptr) اختیاری. |
arianet_floating_ip_assignment | اختصاص IP شناور به سرور. |
arianet_load_balancer | لود بالانسر (type مثل lb11، algorithm، network_id و public_interface اختیاری). |
arianet_load_balancer_service | یک listener: protocol (tcp، http، https با عبور مستقیم TLS)، پورتها، health_check و گزینههای http. |
arianet_load_balancer_target | یک هدف: سرور، IP یا label selector، به صورت اختیاری از طریق شبکه خصوصی. |
arianet_ssh_key | یک کلید SSH حساب شما. |
همه resourceها از terraform import پشتیبانی میکنند، مثلاً terraform import arianet_server.web 123 (زیرمنابع شناسه ترکیبی دارند، مثل 21/80 برای سرویس لود بالانسر).
resourceهایی که این ویژگیها را دارند labels (map)، project_id (پیشفرض پروژه پیشفرض حساب؛ تغییر آن منبع را جابهجا میکند) و protection_delete (پیش از destroy باید false باشد) را میپذیرند.
آرگومانهای arianet_server
| آرگومان | توضیح |
|---|---|
name، datacenter، plan_id، image | الزامی. datacenter کد مکان است (arianet_locations) و image نامی مثل ubuntu-24.04 یا ارجاع به اسنپشات/پشتیبان (arianet_image(s)). تغییر datacenter یا image سرور را جایگزین میکند. |
ssh_key_ids، ssh_keys | شناسه کلیدهای ذخیرهشده و/یا کلیدهای عمومی که هنگام ساخت نصب میشوند |
user_data | user data برای cloud-init |
enable_ipv4، enable_ipv6 | آدرسهای عمومی (IPv4 به طور پیشفرض فعال است) |
firewall_ids، network_ids | فایروالهایی که مستقیم اعمال میشوند؛ شبکههای خصوصی متصل هنگام ساخت |
backups | پشتیبان روزانه (هزینه جداگانه) |
keep_backups | هنگام destroy، پشتیبانهای کاملشده نگه داشته شوند (پس از آن بر اساس GB هزینه دارند). به صورت ?keep_backups=true ارسال میشود. |
delete_snapshots | هنگام destroy، اسنپشاتهای سرور هم حذف شوند (در غیر این صورت باقی میمانند و هزینه دارند). به صورت ?delete_snapshots=true ارسال میشود. |
start_after_create، protection_delete، protection_rebuild، labels، project_id |
فقطخواندنی: ipv4_address، ipv6_address، status، disk_gb، locked، rescue_enabled و root_password (حساس؛ فقط هنگام ساخت برمیگردد و وقتی کلید SSH استفاده شود و API رمزی برنگرداند خالی است). keep_backups / delete_snapshots را پیش از terraform destroy تنظیم و apply کنید؛ هنگام حذف سرور از state خوانده میشوند.
Data sourceها
| Data source | خروجی |
|---|---|
arianet_locations | دیتاسنترها: code، name، country، features، orderable |
arianet_plans | پلنها (به صورت اختیاری برای یک datacenter): id، name، vcpu، ram_mb، disk_gb، traffic_gb، hourly_price، monthly_price، available |
arianet_images، arianet_image | ایمیجها بر اساس type (system، app، snapshot، backup)، datacenter و label_selector؛ arianet_image یکی را با id، image، name یا most_recent انتخاب میکند |
arianet_pricing | لیست قیمت عمومی (/cloud/v1/public/pricing): server_types با قیمت هر مکان، بقیه resources، vat_included |
arianet_server_costs | GET /servers/{id}/costs: ردیفهای lines، totals، snapshots، kept_backups |
arianet_load_balancer_types | انواع لود بالانسر و محدودیتهای آنها |
arianet_server، arianet_network | یافتن منبع موجود با id، name یا label_selector |
arianet_ssh_key | یافتن یکی از کلیدهای SSH شما با id، name یا fingerprint |
نمونه کامل
یک شبکه خصوصی، سه سرور وب پشت یک لود بالانسر، فایروالی که از برچسب role=web پیروی میکند و یک دیسک داده:
terraform {
required_providers {
arianet = {
source = "ariaservice/arianet"
version = "~> 0.1"
}
}
}
provider "arianet" {} # token from ARIANET_TOKEN
locals {
datacenter = "ovh"
}
data "arianet_plans" "dc" {
datacenter = local.datacenter
}
resource "arianet_ssh_key" "me" {
name = "laptop"
public_key = file("~/.ssh/id_ed25519.pub")
}
resource "arianet_network" "private" {
name = "private"
datacenter = local.datacenter
ip_range = "10.0.0.0/16"
subnet_ip_range = "10.0.1.0/24"
}
resource "arianet_server" "web" {
count = 3
name = "web-${count.index + 1}"
datacenter = local.datacenter
plan_id = data.arianet_plans.dc.plans[0].id
image = "ubuntu-24.04"
ssh_key_ids = [arianet_ssh_key.me.id]
network_ids = [arianet_network.private.id]
labels = { role = "web" }
user_data = <<-EOT
#cloud-config
packages: [nginx]
EOT
}
resource "arianet_firewall" "web" {
name = "web"
rule {
direction = "in"
protocol = "tcp"
port = "22"
source_ips = ["203.0.113.4/32"]
}
rule {
direction = "in"
protocol = "tcp"
port = "80"
source_ips = ["0.0.0.0/0", "::/0"]
}
apply_to = [{ label_selector = "role=web" }]
}
resource "arianet_load_balancer" "web" {
name = "web"
datacenter = local.datacenter
type = "lb11"
algorithm = "round_robin"
network_id = arianet_network.private.id
}
resource "arianet_load_balancer_service" "http" {
load_balancer_id = arianet_load_balancer.web.id
protocol = "http"
listen_port = 80
destination_port = 80
health_check = {
protocol = "http"
port = 80
interval = 10
timeout = 5
retries = 3
http = {
path = "/"
status_codes = ["2??"]
}
}
}
resource "arianet_load_balancer_target" "web" {
load_balancer_id = arianet_load_balancer.web.id
type = "label_selector"
label_selector = "role=web"
use_private_ip = true
}
resource "arianet_volume" "data" {
name = "data"
datacenter = local.datacenter
size = 50
filesystem = "ext4"
}
resource "arianet_volume_attachment" "data" {
volume_id = arianet_volume.data.id
server_id = arianet_server.web[0].id
}
data "arianet_server_costs" "web1" {
server_id = arianet_server.web[0].id
}
output "load_balancer_ip" {
value = arianet_load_balancer.web.ipv4
}
output "web1_monthly_cost" {
value = data.arianet_server_costs.web1.totals
}
export ARIANET_TOKEN="..."
terraform init
terraform plan
terraform apply
قیمتها پیش از apply: curl -s https://api.ariaservice.net/cloud/v1/public/pricing یا arianet cloud pricing (بدون نیاز به توکن).
همچنین ببینید
- وب سرویس ابر · CLI (
arianet cloud ...) - مستندات هر resource در رجیستری Terraform