tfclean: به راحتی بلوک های جابجا شده/واردات/حذف شده استفاده نشده را در Terraform حذف کنید

Terraform's moved
، import
، و removed
بلوک ها کاملاً مفید هستند. با این حال، حذف آنها پس از اجرای برنامه می تواند دردسرساز باشد. در واقعیت، هیچ محدودیت خاصی وجود ندارد که شما را از حذف آنها باز دارد – باز کردن یک درخواست کشش و حذف دستی آنها خسته کننده است. اگرچه این بلوکها زیاد استفاده نمیشوند، من تصمیم گرفتم ابزاری به نام tfclean (https://github.com/takaishi/tfclean) ایجاد کنم تا فرآیند حذف را آسانتر کنم.
به عنوان مثال، فرض کنید یک فایل .tf مانند این داریم که حاوی یک منبع aws_security_group به همراه یک بلوک منتقل شده، یک بلوک واردات و یک بلوک حذف شده است:
resource "aws_security_group" "example" {
name = "example-security-group"
description = "Example security group"
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "example-security-group"
}
}
# removed
removed {
from = aws_security_group.example
lifecycle {
destroy = false
}
}
# import
import {
id = "resource_id"
to = module.foo.hoge
}
# moved
moved {
from = module.foo.hoge
to = module.foo.piyo
}
هنگامی که tfclean را با دستور زیر اجرا می کنید، به طور خودکار آن را حذف می کند moved
، import
، و removed
بلوک ها برای شما:
./dist/tfclean ./dir/of/tffiles
پس از اجرای tfclean، فایل به صورت زیر اصلاح می شود:
resource "aws_security_group" "example" {
name = "example-security-group"
description = "Example security group"
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "example-security-group"
}
}
# removed
# import
# moved
همانطور که می بینید، بلوک هایی که قبلاً باید با دست حذف می شدند، به طور خودکار حذف می شوند. برای سادهتر کردن این موضوع، من این فرآیند را در یک گردش کاری GitHub Actions خودکار کردهام:
- اجرا شود.
- به طور خودکار بلوک ها را با استفاده از tfclean حذف کنید.
- یک درخواست کشش برای تغییرات ایجاد کنید.
اکنون، تنها کاری که باید انجام دهم این است که تفاوت حذف بلوک ها را بررسی کنم، نتایج طرح را بررسی کنم، درخواست کشش را تأیید و ادغام کنم. دیگر لازم نیست به صورت دستی کد را لمس کنم. شما می توانید نمونه گردش کار GitHub Actions را در مخزن tfclean بیابید، بنابراین با خیال راحت به آن مراجعه کنید.
به هر حال، tfclean همچنین می تواند به فایل tfstate ارجاع دهد تا فقط بلوک هایی را که قبلا اعمال شده اند حذف کند. از نظر فنی، این دقیق تر است، اما از آنجایی که ما معمولاً به هر حال آن را پس از اعمال اجرا می کنیم، مطمئن نیستم که هر چند وقت یکبار به آن ویژگی نیاز است.
% AWS_PROFILE=xxxxxxx tfclean --tfstate s3://path/to/tfstate /path/to/tffiles
از نظر عملکردی، tfclean اکثراً کامل است، اگرچه ممکن است با یک بلوک وارداتی که از for_each استفاده می کند، کاملاً کار نکند. اگر شما فردی هستید که برداشتن این بلوکها با دست را خستهکننده میداند، دوست دارم آن را امتحان کنید!