مدیریت Terraform State: بهترین روشها برای DevOps

Summarize this content to 400 words in Persian Lang
چگونه Terraform می داند که چه منابعی را مدیریت می کند؟ از فرمت JSON استفاده می کند که نگاشت منابع موجود در فایل های پیکربندی و نمایش آن منابع را در دنیای واقعی ثبت می کند. این به عنوان فایل حالت Terraform شناخته می شود. این معمولاً نامگذاری می شود terraform.tfstate. برای پروژه شخصی، فایل حالت می تواند روی ماشین محلی به نام باطن محلی زندگی کند. با این حال، هنگام کار با یک تیم، داشتن فایلهای حالت در بسیاری از ماشینهای محلی میتواند فاجعهبار باشد، همچنین وجود آن در یک سیستم کنترل نسخه به دلیل برخی از اسرار حساس که فایل state حاوی آن است، عالی نیست. بهترین روش ها برای مدیریت حالت در Terraform چیست؟
ذخیره سازی فایل های دولتی
بهترین روش برای ذخیره فایل های حالت استفاده از backend های راه دور است. Amazon S3، Azure Storage، Google Cloud Storage، Terraform Cloud و Terraform Enterprise همگی از backend های راه دور پشتیبانی می کنند. این گزینههای ذخیرهسازی به جلوگیری از خطای دستی کمک میکنند، از قفل کردن پشتیبانی میکنند تا دو نفر اجرا نشوند terraform apply در عین حال از اسرار موجود در پرونده های دولتی محافظت کنید.
نحوه ایجاد یک باطن از راه دور در S3
شما می توانید یک سطل S3 برای ذخیره فایل های حالت خود ایجاد کنید. سطل های S3 از نسخه سازی، رمزگذاری و امنیت از دسترسی عمومی پشتیبانی می کنند. این باعث می شود که پرونده حالت ایمن باشد. همچنین می توانید از DynamoDB برای رسیدن به حالت قفل استفاده کنید. در اینجا یک پیکربندی Terraform است که می تواند از یک دایرکتوری دیگر مستقر شود.
provider “aws” {
region = “us-east-2”
}
// Create a unique bucket
resource “aws_s3_bucket” “tf_state” {
bucket =””
# Prevent accidental deletion of the S3 bucket
lifecycle {
prevent_destroy = true
}
}
// Enable bucket versioning
resource “aws_s3_bucket_versioning” “enables” {
bucket = aws_s3_bucket.tf_state.id
versioning_configuration {
status = “Enabled”
}
}
// Enable S3 server side encryption
resource “aws_s3_bucket_server_side_encryption_configuration” “default” {
bucket = aws_s3_bucket.tf_state.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = “AES256”
}
}
}
// Block public access
resource “aws_s3_bucket_public_access_block” “public_access” {
bucket = aws_s3_bucket.tf_state.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
// Create DynamoDB for locking
resource “aws_dynamodb_table” “terraform_locks” {
name = “”
billing_mode = “PAY_PER_REQUEST”
hash_key = “LockID”
attribute {
name = “LockID”
type = “S”
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون می توانید دستورات Terraform زیر را به ترتیب اجرا کنید
terraform init
terraform plan
terraform apply
یک سطل S3 به همراه یک جدول DynamoDB ایجاد می شود. در مرحله بعد، باطن را پیکربندی کنید تا فایل های حالت را از راه دور در سطل S3 که تازه ایجاد شده ذخیره کند. این بلوک Terraform برای تنظیم backend است.
terraform {
backend “s3” {
bucket = “”
key = “global/s3/terraform.tfstate”
region = “us-east-2”
dynamodb_table = “”
encrypt = true
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون باید اجرا کنید terraform init مجدداً به Terraform اجازه می دهد تا باطن راه دور را پیکربندی کند و پرونده حالت را در سطل S3 مشخص شده کپی کند.
پس از تایید yes، فایل حالت دیگر در یک ماشین محلی نیست بلکه از راه دور ذخیره می شود. این به تیم ها امکان می دهد بدون ایجاد خرابی در زیرساخت های موجود، به طور مؤثر با یکدیگر همکاری کنند. این بهترین تمرین است. با این حال، چگونه می توان محیط ها را جدا کرد؟ یک وبلاگ آینده راه حلی را ارائه می دهد.
چگونه Terraform می داند که چه منابعی را مدیریت می کند؟ از فرمت JSON استفاده می کند که نگاشت منابع موجود در فایل های پیکربندی و نمایش آن منابع را در دنیای واقعی ثبت می کند. این به عنوان فایل حالت Terraform شناخته می شود. این معمولاً نامگذاری می شود terraform.tfstate
. برای پروژه شخصی، فایل حالت می تواند روی ماشین محلی به نام باطن محلی زندگی کند. با این حال، هنگام کار با یک تیم، داشتن فایلهای حالت در بسیاری از ماشینهای محلی میتواند فاجعهبار باشد، همچنین وجود آن در یک سیستم کنترل نسخه به دلیل برخی از اسرار حساس که فایل state حاوی آن است، عالی نیست. بهترین روش ها برای مدیریت حالت در Terraform چیست؟
ذخیره سازی فایل های دولتی
بهترین روش برای ذخیره فایل های حالت استفاده از backend های راه دور است. Amazon S3، Azure Storage، Google Cloud Storage، Terraform Cloud و Terraform Enterprise همگی از backend های راه دور پشتیبانی می کنند. این گزینههای ذخیرهسازی به جلوگیری از خطای دستی کمک میکنند، از قفل کردن پشتیبانی میکنند تا دو نفر اجرا نشوند terraform apply
در عین حال از اسرار موجود در پرونده های دولتی محافظت کنید.
نحوه ایجاد یک باطن از راه دور در S3
شما می توانید یک سطل S3 برای ذخیره فایل های حالت خود ایجاد کنید. سطل های S3 از نسخه سازی، رمزگذاری و امنیت از دسترسی عمومی پشتیبانی می کنند. این باعث می شود که پرونده حالت ایمن باشد. همچنین می توانید از DynamoDB برای رسیدن به حالت قفل استفاده کنید. در اینجا یک پیکربندی Terraform است که می تواند از یک دایرکتوری دیگر مستقر شود.
provider "aws" {
region = "us-east-2"
}
// Create a unique bucket
resource "aws_s3_bucket" "tf_state" {
bucket =""
# Prevent accidental deletion of the S3 bucket
lifecycle {
prevent_destroy = true
}
}
// Enable bucket versioning
resource "aws_s3_bucket_versioning" "enables" {
bucket = aws_s3_bucket.tf_state.id
versioning_configuration {
status = "Enabled"
}
}
// Enable S3 server side encryption
resource "aws_s3_bucket_server_side_encryption_configuration" "default" {
bucket = aws_s3_bucket.tf_state.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
// Block public access
resource "aws_s3_bucket_public_access_block" "public_access" {
bucket = aws_s3_bucket.tf_state.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
// Create DynamoDB for locking
resource "aws_dynamodb_table" "terraform_locks" {
name = ""
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
اکنون می توانید دستورات Terraform زیر را به ترتیب اجرا کنید
-
terraform init
terraform plan
terraform apply
یک سطل S3 به همراه یک جدول DynamoDB ایجاد می شود. در مرحله بعد، باطن را پیکربندی کنید تا فایل های حالت را از راه دور در سطل S3 که تازه ایجاد شده ذخیره کند. این بلوک Terraform برای تنظیم backend است.
terraform {
backend "s3" {
bucket = ""
key = "global/s3/terraform.tfstate"
region = "us-east-2"
dynamodb_table = ""
encrypt = true
}
}
اکنون باید اجرا کنید terraform init
مجدداً به Terraform اجازه می دهد تا باطن راه دور را پیکربندی کند و پرونده حالت را در سطل S3 مشخص شده کپی کند.
پس از تایید yes
، فایل حالت دیگر در یک ماشین محلی نیست بلکه از راه دور ذخیره می شود. این به تیم ها امکان می دهد بدون ایجاد خرابی در زیرساخت های موجود، به طور مؤثر با یکدیگر همکاری کنند. این بهترین تمرین است. با این حال، چگونه می توان محیط ها را جدا کرد؟ یک وبلاگ آینده راه حلی را ارائه می دهد.