執行個體自訂資料為您提供執行個體自訂啟動行為及傳入資料的功能。您可以在建立執行個體(RunInstances)時指定執行個體自訂資料,為您的執行個體自訂啟動行為。例如,自動擷取軟體資源套件、開啟服務、列印日誌、安裝依賴包、初始化Web服務環境等其他配置執行個體環境的操作。執行個體自訂資料主要通過不同類型的自訂指令碼實現。執行個體自訂資料也可以作為普通資料,將某些資訊傳入執行個體中,您可以在執行個體中引用這些資料。

使用說明

配置執行個體自訂資料時,您需要注意:

  • 只支援Virtual Private Cloud類型執行個體。

  • 執行個體如果採用了 已停售的執行個體規格,必須是I/O最佳化執行個體。其他 執行個體規格類型系列 無I/O最佳化限制。

  • 執行個體自訂資料需要Base64編碼後傳入,且編碼前的自訂資料不能超過16 KB。

  • 執行個體必須使用系統鏡像或繼承於系統鏡像的自訂鏡像,且只支援下列作業系統:

    Windows執行個體 Linux執行個體
    Windows Server 2016 64位 Windows Server 2012 64位 Windows Server 2008 64位 CentOS Ubuntu SUSE Linux Enterprise OpenSUSE Debian Aliyun Linux

運行頻率

執行個體開始運行時(Running),系統首先以管理員或者root許可權運行執行個體自訂資料,其次運行初始化或 /etc/init資訊。

修改執行個體自訂資料後,是否要重新運行修改過的自訂資料取決於指令碼類型和模組類型。例如:

  • 如果您通過Shell指令碼配置自訂資料,如 User-Data 指令碼,我們不會運行修改後的自訂資料。

  • 如果自訂資料配置的是類似Byobu、Set Hostname和Set Passwords之類的模組,我們不會運行修改後的自訂資料。

  • 如果自訂資料配置的是類似bootcmd、update_etc_hosts和yum_add_repo之類的模組,我們會運行修改後的自訂資料。

    更多詳情,請參見cloud-init文檔 Modules,並關注模組頻率(Module Frequency)。

設定自訂資料

假設您的自訂資料開發環境為Windows電腦,使用 Upstart Job 指令碼為您的CentOS執行個體設定自訂資料。

  1. 使用編輯器建立文字檔,例如Notepad++。
  2. 在建立的文字檔中編輯自訂資料的相關指令碼。
    说明 第一行必須滿足執行個體自訂指令碼的格式要求,比如 #!/bin/sh#cloud-config#upstart-job[bat][powershell]。更多詳情,請參見 Linux執行個體自訂資料Windows執行個體自訂資料
  3. 調試指令檔以確認內容正確。
  4. (可選)如果您製作的是 Gzip 壓縮指令碼 檔案,您需要壓縮指令檔為 .gz 格式。
  5. (可選)如果您製作的是 Include檔案 檔案或 Gzip 壓縮指令碼 檔案,上傳指令檔到可用的儲存服務中並擷取連結,並設定連結有效期間為您的期望值。

    我們推薦您使用阿里雲Object Storage Service製作連結,更多詳情,請參見 OSS 上傳檔案設定生命週期

  6. 登入 ECS管理主控台
  7. 參閱 步驟 2:建立ECS執行個體 建立一台Linux執行個體。
    说明 這台執行個體的網路類型必須是 VPC,並需要選擇符合規範的 鏡像已停售的執行個體規格 必須選擇I/O最佳化執行個體,其他 執行個體規格類型系列 無 I/O 最佳化限制。

    建立執行個體時,選擇 使用文本形式 輸入 自訂資料。若您的自訂資料已經過Base64加密,勾選 輸入已採用 base64 編碼



  8. 等待建立執行個體過程。
  9. 執行個體啟動後,參考 串連執行個體概述 遠端連線到目標執行個體。
  10. 根據您指定的自訂資料查看運行結果,如果出現故障您需要注意查看相關記錄檔。以下為在CentOS執行個體上使用Upstart Job指令碼配置自訂資料的輸出樣本:


    從上面的結果中您可以看到,在執行個體的 /etc/init 檔案夾中產生了一個 part-001.conf 啟動任務檔案。

相關API:RunInstances + 參數 UserData

查看自訂資料

您可以通過 100.100.100.200 伺服器查看執行個體自訂資料。

  1. 遠端連線執行個體。
  2. 在執行個體內部運行:
    • curl http://100.100.100.200/latest/user-data 查看Linux執行個體自訂資料。
    • Invoke-RestMethod http://100.100.100.200/latest/user-data/ 查看Windows執行個體自訂資料。

相關API:DescribeUserdata

修改自訂資料

修改自訂資料之前,您必須停止執行個體。對於隨用隨付 VPC 類型執行個體,若您修改自訂資料後需要立即啟動執行個體時,建議您關閉停機不收費選項。

  1. 登入 ECS管理主控台
  2. 在左側導覽列中,單擊 執行個體
  3. 選擇地區。
  4. 選中需要修改自訂資料的執行個體,並在 操作 列中,單擊 設定使用者資料
  5. 在彈窗中填入資訊後單擊 確定


说明 修改自訂資料後,是否要重新運行修改過的自訂資料取決於指令碼類型和模組類型。

相關API:ModifyInstanceAttribute + 參數 UserData

Linux執行個體自訂資料

Linux執行個體自訂資料可以由幾類Linux執行個體自訂指令碼執行,包括 User-Data 指令碼Cloud ConfigInclude 檔案Gzip 壓縮指令碼Upstart Job 等類型指令碼。指令碼採用開源的cloud-init架構,以 執行個體元資料 為資料來源,自動化配置Linux執行個體屬性。更多詳情,請參見cloud-init Formats

User-Data 指令碼

User-Data可以是一個Shell指令碼。僅在初次開機執行個體時執行一次。首行固定為 #!,例如 #!/bin/sh。User-Data指令碼在Base64編碼前指令碼內容不能超過 16 KB。以下為User-Data指令碼樣本:


#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/output10.txt
service httpd start
chkconfig httpd on

執行個體建立完成後,啟動並串連執行個體,執行命令 cat [file],查看指令碼的執行結果。


[root@XXXXX2z ~]# cat output.txt
Hello World. The time is now Mon, 24 Jul 2017 13:03:19 +0800!
Cloud Config

Cloud Config是實現執行個體自訂資料最簡單的方式,其互動方式非常友善。您可以使用Cloud Config預先配置執行個體的部分服務,如更新yum源、匯入SSH密鑰、安裝依賴包等。Cloud Config首行固定為 #cloud-config,且頁首不能有空格,需要以YAML檔案的方式呈現。根據您配置的服務不同,執行個體自訂資料的運行頻率也會不同。

Cloud Config 指令碼在Base64編碼前指令碼內容不能超過16 KB。以下為Cloud Config指令碼樣本:


#cloud-config
apt:
primary:
- arches: [default]
uri: http://us.archive.ubuntu.com/ubuntu/
bootcmd:
- echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts

執行個體建立完成後,啟動並串連執行個體,查看運行結果。



Include檔案

Include檔案的內容由指令碼連結組成,一行一個連結。執行個體啟動時,cloud-init讀取Include檔案中指令碼連結裡的內容,一旦在某一行讀取指令碼內容時出錯,執行個體停止讀取自訂資料。Include檔案首行固定為 #include且頁首不能有空格。執行個體自訂資料的運行頻率跟隨Include檔案中配置的指令碼類型。

Include檔案中指令碼連結包含的內容在Base64編碼前指令碼內容不能超過16 KB。以下為Include檔案樣本:


#include
http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/UserData/myscript.sh

執行個體建立完成後,啟動並串連執行個體,查看執行結果。

Gzip 壓縮指令碼

User-Data 指令碼Cloud ConfigInclude檔案 均要求指令碼內容Base64編碼前不能超過16 KB。若您的指令碼內容有超出16 KB的趨勢,可以採用Gzip壓縮指令碼。將指令檔壓縮後製作成指令碼連結,以Include檔案的形式呈現。Gzip壓縮指令碼首行固定為 #include,且頁首不能有空格。執行個體自訂資料的運行頻率跟隨指令碼類型。以下為Gzip壓縮指令碼樣本:


#include
http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/config.gz
Upstart Job

使用Upstart Job類型指令碼時,需要您的執行個體安裝upstart作為init system,目前採用upstart的有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。Upstart Job指令碼將您的執行個體自訂資料放到 /etc/init 目錄下。Upstart Job指令碼首行固定為 #upstart-job,且頁首不能有空格。每次啟動執行個體均會執行您的執行個體自訂資料。以下為Upstart Job指令碼樣本:


#upstart-job
description "upstart test"
start on runlevel [2345]
stop on runlevel [!2345]
exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt

Windows執行個體自訂資料

Windows執行個體自訂資料由ECS自主研發,為Windows執行個體提供運行初始化指令碼的能力。在Base64編碼前,自訂資料內容必須小於16 KB,只能輸入半形字元,不能有多餘字元。Windows執行個體自訂資料支援Bat批次程式和PowerShell指令碼。

Bat批次程式

首行固定為 [bat],且頁首不能有空格。例如:


[bat]
echo "bat test" > c:\1.txt

執行個體建立完成後,串連執行個體查看執行結果,在 C:\ 盤添加了 1.txt 文字檔。



PowerShell

首行固定為 [powershell],且頁首不能有空格。例如:


[powershell]
write-output "Powershell Test" | Out-File C:\2.txt

參考連結

更多關於Linux執行個體自訂資料的資訊,請參見 cloud-init Formats

更多關於自訂資料運行頻率的資訊,請參見 cloud-init Modules