操作場景
當您需要通過腳本簡化彈性云主機配置、通過腳本初始化系統、在創建彈性云主機時上傳已有腳本,或者完成其他需要使用腳本的功能時,可以考慮使用實例自定義數據注入功能來配置彈性云主機。
使用限制
Windows
- 用于創建彈性云主機的鏡像必須安裝了Cloud-init組件。
- 實例自定義數據大小限制:小于等于16KB。
- 如果通過文本方式上傳實例自定義數據,數據只能包含ASCII碼字符;如果通過文件方式上傳實例自定義數據,只能上傳text/*格式的文件,且文件大小小于等于16KB。
- 必須使用公共鏡像、繼承于公共鏡像的私有鏡像,或自行安裝了Cloud-init組件的私有鏡像。
- 實例自定義腳本必須滿足相應彈性云主機自定義腳本類型的格式要求。
Linux
- 用于創建彈性云主機的鏡像必須安裝了Cloudbase-init 組件。
- 實例自定義數據大小限制:小于等于16KB。
- 如果通過文本方式上傳實例自定義數據,數據只能包含ASCII 碼字符;如果通過文件方式上傳實例自定義數據,可以包含任意字符,同時,要求文件大小小于等于16KB。
- 必須是公共鏡像,或繼承于公共鏡像的私有鏡像,或自行安裝了Cloudbase-init 組件的私有鏡像。
實例自定義數據使用方法
- 根據實際需要寫User-Data腳本,腳本格式必須符合相關規范。
- 在創建彈性云主機時,在“高級配置 > 用戶數據 > 立即配置 > 以文本形式”的文本框中粘貼實例自定義數據腳本內容,或選擇以文件形式上傳。
說明實例自定義數據注入支持兩種方式:
文本:將實例自定義數據腳本內容粘貼到文本框中。
文件:將實例自定義數據腳本內容保存至文本地文件后再上傳。
- 系統創建彈性云主機后,彈性云主機將自動執行Cloud-init 或 Cloudbase-init 組件,讀取實例自定義數據腳本。
關于Windows彈性云主機的實例自定義數據腳本
Windows彈性云主機的實例自定義數據腳本使用開源的 cloudbase-init 架構實現(詳情請參考),它利用彈性云主機的元數據為數據來源,實現對彈性云主機的自動化配置和初始化腳本執行。下面是關于Windows彈性云主機實例自定義數據腳本的詳細說明和使用示例:
- 腳本類型:“PowerShell腳本”
| - | PowerShell腳本 |
|---|---|
| 格式 | 在采用Base64編碼前,以“#ps1”開頭且作為首行,前面不能有空格。 |
| 限制 | 在采用Base64編碼前,腳本內容(包括首行)不能超過16KB。 |
注意:暫不支持以“rem cmd”開頭的格式。
- 查看注入Windows彈性云主機的自定義數據:
- 登錄彈性云主機。
- 執行以下命令,使用Administrator用戶權限查看實例自定義數據:
//169.254.169.254/openstack/latest/user_data
- 腳本使用示例:
該示例介紹如何以不同格式輸入Windows彈性云主機的腳本,并查看腳本的運行結果。
示例:PowerShell腳本
- 創建彈性云主機時,選擇"文本" 形式,并輸入以下實例自定義數據腳本:
#ps1 echo "Hello, Powershell Test" > C:\aaaa.txt - 創建成功后,連接并啟動彈性云主機,在C:\盤中查看腳本的運行結果:將創建一個名為 "aaaa" 的文本文檔。
- 要查看注入到Windows彈性云主機的實例自定義數據,可以在瀏覽器中訪問:
//169.254.169.254/openstack/latest/user_data
關于Linux云主機的實例自定義數據腳本
Linux彈性云主機的實例自定義數據腳本采用開源的Cloud-init架構實現(詳情請參考),使用云主機的元數據作為數據來源,用于自動化配置。下面是關于Linux彈性云主機實例自定義數據腳本的詳細說明和使用示例:
- 腳本的執行時間:在彈性云主機狀態變為"running" 之后,但在執行 /etc/init 文件之前。
- 腳本類型:實例自定義數據腳本支持兩種類型,即"User-Data Script" 和 "Cloud-Config Data"。
| - | User-Data Script | Cloud-Config Data |
|---|---|---|
| 描述 | 使用腳本作為自定義配置的手段,可以是shell 腳本或 Python 腳本。 | 使用Cloud-init 預定義的方式配置云主機的某些服務,例如 yum 源、SSH 密鑰等。 |
| 格式 | 首行必須以"#!" 開頭(例如 "#!/bin/bash" 或 "#!/usr/bin/env python"),前面不能有空格首次啟動時,以rc.local-like 級別執行,rc.local-like 意味著在啟動序列中較后面的位置。 | 首行必須以"#cloud-config" 開頭,前面不能有空格 |
| 限制 | 在采用Base64編碼前,腳本內容(包括首行)不能超過16KB。 | 在采用Base64編碼前,腳本內容(包括首行)不能超過16KB。 |
| 頻率 | 僅在首次啟動彈性云主機時執行一次。 | 配置的服務不同,執行頻率也會不同。 |
- 查看注入的實例自定義數據:
- 登錄彈性云主機。
- 以root 用戶權限執行以下命令來查看實例自定義數據:
curl //169.254.169.254/openstack/latest/user_data
- 腳本使用示例:
該示例介紹如何以不同格式輸入Linux彈性云主機的腳本,并查看腳本的運行結果。
示例一:腳本類型為User-Data Script
- 創建彈性云主機時,選擇"文本" 形式,并輸入以下實例自定義數據腳本:
#!/bin/bash
echo "Hello, the time is now $(date -R)" | tee /root/output.txt
- 創建成功后,連接并啟動彈性云主機,執行命令cat /root/output.txt 查看腳本的運行結果:
[root@XXXXXXXX ~]# cat /root/output.txt
Hello, the time is now Mon, 03 Jul 2023 14:49:08+0800
示例二:腳本類型為Cloud-Config Data
- 創建彈性云主機時,選擇"文本" 形式,并輸入以下實例自定義數據腳本:
#cloud-config bootcmd: - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts - 創建成功后,連接并啟動彈性云主機,執行命令cat /etc/hosts查看腳本的運行結果。


案例1
以下是通過實例自定義數據注入來重置Linux彈性云主機密碼的示例。
假設您要將root用戶的密碼重置為”******“,新密碼必須符合密碼復雜度要求,如下表1 密碼設置規則所示:
表1 密碼設置規則
| 參數 | 規則 | 樣例 |
|---|---|---|
| 密碼 | · 密碼長度范圍為8到26位。 · 密碼至少包含以下4種字符中的3種: 大寫字母 小寫字母 數字 Windows操作系統云主機特殊字符:包括“$”、“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“,”和“?” Linux操作系統云主機特殊字符:包括“!”、“@”、“%”、“-”、“”、“=”、“+”、“[”、“]”、“:”、“.”、“/”、“^”、“,”、“{”、“}”和“?” · 密碼不能包含用戶名或用戶名的逆序。 · Windows操作系統的云主機,不能包含用戶名中超過兩個連續字符的部分。 |
UTX8@81JCA.1d8sd |
請按照以下示例注入實例自定義數據(請嚴格遵守下面示例中的縮進標準):
#cloud-config
chpasswd:
list: |
root:******
expire: False
創建彈性云主機成功后,您可以使用重置的密碼登錄彈性云主機。為了確保密碼安全,建議您在第一次登錄彈性云主機后修改root用戶的密碼。
案例2
以下是通過實例自定義數據注入來為Linux彈性云主機更新系統軟件包并啟動httpd服務的示例。
請按照以下示例注入實例自定義數據:
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
注入成功后,您的彈性云主機將會更新系統軟件包,并啟動httpd服務。您可以通過訪問彈性云主機的公網IP地址來使用httpd服務。請確保您的操作系統支持yum包管理器,并且已經安裝了httpd服務。
案例3
以下是通過實例自定義數據注入來激活Linux彈性云主機的root用戶遠程登錄權限的示例。
實例自定義數據注入示例:
#cloud-config
disable_root: false
runcmd:
- sed -i 's/^PermitRootLogin.*$/PermitRootLogin without-password/' /etc/ssh/sshd_config
- sed -i '/^KexAlgorithms.*$/d' /etc/ssh/sshd_config
- service sshd restart
注入成功后,您將能夠使用SSH密鑰方式以root帳戶登錄彈性云主機。該示例中的自定義數據使用cloud-config格式,并通過runcmd字段執行了一系列命令,包括修改/etc/ssh/sshd_config文件中的配置,重啟sshd服務使更改生效。
說明激活root用戶遠程登錄權限可能存在安全風險,建議在完成必要的任務后再禁用root用戶的遠程登錄權限,以提高系統的安全性。