برنامه نویسی

تعداد Terraform: نمایه سازی، مثال ها و موارد استفاده

Summarize this content to 400 words in Persian Lang
کار بر روی Infrastructure as Code به معنای نوشتن پیکربندی های مختلف برای مجموعه های مختلف منابع است. همانطور که پروژه ها رشد می کنند، ممکن است از کد اضافی برای استقرار منابع مشابه استفاده کنید. یکی از راه‌های ساده‌سازی این کار استفاده از count متا آرگومان

در این وبلاگ بیشتر با این موضوع آشنا خواهیم شد count، موارد استفاده آن را شرح دهید، و نشان دهید که چگونه می توانید از آن برای ایجاد منابع متعدد با سهولت استفاده کنید – با یا بدون عبارات شرطی.

ما همچنین به سوالات متداول پاسخ خواهیم داد، چند مثال ارائه می دهیم و حتی نگاهی گذرا به آن خواهیم داشت for_each استدلال کنید و ببینید که چگونه با آن مقایسه می شود count.

سلب مسئولیتهمه نمونه ها و موارد استفاده از count متا آرگومان مورد بحث در اینجا، در زمینه Terraform، به طور مشابه در OpenTofu، جایگزین Terraform منبع باز کار می کند. با این حال، برای ساده و آشنا نگه داشتن آن برای مهندسان DevOps، ما به آنها به عنوان “Terraform” اشاره خواهیم کرد. count در سراسر این پست وبلاگ

Terraform Count چیست؟

در Terraform یا OpenTofu، count متا آرگومنت به شما امکان می دهد چندین نمونه منبع را از یک بلوک پیکربندی واحد ایجاد کنید.

تنظیم Terraform count ارزش به Terraform می‌گوید که چند نسخه از منبع باید توسعه یابد و مدیریت و مقیاس‌بندی زیرساخت شما را ساده‌تر می‌کند. هر نمونه در بلوک پیکربندی Terraform را می توان به طور منحصر به فرد با استفاده از آن شناسایی کرد count.index.

شاخص شمارش Terraform چیست؟

این count.index یک متغیر ویژه است که Terraform با استفاده از آن در داخل یک بلوک منبع ایجاد می کند count استدلال این به شما کمک می کند تا هر نمونه از منبع را به طور منحصر به فرد شناسایی کنید. شاخص ها از 0 شروع می شوند و برای هر نمونه منبع ایجاد شده با افزایش 1 رشد می کنند.

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

بیایید به مثالی از ایجاد چندین سطل AWS S3 با استفاده از Terraform نگاه کنیم count.

ما سه نمونه از an ایجاد می کنیم aws_s3_bucket با استفاده از count مقدار '3'.

هر سطل با متغیر شاخص متفاوت خواهد بود count.index، که Terraform به طور خودکار به آن اختصاص می دهد فایل main.tf:

provider “aws” {
region = “us-west-2”
}
resource “aws_s3_bucket” “bucket” {
count = 3
bucket = “env0-my-bucket-${count.index}”
tags = {
Name = “env0-bucket-${count.index}”
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا، اجرا کنید terraform init دستور دانلود افزونه های ارائه دهندگان مورد نیاز و terraform apply دستور استقرار زیرساخت در AWS Cloud. این باعث ایجاد سه سطل حالت با استفاده از count شاخص های 0، 1 و 2:

پس از ایجاد موفقیت آمیز منابع، می توانید باکت ها را در S3 از طریق کنسول AWS مشاهده کنید. آیا از Terraform استفاده نمی کردید count، زمان زیادی را برای ایجاد سه بلوک منبع سطل S3 مختلف تلف کرده اید.

استفاده از موارد Terraform Count

می توانید از Terraform استفاده کنید count در پیکربندی شما در سناریوهای مختلف. بیایید به برخی از مهمترین آنها نگاه کنیم:

ایجاد منبع پویا – می توانید استفاده کنید count برای تولید منابع به صورت پویا بر اساس الف count به جای تکثیر دستی بلوک‌های منبع، مقدار را تعیین کنید. به عنوان مثال، چندین VPC AWS را می توان با استفاده از آن ایجاد کرد count.
متغیر شاخص – این count متا آرگومنت یک متغیر شاخص ضمنی ایجاد می کند که می تواند منابع تکراری ایجاد شده با متا آرگومان را تعریف و تمایز قائل شود. به عنوان مثال، با استفاده از count.index متغیر برای تمایز بین VPC های ایجاد شده با count استدلال
ایجاد مشروط – می توانید از یک عبارت شرطی مانند استفاده کنید count > 1 تصمیم گیری در مورد زمان توسعه منابع بر اساس یک شرایط مشخص. این به شما امکان می دهد ایجاد منابع را به صورت پویا کنترل کنید. به عنوان مثال، با استفاده از عبارت شرطی count = var.isTrue ? 1 : 0 کجا isTrue یک متغیر از نوع بولی است. منبع ایجاد خواهد شد تنها در صورتی که مقدار isTrue درست است.

بیایید این موارد را در زیر بررسی کنیم.

با استفاده از Terraform Count و Count.Index

برای نشان دادن نحوه کار کردن چیزها، فراتر از تامین منابع پویا اولیه، در اینجا چند نمونه از نحوه استفاده از count.index در کد Terraform شما

ایجاد چندین نمونه با استفاده از نقشه

بیایید ایجاد کنیم instance_types متغیر، نقشه ای از اشیاء. هر شی شامل ویژگی های یک نمونه است که توسط نمونه های مربوطه با استفاده از آن واکشی می شود count.index در متغیر.tf فایل

provider “aws” {
region = “ap-south-1”
}
variable “instance_types” {
description = “Map of instance types with properties”
type = map(object({
instance_type = string
subnet_id = string
availability_zone = string
}))
default = {
“instance1” = {
instance_type = “t2.medium”
subnet_id = “subnet-0b9bf47f2dd51a793”
availability_zone = “ap-south-1a”
},
“instance2” = {
instance_type = “t2.micro”
subnet_id = “subnet-095f35df6f4711c19”
availability_zone = “ap-south-1b”
},
“instance3” = {
instance_type = “t2.small”
subnet_id = “subnet-095f35df6f4711c19”
availability_zone = “ap-south-1b”
}
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، منبع را با استفاده از آن ایجاد کنید count.index برای دسترسی به مقادیر کلیدها در نقشه اشیاء در main.tf فایل:

resource “aws_instance” “env0-instance” {
count = length(var.instance_types)
ami = “ami-0f5ee92e2d63afc18”
instance_type = var.instance_types[keys(var.instance_types)[count.index]].instance_type
subnet_id = var.instance_types[keys(var.instance_types)[count.index]].subnet_id
security_groups = [“sg-04d9e1d30402432ce”] availability_zone = var.instance_types[keys(var.instance_types)[count.index]].availability_zone
tags = {
Name = “env0-${keys(var.instance_types)[count.index]}”
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، count.index شاخص‌ها را از 0 تا 2، یعنی سه، طول می‌گیرد instance_types متغیر اجرا کنید terraform init به دنبال آن terraform apply برای استقرار زیرساخت خود:

برای تأیید ایجاد نمونه‌ها، می‌توانید کنسول AWS را بررسی کنید:

ایجاد چند سطل S3 با استفاده از یک لیست

یک را ایجاد خواهیم کرد bucket_names متغیر، لیستی از رشته ها با مقادیر پیش فرض تعریف شده. را تنظیم کنید count استدلال از aws_s3_bucket منبع به عنوان طول لیست است و مقادیر متغیر را به عنوان ویژگی نام منبع با توجه به شاخص آنها ارسال کنید.

ابتدا بیایید آن را تعریف کنیم bucket_names متغیر در var.tf فایل:

provider “aws” {
region = “us-west-2”
}
variable “bucket_names” {
description = “List of bucket names”
type = list(string)
default = [“env0-bucket1”, “env0-bucket2”, “env0-bucket3”] }
In main.tf, define the [.code]aws_s3_bucket [.code] resource with the [.code]count[.code] value equal to the length of the [.code]bucket_names[.code] variable:
resource “aws_s3_bucket” “bucket” {
count = length(var.bucket_names)
bucket = var.bucket_names[count.index] tags = {
Name = var.bucket_names[count.index] }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

count.index طول متغیر را خواهد گرفت bucket_names، که سه شاخص از 0 تا 2 است terraform init دستور دانلود افزونه های ارائه دهنده و terraform apply دستور ایجاد منابع:

پس از اجرای موفقیت آمیز، منابع موجود در کنسول AWS را تأیید کنید:

عبارات شرطی با تعداد Terraform 0

در Terraform می توانید از عبارات شرطی با the استفاده کنید count متا آرگومان برای ایجاد منابع بر اساس شرایط خاص. زمانی که count روی 0 تنظیم شده است، نشان می دهد که Terraform no را ایجاد می کند aws_instance. پیکربندی زیر فقط در صورتی یک نمونه EC2 ایجاد می کند create_instance مقدار روی true تنظیم شده است:

provider “aws” {
region = “ap-south-1”
}
variable “create_instance” {
description = “Flag to create instance”
default = true
}
resource “aws_instance” “instance” {
count = var.create_instance ? 1 : 0
ami = “ami-0f5ee92e2d63afc18”
instance_type = “t2.micro”
subnet_id = “subnet-095f35df6f4711c19”
availability_zone = “ap-south-1b”
tags = {
Name = “conditional-instance”
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را اجرا کنید terraform init فرمان و terraform apply دستوری که آن یکی را نمایش می دهد aws_instance با توجه به ارزش Terraform ایجاد می شود count استدلال

حالا اگر مقدار آن را تغییر دهید create_instance متغیر به false و اجرا کنید terraform apply فرمان از آنجایی که count مقدار روی 0 تنظیم شده است، این نمونه از زیرساخت شما به عنوان یک به روز رسانی برای ایالت شما از بین می رود.

با تنظیم مقدار count روی 0، از استقرار منابع بدون حذف یک بلوک کد صرفنظر می کنیم و به صورت پویا کنترل استقرار را در دست می گیریم.

Terraform Count در مقابل For_each

در حال حاضر، ما Terraform را می دانیم count به شما امکان می دهد چندین نمونه را مانند Terraform مستقر کنید for_each برای استفاده می شود. بیایید ببینیم که چگونه آنها متفاوت هستند و کدام یک برای مورد استفاده شما بهترین است.

چه زمانی به جای For_each از Count استفاده کنیم؟

شما باید از Terraform استفاده کنید count به جای for_each در موارد زیر:

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

هنگام مدیریت زیرساخت ها با Terraform، اجرای خطوط لوله قوی CI/CD برای مدیریت تغییرات کد و استقرار کارآمد بسیار مهم است. در سناریوهای دنیای واقعی، اجرای دستورات Terraform به صورت محلی توصیه نمی شود، و ما باید از یک خط لوله کنترل شده با CI/CD استفاده کنیم تا از استقرار سازگار، ایمن و خودکار اطمینان حاصل کنیم. اینجاست که env0 وارد می‌شود و با ادغام با مخزن کد منبع و خودکار کردن کل فرآیند، گردش‌های کاری Terraform شما را افزایش می‌دهد.

ادغام Terraform Count با env0

وقتی Terraform count با ویژگی متغیرهای محیطی env0 استفاده می شود، افزونگی را در کد شما حذف می کند. می توانید تعداد منابع مشابهی را که می خواهید در ارائه دهنده ابر خود مستقر کنید بر اساس آن کنترل کنید count ارزش، بهبود کارایی زیرساخت شما به عنوان گردش کار کد (IaC).

متغیرهای محیطی با تعداد Terraform

ابتدا، اجازه دهید کد Terraform را بنویسیم تا استقرار خودکار را انجام دهیم aws_s3_bucket با استفاده از count در شما main.tf فایل ما از یک عبارت شرطی در پیکربندی Terraform خود استفاده خواهیم کرد که مقدار آن را تعیین می کند count متا آرگومان کنید و آن را با کد زیر به مخزن Github فشار دهید:

provider “aws” {
region = “us-west-2”
}

variable “environment” {
description = “The environment in which to deploy”
type = string
default = “development”
}
variable “prod_count” {
type = number
default = 4
}
variable “dev_count” {
type = number
default = 2
}

locals {
bucket_count = var.environment == “production” ? var.prod_count : var.dev_count
}

resource “aws_s3_bucket” “env0” {
count = local.bucket_count
bucket = “env0-bucket-${count.index}”
tags = {
Name = “env0-bucket-${count.index}”
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس وارد env0 شوید و روی «ایجاد پروژه جدید» کلیک کنید:

یک پاپ آپ ظاهر می شود که از شما می خواهد نامی منحصر به فرد به پروژه بدهید. اکنون، روی “ایجاد پروژه” کلیک کنید.

در Project Environment، روی “Create New Environment” کلیک کنید.

ادغام “VCS” را برای ایجاد یک محیط جدید انتخاب کنید:

مخزن Github، شاخه و پوشه Terraform خود را انتخاب کنید و “NEXT” را فشار دهید:

“Terraform” را به عنوان نوع IaC خود انتخاب کنید:

روی “بارگیری متغیرها از کد” در گوشه سمت راست بالا کلیک کنید تا همه متغیرهای اعلام شده در فایل های مانیفست خود را با مقادیر پیش فرض دریافت کنید:

مقدار “محیط” را به “تولید” در “متغیرهای محیطی” تغییر دهید:

اطمینان حاصل کنید که اعتبارنامه دسترسی AWS را در «متغیرهای محیطی» اضافه کرده‌اید:

متغیرها را ذخیره کنید و در صفحه بعدی، “جزئیات محیط”، یک محیط و نام فضای کاری را انتخاب کنید. روی “انجام شد” کلیک کنید:

پس از تنظیم جزئیات محیط، CI/CD باید به خودی خود اجرا شود و همه گزارش‌های استقرار باید موفقیت آمیز باشند.

برای تأیید ایجاد سطل، کنسول AWS را بررسی کنید:

با دنبال کردن این مراحل، ما به طور موثر چهار سطل S3 را برای تولید با استفاده از آن مستقر کرده ایم count متا آرگومان به AWS با استفاده از متغیرهای محیطی در env0.

این فرآیند یکپارچه است، و شما می توانید به آرامی مخزن Git ما را در محیط خود ادغام کنید، مقادیر متغیرهای محیط Terraform را با استفاده از یک رابط کاربری ساده ارائه دهید، و خط لوله CI/CD را خودکار کنید.

این رویکرد نه تنها گردش کار شما را ساده می کند، بلکه استقرار مداوم و قابل اعتماد، صرفه جویی در زمان و تلاش را نیز تضمین می کند.

نتیجه گیری

این terraform count آرگومان به طور موثر چندین منبع را با یک بلوک پیکربندی واحد مدیریت می کند. مدیریت منابع را ساده می کند، مقیاس پذیری را افزایش می دهد و افزونگی در کد شما را کاهش می دهد.

شما می توانید با درک و استفاده به استقرار زیرساخت های پویا و سازمان یافته دست یابید count با ابزارهایی مانند env0. چه در حال مدیریت چند نمونه باشید و چه صدها مورد، count استدلال انعطاف پذیری و کنترل مورد نیاز برای بهینه سازی راه اندازی زیرساخت شما را فراهم می کند.

سوالات متداول

س: Terraform Count چیست؟

این count متا آرگومنت در Terraform به شما امکان می دهد چندین نمونه از یک منبع را با استفاده از یک بلوک پیکربندی واحد ایجاد کنید. با تنظیم count برای یک عدد، شما به Terraform می گویید که چند نسخه از منبع ایجاد کند، و مدیریت و مقیاس زیرساخت شما را آسان تر می کند.

س: آیا می توانید از Count در بلوک داده در Terraform استفاده کنید؟

نه، نمی توانید استفاده کنید count متا آرگومان در یک بلوک داده در Terraform. این count متا آرگومان فقط در بلوک های منبع پشتیبانی می شود. اگر نیاز به واکشی چندین مورد داده دارید، معمولاً از راه حلی مانند یک استفاده می کنید for_each حلقه یا آن را خارج از Terraform مدیریت کنید.

س: تفاوت بین Count و For_each در Terraform چیست؟

در Terraform، هر دو count و for_each متا آرگومان هایی هستند که برای مدیریت چندین نمونه از منابع یا ماژول ها استفاده می شوند، اما موارد استفاده متفاوتی دارند و قابلیت های متفاوتی را ارائه می دهند. در اینجا یک تفاوت مفصل وجود دارد:

شمارش – استفاده کنید count زمانی که می خواهید چندین منبع یکسان ایجاد کنید. یک عدد صحیح می گیرد و آن تعداد نمونه را ایجاد می کند. همه نمونه ها مشابه خواهند بود، به جز تفاوت هایی که با استفاده از count.index مدیریت می کنید.
برای_هر – استفاده کنید for_each هنگام ایجاد چندین نمونه از یک منبع که ممکن است در پیکربندی متفاوت باشند. یک مجموعه یا نقشه می گیرد و برای هر آیتم یک نمونه ایجاد می کند. می توانید هر نمونه را بر اساس جفت های کلید-مقدار سفارشی کنید.

س: استفاده از Count Index در Terraform چیست؟

در Terraform، count.index یک متغیر خودکار موجود در یک بلوک منبع است که از آن استفاده می کند count متا آرگومان

این عدد شاخص نمونه فعلی را نشان می‌دهد که از 0 شروع می‌شود و به شما کمک می‌کند بین چندین نمونه از یک منبع تفاوت قائل شوید و به شما امکان می‌دهد هر نمونه را سفارشی کنید.

کار بر روی Infrastructure as Code به معنای نوشتن پیکربندی های مختلف برای مجموعه های مختلف منابع است. همانطور که پروژه ها رشد می کنند، ممکن است از کد اضافی برای استقرار منابع مشابه استفاده کنید. یکی از راه‌های ساده‌سازی این کار استفاده از count متا آرگومان

در این وبلاگ بیشتر با این موضوع آشنا خواهیم شد count، موارد استفاده آن را شرح دهید، و نشان دهید که چگونه می توانید از آن برای ایجاد منابع متعدد با سهولت استفاده کنید – با یا بدون عبارات شرطی.

ما همچنین به سوالات متداول پاسخ خواهیم داد، چند مثال ارائه می دهیم و حتی نگاهی گذرا به آن خواهیم داشت for_each استدلال کنید و ببینید که چگونه با آن مقایسه می شود count.

سلب مسئولیت

همه نمونه ها و موارد استفاده از count متا آرگومان مورد بحث در اینجا، در زمینه Terraform، به طور مشابه در OpenTofu، جایگزین Terraform منبع باز کار می کند. با این حال، برای ساده و آشنا نگه داشتن آن برای مهندسان DevOps، ما به آنها به عنوان “Terraform” اشاره خواهیم کرد. count در سراسر این پست وبلاگ

Terraform Count چیست؟

در Terraform یا OpenTofu، count متا آرگومنت به شما امکان می دهد چندین نمونه منبع را از یک بلوک پیکربندی واحد ایجاد کنید.

تنظیم Terraform count ارزش به Terraform می‌گوید که چند نسخه از منبع باید توسعه یابد و مدیریت و مقیاس‌بندی زیرساخت شما را ساده‌تر می‌کند. هر نمونه در بلوک پیکربندی Terraform را می توان به طور منحصر به فرد با استفاده از آن شناسایی کرد count.index.

شاخص شمارش Terraform چیست؟

این count.index یک متغیر ویژه است که Terraform با استفاده از آن در داخل یک بلوک منبع ایجاد می کند count استدلال این به شما کمک می کند تا هر نمونه از منبع را به طور منحصر به فرد شناسایی کنید. شاخص ها از 0 شروع می شوند و برای هر نمونه منبع ایجاد شده با افزایش 1 رشد می کنند.

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

بیایید به مثالی از ایجاد چندین سطل AWS S3 با استفاده از Terraform نگاه کنیم count.

ما سه نمونه از an ایجاد می کنیم aws_s3_bucket با استفاده از count مقدار '3'.

هر سطل با متغیر شاخص متفاوت خواهد بود count.index، که Terraform به طور خودکار به آن اختصاص می دهد فایل main.tf:

provider "aws" {
  region = "us-west-2"
}
resource "aws_s3_bucket" "bucket" {
  count = 3
  bucket = "env0-my-bucket-${count.index}"
  tags = {
    Name = "env0-bucket-${count.index}"
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا، اجرا کنید terraform init دستور دانلود افزونه های ارائه دهندگان مورد نیاز و terraform apply دستور استقرار زیرساخت در AWS Cloud. این باعث ایجاد سه سطل حالت با استفاده از count شاخص های 0، 1 و 2:

66b4b2df3205a034692584a9 AD 4nXcCRcAl ZGuthQYpCJdcs4y3AmjCohjKmQEBxqQETK3VzptyccTN YgpjmzNVIpvwCR9Q6 CfsYUF jT1wtYUD3eZJD1XdRjvOcnRUD28VPoXeOIdDS8YfyszbvTHSOb2Cff8n68kFuMh6u2N7SLhMhKj Y

پس از ایجاد موفقیت آمیز منابع، می توانید باکت ها را در S3 از طریق کنسول AWS مشاهده کنید. آیا از Terraform استفاده نمی کردید count، زمان زیادی را برای ایجاد سه بلوک منبع سطل S3 مختلف تلف کرده اید.

66b4b2debd0e672e1acee569 AD 4nXcwOdQmQKZZDJ4B8 r4vqd5 kNmhW8VZuNZpyBKGz7acjAk0eSy4f4KeERt54CbPEruz1Anqc kfmeEgBmK wwHRBxTFjYlKhTlczbKnuuiQgo6K3afYr2hmwPmPkb EMbheOPwz8XtTEEInXIDVDgKbzfG

استفاده از موارد Terraform Count

می توانید از Terraform استفاده کنید count در پیکربندی شما در سناریوهای مختلف. بیایید به برخی از مهمترین آنها نگاه کنیم:

  1. ایجاد منبع پویا – می توانید استفاده کنید count برای تولید منابع به صورت پویا بر اساس الف count به جای تکثیر دستی بلوک‌های منبع، مقدار را تعیین کنید. به عنوان مثال، چندین VPC AWS را می توان با استفاده از آن ایجاد کرد count.
  2. متغیر شاخص – این count متا آرگومنت یک متغیر شاخص ضمنی ایجاد می کند که می تواند منابع تکراری ایجاد شده با متا آرگومان را تعریف و تمایز قائل شود. به عنوان مثال، با استفاده از count.index متغیر برای تمایز بین VPC های ایجاد شده با count استدلال
  3. ایجاد مشروط – می توانید از یک عبارت شرطی مانند استفاده کنید count > 1 تصمیم گیری در مورد زمان توسعه منابع بر اساس یک شرایط مشخص. این به شما امکان می دهد ایجاد منابع را به صورت پویا کنترل کنید. به عنوان مثال، با استفاده از عبارت شرطی count = var.isTrue ? 1 : 0 کجا isTrue یک متغیر از نوع بولی است. منبع ایجاد خواهد شد تنها در صورتی که مقدار isTrue درست است.

بیایید این موارد را در زیر بررسی کنیم.

با استفاده از Terraform Count و Count.Index

برای نشان دادن نحوه کار کردن چیزها، فراتر از تامین منابع پویا اولیه، در اینجا چند نمونه از نحوه استفاده از count.index در کد Terraform شما

ایجاد چندین نمونه با استفاده از نقشه

بیایید ایجاد کنیم instance_types متغیر، نقشه ای از اشیاء. هر شی شامل ویژگی های یک نمونه است که توسط نمونه های مربوطه با استفاده از آن واکشی می شود count.index در متغیر.tf فایل

provider "aws" {
  region = "ap-south-1"
}
variable "instance_types" {
  description = "Map of instance types with properties"
  type = map(object({
    instance_type    = string
    subnet_id        = string
    availability_zone = string
  }))
  default = {
    "instance1" = {
      instance_type    = "t2.medium"
      subnet_id        = "subnet-0b9bf47f2dd51a793"
      availability_zone = "ap-south-1a"
    },
    "instance2" = {
      instance_type    = "t2.micro"
      subnet_id        = "subnet-095f35df6f4711c19"
      availability_zone = "ap-south-1b"
    },
    "instance3" = {
      instance_type    = "t2.small"
      subnet_id        = "subnet-095f35df6f4711c19"
      availability_zone = "ap-south-1b"
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، منبع را با استفاده از آن ایجاد کنید count.index برای دسترسی به مقادیر کلیدها در نقشه اشیاء در main.tf فایل:

resource "aws_instance" "env0-instance" {
  count = length(var.instance_types)
  ami = "ami-0f5ee92e2d63afc18"
  instance_type = var.instance_types[keys(var.instance_types)[count.index]].instance_type
  subnet_id = var.instance_types[keys(var.instance_types)[count.index]].subnet_id
  security_groups = ["sg-04d9e1d30402432ce"]
  availability_zone = var.instance_types[keys(var.instance_types)[count.index]].availability_zone
  tags = {
    Name = "env0-${keys(var.instance_types)[count.index]}"
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اینجا، count.index شاخص‌ها را از 0 تا 2، یعنی سه، طول می‌گیرد instance_types متغیر اجرا کنید terraform init به دنبال آن terraform apply برای استقرار زیرساخت خود:

66b4b2df098464bbe2162233 AD 4nXfzUtei 9yc6OAQ9dcLgBhO1mnLFgZYbk NCyrWczfsgyFunpAIn

برای تأیید ایجاد نمونه‌ها، می‌توانید کنسول AWS را بررسی کنید:

66b4b2dea61169ab350cd6dc AD 4nXfTNGcG 0 ED TZ1P0qfWlOEZltMPRzjg5wqE8t0pbkL7yek IuJZpRrUw7JtuEQeli6E94wBHJRcidZLnOKuic5IFcDix5o46Qwr2kgiGQsTpmp9M YKD9Zt7jZO59eHRuiELq9tS35KjzKFYFOE i gXy

ایجاد چند سطل S3 با استفاده از یک لیست

یک را ایجاد خواهیم کرد bucket_names متغیر، لیستی از رشته ها با مقادیر پیش فرض تعریف شده. را تنظیم کنید count استدلال از aws_s3_bucket منبع به عنوان طول لیست است و مقادیر متغیر را به عنوان ویژگی نام منبع با توجه به شاخص آنها ارسال کنید.

ابتدا بیایید آن را تعریف کنیم bucket_names متغیر در var.tf فایل:

provider "aws" {
  region = "us-west-2"
}
variable "bucket_names" {
  description = "List of bucket names"
  type        = list(string)
  default     = ["env0-bucket1", "env0-bucket2", "env0-bucket3"]
}
In main.tf, define the [.code]aws_s3_bucket [.code] resource with the  [.code]count[.code] value equal to the length of the [.code]bucket_names[.code] variable:
resource "aws_s3_bucket" "bucket" {
  count  = length(var.bucket_names)
  bucket = var.bucket_names[count.index]
  tags = {
    Name = var.bucket_names[count.index]
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

count.index طول متغیر را خواهد گرفت bucket_names، که سه شاخص از 0 تا 2 است terraform init دستور دانلود افزونه های ارائه دهنده و terraform apply دستور ایجاد منابع:

66b4b2dea948f23713ade49a AD 4nXd9KQl1l9 xDhjWI970YNrupwsFK7zP72Bh TsAAipdEfDERimKpr26Tuxt96ETIbiqXgUI198sZiFjeNdCurvWtkiVhXZbnd06HMSJfINVWFoUJMkxAAi6jFC AEqKeOQYRZYkndKHecMVW7LIZVqk 0uC

پس از اجرای موفقیت آمیز، منابع موجود در کنسول AWS را تأیید کنید:

66b4b2dfd83966ebd951da48 AD 4nXdPY BWAtjDBzdKOcU6PbwyRjnn MGDbBMpaoq7uVytmnhmE6TsYROizSOJStdpdF3NzubNfKqmrSP7 x217sWQTOSVZOD4H46Vyj1hwslbHXcwtcnMXG14KwTL5Q30DifvdCAk06P3qoO0GyxVFSte79

عبارات شرطی با تعداد Terraform 0

در Terraform می توانید از عبارات شرطی با the استفاده کنید count متا آرگومان برای ایجاد منابع بر اساس شرایط خاص. زمانی که count روی 0 تنظیم شده است، نشان می دهد که Terraform no را ایجاد می کند aws_instance. پیکربندی زیر فقط در صورتی یک نمونه EC2 ایجاد می کند create_instance مقدار روی true تنظیم شده است:

provider "aws" {
  region = "ap-south-1"
}
variable "create_instance" {
  description = "Flag to create instance"
  default     = true
}
resource "aws_instance" "instance" {
  count = var.create_instance ? 1 : 0
  ami               = "ami-0f5ee92e2d63afc18"
  instance_type     = "t2.micro"
  subnet_id         = "subnet-095f35df6f4711c19"
  availability_zone = "ap-south-1b"
  tags = {
    Name = "conditional-instance"
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را اجرا کنید terraform init فرمان و terraform apply دستوری که آن یکی را نمایش می دهد aws_instance با توجه به ارزش Terraform ایجاد می شود count استدلال

حالا اگر مقدار آن را تغییر دهید create_instance متغیر به false و اجرا کنید terraform apply فرمان از آنجایی که count مقدار روی 0 تنظیم شده است، این نمونه از زیرساخت شما به عنوان یک به روز رسانی برای ایالت شما از بین می رود.

66b4b2decab73581d6d0a71f AD 4nXflrO6qGQZqypnZ8HdcaY4WiTU2bNzH G8qKuw5sXNMrFXvPsB0sMwnRXyBJtkakecMvwDvzR1ZIuS1qnWb qHVOvTjH5xJxImaNGDzUzCOG2HDvloVl71mqDsJwT689oELfHGVY T4h6ELFQzNj J0E5iv

با تنظیم مقدار count روی 0، از استقرار منابع بدون حذف یک بلوک کد صرفنظر می کنیم و به صورت پویا کنترل استقرار را در دست می گیریم.

Terraform Count در مقابل For_each

در حال حاضر، ما Terraform را می دانیم count به شما امکان می دهد چندین نمونه را مانند Terraform مستقر کنید for_each برای استفاده می شود. بیایید ببینیم که چگونه آنها متفاوت هستند و کدام یک برای مورد استفاده شما بهترین است.

Terraform Count در مقابل For_each

چه زمانی به جای For_each از Count استفاده کنیم؟

شما باید از Terraform استفاده کنید count به جای for_each در موارد زیر:

  1. منابع یکنواخت – زمانی که منابعی که ایجاد می‌کنید اساساً یکسان هستند و می‌توان هر تفاوتی را با آن مدیریت کرد count.index.
  2. ایجاد مشروط – زمانی که شما نیاز به ایجاد منابع بر اساس یک شرط بولی ساده دارید.

هنگام مدیریت زیرساخت ها با Terraform، اجرای خطوط لوله قوی CI/CD برای مدیریت تغییرات کد و استقرار کارآمد بسیار مهم است. در سناریوهای دنیای واقعی، اجرای دستورات Terraform به صورت محلی توصیه نمی شود، و ما باید از یک خط لوله کنترل شده با CI/CD استفاده کنیم تا از استقرار سازگار، ایمن و خودکار اطمینان حاصل کنیم. اینجاست که env0 وارد می‌شود و با ادغام با مخزن کد منبع و خودکار کردن کل فرآیند، گردش‌های کاری Terraform شما را افزایش می‌دهد.

ادغام Terraform Count با env0

وقتی Terraform count با ویژگی متغیرهای محیطی env0 استفاده می شود، افزونگی را در کد شما حذف می کند. می توانید تعداد منابع مشابهی را که می خواهید در ارائه دهنده ابر خود مستقر کنید بر اساس آن کنترل کنید count ارزش، بهبود کارایی زیرساخت شما به عنوان گردش کار کد (IaC).

متغیرهای محیطی با تعداد Terraform

ابتدا، اجازه دهید کد Terraform را بنویسیم تا استقرار خودکار را انجام دهیم aws_s3_bucket با استفاده از count در شما main.tf فایل ما از یک عبارت شرطی در پیکربندی Terraform خود استفاده خواهیم کرد که مقدار آن را تعیین می کند count متا آرگومان کنید و آن را با کد زیر به مخزن Github فشار دهید:

provider "aws" {
  region = "us-west-2"
}

variable "environment" {
  description = "The environment in which to deploy"
  type        = string
  default     = "development"
}
variable "prod_count" {
  type    = number
  default = 4
}
variable "dev_count" {
  type    = number
  default = 2
}

locals {
  bucket_count = var.environment == "production" ? var.prod_count : var.dev_count
}

resource "aws_s3_bucket" "env0" {
  count  = local.bucket_count
  bucket = "env0-bucket-${count.index}"
  tags = {
    Name = "env0-bucket-${count.index}"
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس وارد env0 شوید و روی «ایجاد پروژه جدید» کلیک کنید:

66b4b8ab9b47e6ed4279fec8 AD 4nXcTrPjyEOaonqwVfZrNSFjHkkJt 4l9QLWYMLk5ZDY6BLMs1SUCMcIMDYcXuC4NOEhaNFksDCOdh4OT 92 R9QxlM0mDMQRIyyLvT4Gfjpluk AzZVFrvuhDw7eE5M 9wddGmPmOUI49gtkO2PH4T7OJXWo

یک پاپ آپ ظاهر می شود که از شما می خواهد نامی منحصر به فرد به پروژه بدهید. اکنون، روی “ایجاد پروژه” کلیک کنید.

66b4b8ac1c44400fced8dd4d AD 4nXdL07kupRa2lTaPRrS9GbQM86rVDDDklc MoHm3WyqBiMG2ncfpMAoxXo1WpKvkW3bo1AAsKKFHH6KoUQ7wdIPdJSUyN2N AP joH rd9u8awk xzA W6CY5dKBd5wDJvGmzBXtGd7YmrS c4eVM5CigI

در Project Environment، روی “Create New Environment” کلیک کنید.

66b4b8ac887399c383f6f50f AD 4nXeFQu0U2gJ7dc0Ut6ruc RFPrhgar46wCgVUL22RBGJxmeRco8dbFmJ2u9rqOcxXljKwd9EaP525MNbms9l 2Ubgrp8 WcHr PLLbb1PAjC d12fCCAAUSzVhH WcCpB5iPYtsc6MDJgRIUYP0i8WkAyERv

ادغام “VCS” را برای ایجاد یک محیط جدید انتخاب کنید:

66b4b8ac75fd9eaed97a7eea AD 4nXd ZaUj7SCTtHtBlcp1RTRZb6AHz HzuCMXj9nrGAV8OPP7DeSzebHMhIQIRt2ny985r23JUodCnnadx1wfGix3k4yZ1uplJLIQbatDxJMNcBFAsnSw5UHV7vZk1DiAiUP Ea Lln9Jp812w1I3SB6BjYUA

مخزن Github، شاخه و پوشه Terraform خود را انتخاب کنید و “NEXT” را فشار دهید:

66b4b8ac583ad060ac9a5d9b AD 4nXf2gnU4 si962XgUKUOmHWmVYlsOPf3W2pSH8d 5bP7iEc wH3M2394FO7UlwwYcBBwy96vMvc0rF9jl3sEyOGRq5ScnBCx1lhCHzEqbLBbuXr irmB Li2Zs9K0En8bUKLmX0SzLL62zJ51nFmsSgKyKYZ

“Terraform” را به عنوان نوع IaC خود انتخاب کنید:

66b4b8acbb34500120dfc09a AD 4nXeGhfPsUXOSvkbxmhhy3YRgE 44B7cHgnj28z 0359Yg lELSd I1ZKiF9zQBVHbSzB1SneN6hwgiBQ9tVLxtgdtge Pmeu6s7HJ0kKvu4Wk4ScnbffPkerlHHKX8Baa1HU29P t

روی “بارگیری متغیرها از کد” در گوشه سمت راست بالا کلیک کنید تا همه متغیرهای اعلام شده در فایل های مانیفست خود را با مقادیر پیش فرض دریافت کنید:

66b4b8ac75fd9eaed97a7f00 AD 4nXeKCUVRWxdTz2boJxINjMXsRposMqp1N8BQ bNnmtK4O3JABy7gum0SNPYMWcyMJb7dQTZ4jmKIOn OK80Bgm3YYrwayBUd4kZ4JBdhsw5MnfTwmGkCk6epu0jkwPofuio Bhkvhn0HOpRqQ6nLLtANuX4D

مقدار “محیط” را به “تولید” در “متغیرهای محیطی” تغییر دهید:

اطمینان حاصل کنید که اعتبارنامه دسترسی AWS را در «متغیرهای محیطی» اضافه کرده‌اید:

متغیرها را ذخیره کنید و در صفحه بعدی، “جزئیات محیط”، یک محیط و نام فضای کاری را انتخاب کنید. روی “انجام شد” کلیک کنید:

66b4b8ad1c44400fced8ddb0 AD 4nXdEMe9UrhrEjL0y4s8dFO4fjlzzZhrEqM7qJsNgy3PR53HHq WAuxRqCAkPotJK3N5bwY6ZqOKiwjEnu ggKqb24zvEhJLHXyV9UAGDN7IcY3YiMm95SmysW2qbbrq0o sgPPpS7FkJZOLhSoR8uCZ6h7CT

پس از تنظیم جزئیات محیط، CI/CD باید به خودی خود اجرا شود و همه گزارش‌های استقرار باید موفقیت آمیز باشند.

برای تأیید ایجاد سطل، کنسول AWS را بررسی کنید:

66b4b8acca1f7e2d8de09f43 AD 4nXfEW17YLTY3l2FzBpdLR4

با دنبال کردن این مراحل، ما به طور موثر چهار سطل S3 را برای تولید با استفاده از آن مستقر کرده ایم count متا آرگومان به AWS با استفاده از متغیرهای محیطی در env0.

این فرآیند یکپارچه است، و شما می توانید به آرامی مخزن Git ما را در محیط خود ادغام کنید، مقادیر متغیرهای محیط Terraform را با استفاده از یک رابط کاربری ساده ارائه دهید، و خط لوله CI/CD را خودکار کنید.

این رویکرد نه تنها گردش کار شما را ساده می کند، بلکه استقرار مداوم و قابل اعتماد، صرفه جویی در زمان و تلاش را نیز تضمین می کند.

نتیجه گیری

این terraform count آرگومان به طور موثر چندین منبع را با یک بلوک پیکربندی واحد مدیریت می کند. مدیریت منابع را ساده می کند، مقیاس پذیری را افزایش می دهد و افزونگی در کد شما را کاهش می دهد.

شما می توانید با درک و استفاده به استقرار زیرساخت های پویا و سازمان یافته دست یابید count با ابزارهایی مانند env0. چه در حال مدیریت چند نمونه باشید و چه صدها مورد، count استدلال انعطاف پذیری و کنترل مورد نیاز برای بهینه سازی راه اندازی زیرساخت شما را فراهم می کند.

سوالات متداول

س: Terraform Count چیست؟

این count متا آرگومنت در Terraform به شما امکان می دهد چندین نمونه از یک منبع را با استفاده از یک بلوک پیکربندی واحد ایجاد کنید. با تنظیم count برای یک عدد، شما به Terraform می گویید که چند نسخه از منبع ایجاد کند، و مدیریت و مقیاس زیرساخت شما را آسان تر می کند.

س: آیا می توانید از Count در بلوک داده در Terraform استفاده کنید؟

نه، نمی توانید استفاده کنید count متا آرگومان در یک بلوک داده در Terraform. این count متا آرگومان فقط در بلوک های منبع پشتیبانی می شود. اگر نیاز به واکشی چندین مورد داده دارید، معمولاً از راه حلی مانند یک استفاده می کنید for_each حلقه یا آن را خارج از Terraform مدیریت کنید.

س: تفاوت بین Count و For_each در Terraform چیست؟

در Terraform، هر دو count و for_each متا آرگومان هایی هستند که برای مدیریت چندین نمونه از منابع یا ماژول ها استفاده می شوند، اما موارد استفاده متفاوتی دارند و قابلیت های متفاوتی را ارائه می دهند. در اینجا یک تفاوت مفصل وجود دارد:

  • شمارش – استفاده کنید count زمانی که می خواهید چندین منبع یکسان ایجاد کنید. یک عدد صحیح می گیرد و آن تعداد نمونه را ایجاد می کند. همه نمونه ها مشابه خواهند بود، به جز تفاوت هایی که با استفاده از count.index مدیریت می کنید.
  • برای_هر – استفاده کنید for_each هنگام ایجاد چندین نمونه از یک منبع که ممکن است در پیکربندی متفاوت باشند. یک مجموعه یا نقشه می گیرد و برای هر آیتم یک نمونه ایجاد می کند. می توانید هر نمونه را بر اساس جفت های کلید-مقدار سفارشی کنید.

س: استفاده از Count Index در Terraform چیست؟

در Terraform، count.index یک متغیر خودکار موجود در یک بلوک منبع است که از آن استفاده می کند count متا آرگومان

این عدد شاخص نمونه فعلی را نشان می‌دهد که از 0 شروع می‌شود و به شما کمک می‌کند بین چندین نمونه از یک منبع تفاوت قائل شوید و به شما امکان می‌دهد هر نمونه را سفارشی کنید.

نوشته های مشابه

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

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

دکمه بازگشت به بالا