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

استفاده از Terraform در سرور ابری آروان

Terraform یک ابزار متن‌باز برای ایجاد و مدیریت زیرساخت ابری به‌ وسیله‌ی‌ مجموعه‌ای از کدهاست که روندی ساده برای استقرار محصول، بر بستر ابر فراهم می‌کند. امروزه راهکار پیشنهادی برای پیاده‌سازی زیرساخت، طراحی به‌شکل IaC یا مجموعه‌ای از کدهاست تا با کاهش دخالت انسان، امکان استقرار دقیق و سریع زیرساخت فراهم شود.

به کمک این ابزار، منابع ابری مورد نیاز شما در فایل پیکربندی ترافرم تعریف می‌شوند و پس از این‌که ترافرم یک طرح قابل اجرا از آن تولید کرد، می‌توانید این پیکربندی را برای استقرار سرویس روی محصولات ابری استفاده و زیرساخت سرویس خود را تست و پیاده‌سازی کنید.

برای استفاده از ترافرم در سرور ابری آروان، باید ابتدا ترافرم را نصب کرده و یک فایل Provider را تنظیم و پیکربندی کنید. در این راهنما به شیوه‌ی نصب و پیکربندی ترافرم در سرور ابری می‌پردازیم.

پیکربندی Provider

ابتدا اطمینان پیدا کنید که نسخه‌ی مناسبی از Terraform روی سیستم‌تان نصب شده باشد. حداقل نسخه‌ی مورد نیاز Terraform 1.0 یا بالاتر است. راهنمای رسمی نصب ترافرم به‌ شما در دریافت این نسخه‌ بر اساس سیستم‌عامل‌تان کمک می‌کند.

پس از نصب Terraform برای پیکربندی Provider ارایه‌شده به‌وسیله‌ی آروان کافی است در یک فایل tf. (برای نمونه main.tf) محتوای زیر را وارد کنید:

terraform {
required_providers {
arvan = {
source = "terraform.arvancloud.ir/arvancloud/iaas"
# version = "0.3.12"
}
}
}

سپس در همان دایرکتوری که فایل را ایجاده کرده بودید دستور terraform init را اجرا کنید تا provider نصب شود.

شما می‌توانید ورژن‌های مختلف را از صفحه‌ی نسخه‌ها در گیت‌لب آروان انتخاب کنید؛ با این حال اگر ورژنی وارد نشود، به‌طور پیش‌فرض آخرین نسخه‌ روی سیستم‌تان نصب خواهد شد.

پیکربندی اولیه Terraform

برای استفاده از Provider ابر آروان باید یک فایل Provider تعریف کنید. این فایل برای ترافرم مشخص می‌کند که از کدام Provider (ابر آروان) استفاده می‌کنید و اطلاعات دسترسی لازم (کلید دسترسی ابر آروان) را چگونه می‌تواند به دست آورد.

یک کلید دسترسی ماشین یوزر از پنل کاربری ساخته و دریافت کنید. برای راهنمایی بیش‌تر می‌توانید راهنمای دریافت کلید دسترسی را بررسی کنید. سپس دسترسی‌های لازم را به‌کمک قوانین دسترسی برای آن تعریف کنید. یک فایل به نام main.tf بسازید و آن را با ادیتور متن موردنظرتان باز و محتوای زیر را به آن اضافه کنید:

terraform {
required_providers {
arvan = {
source = "terraform.arvancloud.ir/arvancloud/iaas"
}
}
}
provider "arvan" {
api_key = "your api key"
}
variable "region" {
type = string
default = "ir-thr-fr1"
}
data "arvan_networks" "all_private_networks" {
region = var.region
}

output "private_networks" {
value = data.arvan_networks.all_private_networks.networks
}

این تکه کد تنظیمات مورد نیاز برای استفاده از ارایه‌دهنده‌ی آروان را مشخص می‌کند.

  • در بخش اول از این کد و با استفاده از بلوک terraform، ارایه‌دهنده‌ که در این‌جا arvan است، مشخص می‌شود.
  • در بلوک provider جزییات اتصال به ارایه‌دهنده تعیین می‌شود. در این‌جا از کلید دسترسی (ماشین یوزر) برای احراز هویت در آروان استفاده می‌شود.
  • با استفاده از بلوک variable یک متغیر برای تعیین منطقه‌ی منابع تعریف شده است. مقدار پیش‌فرض این متغیر ir-thr-fr1 یا فروغ است.
  • داده‌ی arvan_networks اطلاعات شبکه‌های خصوصی منطقه‌ی موردنظر را دریافت می‌کند.
  • و در آخر بلوک output لیست شبکه‌های خصوصی را در قالب خروجی ارایه می‌دهد.

دستورهای اولیه‌ Terraform

پس از تنظیم یک فایل با محتوایی مانند main.tf، که در بخش پیشین توضیح داده شد، به‌کمک دستورهای رایج ترافرم می‌توانید عملیات مورد نظرتان را روی زیرساخت اجرا کنید.

  • دستور زیر می‌تواند فایل‌های کد را مطابق استانداردهای قراردادی Terraform فرمت‌بندی کند:
terraform fmt
  • دستور زیر صحت و اعتبار فایل‌ها و تنظیمات Terraform شما را بررسی می‌کند:
terraform validate
  • دستور زیر برای پیش‌نمایش تغییراتی است که قرار است به‌وسیله‌ی ترافرم اعمال شود. این تغییرات می‌تواند شامل ایجاد، تغییر یا حذف منابع زیرساختی شود.
terraform plan
  • برای اعمال تغییرات مشخص‌شده در فایل‌های کد ترافرم از این دستور استفاده کنید:
terraform apply
  • برای حذف همه‌ی منابع موجود در زیرساخت با ترافرم از دستور زیر استفاده کنید:
terraform apply -destroy
  • برای به‌روزرسانی اطلاعات وضعیت فعلی منابع در زیرساخت با ترافرم دستور زیر را اجرا کنید:
terraform apply -refresh-only

توجه داشته باشید برای اعمال این تغییرات باید فایل ترافرم را ساخته و دستور را در همان دایرکتوری اجرا کنید. برای نمونه، اگر فایل main.tf بخش پیشین را ایجاد کنید و در آن دایرکتوری دستور terraform apply را اجرا کنید می‌توانید لیست شبکه‌های خصوصی آروان را مشاهده کنید.

ساخت یک ابرک با Terraform

برای دریافت دید بهتر نسبت‌ به شیوه‌ی استفاده از ترافرم برای مدیریت زیرساخت، در نمونه کد زیر به‌کمک ترافرم یک سرور در آروان می‌سازیم.

در این مثال، ابتدا ارتباط با آروان از طریق متغیرها و داده‌ها اعتبارسنجی می‌شود. سپس منابع مختلفی از جمله گروه‌های فایروالی، شبکه‌ها، و سرورها (abrak‍) با استفاده از تنظیمات فایل Terraform ایجاد می‌شوند.

terraform {
required_providers {
arvan = {
source = "terraform.arvancloud.ir/arvancloud/iaas"
}
}
}

provider "arvan" {
api_key = "apikey xxx"
}

variable "region" {
type = string
description = "The chosen region for resources"
default = "ir-thr-fr1"
}

variable "chosen_distro_name" {
type = string
description = " The chosen distro name for image"
default = "ubuntu"
}

variable "chosen_name" {
type = string
description = "The chosen release for image"
default = "22.04"
}

variable "chosen_network_name" {
type = string
description = "The chosen name of network"
default = "public201" //public202
}

variable "chosen_plan_id" {
type = string
description = "The chosen ID of plan"
default = "g1-2-1-0"
}

data "arvan_images" "terraform_image" {
region = var.region
image_type = "distributions" // or one of: arvan, private
}

data "arvan_plans" "plan_list" {
region = var.region
}

locals {
chosen_image = try(
[for image in data.arvan_images.terraform_image.distributions : image
if image.distro_name == var.chosen_distro_name && image.name == var.chosen_name],
[]
)

selected_plan = [for plan in data.arvan_plans.plan_list.plans : plan if plan.id == var.chosen_plan_id][0]
}

resource "arvan_security_group" "terraform_security_group" {
region = var.region
description = "Terraform-created security group"
name = "tf_security_group"
rules = [
{
direction = "ingress"
protocol = "icmp"
},
{
direction = "ingress"
protocol = "udp"
},
{
direction = "ingress"
protocol = "tcp"
},
{
direction = "egress"
protocol = ""
}
]
}

resource "arvan_volume" "terraform_volume" {
region = var.region
description = "Example volume created by Terraform"
name = "tf_volume"
size = 9
}

data "arvan_networks" "terraform_network" {
region = var.region
}

locals {
network_list = tolist(data.arvan_networks.terraform_network.networks)
chosen_network = try(
[for network in local.network_list : network
if network.name == var.chosen_network_name],
[]
)
}

output "chosen_network" {
value = local.chosen_network
}

resource "arvan_network" "terraform_private_network" {
region = var.region
description = "Terraform-created private network"
name = "tf_private_network"
dhcp_range = {
start = "10.255.255.19"
end = "10.255.255.150"
}
dns_servers = ["8.8.8.8", "1.1.1.1"]
enable_dhcp = true
enable_gateway = true
cidr = "10.255.255.0/24"
gateway_ip = "10.255.255.1"
}

resource "arvan_abrak" "built_by_terraform" {
depends_on = [arvan_volume.terraform_volume, arvan_network.terraform_private_network, arvan_security_group.terraform_security_group]
timeouts {
create = "1h30m"
update = "2h"
delete = "20m"
read = "10m"
}
region = var.region
name = "built_by_terraform"
count = 1
image_id = local.chosen_image[0].id
flavor_id = local.selected_plan.id
disk_size = 25
networks = [
{
network_id = local.chosen_network[0].network_id
},
{
network_id = arvan_network.terraform_private_network.network_id
}
]
security_groups = [arvan_security_group.terraform_security_group.id]
volumes = [arvan_volume.terraform_volume.id]
}

output "instances" {
value = arvan_abrak.built_by_terraform
}

مستندات Provider آروان را می‌توانید در وب‌سایت Terraform مشاهده کنید. هم‌چنین برای بررسی موارد استفاده و نمونه‌های بیش‌تر تنظیمات ترافرم در سرور ابری آروان می‌توانید از مستندات ترافرم ابر آروان کمک بگیرید.