Wednesday, January 22, 2025

[Terraform] Lesson 2 – Terraform Provisioners

-

1. Terraform Provisioners là gì?

Terraform Provisioners là một tính năng của Terraform cho phép người dùng thực hiện các hành động thêm vào các tài nguyên hạ tầng sau khi chúng được tạo ra hoặc cập nhật. Các hành động này có thể là cài đặt phần mềm, khởi động dịch vụ, chạy các script, truyền dữ liệu, v.v.

Terraform Provisioners có thể được sử dụng để giải quyết các vấn đề như cài đặt phần mềm hoặc tinh chỉnh các tài nguyên hạ tầng. Tuy nhiên, người dùng nên sử dụng tính năng này cẩn thận và tránh sử dụng nó để quản lý các tài nguyên có tính chất cố định.

Có hai loại Terraform Provisioners: local-exec và remote-exec. Local-exec cho phép thực hiện các lệnh trên máy chủ local của người dùng và remote-exec cho phép thực hiện các lệnh trên máy chủ từ xa.

  • Local-exec được sử dụng để thực hiện các lệnh trên máy chủ cục bộ mà Terraform đang chạy. Ví dụ, nếu bạn muốn thực hiện một lệnh trên máy chủ được tạo ra bởi Terraform để cấu hình nó, bạn có thể sử dụng local-exec.
  • Remote-exec được sử dụng để thực thi các lệnh trên máy chủ từ xa thông qua SSH hoặc WinRM. Ví dụ, nếu bạn muốn thực hiện một lệnh trên máy chủ được tạo ra bởi Terraform thông qua SSH hoặc WinRM, bạn có thể sử dụng remote-exec.

Về cơ bản, bạn nên sử dụng local-exec nếu bạn muốn thực hiện các lệnh trên máy chủ mà Terraform đang chạy, ví dụ như cài đặt các phần mềm hoặc cấu hình hệ thống. Tuy nhiên, nếu bạn cần thực thi các lệnh từ xa trên máy chủ được tạo ra bởi Terraform, bạn nên sử dụng remote-exec.

Lưu ý rằng sử dụng remote-exec có thể đòi hỏi một số cấu hình bổ sung, chẳng hạn như cấu hình SSH hoặc WinRM để cho phép kết nối từ Terraform đến máy chủ từ xa. Bên cạnh đó, việc sử dụng remote-exec có thể làm tăng thời gian triển khai và có thể làm cho hệ thống của bạn trở nên chậm hơn.

2. Ví dụ minh hoạ.

Một ví dụ về sử dụng Terraform Provisioners là khi ta cần cài đặt và cấu hình phần mềm trên một máy chủ mới. Sau khi tạo máy chủ đó, Terraform sẽ sử dụng một provisioner để thực hiện việc cài đặt và cấu hình các phần mềm đó.

Ví dụ, nếu bạn muốn cài đặt và cấu hình Apache trên một máy chủ mới được tạo bởi Terraform, bạn có thể sử dụng provisioner “remote-exec”. Sau đó, bạn có thể sử dụng lệnh “sudo apt-get update && sudo apt-get install -y apache2” để cài đặt Apache và sau đó thực hiện cấu hình.

– Dưới đây là một ví dụ cụ thể về remote-exec:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y apache2",
      "sudo systemctl start apache2"
    ]
  }

  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = file("~/.ssh/id_rsa")
    host        = self.public_ip
  }

  tags = {
    Name = "example-instance"
  }
}

Trong ví dụ này, Terraform sẽ tạo một máy chủ EC2 trên AWS và sử dụng provisioner “remote-exec” để cài đặt và cấu hình Apache trên máy chủ này. Sau khi máy chủ được tạo thành công, provisioner sẽ được kích hoạt và thực hiện các lệnh được chỉ định để cài đặt và cấu hình Apache trên máy chủ đó.

– Ví dụ tiếp theo là sử dụng provisioner “local-exec” để thực thi một lệnh trên máy chủ Terraform đang chạy.

Ví dụ tiếp theo là sử dụng provisioner “local-exec” để thực thi một lệnh trên máy chủ Terraform đang chạy.

Giả sử bạn muốn tạo một file có nội dung là chuỗi “Hello Terraform” trên máy chủ Terraform đang chạy. Bạn có thể sử dụng provisioner “local-exec” để thực thi lệnh tạo file đó. Dưới đây là một ví dụ:

resource "null_resource" "example" {
  provisioner "local-exec" {
    command = "echo 'Hello Terraform' > /tmp/example.txt"
  }
}

Trong ví dụ này, chúng ta sử dụng một resource của Terraform là “null_resource”, nó cho phép ta chạy các provisioners mà không cần tạo bất kỳ tài nguyên nào. Sau đó, chúng ta sử dụng provisioner “local-exec” để thực thi lệnh “echo ‘Hello Terraform’ > /tmp/example.txt”. Lệnh này sẽ tạo ra một file có tên là “example.txt” tại thư mục “/tmp” trên máy chủ Terraform đang chạy và ghi nội dung là “Hello Terraform” vào file đó.

Khi chạy Terraform, provisioner “local-exec” sẽ được kích hoạt và thực thi lệnh tạo file. Kết quả là một file có tên “example.txt” sẽ được tạo ra tại thư mục “/tmp” trên máy chủ Terraform đang chạy với nội dung là “Hello Terraform”.

3. Lưu ý khi sử dụng Terraform Provisioners.

Có một số lưu ý về Terraform Provisioners mà bạn cần lưu ý khi sử dụng chúng:

  • Provisioners không nên được sử dụng để quản lý trạng thái hoặc thực hiện những thao tác quan trọng trên các tài nguyên đang được quản lý bởi Terraform. Terraform Provisioners được thiết kế để giúp quản lý một số công việc phức tạp hơn, chẳng hạn như cài đặt và cấu hình phần mềm, không nên được sử dụng để thay thế các tài nguyên do Terraform quản lý.
  • Terraform Provisioners chỉ nên được sử dụng để thực hiện những công việc tạm thời và chỉ khi không có cách nào khác để thực hiện công việc đó bằng cách sử dụng các tài nguyên do Terraform quản lý. Khi có thể, bạn nên sử dụng các module hoặc script bên ngoài để thực hiện các công việc đó.
  • Terraform Provisioners có thể ảnh hưởng đến hiệu suất của Terraform và tăng thời gian triển khai. Vì vậy, bạn nên cân nhắc kỹ lưỡng khi sử dụng chúng và chỉ sử dụng những provisioners cần thiết.
  • Nếu bạn sử dụng Terraform Provisioners để thực hiện các thao tác trên các máy chủ đang chạy, hãy chắc chắn rằng các máy chủ đó đang chạy và đã được thiết lập đúng cách trước khi triển khai Terraform. Nếu không, provisioners có thể không hoạt động đúng cách hoặc thất bại.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories