تعداد 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:
پس از ایجاد موفقیت آمیز منابع، می توانید باکت ها را در 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 شروع میشود و به شما کمک میکند بین چندین نمونه از یک منبع تفاوت قائل شوید و به شما امکان میدهد هر نمونه را سفارشی کنید.