نحوه مهاجرت Terraform State بین Backend های مختلف

Summarize this content to 400 words in Persian Lang
فایل State Terraform اطلاعات مهمی در مورد زیرساخت شما دارد، بنابراین زمانی که نیاز به جابجایی آن بین باطن های مختلف دارید، باید با دقت با آن برخورد کرد. در این مقاله، ما به چند سناریو متداول در زمانی که ممکن است بخواهید فایل های حالت خود را مهاجرت کنید، نحوه دستیابی به آن ایمن با استفاده از دستورات Terraform و ابزار محبوب Terragrunt را بررسی خواهیم کرد.
اگر فایل حالت شما به صورت محلی نگهداری می شود، به عنوان بهترین روش، معمولاً می خواهید آن را به یک پشتیبان راه دور در یک حساب ذخیره سازی ذخیره شده در ابر منتقل کنید. به همین دلیل است که ما نگاهی به نحوه انتقال پرونده محلی خود به Azure یا AWS خواهیم داشت. اگر بخواهید یک فایل حالت را از راه دور بردارید و از آن به صورت محلی برای آزمایش استفاده کنید، گاهی اوقات برعکس است، به طوری که قبل از بررسی دو گزینه مهم برای استفاده با terraform init فرمان مدیریت دولتی، terraform init -reconfigure و terraform init -migrate-state.
چرا ممکن است لازم باشد که ایالت Terraform خود را مهاجرت کنید؟
دلایل مختلفی وجود دارد که چرا ممکن است نیاز به مهاجرت حالت Terraform خود داشته باشید:
حرکت به سمت ابر
تعویض ارائه دهندگان ابر
متمرکز کردن مدیریت دولتی
بهینه سازی هزینه
حرکت به سمت ابر
به عنوان بهترین روش، اگر زیرساخت خود را به صورت محلی با Terraform توسعه داده اید، باید آن را به یک محیط ابری منتقل کنید. این امر مستلزم مهاجرت حالت Terraform شما به یک Backend است که در فضای ابری کار می کند.
انتقال از ذخیرهسازی محلی به پشتیبانهای راه دور، امنیت و مقیاسپذیری بهتری را ارائه میدهد. این تضمین می کند که جزئیات زیرساخت حساس به صورت محلی ذخیره نمی شوند و کاربران مجاز می توانند به طور ایمن به آنها دسترسی داشته باشند. نگه داشتن فایل ایالتی از راه دور نیز همکاری تیمی را تسهیل می کند. این به چندین عضو تیم اجازه می دهد تا به طور همزمان روی یک زیرساخت کار کنند، از تضادها اجتناب کنند و ثبات را تضمین کنند.
ذخیره سازی Terraform State از راه دور نیز گزینه های بهتری برای بازیابی فاجعه فراهم می کند. در صورت از دست دادن حالت محلی (به عنوان مثال، به دلیل خرابی سخت افزار)، داشتن یک نسخه از راه دور تضمین می کند که تنظیمات زیرساخت به راحتی قابل بازیابی است.
تعویض ارائه دهندگان ابر
Terraform می تواند برای مدیریت زیرساخت در چندین ارائه دهنده ابر استفاده شود. اگر تصمیم به تعویض ارائه دهنده دارید، باید حالت Terraform خود را به باطن ارائه دهنده جدید منتقل کنید.
متمرکز کردن مدیریت دولتی
فایلهای حالت محلی، اگرچه برای توسعه راحت هستند، اما مدیریت آنها با رشد زیرساخت شما دشوار است. مهاجرت به یک باطن از راه دور مانند Terraform Cloud، Terraform Enterprise، HashiCorp Consul یا Spacelift امکان مدیریت و همکاری متمرکز دولتی را فراهم می کند.
بهینه سازی هزینه
برخی از ارائه دهندگان ابر ممکن است برای فضای ذخیره سازی هزینه کنند. انتقال ایالت Terraform به یک راه حل باطنی مقرون به صرفه تر می تواند راهی برای بهینه سازی هزینه های زیرساخت شما باشد.
بیشتر بخوانید: Terraform Backends – Local and Remote Explained
نحوه مهاجرت Terraform بین باطن های مختلف
در اینجا سه روش مختلف برای انتقال حالت Terraform خود بین باطن های مختلف وجود دارد.
1. استفاده از دستورات استاندارد Terraform
terraform init -migrate-state یک دستور داخلی است که برای انتقال فایل حالت Terraform از یک باطن به دیگری استفاده می شود. این به شما امکان می دهد مکانی را که Terraform داده های وضعیت را ذخیره و بازیابی می کند تغییر دهید.
برای انتقال حالت Terraform با استفاده از -the migrate-state پرچم، مراحل زیر را دنبال کنید:
پیکربندی backend را تنظیم کنید.
کنترل دسترسی را در باطن خود به روز کنید.
اجرا کن terraform init.
تغییرات را تایید کنید.
توجه داشته باشید که اگر فایل حالت محلی شما قبلاً قفل شده بود، ممکن است لازم باشد از terraform state lock -force برای حذف قفل قبل از مهاجرت استفاده کنید.
قبل از استفاده از این دستور، باید فایل پیکربندی main.tfor backend جدید را به روز کنید. این شامل ایجاد منابع لازم بسته به باطن انتخابی است:
Cloud Storage (S3، Azure Blob Storage و غیره): یک سطل ایجاد کنید و مجوزهای دسترسی را پیکربندی کنید. (برای دستورالعملهای نحوه انتقال حالت به ذخیرهسازی Azure / AWS به بخشهای زیر مراجعه کنید.
خدمات از راه دور (Terraform Cloud، Terraform Enterprise): جزئیات احراز هویت را تنظیم کرده و سرویس راه دور را در پیکربندی Terraform پیکربندی کنید.
با استفاده از terraform init فرمان با -migrate-state پرچم، چندین مزیت را ارائه می دهد:
مهاجرت ایمن تر: Terraform اعتبارسنجی و بررسی را در طول مهاجرت انجام می دهد و خطر خطاها را کاهش می دهد.
تغییرات باطن را کنترل میکند: میتواند مهاجرت بین انواع مختلف باطن (مثلاً محلی به S3) را با پیکربندی خودکار باطن جدید بر اساس فایل پیکربندی شما انجام دهد.
مدیریت فضای کاری: در صورتی که پیکربندی Terraform شما از آنها استفاده کند، به طور یکپارچه با مهاجرت چندین فضای کاری مدیریت می کند.
2. با استفاده از دستورات کشش و فشار حالت Terraform
terraform state pull و terraform state push می توان از آن برای مهاجرت استفاده کرد، اما بهترین روش توصیه نمی شود.
با در نظر گرفتن مزایای استفاده از terraform init -migrate-state، اگر دلیل خاصی برای این کار دارید، باید قبل از استفاده از این روش از فایل State خود نسخه پشتیبان تهیه کنید.
مراحل انتقال حالت Terraform با دستورات pull و push به شرح زیر است:
حالت صادرات: استفاده کنید terraform state mv برای صادر کردن وضعیت فعلی خود به یک فایل محلی (به عنوان مثال، terraform.tfstate).
پیکربندی باطن جدید: تنظیمات مربوط به باطن جدید را همانطور که قبلا ذکر شد تنظیم کنید.
حالت کشش (اختیاری): اگر باطن جدید از کشیدن حالت موجود پشتیبانی می کند، استفاده کنید terraform state pull path/to/state.tfstate برای بازیابی وضعیت از یک مکان راه دور (برای جزئیات به اسناد باطن خاص مراجعه کنید).
حالت فشار: استفاده کنید terraform state push path/to/state.tfstate برای فشار دادن فایل حالت صادراتی (یا حالت کشیده شده) به باطن جدید.
3. استفاده از Terragrunt به عنوان یک ابزار مهاجرت
Terragrunt یک بسته بندی محبوب در اطراف Terraform است که ویژگی های اضافی را اضافه می کند و مدیریت تنظیمات Terraform را ساده می کند.
Terragrunt به طور خاص به عنوان یک ابزار مهاجرت برای Terraform State طراحی نشده است. با این حال، Terragrunt استفاده از پشتیبانهای حالت راه دور مانند Terraform Cloud یا تنظیمات باطن تعریف شده در فایلهای Terragrunt را تشویق میکند و نیاز به مدیریت فایلهای دولتی محلی را از بین میبرد.
برای راهاندازی یک Backend از راه دور Terragrunt:
پیکربندی Backend را در فایل پیکربندی Terragrunt خود تعریف کنید (terragrunt.hcl). این پیکربندی مشخص میکند که Terragrunt باید وضعیت Terraform را در کجا ذخیره کند.
terraform {
backend “s3” {
bucket = “your-bucket-name”
key = “path/to/terraform.tfstate”
region = “your-region”
dynamodb_table = “terraform-state-lock”
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اگر تنظیمات Terraform موجود شما قبلاً از Terragrunt استفاده نمیکنند، میتوانید با تبدیل آنها به Terragrunt شروع کنید. این شامل ایجاد فایل های پیکربندی Terragrunt (terragrunt.hcl) برای هر ماژول و تغییر پیکربندی Terraform خود برای پیروی از ساختار دایرکتوری Terragrunt.
پیکربندی باطن را در فایلهای پیکربندی Terragrunt خود تغییر دهید تا به پشتیبان جدیدی اشاره کند که میخواهید وضعیت را در آن جابجا کنید. این ممکن است شامل تغییر نوع backend (به عنوان مثال، از محلی به راه دور)، به روز رسانی اعتبار، نام سطل، و غیره باشد.
Initialize Terragrunt: Run terragrunt init برای مقداردهی اولیه Terragrunt و اطمینان از اعمال پیکربندی جدید backend.
برای کسب اطلاعات بیشتر در مورد Terragrunt، آموزش Terragrunt — Getting Started & Examples را بررسی کنید.
💡 همچنین ممکن است دوست داشته باشید:
مثال: انتقال ایالت محلی به باطن از راه دور حساب ذخیرهسازی Azure
حالا بیایید به چند مثال عملی نگاه کنیم. در زیر مراحل مورد نیاز برای انتقال وضعیت Terraform محلی شما به یک باطن از راه دور حساب ذخیرهسازی Azure آورده شده است.
حساب ذخیره سازی خود را در Azure ایجاد کنید و یک کانتینر یا ساختار پوشه دلخواه در آن ایجاد کنید تا فایل های حالت را نگه دارید.
کنترل دسترسی مناسب (ACL) را روی حساب و کانتینر ذخیرهسازی Azure خود پیکربندی کنید تا دسترسی به کاربران مجاز را محدود کنید.
بلوک Backend Terraform را پیکربندی کنید (معمولاً در فایل *main.tf *).
terraform {
backend “azurerm” {
resource_group_name = “your-resource-group” # Replace with your resource group name
storage_account_name = “your-storage-account” # Replace with your storage account name
container_name = “terraform-state” # Replace with your desired container name
key = “terraform.tfstate” # Optional: Specify the filename within the container (defaults to ‘terraform.tfstate’)
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دستور زیر را اجرا کنید:
terraform init -migrate-state
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Terraform پیکربندی باطن Storage Azure را شناسایی میکند و از شما میخواهد که مهاجرت را تأیید کنید. برای ادامه، “بله” را وارد کنید. این فرآیند مهاجرت را آغاز میکند و فایل محلی شما را در مکان مشخص شده در فضای ذخیرهسازی Azure آپلود میکند.
اگر پیکربندی Terraform شما از فضاهای کاری استفاده می کند، Terraform از شما درخواست می کند که همه فضاهای کاری را منتقل کنید.
مثال: مهاجرت ایالت محلی به آمازون S3
در این مثال، نحوه انتقال حالت Terraform محلی به AWS S3 را نشان خواهیم داد. (در مورد بهترین شیوه های مدیریت Terraform S3 بیشتر بخوانید.)
سطل ذخیره سازی Amazon S3 خود را در AWS ایجاد کنید تا فایل های حالت را نگه دارید.
اطمینان حاصل کنید که حساب کاربری شما دارای مجوزهای ایجاد سطل S3 است. در نظر بگیرید که مجوزهای دسترسی مناسب را برای سطل S3 خود تنظیم کنید تا مطمئن شوید که فایل حالت Terraform فقط برای کاربران مجاز قابل دسترسی است.
باطن را در فایل های پیکربندی خود پیکربندی کنید (معمولاً در فایل *main.tf *).
terraform {
backend “s3” {
bucket = “your-bucket-name”
key = “environment/terraform.tfstate”
region = “us-east-1” # Replace with your desired region
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
دستور زیر را اجرا کنید:
terraform init -migrate-state
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Terraform باطن S3 پیکربندی شده را شناسایی می کند و از شما می خواهد که مهاجرت را تأیید کنید. برای ادامه، “بله” را تایپ کنید. این فرآیند مهاجرت را آغاز میکند و فایل دولتی محلی شما را در مکان مشخص شده در سطل S3 آپلود میکند.
اگر پیکربندی Terraform شما از فضاهای کاری استفاده می کند، Terraform از شما درخواست می کند که همه فضاهای کاری را منتقل کنید.
انتقال پشتیبان راه دور به ماشین محلی
همانطور که قبلا ذکر شد، انتقال حالت Terraform خود از یک باطن راه دور به ماشین محلی شما امکان پذیر است، اما به طور کلی توصیه نمی شود.
استفاده کنید terraform state pull دستور صادر کردن حالت از پشتیبان راه دور به یک فایل محلی.
دستور خاص بسته به نوع Backend شما متفاوت خواهد بود. برای دستور دقیق، با اسناد مربوط به سرویس پشتیبان راه دور خود مشورت کنید.
به عنوان مثال، در Terraform Cloud، ممکن است از دستوری مانند:
terraform state pull remote-state.tfstate
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
جایگزین کردن remote-state.tfstate با نام فایل مورد نظر شما برای فایل حالت محلی.
در حالی که Terraform میتواند بهطور خودکار از یک باطن محلی استفاده کند، اگر هیچ باطن دیگری پیکربندی نشده باشد، میتوانید آن را به صراحت در فایل main.tf خود برای وضوح تعریف کنید.
terraform {
backend “local” {}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با باطن محلی راه اندازی کنید:
terraform init
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Terraform init reconfigure در مقابل migrate-state
را terraform init هنگام تغییر پیکربندی باطن، فرمان دو گزینه مرتبط دارد: -reconfigure و -migrate-state.
را terraform init -migrate-state از دستور می توان برای انتقال ایمن فایل حالت خود استفاده کرد. را terraform init -reconfigure با این حال، فقط در صورتی باید از دستور استفاده شود که فایل پیکربندی باطن شما خراب باشد یا اگر بخواهید به طور کامل با یک باطن جدید شروع به کار کنید.
را -reconfigure flag به طور کامل هرگونه پیکربندی باطن موجود در فهرست پروژه Terraform شما را نادیده میگیرد. هر گونه اطلاعات مربوط به وضعیت موجود شما را دور می اندازد و به یک مقداردهی اولیه جدید نیاز دارد (دانلود ماژول ها و غیره) با احتیاط ادامه دهید!
مدیریت وضعیت Terraform با اسپیس لیفت
Spacelift می تواند به صورت اختیاری وضعیت Terraform را برای شما مدیریت کند، و یک Backend همگام با بقیه پلتفرم برای به حداکثر رساندن راحتی و امنیت ارائه می دهد. همچنین میتوانید حالت خود را در حین ایجاد پشته وارد کنید، که برای مهندسانی که پیکربندیها و حالتهای قدیمی خود را به Spacelift مهاجرت میکنند بسیار مفید است.
در پشت صحنه، Spacelift از آمازون S3 استفاده می کند و تمام داده ها را در ایرلند ذخیره می کند. این بسیار ساده است که Spacelift وضعیت را برای شما مدیریت کند، زیرا این رفتار به طور پیش فرض بدون نیاز به انجام کاری انجام می شود. در اینجا می توانید اطلاعات بیشتری در مورد نحوه عملکرد واقعی آن بخوانید.
در عین حال، در برابر دسترسیهای تصادفی یا مخرب محافظت میشود، زیرا Spacelift میتواند دسترسی وضعیت و تغییرات را در اجرای قانونی Spacelift ترسیم کند و به طور خودکار تمام ترافیک غیرمجاز را مسدود کند.
اگر علاقه مند به کسب اطلاعات بیشتر در مورد Spacelift هستید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.
امتیاز کلیدی
فایل وضعیت شما ارزشمند است زیرا مانند نقشه ای عمل می کند که زیرساختی را که ایجاد کرده اید و نحوه ارتباط آن با فایل های پیکربندی Terraform شما را پیگیری می کند. به عنوان بهترین عمل، این باید از راه دور، در فضای ذخیره سازی ابری یا یک سرویس ابری نگهداری شود. اگر فایل ایالتی شما به صورت محلی نگهداری می شود، باید از آن استفاده کنید terraform init -migrate-state دستور انتقال ایمن آن را به یک مکان از راه دور.
نوشته جک روپر
فایل State Terraform اطلاعات مهمی در مورد زیرساخت شما دارد، بنابراین زمانی که نیاز به جابجایی آن بین باطن های مختلف دارید، باید با دقت با آن برخورد کرد. در این مقاله، ما به چند سناریو متداول در زمانی که ممکن است بخواهید فایل های حالت خود را مهاجرت کنید، نحوه دستیابی به آن ایمن با استفاده از دستورات Terraform و ابزار محبوب Terragrunt را بررسی خواهیم کرد.
اگر فایل حالت شما به صورت محلی نگهداری می شود، به عنوان بهترین روش، معمولاً می خواهید آن را به یک پشتیبان راه دور در یک حساب ذخیره سازی ذخیره شده در ابر منتقل کنید. به همین دلیل است که ما نگاهی به نحوه انتقال پرونده محلی خود به Azure یا AWS خواهیم داشت. اگر بخواهید یک فایل حالت را از راه دور بردارید و از آن به صورت محلی برای آزمایش استفاده کنید، گاهی اوقات برعکس است، به طوری که قبل از بررسی دو گزینه مهم برای استفاده با terraform init
فرمان مدیریت دولتی، terraform init -reconfigure
و terraform init -migrate-state
.
چرا ممکن است لازم باشد که ایالت Terraform خود را مهاجرت کنید؟
دلایل مختلفی وجود دارد که چرا ممکن است نیاز به مهاجرت حالت Terraform خود داشته باشید:
- حرکت به سمت ابر
- تعویض ارائه دهندگان ابر
- متمرکز کردن مدیریت دولتی
- بهینه سازی هزینه
حرکت به سمت ابر
به عنوان بهترین روش، اگر زیرساخت خود را به صورت محلی با Terraform توسعه داده اید، باید آن را به یک محیط ابری منتقل کنید. این امر مستلزم مهاجرت حالت Terraform شما به یک Backend است که در فضای ابری کار می کند.
انتقال از ذخیرهسازی محلی به پشتیبانهای راه دور، امنیت و مقیاسپذیری بهتری را ارائه میدهد. این تضمین می کند که جزئیات زیرساخت حساس به صورت محلی ذخیره نمی شوند و کاربران مجاز می توانند به طور ایمن به آنها دسترسی داشته باشند. نگه داشتن فایل ایالتی از راه دور نیز همکاری تیمی را تسهیل می کند. این به چندین عضو تیم اجازه می دهد تا به طور همزمان روی یک زیرساخت کار کنند، از تضادها اجتناب کنند و ثبات را تضمین کنند.
ذخیره سازی Terraform State از راه دور نیز گزینه های بهتری برای بازیابی فاجعه فراهم می کند. در صورت از دست دادن حالت محلی (به عنوان مثال، به دلیل خرابی سخت افزار)، داشتن یک نسخه از راه دور تضمین می کند که تنظیمات زیرساخت به راحتی قابل بازیابی است.
تعویض ارائه دهندگان ابر
Terraform می تواند برای مدیریت زیرساخت در چندین ارائه دهنده ابر استفاده شود. اگر تصمیم به تعویض ارائه دهنده دارید، باید حالت Terraform خود را به باطن ارائه دهنده جدید منتقل کنید.
متمرکز کردن مدیریت دولتی
فایلهای حالت محلی، اگرچه برای توسعه راحت هستند، اما مدیریت آنها با رشد زیرساخت شما دشوار است. مهاجرت به یک باطن از راه دور مانند Terraform Cloud، Terraform Enterprise، HashiCorp Consul یا Spacelift امکان مدیریت و همکاری متمرکز دولتی را فراهم می کند.
بهینه سازی هزینه
برخی از ارائه دهندگان ابر ممکن است برای فضای ذخیره سازی هزینه کنند. انتقال ایالت Terraform به یک راه حل باطنی مقرون به صرفه تر می تواند راهی برای بهینه سازی هزینه های زیرساخت شما باشد.
بیشتر بخوانید: Terraform Backends – Local and Remote Explained
نحوه مهاجرت Terraform بین باطن های مختلف
در اینجا سه روش مختلف برای انتقال حالت Terraform خود بین باطن های مختلف وجود دارد.
1. استفاده از دستورات استاندارد Terraform
terraform init -migrate-state
یک دستور داخلی است که برای انتقال فایل حالت Terraform از یک باطن به دیگری استفاده می شود. این به شما امکان می دهد مکانی را که Terraform داده های وضعیت را ذخیره و بازیابی می کند تغییر دهید.
برای انتقال حالت Terraform با استفاده از -the migrate-state
پرچم، مراحل زیر را دنبال کنید:
- پیکربندی backend را تنظیم کنید.
- کنترل دسترسی را در باطن خود به روز کنید.
- اجرا کن
terraform init
. - تغییرات را تایید کنید.
توجه داشته باشید که اگر فایل حالت محلی شما قبلاً قفل شده بود، ممکن است لازم باشد از terraform state lock -force برای حذف قفل قبل از مهاجرت استفاده کنید.
قبل از استفاده از این دستور، باید فایل پیکربندی main.tfor backend جدید را به روز کنید. این شامل ایجاد منابع لازم بسته به باطن انتخابی است:
- Cloud Storage (S3، Azure Blob Storage و غیره): یک سطل ایجاد کنید و مجوزهای دسترسی را پیکربندی کنید. (برای دستورالعملهای نحوه انتقال حالت به ذخیرهسازی Azure / AWS به بخشهای زیر مراجعه کنید.
- خدمات از راه دور (Terraform Cloud، Terraform Enterprise): جزئیات احراز هویت را تنظیم کرده و سرویس راه دور را در پیکربندی Terraform پیکربندی کنید.
با استفاده از terraform init
فرمان با -migrate-state
پرچم، چندین مزیت را ارائه می دهد:
- مهاجرت ایمن تر: Terraform اعتبارسنجی و بررسی را در طول مهاجرت انجام می دهد و خطر خطاها را کاهش می دهد.
- تغییرات باطن را کنترل میکند: میتواند مهاجرت بین انواع مختلف باطن (مثلاً محلی به S3) را با پیکربندی خودکار باطن جدید بر اساس فایل پیکربندی شما انجام دهد.
- مدیریت فضای کاری: در صورتی که پیکربندی Terraform شما از آنها استفاده کند، به طور یکپارچه با مهاجرت چندین فضای کاری مدیریت می کند.
2. با استفاده از دستورات کشش و فشار حالت Terraform
terraform state pull
و terraform state push
می توان از آن برای مهاجرت استفاده کرد، اما بهترین روش توصیه نمی شود.
با در نظر گرفتن مزایای استفاده از terraform init -migrate-state، اگر دلیل خاصی برای این کار دارید، باید قبل از استفاده از این روش از فایل State خود نسخه پشتیبان تهیه کنید.
مراحل انتقال حالت Terraform با دستورات pull و push به شرح زیر است:
- حالت صادرات: استفاده کنید
terraform state mv
برای صادر کردن وضعیت فعلی خود به یک فایل محلی (به عنوان مثال،terraform.tfstate
). - پیکربندی باطن جدید: تنظیمات مربوط به باطن جدید را همانطور که قبلا ذکر شد تنظیم کنید.
- حالت کشش (اختیاری): اگر باطن جدید از کشیدن حالت موجود پشتیبانی می کند، استفاده کنید
terraform state pull path/to/state.tfstate
برای بازیابی وضعیت از یک مکان راه دور (برای جزئیات به اسناد باطن خاص مراجعه کنید). - حالت فشار: استفاده کنید
terraform state push path/to/state.tfstate
برای فشار دادن فایل حالت صادراتی (یا حالت کشیده شده) به باطن جدید.
3. استفاده از Terragrunt به عنوان یک ابزار مهاجرت
Terragrunt یک بسته بندی محبوب در اطراف Terraform است که ویژگی های اضافی را اضافه می کند و مدیریت تنظیمات Terraform را ساده می کند.
Terragrunt به طور خاص به عنوان یک ابزار مهاجرت برای Terraform State طراحی نشده است. با این حال، Terragrunt استفاده از پشتیبانهای حالت راه دور مانند Terraform Cloud یا تنظیمات باطن تعریف شده در فایلهای Terragrunt را تشویق میکند و نیاز به مدیریت فایلهای دولتی محلی را از بین میبرد.
برای راهاندازی یک Backend از راه دور Terragrunt:
- پیکربندی Backend را در فایل پیکربندی Terragrunt خود تعریف کنید (
terragrunt.hcl
). این پیکربندی مشخص میکند که Terragrunt باید وضعیت Terraform را در کجا ذخیره کند.
terraform {
backend "s3" {
bucket = "your-bucket-name"
key = "path/to/terraform.tfstate"
region = "your-region"
dynamodb_table = "terraform-state-lock"
}
}
- اگر تنظیمات Terraform موجود شما قبلاً از Terragrunt استفاده نمیکنند، میتوانید با تبدیل آنها به Terragrunt شروع کنید. این شامل ایجاد فایل های پیکربندی Terragrunt (
terragrunt.hcl
) برای هر ماژول و تغییر پیکربندی Terraform خود برای پیروی از ساختار دایرکتوری Terragrunt. - پیکربندی باطن را در فایلهای پیکربندی Terragrunt خود تغییر دهید تا به پشتیبان جدیدی اشاره کند که میخواهید وضعیت را در آن جابجا کنید. این ممکن است شامل تغییر نوع backend (به عنوان مثال، از محلی به راه دور)، به روز رسانی اعتبار، نام سطل، و غیره باشد.
- Initialize Terragrunt: Run
terragrunt init
برای مقداردهی اولیه Terragrunt و اطمینان از اعمال پیکربندی جدید backend.
برای کسب اطلاعات بیشتر در مورد Terragrunt، آموزش Terragrunt — Getting Started & Examples را بررسی کنید.
💡 همچنین ممکن است دوست داشته باشید:
مثال: انتقال ایالت محلی به باطن از راه دور حساب ذخیرهسازی Azure
حالا بیایید به چند مثال عملی نگاه کنیم. در زیر مراحل مورد نیاز برای انتقال وضعیت Terraform محلی شما به یک باطن از راه دور حساب ذخیرهسازی Azure آورده شده است.
- حساب ذخیره سازی خود را در Azure ایجاد کنید و یک کانتینر یا ساختار پوشه دلخواه در آن ایجاد کنید تا فایل های حالت را نگه دارید.
- کنترل دسترسی مناسب (ACL) را روی حساب و کانتینر ذخیرهسازی Azure خود پیکربندی کنید تا دسترسی به کاربران مجاز را محدود کنید.
- بلوک Backend Terraform را پیکربندی کنید (معمولاً در فایل *main.tf *).
terraform {
backend "azurerm" {
resource_group_name = "your-resource-group" # Replace with your resource group name
storage_account_name = "your-storage-account" # Replace with your storage account name
container_name = "terraform-state" # Replace with your desired container name
key = "terraform.tfstate" # Optional: Specify the filename within the container (defaults to 'terraform.tfstate')
}
}
- دستور زیر را اجرا کنید:
terraform init -migrate-state
Terraform پیکربندی باطن Storage Azure را شناسایی میکند و از شما میخواهد که مهاجرت را تأیید کنید. برای ادامه، “بله” را وارد کنید. این فرآیند مهاجرت را آغاز میکند و فایل محلی شما را در مکان مشخص شده در فضای ذخیرهسازی Azure آپلود میکند.
اگر پیکربندی Terraform شما از فضاهای کاری استفاده می کند، Terraform از شما درخواست می کند که همه فضاهای کاری را منتقل کنید.
مثال: مهاجرت ایالت محلی به آمازون S3
در این مثال، نحوه انتقال حالت Terraform محلی به AWS S3 را نشان خواهیم داد. (در مورد بهترین شیوه های مدیریت Terraform S3 بیشتر بخوانید.)
- سطل ذخیره سازی Amazon S3 خود را در AWS ایجاد کنید تا فایل های حالت را نگه دارید.
- اطمینان حاصل کنید که حساب کاربری شما دارای مجوزهای ایجاد سطل S3 است. در نظر بگیرید که مجوزهای دسترسی مناسب را برای سطل S3 خود تنظیم کنید تا مطمئن شوید که فایل حالت Terraform فقط برای کاربران مجاز قابل دسترسی است.
- باطن را در فایل های پیکربندی خود پیکربندی کنید (معمولاً در فایل *main.tf *).
terraform {
backend "s3" {
bucket = "your-bucket-name"
key = "environment/terraform.tfstate"
region = "us-east-1" # Replace with your desired region
}
}
- دستور زیر را اجرا کنید:
terraform init -migrate-state
Terraform باطن S3 پیکربندی شده را شناسایی می کند و از شما می خواهد که مهاجرت را تأیید کنید. برای ادامه، “بله” را تایپ کنید. این فرآیند مهاجرت را آغاز میکند و فایل دولتی محلی شما را در مکان مشخص شده در سطل S3 آپلود میکند.
اگر پیکربندی Terraform شما از فضاهای کاری استفاده می کند، Terraform از شما درخواست می کند که همه فضاهای کاری را منتقل کنید.
انتقال پشتیبان راه دور به ماشین محلی
همانطور که قبلا ذکر شد، انتقال حالت Terraform خود از یک باطن راه دور به ماشین محلی شما امکان پذیر است، اما به طور کلی توصیه نمی شود.
- استفاده کنید
terraform state pull
دستور صادر کردن حالت از پشتیبان راه دور به یک فایل محلی.
دستور خاص بسته به نوع Backend شما متفاوت خواهد بود. برای دستور دقیق، با اسناد مربوط به سرویس پشتیبان راه دور خود مشورت کنید.
به عنوان مثال، در Terraform Cloud، ممکن است از دستوری مانند:
terraform state pull remote-state.tfstate
جایگزین کردن remote-state.tfstate
با نام فایل مورد نظر شما برای فایل حالت محلی.
- در حالی که Terraform میتواند بهطور خودکار از یک باطن محلی استفاده کند، اگر هیچ باطن دیگری پیکربندی نشده باشد، میتوانید آن را به صراحت در فایل main.tf خود برای وضوح تعریف کنید.
terraform {
backend "local" {}
}
- با باطن محلی راه اندازی کنید:
terraform init
Terraform init reconfigure در مقابل migrate-state
را terraform init
هنگام تغییر پیکربندی باطن، فرمان دو گزینه مرتبط دارد: -reconfigure
و -migrate-state
.
را terraform init -migrate-state
از دستور می توان برای انتقال ایمن فایل حالت خود استفاده کرد. را terraform init -reconfigure
با این حال، فقط در صورتی باید از دستور استفاده شود که فایل پیکربندی باطن شما خراب باشد یا اگر بخواهید به طور کامل با یک باطن جدید شروع به کار کنید.
را -reconfigure
flag به طور کامل هرگونه پیکربندی باطن موجود در فهرست پروژه Terraform شما را نادیده میگیرد. هر گونه اطلاعات مربوط به وضعیت موجود شما را دور می اندازد و به یک مقداردهی اولیه جدید نیاز دارد (دانلود ماژول ها و غیره) با احتیاط ادامه دهید!
مدیریت وضعیت Terraform با اسپیس لیفت
Spacelift می تواند به صورت اختیاری وضعیت Terraform را برای شما مدیریت کند، و یک Backend همگام با بقیه پلتفرم برای به حداکثر رساندن راحتی و امنیت ارائه می دهد. همچنین میتوانید حالت خود را در حین ایجاد پشته وارد کنید، که برای مهندسانی که پیکربندیها و حالتهای قدیمی خود را به Spacelift مهاجرت میکنند بسیار مفید است.
در پشت صحنه، Spacelift از آمازون S3 استفاده می کند و تمام داده ها را در ایرلند ذخیره می کند. این بسیار ساده است که Spacelift وضعیت را برای شما مدیریت کند، زیرا این رفتار به طور پیش فرض بدون نیاز به انجام کاری انجام می شود. در اینجا می توانید اطلاعات بیشتری در مورد نحوه عملکرد واقعی آن بخوانید.
در عین حال، در برابر دسترسیهای تصادفی یا مخرب محافظت میشود، زیرا Spacelift میتواند دسترسی وضعیت و تغییرات را در اجرای قانونی Spacelift ترسیم کند و به طور خودکار تمام ترافیک غیرمجاز را مسدود کند.
اگر علاقه مند به کسب اطلاعات بیشتر در مورد Spacelift هستید، همین امروز یک حساب کاربری رایگان ایجاد کنید یا با یکی از مهندسان ما یک نسخه نمایشی رزرو کنید.
امتیاز کلیدی
فایل وضعیت شما ارزشمند است زیرا مانند نقشه ای عمل می کند که زیرساختی را که ایجاد کرده اید و نحوه ارتباط آن با فایل های پیکربندی Terraform شما را پیگیری می کند. به عنوان بهترین عمل، این باید از راه دور، در فضای ذخیره سازی ابری یا یک سرویس ابری نگهداری شود. اگر فایل ایالتی شما به صورت محلی نگهداری می شود، باید از آن استفاده کنید terraform init -migrate-state
دستور انتقال ایمن آن را به یک مکان از راه دور.
نوشته جک روپر