ترافرم ستون
ستون به تازگی اقدام به معرفی نسخه متن باز پروایدر ترافرم خود کرده است و به زودی امکان کار با تمام محصولات ستون از طریق ترافرم و به صورت 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 و ستون Providervariables.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,
]
}}