ترافرم ستون

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

نصب Terraform

روی macOS

brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform -version

روی Windows (PowerShell)

winget install --id HashiCorp.Terraform -e
terraform -version

روی Debian/Ubuntu

sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
 
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
 
sudo apt-get update && sudo apt-get install -y terraform
terraform -version

روی RHEL/CentOS/Fedora/Amazon Linux

sudo dnf install -y dnf-plugins-core || sudo yum install -y yum-utils
 
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/$(. /etc/os-release; echo $ID).repo   || sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/$(. /etc/os-release; echo $ID).repo
 
sudo dnf install -y terraform || sudo yum install -y terraform
 
terraform -version

ساختار پوشه و الگوی پیشنهادی پروژه

برای شروع کار با Terraform و ستون Provider می‌توانید از ساختار ساده زیر استفاده کنید:

sotoon-terraform/
├── main.tf
├── providers.tf
├── variables.tf
├── terraform.tfvars
├── locals.tf
├── outputs.tf
└── backend.tf

توضیح کوتاه فایل‌ها

  • main.tf: تعریف منابع، سرویس‌ها و ماژول‌ها
  • providers.tf: پیکربندی نسخه Terraform و ستون Provider
  • variables.tf: تعریف متغیرهای ورودی پروژه
  • terraform.tfvars: مقداردهی متغیرها (بهتر است در .gitignore قرار بگیرد)
  • locals.tf: تعریف متغیرهای محلی و مقادیر محاسباتی
  • outputs.tf: تعریف خروجی‌ها مانند IP یا شناسه‌ها
  • backend.tf: پیکربندی Remote State در صورت نیاز

پیکربندی Provider ستون

ابتدا در فایل providers.tf نسخه Terraform و ستون Provider را مشخص می‌کنیم:

terraform {
  required_version = ">= 1.5.0"
 
  required_providers {
    sotoon = {
      source  = "sotoon/sotoon"
      version = "~> 1.0"
    }
  }
}

سپس در فایل main.tf ستون Provider را پیکربندی می‌کنیم:

provider "sotoon" {
  api_token    = var.api_token
  workspace_id = var.workspace_id
  user_id      = var.user_id
}

تعریف متغیرها و مقداردهی امن

ابتدا در فایل variables.tf متغیرهای پروژه را تعریف کنید و سپس مقادیر آنها را در terraform.tfvars قرار دهید:

api_token           = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
workspace_id        = "your-workspace-id"
user_id             = "your-user-uuid"
workspace_id_target = "your-workspace-id"

پیشنهاد می‌شود به جای ذخیره مستقیم توکن‌ها در فایل، مقادیر را با متغیرهای محیطی مقداردهی کنید:

export TF_VAR_api_token="xxx"
export TF_VAR_workspace_id="..."
export TF_VAR_user_id="..."
export TF_VAR_workspace_id_target="..."

راهنمای کار با توکن‌ها

برای ایجاد و استفاده از توکن‌ها در ستون، می‌توانید به مستندات مربوط به توکن‌ها مراجعه کنید: لینک مستندات


استفاده از locals برای مدیریت مقادیر داخلی

در فایل locals.tf می‌توانید متغیرهای محلی را تعریف کنید تا کد شما ساده‌تر و خواناتر شود:

locals {
  target_user_test_tf = one([
    for user in data.sotoon_iam_users.all.users : user if user.email == "test_tf@example.com"
  ])
 
  target_group_developer = one([
    for group in data.sotoon_iam_groups.all.groups : group if group.name == "developer"
  ])
 
  target_group_manager = one([
    for group in data.sotoon_iam_groups.all.groups : group if group.name == "manager"
  ])
 
  target_service_user_builder = one([
    for su in data.sotoon_iam_service_users.all.users : su if su.name == "builder"
  ])
 
  target_role_developer = one([
    for role in data.sotoon_iam_roles.all.roles : role if role.name == "employee"
  ])
}

کار با Terraform CLI

پس از پیکربندی فایل‌ها، برای مدیریت زیرساخت خود از دستورات زیر استفاده کنید:

terraform init
terraform validate
terraform plan
terraform apply

مدیریت IAM و نقش‌ها در ستون

برای مدیریت کاربران، گروه‌ها و نقش‌ها می‌توانید منابع ستون را در Terraform تعریف کنید.

ایجاد گروه و نقش کاربر

در main.tf می‌توانید یک گروه و یک نقش کاربر ایجاد کنید:

# ایجاد گروه
resource "sotoon_iam_group" "developers" {
  name        = "developer"
  description = "this group created by developers teams"
}
 
# ایجاد نقش
resource "sotoon_iam_role" "viewer" {
  name = "viewer"
}

اعمال Role Binding

در ادامه نقش‌ها را به کاربران، گروه‌ها یا سرویس‌کاربران متصل می‌کنیم:

resource "sotoon_iam_user_role" "bind_user_to_developer" {
  role_id = local.target_role_developer.id
  user_ids = [
    local.target_user_test_tf.id,
  ]
}}
 
resource "sotoon_iam_group_role" "bind" {
  group_id = local.target_group_developer.id
  role_ids = [
    local.target_role_developer.id
  ]
}}
 
resource "sotoon_iam_service_user_role" "bind_builder_to_developer" {
  role_id = local.target_role_developer.id
  service_user_ids = [
    local.target_service_user_builder.id,
  ]
}}