# Dữ liệu tùy chỉnh

Dữ liệu do người dùng xác định (UserData) là một script cấu hình mà hệ thống sẽ tự động chạy khi một máy chủ được khởi động lần đầu hoặc mỗi khi khởi động lại. Script này có thể được truyền đến máy chủ metadata thông qua bảng điều khiển/API và được chương trình cloud-init bên trong máy chủ truy xuất.

Để xác định liệu một máy chủ có hỗ trợ dữ liệu do người dùng xác định hay không, cần phải xác nhận rằng cloud-init đã được cài đặt trong image. Đối với các image do VNPT Cloud chính thức cung cấp hoặc các image tùy chỉnh được tạo dựa trên image của VNPT Cloud, bạn có thể kiểm tra xem mảng Feature của image có chứa mục CloudInit hay không để xác định xem chương trình có được cài đặt trong hệ thống hay không. Khi điều kiện này được đáp ứng, một tùy chọn Dữ liệu tùy chỉnh sẽ được hiển thị trên trang tạo máy chủ.

## Cloud-Init

Cloud-init là một phần mềm mã nguồn mở được phát triển bởi Canonical, công ty mẹ của bản phân phối Linux Ubuntu. Nó có thể được cài đặt trên các bản phân phối Linux chính (như Ubuntu, CentOS và Debian) và chủ yếu được sử dụng để giúp người dùng khởi tạo Host mới được tạo trên các nền tảng điện toán đám mây.

Userdata (Dữ liệu do người dùng xác định) là một cơ chế mặc định do Cloud-Init cung cấp, có thể áp dụng phổ biến trên các môi trường đa đám mây.

## Truyền dữ liệu tùy chỉnh khi tạo máy chủ

Dữ liệu tùy chỉnh có thể được truyền trong quá trình tạo Host thông qua bảng điều khiển hoặc API. Các loại script được hỗ trợ bao gồm: User-Data, Cloud Config, Include, script nén bằng Gzip, Upstart Job, v.v.

Lưu ý: Nội dung script không được vượt quá 16 KB.

### Script User-data

Dòng đầu tiên phải bắt đầu bằng #!, ví dụ: #!/bin/bash hoặc #!/bin/python.

Script chỉ thực thi một lần khi máy ảo khởi động lần đầu tiên.

**Ví dụ 1:** Xuất ra "Hello World" sau khi tạo máy chủ hoàn tất

```bash
#!/bin/sh
echo “Hello World!”
```

Sau khi tạo, bạn sẽ thấy "Hello World!" ở cuối tệp log "/var/log/cloud-init-output.log".

**Ví dụ 2:** Khởi động dịch vụ Httpd khi máy chủ khởi động

```bash
#!/bin/bash

service httpd start
chkconfig httpd on
```

### Script Cloud Config

Dòng đầu tiên được cố định là #cloud-config

Điều này cho biết bạn đang cung cấp dữ liệu cấu hình định dạng YAML được Cloud-Init định nghĩa nguyên bản. Định dạng này bao gồm hầu hết tất cả các mô tả trừu tượng liên quan đến cấu hình hệ điều hành.

Vui lòng tham khảo [ví dụ chính thức](https://cloudinit.readthedocs.io/en/latest/topics/modules.html) để biết chi tiết.

**Ví dụ 1:** Thay đổi điểm gắn đĩa dữ liệu thành /opt/data

```yaml
#cloud-config

mounts:
  - [ /dev/vdb, /opt/data ]
```

**Ví dụ 2:** Sau khi máy chủ được tạo, tự động thực thi yum update hoặc apt-get upgrade một lần

```yaml
#cloud-config

package_upgrade: true
```

**Ví dụ 3:** Cấu hình khóa khi tạo máy chủ

```yaml
#cloud-config

ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAGEA3FSyQwBI6Z+nCSjUUk8EEAnnkhXlukKoUPND/RRClWz2s5TCzIkd3Ou5+Cyz71X0XmazM3l5WgeErvtIwQMyT1KjNoMhoJMrJnWqQPOt5Q8zWd9qG7PBl9+eiH5qV7NZ mykey@host

```

### Các loại script khác

Host cũng hỗ trợ nhập các loại script như Include, script nén bằng Gzip, Upstart Job và các loại script khác.

Để biết chi tiết, vui lòng tham khảo [Tài liệu chính thức của Cloud-init](https://cloudinit.readthedocs.io/en/latest/topics/format.html)

## Truy xuất dữ liệu tùy chỉnh trong máy chủ

Bằng cách sau, dữ liệu do người dùng xác định có thể được lấy bên trong máy chủ.

```bash
curl http://100.80.80.80/user-data
```