Khi làm việc với các phiên bản EC2, chúng ta thường cần sao chép một tệp cục bộ vào phiên bản. Điều này đặc biệt cần thiết nếu tệp phải có sẵn ngay trên phiên bản ngay khi được tạo. Ví dụ, một trong những yêu cầu của dự án Terraform của tôi là tệp cấu hình cho máy chủ ảo Apache phải có sẵn trên phiên bản EC2 ngay khi được tạo. Tệp này được sử dụng làm mẫu để tạo hai tệp cấu hình máy chủ ảo. Để thực hiện việc này, tôi đã sử dụng công cụ File Provisioner của Terraform để sao chép các tệp này.
Bạn nên biết rằng Terraform không khuyến nghị sử dụng trình cung cấp và khuyến nghị các kỹ thuật thay thế cho các trường hợp có sẵn trình cung cấp. Có nhiều lý do cho hạn chế này, được đề cập trên trang web Terraform.
Bước 1. Trước tiên, hãy tạo tệp mà chúng ta muốn sao chép sang hệ thống từ xa. Chúng ta đang tạo tệp đó bên trong thư mục chứa tất cả các tệp cấu hình của mình:
Ngoài ra, hãy thêm một số nội dung vào tệp này:
Bước 2. Tạo một tệp có tên ‘instance.tf’ hoặc bất kỳ tên nào bạn thích nhưng có phần mở rộng ‘.tf’:
Bây giờ hãy điền nội dung bên dưới vào tệp này:
Mã trên sẽ sao chép tệp 'dummy.txt' vào phiên bản EC2 có tên 'file1.txt'. Chúng tôi đã sử dụng một nhóm bảo mật hiện có ở đây, bạn có thể tạo một nhóm mới bằng Terraform và sử dụng nhóm đó ở đây. Hãy cùng xem mô tả về một số đối số được sử dụng ở đây:
Bước 3. Khởi tạo thư mục dự án bằng cách sử dụng:
Ngoài ra, hãy kiểm tra xem có lỗi cú pháp nào không bằng cách chạy lệnh:
Bước 4. Để thiết lập cơ sở hạ tầng này, hãy chạy lệnh 'terraform apply'. Bạn cũng có thể xem lại các thay đổi cần thực hiện bằng lệnh ‘terraform plan’:
Đầu ra mẫu:
Bước 5. Phiên bản của chúng ta hiện đang được tạo như hiển thị bên dưới:
Bây giờ hãy SSH vào phiên bản của bạn và kiểm tra xem tệp đã được sao chép thành công chưa:
Bạn nên biết rằng Terraform không khuyến nghị sử dụng trình cung cấp và khuyến nghị các kỹ thuật thay thế cho các trường hợp có sẵn trình cung cấp. Có nhiều lý do cho hạn chế này, được đề cập trên trang web Terraform.
Chúng ta sẽ đề cập đến những gì?
Trong hướng dẫn này, chúng ta sẽ xem cách sao chép tệp từ máy cục bộ đang chạy Terraform sang phiên bản Amazon EC2 (Ubuntu) mới tạo trên AWS. Trong phương pháp này, chúng ta sẽ sử dụng tiện ích File do Terraform cung cấp. Chúng tôi trình bày cách sử dụng tiện ích này bằng cách chỉ cần sao chép tệp vào phiên bản EC2.Provisioner được sử dụng để làm gì?
Provisioner thường được sử dụng để thực thi các tập lệnh tạo, hủy nhiều tài nguyên khác nhau và chuẩn bị máy sẵn sàng sử dụng trong môi trường sản xuất hoặc phát triển. Các hoạt động cung cấp bao gồm những thứ như bên dưới:- Nâng cấp hệ điều hành.
- Tạo tài khoản, cấu hình dịch vụ và các tác vụ quản trị hệ thống khác.
- Cài đặt phần mềm.
- Chuyển tệp đến và quản lý tệp trên hệ thống.
- Cấu hình địa chỉ IP, cổng và các tác vụ khác của hệ thống.
Điều kiện tiên quyết
- Những điều cơ bản về Terraform.
- Terraform và AWS CLI được cài đặt trên hệ thống cục bộ.
- AWS CLI được cấu hình để truy cập vào tài khoản AWS của bạn.
Sử dụng Provisioner 'tệp' để sao chép tệp
'File Provisioner' được sử dụng để sao chép tệp và thư mục từ máy đang chạy Terraform sang cùng máy hoặc một số máy khác như phiên bản EC2. Provisioner có thể được áp dụng trên cả hệ thống cục bộ và từ xa. Mặc dù Terraform rất tuyệt vời trong các hoạt động triển khai, nhưng nó không giỏi trong việc cung cấp. Nhiều hệ điều hành và lệnh không được Terraform hỗ trợ một cách khéo léo. Đây là lý do tại sao Terraform gợi ý sử dụng Provisioners làm tùy chọn cuối cùng.Ứng dụng thực tế của Provisioner ‘file’
Trong phần này, chúng ta sẽ thấy một cách thực tế để sử dụng provisioner ‘file’. Chúng ta sẽ tạo một tài nguyên phiên bản EC2 bằng Terraform rồi sao chép một tệp từ hệ thống cục bộ vào phiên bản này. Hãy thực hiện ngay bây giờ:Bước 1. Trước tiên, hãy tạo tệp mà chúng ta muốn sao chép sang hệ thống từ xa. Chúng ta đang tạo tệp đó bên trong thư mục chứa tất cả các tệp cấu hình của mình:
Mã:
$ nano dummy.txt
Mã:
$ echo “Our dummy file” > dummy.txt
Mã:
$ sudo instance.tf
Mã:
provider "aws" {
region ="us-east-1"
}
resource "aws_instance" "webserver" {
ami ="ami-id-you-want-to-use"
instance_type = "t2.micro"
key_name = "Name-of-your- EC2-keypair"
vpc_security_group_ids = ["Use-an-existing-SG"]
associate_public_ip_address = true
provisioner "file" {
source = "dummy.txt"
destination = "/home/ubuntu/file1.txt"
kết nối {
loại = "ssh"
người dùng = "ubuntu"
khóa riêng = "${file("Đường dẫn đến EC2-keyPair-on-Local-system.pem")}"
máy chủ = "${self.public_ip}"
}
}
thẻ = {
Tên = "FileProvisionerDemo"
}
}
- source: Vị trí tuyệt đối của các tệp và thư mục hoặc vị trí tương đối tương ứng với thư mục dự án Terraform.
- destination: Đây là đường dẫn tuyệt đối trên hệ thống đích.
- connection block: Terraform học cách giao tiếp với máy chủ bằng cách sử dụng connection block. Các kết nối loại ‘ssh’ và ‘winrm’ đều được hỗ trợ bởi các trình cung cấp tệp.
- type: Trường này chỉ định loại kết nối có thể là ‘ssh’ hoặc ‘winrm’. Trong phòng thí nghiệm này, chúng tôi đã sử dụng kết nối SSH.
- user: Chỉ định người dùng sẽ được sử dụng để kết nối.
- private_key: Nội dung của khóa SSH để thiết lập kết nối.
- host: Chỉ định địa chỉ của tài nguyên mà chúng tôi muốn kết nối.
- self: Đối tượng biểu thị tài nguyên gốc của kết nối và chứa tất cả các thuộc tính của tài nguyên.
Bước 3. Khởi tạo thư mục dự án bằng cách sử dụng:
Mã:
$ terraform init
Ngoài ra, hãy kiểm tra xem có lỗi cú pháp nào không bằng cách chạy lệnh:
Mã:
$ terraform validate
Bước 4. Để thiết lập cơ sở hạ tầng này, hãy chạy lệnh 'terraform apply'. Bạn cũng có thể xem lại các thay đổi cần thực hiện bằng lệnh ‘terraform plan’:
Mã:
$ terraform apply
Mã:
Terraform đã sử dụng các nhà cung cấp đã chọn để tạo kế hoạch thực thi sau.
Các hành động tài nguyên được chỉ ra bằng các ký hiệu sau:
+ create
Terraform sẽ thực hiện các hành động sau:
# aws_instance.webserver sẽ được tạo
+ resource "aws_instance" "webserver"
Bây giờ hãy SSH vào phiên bản của bạn và kiểm tra xem tệp đã được sao chép thành công chưa: