Cloud-init là một công cụ tiêu chuẩn công nghiệp tự động khởi tạo máy chủ và có hỗ trợ phân phối chéo, đa nền tảng. Trong khi nền tảng đám mây cung cấp cloud-init siêu dữ liệu để triển khai máy chủ, dữ liệu người dùng tùy chỉnh cho phép bạn lập trình hầu hết mọi khía cạnh của quá trình khởi tạo máy chủ.
Dịch vụ Metadata của Akamai cho phép bạn tận dụng cloud-init để triển khai Compute Instances. Sử dụng tập lệnh cloud-config, bạn có thể xác định mọi thứ bạn cần, từ bảo mật và thiết lập người dùng đến cài đặt phần mềm và thực thi tập lệnh shell.
Trong hướng dẫn này, hãy tìm hiểu cách sử dụng tập lệnh cloud-config để ghi tệp vào máy chủ của bạn trong quá trình khởi tạo. Tự động hóa quá trình tạo và chỉnh sửa tệp để cấu hình phần mềm và hệ thống của bạn chính xác như bạn cần ngay từ đầu.
Trước khi bắt đầu, hãy xem lại hướng dẫn của chúng tôi về cách sử dụng Cloud-Init để tự động cấu hình và bảo mật máy chủ của bạn . Ở đó, bạn có thể xem cách tạo tệp cloud-config, tệp mà bạn cần làm theo cùng với hướng dẫn này. Khi bạn đã sẵn sàng triển khai cloud-config, hướng dẫn được liên kết ở trên sẽ nêu chi tiết cách thực hiện.
Ghi vào một tập tin
Cloud-init bao gồm một mô-đun để ghi tệp, sử dụng write_files
tùy chọn trong tập lệnh cloud-config của bạn. Mô-đun này cung cấp thiết lập đơn giản nhất khi bạn muốn tạo tệp mới hoặc ghi đè tệp hiện có trong quá trình khởi tạo.
Theo mặc định, write_files
tùy chọn này sẽ lấy một đường dẫn tệp, tạo tệp mới hoặc ghi đè tệp hiện có tại đích đã cho. Cloud-init cũng tạo bất kỳ thư mục cha nào chưa tồn tại.
Sau đây là ví dụ tạo tệp HTML:
write_files:
- path: /var/www/html/example.com/index.html
content: |
<html>
<body>
<h1>Hello, World!</h1>
<p>Welcome to the example web page!</p>
</body>
</html>
owner: 'root:root'
permissions: '0644'
Ví dụ này định nghĩa một tập hợp các nội dung tệp cũng như các chi tiết như quyền sở hữu và quyền. Sau đây là phân tích sâu hơn về những gì write_files
cấu hình ví dụ này thực hiện:
path
trỏ đến vị trí cho tệp đã tạo. Bất kỳ tệp nào hiện có tại vị trí đó đều được ghi đè và các thư mục cha được tạo khi cần thiết. Đây là tùy chọn bắt buộc duy nhất chowrite_files
.content
định nghĩa nội dung cho tệp. Đây có thể là một dòng hoặc như trên, bạn có thể sử dụng định dạng YAML phù hợp cho nội dung tệp nhiều dòng. Việc bỏcontent
tùy chọn này sẽ tạo ra một tệp trống.owner
tùy chọn cho phép bạn xác định người dùng và/hoặc nhóm để chỉ định quyền sở hữu tệp. Mặc định làroot:root
. Để chỉ định người dùng và/hoặc nhóm được tạo trong tập lệnh cloud-config, bạn nên sử dụng tùydefer: true
chọn, như được mô tả thêm bên dưới, để đảm bảo người dùng/nhóm được tạo trước tệp.permissions
tùy chọn chỉ định quyền của tệp. Sử dụng định dạng0###
where###
là ký hiệu bát phân như được sử dụng vớichmod
. Bạn có thể tìm hiểu thêm về quyền và ký hiệu bát phân trong hướng dẫn của chúng tôi về cách Sửa đổi Quyền của Tệp bằng chmod .Tại đây,permissions
cấp cho người dùng chủ sở hữu quyền đọc-ghi (6--
), quyền đọc cho nhóm người dùng (-4-
) và quyền đọc cho tất cả người dùng khác (--4
).
Một defer
tùy chọn bổ sung có thể hữu ích khi bạn muốn trì hoãn việc tạo tệp cho đến giai đoạn cuối cùng của quá trình khởi tạo cloud-init. Theo cách đó, bạn có thể đảm bảo rằng tệp chỉ được tạo sau khi tất cả người dùng đã tạo và cài đặt phần mềm.
Đây là một ví dụ khác cho thấy tính năng đó tắt bằng cách tạo cấu hình Apache Web Server . Sử dụng defer
tùy chọn này đảm bảo rằng Apache được cài đặt và người dùng Apache (thường là www-data
trên Debian và Ubuntu) được tạo trước tệp.
write_files:
- path: /etc/apache2/sites-available/example.com.conf
content: |
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html/
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>
owner: 'www-data:www-data'
permissions: '0640'
defer: true
Việc bỏ qua defer: true
tùy chọn trên sẽ dẫn đến lỗi vì www-data
người dùng chưa tồn tại tại thời điểm cloud-init cố gắng tạo tệp.
Sửa đổi một tập tin
Khi bạn cần sửa đổi một tệp, cloud-init có một số cách để sử dụng:
- Tùy chọn này
write_files
có thể thực hiện các sửa đổi tệp cơ bản bằngappend: true
tùy chọn của nó. Ví dụ, ví dụ bên dưới sửa đổi cấu hình dịch vụ SSH bằng cách thêmPermitRootLogin no
quy tắc:
write_files:
- path: /etc/ssh/sshd_config
content: PermitRootLogin no
append: true
- Nếu không,
write_files
chỉ có thể cung cấp các sửa đổi bằng cách tạo lại các tệp. Trong trường hợp đó, bạn sẽ cần sao chép toàn bộ cấu hình với các sửa đổi mong muốn vào tập lệnh cloud-config của mình. - Giải pháp dễ tiếp cận và dễ bảo trì hơn là sử dụng
runcmd
tùy chọn của cloud-init để chạysed
lệnh trên máy chủ.sed
cung cấp khả năng chỉnh sửa văn bản thông qua lệnh shell vàruncmd
cho phép bạn chạy lệnh shell từ tập lệnh cloud-init. Tìm hiểu thêm về cách sử dụngruncmd
trong hướng dẫn của chúng tôi Sử dụng Cloud-Init để chạy lệnh và tập lệnh Bash khi khởi động lần đầu và tìm hiểu thêmsed
trong hướng dẫn của chúng tôi Thao tác văn bản từ dòng lệnh bằng sed .Tùy chọn nàyruncmd
lấy danh sách các lệnh shell. Trong ví dụ sau, hai lệnh shell chạy để thay đổi cấu hình dịch vụ SSH, tương tự như ví dụ trên. Tuy nhiên,sed
cho phép bạn thay thế các thiết lập hiện có, thay vì chỉ thêm một thiết lập mới.
runcmd:
- sed -i -e 's/PermitRootLogin\s*yes/PermitRootLogin no/g' /etc/ssh/sshd_config
- sed -i -e 's/#*\s*PermitRootLogin/PermitRootLogin/g' /etc/ssh/sshd_config
- Mỗi lệnh trong
runcmd
danh sách trên thực hiện chỉnh sửa tệp/etc/ssh/sshd_config
. Cùng nhau, hai lệnh này chuyển đổi hiệu quảPermitRootLogin
sangno
và đảm bảo rằng cài đặt không được chú thích.sed
Lệnh đầu tiên thay thếPermitRootLogin[any number of spaces]yes
bằngPermitRootLogin no
, trong khi lệnh thứ hai xóa dấu chú thích (#
) khỏi đầu bất kỳ lần xuất hiện nào củaPermitRootLogin
.
Xác minh nội dung tập tin
Khi phiên bản của bạn đã hoạt động, hãy sử dụng cat
lệnh để xác minh rằng các tệp được ghi như mong đợi. Sử dụng cat
vị trí của tệp, bạn sẽ thấy nội dung của tệp như được chỉ định trong cloud-config.
cat /var/www/html/example.com/index.html
<html>
<body>
<h1>Hello, World!</h1>
<p>Welcome to the example web page!</p>
</body>
</html>
Bạn có thể làm tương tự đối với các sửa đổi tệp. Tuy nhiên, bạn có thể thực hiện kiểm tra đó hiệu quả hơn bằng cách giới hạn đầu ra thành các thuật ngữ khớp. Ở đây, nội sshd_config
dung được lọc chỉ thành các dòng mà cloud-init đã thực hiện thay đổi (những dòng có chứa PermitRootLogin
).
cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin no
Để xác minh quyền của tệp, hãy sử dụng stat
lệnh. Trong trường hợp example.com.conf
tệp ở trên, hãy tìm tệp do người sở hữu www-data
và quyền 0640
sở hữu.
sudo stat /etc/apache2/sites-available/example.com.conf
File: /etc/apache2/sites-available/example.com.conf
Size: 284 Blocks: 8 IO Block: 4096 regular file
Device: 800h/2048d Inode: 261541 Links: 1
Access: (0640/-rw-r-----) Uid: ( 33/www-data) Gid: ( 33/www-data)
...
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
- Tài liệu Cloud-init – Tham chiếu mô-đun: Ghi tệp
- Tài liệu Cloud-init – Ví dụ: Viết ra các tập tin tùy ý
Nguồn: https://www.linode.com/docs/guides/write-files-with-cloud-init/