Tìm hiểu tính năng Terraform `taint`

27

Tìm hiểu tính năng Terraform taintCuongquach.com | Khi bạn sử dụng Terraform để quản lý các resource hạ tầng Cloud hay On-Premise. Bạn sẽ bắt gặp một tính năng được hỗ trợ bởi Terraform mang tên : taint .

terraform-taint-la-gi

Terraform taint là gì ?

Terraform taint là một tính năng của chương trình Terraform được sử dụng để đánh dấu trạng thái của các resource trong file state quản lý bởi Terraform là tainted . Khi resource có trạng thái này sẽ được xoá bỏ và khởi tạo mới trong những lần apply kế tiếp.

Tính năng này sẽ không thay đổi hạ tầng mà Terraform quản lý, mà chỉ chỉnh sửa thông tin trạng thái resource trong file state . Khi resource ở trạng thái tainted, thì khi bạn chạy terraform plan để kiểm tra các sự thay đổi trong resource cấu hình sẽ thấy thông tin yêu cầu xoá và tạo mới.

Lưu ý, là với các resource có sử dụng thông tin phụ thuộc (dependency) thì khi một resource bị tainted và tạo mới lại thì resource phụ thuộc cũng sẽ bị xoá và tạo mới chung.

Các trường hợp sử dụng Terraform taint

  • Sử dụng taint để rolling deploy Auto Scaling Group của AWS cho Web Service chẳng hạn, vì Terraform không có hỗ trợ cơ chế rolling change cho ASG.
  • Rebuild lại một số resource mà không cần phải destroy toàn bộ các resource trong thư mục cấu hình.

Cú pháp:

Trong đó, phần address sẽ là địa chỉ định danh của resource trong file terraform.tfstate , có thể là ví dụ như dưới :

  • aws_instance.foo
  • aws_instance.bar[1]
  • aws_instance.baz[\”key\”]
  • module.foo.module.bar.aws_instance.qux

Lab thực hành Terraform taint

Giả sử mình tạo resource AWS VPC, PublicSubnet, Internet Gateway, RouteTable thuộc VPC đó.

Giờ chúng ta sẽ taint một Terraform resource đã được tạo.

Lúc này nếu bạn coi file terraform.tfstate sẽ thấy cấu hình của resource aws_subnet.public index 0 có trạng thái là tainted.

Khi bạn chạy terraform plan sau khi taint sẽ thấy resource aws_subnet.public được yêu cầu xoá (destroy) và khởi tạo lại mới (create). Tương ứng với resource khác phụ thuộc module.vpc.aws_route_table_association.public sẽ bị liên đới do phụ thuộc.

Đơn giản dễ hiểu phải không nào .

Nguồn: https://cuongquach.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here