آموزش مدیریت داده‌های زیرساخت با Terraform Outputs

مقدمه

در Terraform، خروجی‌ها (Outputs) برای استخراج اطلاعات مربوط به منابع زیرساخت از وضعیت پروژه (state) استفاده می‌شوند. با کمک قابلیت‌های دیگر HashiCorp Configuration Language (HCL) که زبان تنظیمات Terraform است، می‌توان اطلاعات منابع را کوئری گرفت و آن‌ها را به ساختارهای پیچیده‌تر مثل لیست (list) یا مپ (map) تبدیل کرد.

Outputs زمانی مفید هستند که بخواهید اطلاعات زیرساخت ساخته‌شده را به نرم‌افزارهای خارجی بدهید تا روی آن‌ها عملیات انجام دهند.

در این آموزش یاد می‌گیرید:

  • سینتکس Terraform Output چیست

  • پارامترهای آن چگونه کار می‌کنند

  • چطور یک زیرساخت ساده با Droplet بسازید

  • و چطور خروجی‌ها را به JSON تبدیل کرده و به‌صورت برنامه‌نویسی پردازش کنید


پیش‌نیازها

برای انجام این آموزش نیاز دارید:

  • یک DigitalOcean Personal Access Token

  • نصب Terraform روی سیستم

  • ایجاد پروژه Terraform با provider دیجیتال‌اوشن

  • آشنایی اولیه با انواع داده در HCL و حلقه‌ها

(این آموزش با Terraform نسخه 1.0.2 تست شده است)


تعریف Output

در این بخش یک Droplet تعریف می‌کنید، آن را در cloud deploy می‌کنید و یک output برای نمایش IP آن می‌سازید.

در فایل droplets.tf بنویسید:

resource “digitalocean_droplet” “web” {
image = “ubuntu-20-04-x64”
name = “test-droplet”
region = “fra1”
size = “s-1vcpu-1gb”
}output “droplet_ip_address” {
value = digitalocean_droplet.web.ipv4_address
}

ابتدا یک Droplet به نام web تعریف می‌کنید. سپس یک output با نام droplet_ip_address که مقدارش برابر IP همان Droplet است.

پس از اجرای:

terraform apply

در انتهای خروجی، IP نمایش داده می‌شود.

همچنین می‌توانید خروجی‌ها را با دستور زیر ببینید:

terraform output

یا فقط یک خروجی خاص:

terraform output droplet_ip_address

پارامترهای اختیاری Output

علاوه بر value، پارامترهای دیگری هم وجود دارد:

  • description → توضیح کوتاه درباره خروجی

  • depends_on → تعیین وابستگی صریح به منابع دیگر

  • sensitive → اگر true باشد، مقدار خروجی مخفی می‌شود

مثال:

output “droplet_ip_address” {
value = digitalocean_droplet.web.ipv4_address
sensitive = true
}

در این حالت مقدار در لاگ‌ها نمایش داده نمی‌شود.


خروجی گرفتن از ساختارهای پیچیده

حالا چند Droplet با هم ایجاد می‌کنید:

resource “digitalocean_droplet” “web” {
count = 3
image = “ubuntu-20-04-x64”
name = “test-droplet-${count.index}”
region = “fra1”
size = “s-1vcpu-1gb”
}

استفاده از حلقه for برای ساخت map

output “droplet_ip_addresses” {
value = {
for droplet in digitalocean_droplet.web:
droplet.name => droplet.ipv4_address
}
}

خروجی:

test-droplet-0 → IP
test-droplet-1 → IP
test-droplet-2 → IP

دریافت خروجی به‌صورت JSON

terraform output -json droplet_ip_addresses

خروجی:

{“test-droplet-0”:“ip”,”test-droplet-1″:“ip”,”test-droplet-2″:“ip”}

این روش اجازه می‌دهد خروجی را در برنامه‌های دیگر پردازش کنید.


استفاده از Splat Expressions

روش کوتاه‌تر برای گرفتن همه IPها:

output “droplet_ip_addresses” {
value = digitalocean_droplet.web[*].ipv4_address
}

خروجی:

[
“ip1”,
“ip2”,
“ip3”
]

پردازش خروجی‌ها با jq

ابزار jq برای کار با JSON استفاده می‌شود.

مثلاً:

terraform output -json droplet_ip_addresses | jq ‘.’

نمایش زیباتر JSON.

دریافت آیتم دوم:

jq ‘.[1]’

دریافت بازه:

jq ‘.[0:2]’

جمع‌بندی

در این مقاله یاد گرفتید:

  • Terraform Outputs چیست

  • چگونه اطلاعات منابع را استخراج کنید

  • چگونه map و list بسازید

  • چگونه خروجی را JSON کنید

  • و چطور با jq آن را پردازش کنید

از همراهی شما با پارمین کلود سپاسگزاریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *