使用自定義數(shù)據(jù)進(jìn)行實(shí)例初始化
如您希望在創(chuàng)建ECS實(shí)例時(shí)完成系統(tǒng)配置或運(yùn)行特定業(yè)務(wù)腳本,例如預(yù)裝Nginx、Docker等軟件或修改主機(jī)名等,可以通過(guò)設(shè)置自定義數(shù)據(jù)參數(shù)來(lái)實(shí)現(xiàn)。
自定義數(shù)據(jù)介紹
實(shí)例自定義數(shù)據(jù)是指用戶上傳給實(shí)例的腳本、指令或配置文件等數(shù)據(jù),可用來(lái)完成實(shí)例初始化或其他配置,例如,在實(shí)例首次啟動(dòng)時(shí),自動(dòng)運(yùn)行服務(wù)啟動(dòng)腳本、安裝軟件、打印日志等。自定義數(shù)據(jù)支持在實(shí)例首次啟動(dòng)時(shí)自動(dòng)運(yùn)行,部分自定義數(shù)據(jù)格式還支持在Linux實(shí)例每次啟動(dòng)時(shí)都運(yùn)行。詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)自定義數(shù)據(jù)格式及運(yùn)行頻率。
使用限制
實(shí)例的網(wǎng)絡(luò)類型必須為專有網(wǎng)絡(luò)VPC。
實(shí)例必須使用公共鏡像或基于公共鏡像創(chuàng)建的自定義鏡像,且操作系統(tǒng)需為以下類型之一:
Alibaba Cloud Linux、CentOS、CentOS Stream、Ubuntu、SUSE Linux Enterprise Server、Red Hat Enterprise Linux、OpenSUSE、Debian、AlmaLinux、Rocky Linux、Fedora
Windows Server 2008 R2及更高版本
已停售的實(shí)例規(guī)格中,僅I/O優(yōu)化實(shí)例支持實(shí)例自定義數(shù)據(jù)功能,非I/O優(yōu)化實(shí)例不支持該功能。更多信息,請(qǐng)參見(jiàn)已停售的實(shí)例規(guī)格。
創(chuàng)建實(shí)例時(shí)使用自定義數(shù)據(jù)
1. 準(zhǔn)備自定義數(shù)據(jù)
初始化工具在實(shí)例初始化過(guò)程中,通過(guò)讀取用戶提供的自定義數(shù)據(jù)以完成自定義配置。Linux實(shí)例和Windows實(shí)例使用不同的初始化工具。此外,同一初始化工具支持多種自定義數(shù)據(jù)格式。有關(guān)數(shù)據(jù)格式及其運(yùn)行頻率的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)以下內(nèi)容。
自定義數(shù)據(jù)格式及運(yùn)行頻率
Linux實(shí)例
Linux實(shí)例使用cloud-init
組件實(shí)現(xiàn)實(shí)例初始化動(dòng)作。根據(jù)實(shí)例是否首次啟動(dòng),執(zhí)行不同的配置內(nèi)容(一些使用較早版本鏡像的實(shí)例也采用Upstart Job
進(jìn)行初始化工作)。
cloud-init
工具支持的自定義數(shù)據(jù)類型包括可直接配置實(shí)例的User-Data
和Cloud Config
格式,同時(shí)還支持其他用戶數(shù)據(jù)格式,最常見(jiàn)的為include
文件和Gzip
壓縮內(nèi)容。除cloud-init
初始化工具外,一些使用較早版本鏡像的實(shí)例也采用Upstart Job
進(jìn)行初始化工作。
自定義數(shù)據(jù)格式的詳細(xì)說(shuō)明,可參見(jiàn)cloud-init文檔User-Data Formats。
如果您的User-Data腳本、Cloud Config數(shù)據(jù)或Include文件內(nèi)容的大小超過(guò)32 KB,數(shù)據(jù)類型建議選擇Gzip壓縮內(nèi)容。
如果任務(wù)需要在實(shí)例每次啟動(dòng)時(shí)都執(zhí)行,數(shù)據(jù)類型建議選擇Cloud Config數(shù)據(jù)或Upstart Job。
User-Data腳本
簡(jiǎn)介
User-Data腳本傳入Linux實(shí)例后直接作為Shell腳本執(zhí)行,且僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次。
運(yùn)行頻率
啟動(dòng)實(shí)例:僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次,重啟實(shí)例不會(huì)再自動(dòng)運(yùn)行。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行均以
#!
開(kāi)頭。User-Data腳本示例
運(yùn)行自定義腳本
#!/bin/sh echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
示例User-Data腳本的效果是在實(shí)例首次啟動(dòng)時(shí),向userdata_test.txt文件寫入系統(tǒng)時(shí)間。
自定義實(shí)例軟件源、DNS解析配置及時(shí)間同步服務(wù)
在創(chuàng)建實(shí)例時(shí),您可以通過(guò)User-Data腳本自定義實(shí)例的軟件源、DNS解析配置及時(shí)間同步服務(wù)。以下示例以CentOS Stream 9為例,實(shí)際使用中請(qǐng)根據(jù)您的操作系統(tǒng)進(jìn)行相應(yīng)配置替換。
重要系統(tǒng)會(huì)在實(shí)例啟動(dòng)時(shí)自動(dòng)配置默認(rèn)的yum源、NTP服務(wù)和DNS服務(wù),您可以使用實(shí)例自定義數(shù)據(jù)更改默認(rèn)的yum源、NTP服務(wù)和DNS服務(wù),但請(qǐng)注意:
如果您自定義了yum源,阿里云官方不再提供yum源相關(guān)支持。
如果您自定義了NTP服務(wù),阿里云官方不再提供相關(guān)時(shí)間同步服務(wù)。
#!/bin/sh # Modify DNS echo "nameserve 114.114.114.114" | tee /etc/resolv.conf # Modify yum repo and update cp /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.bak cp /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.bak sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos.repo sed -i "s@http://mirrors.cloud.aliyuncs.com/centos-stream/@https://mirror.stream.centos.org/@g" /etc/yum.repos.d/centos-addons.repo yum update -y # Modify NTP Server echo "server ntp1.aliyun.com" | tee /etc/ntp.conf systemctl restart ntpd.service
說(shuō)明其中
114.114.114.114
為DNS服務(wù)器地址、https://mirror.stream.centos.org
為CentOS Stream的yum倉(cāng)庫(kù)地址、server ntp1.aliyun.com
為阿里云的NTP服務(wù)器地址,請(qǐng)您根據(jù)實(shí)際環(huán)境替換。您也可以使用Cloud Config數(shù)據(jù)更改yum源,但是不夠靈活,不能適配阿里云已對(duì)部分yum源進(jìn)行預(yù)配置的情況,建議使用User-Data腳本。
自定義管理員賬號(hào)
Linux實(shí)例默認(rèn)使用root用戶作為管理員,您可以使用實(shí)例自定義數(shù)據(jù)使用其他用戶作為管理員。
#!/bin/sh useradd test-user echo "test-user ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers mkdir /home/test-user/.ssh touch /home/test-user/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****" | tee -a /home/test-user/.ssh/authorized_keys
說(shuō)明請(qǐng)使用您的公鑰替換示例中的公鑰ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCRnnUveAis****。
當(dāng)User-Data執(zhí)行遇到問(wèn)題時(shí),可以通過(guò)云助手公共命令ACS-ECS-UserData-Check-for-linux.sh
來(lái)獲取失敗相關(guān)的錯(cuò)誤日志。如果返回有錯(cuò)誤信息表示腳本執(zhí)行有問(wèn)題,如果沒(méi)有返回錯(cuò)誤信息表示執(zhí)行沒(méi)有報(bào)錯(cuò),需要排查其他方面。關(guān)于云助手公共命令的更多信息,請(qǐng)參見(jiàn)查看和執(zhí)行公共命令。
Cloud Config數(shù)據(jù)
簡(jiǎn)介
在Cloud-init中,定義了一系列的功能模塊,來(lái)完成部分需要執(zhí)行的任務(wù)和配置,例如安裝軟件包、設(shè)置網(wǎng)絡(luò)等。執(zhí)行哪些模塊及具體的執(zhí)行邏輯,由Cloud Config數(shù)據(jù)決定,可從vendordata、自定義數(shù)據(jù)、內(nèi)核參數(shù)中獲取。在創(chuàng)建ECS實(shí)例時(shí),用戶可自定義Cloud Config數(shù)據(jù),指定需要執(zhí)行的模塊和任務(wù),并作為自定義數(shù)據(jù)提供給實(shí)例。實(shí)例啟動(dòng)時(shí),cloud-init會(huì)讀取并解析Cloud Config數(shù)據(jù),并按照配置文件中的指示運(yùn)行對(duì)應(yīng)模塊并執(zhí)行配置任務(wù),自動(dòng)配置和部署ECS實(shí)例。
運(yùn)行頻率
啟動(dòng)實(shí)例:Cloud Config數(shù)據(jù)中的任務(wù)是否會(huì)被執(zhí)行,取決于這些任務(wù)對(duì)應(yīng)模塊的頻率設(shè)置。各模塊的說(shuō)明,請(qǐng)參見(jiàn)Modules。
頻率為once-per-instance:僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行。例如配置的是Apt、Set Passwords等模塊,運(yùn)行頻率為once-per-instance,重啟實(shí)例時(shí)不會(huì)運(yùn)行。
頻率為always:實(shí)例每次啟動(dòng)都運(yùn)行。例如配置的是Bootcmd、Update Etc Hosts等模塊,運(yùn)行頻率為always,實(shí)例每次啟動(dòng)都運(yùn)行。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
#cloud-config
,且起始位置不能有空格。必須遵循YAML語(yǔ)法編寫內(nèi)容。
Cloud Config數(shù)據(jù)示例
自定義實(shí)例軟件源
在自定義數(shù)據(jù)區(qū)域輸入以下內(nèi)容,以配置自定義實(shí)例軟件源。示例中使用Ubuntu鏡像創(chuàng)建實(shí)例,如果您使用其他鏡像,請(qǐng)?zhí)鎿Q為對(duì)應(yīng)模塊的配置內(nèi)容。
#cloud-config apt: preserve_sources_list: false disable_suites: - $RELEASE-updates - backports - $RELEASE - mysuite primary: - arches: - amd64 - i386 - default uri: http://us.archive.ubuntu.com/ubuntu
配置自動(dòng)安裝nginx服務(wù)
在自定義數(shù)據(jù)區(qū)域輸入如下內(nèi)容,以配置實(shí)例自動(dòng)安裝nginx服務(wù)。
#cloud-config packages: - nginx runcmd: - systemctl start nginx.service
配置自定義主機(jī)名
在自定義數(shù)據(jù)區(qū)域輸入如下內(nèi)容,以自定義設(shè)置主機(jī)名。
#cloud-config hostname: my-instance fqdn: my-instance.localdomain
配置自動(dòng)運(yùn)行自定義腳本
在自定義數(shù)據(jù)區(qū)域輸入如下內(nèi)容,以配置實(shí)例每次啟動(dòng)時(shí)自動(dòng)運(yùn)行shell腳本。
#cloud-config bootcmd: - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
Include文件
簡(jiǎn)介
通過(guò)Include文件指向一個(gè)或多個(gè)User-Data腳本或Cloud Config數(shù)據(jù)的鏈接,多個(gè)鏈接按行分隔。實(shí)例啟動(dòng)時(shí),cloud-init會(huì)逐個(gè)解析并讀取鏈接里的內(nèi)容。如果在讀取某一個(gè)鏈接的內(nèi)容時(shí)出錯(cuò),則停止讀取剩余的鏈接。
說(shuō)明您可以通過(guò)阿里云對(duì)象存儲(chǔ)OSS,上傳User-Data腳本或Cloud Config數(shù)據(jù)、獲取鏈接、設(shè)置鏈接有效期等。具體操作,請(qǐng)參見(jiàn)OSS控制臺(tái)快速入門。
運(yùn)行頻率
啟動(dòng)實(shí)例:執(zhí)行頻率由鏈接里的內(nèi)容決定。例如,鏈接的內(nèi)容為User-Data腳本,則僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次;腳本類型鏈接的內(nèi)容為Cloud Config數(shù)據(jù),則遵循Cloud Config數(shù)據(jù)的運(yùn)行頻率。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
#include
,且起始位置不能有空格。Include文件示例
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh
示例Include文件包含一個(gè)腳本鏈接,該腳本為User-Data腳本,則僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次。
說(shuō)明如果您采用Include文件或Gzip壓縮內(nèi)容的方式,需要使用存儲(chǔ)服務(wù)上傳腳本、獲取腳本鏈接、設(shè)置鏈接有效期等操作,推薦您使用阿里云對(duì)象存儲(chǔ)OSS。具體操作,請(qǐng)參見(jiàn)OSS控制臺(tái)快速入門。
Gzip壓縮內(nèi)容
簡(jiǎn)介
如果您的User-Data腳本、Cloud Config數(shù)據(jù)或Include文件內(nèi)容的大小超過(guò)32 KB,可以采用Gzip壓縮內(nèi)容(
.gz
格式)并做成鏈接,然后以Include文件的形式輸入。cloud-init會(huì)自動(dòng)解壓Gzip壓縮內(nèi)容,運(yùn)行解壓后內(nèi)容的效果和直接傳入后運(yùn)行沒(méi)有區(qū)別。說(shuō)明您可以通過(guò)阿里云對(duì)象存儲(chǔ)OSS,上傳User-Data腳本或Cloud Config數(shù)據(jù)、獲取鏈接、設(shè)置鏈接有效期等。具體操作,請(qǐng)參見(jiàn)OSS控制臺(tái)快速入門。
運(yùn)行頻率
啟動(dòng)實(shí)例:由腳本類型和模塊類型決定。例如,Gzip壓縮內(nèi)容鏈接的腳本類型為User-Data腳本,則僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
#include
,且起始位置不能有空格。Gzip壓縮內(nèi)容示例
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz
示例Gzip壓縮內(nèi)容表示Include文件包含一個(gè)Gzip壓縮內(nèi)容鏈接,cloud-init讀取該Gzip壓縮內(nèi)容后會(huì)自動(dòng)解壓并運(yùn)行,該Gzip壓縮內(nèi)容由User-Data腳本壓縮得到,所以僅在實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次。
Upstart Job
如需使用Upstart Job,您需要為實(shí)例安裝upstart服務(wù),支持采用upstart服務(wù)管理啟動(dòng)行為的操作系統(tǒng)有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。
簡(jiǎn)介
Upstart是一個(gè)事件驅(qū)動(dòng)型的初始化系統(tǒng),Upstart Job是一個(gè)配置文件,定義了一個(gè)服務(wù)或任務(wù)何時(shí)啟動(dòng)、停止和如何運(yùn)行。它通常放置在/etc/init/目錄下,文件擴(kuò)展名為.conf。
運(yùn)行頻率
啟動(dòng)實(shí)例:實(shí)例每次啟動(dòng)都會(huì)自動(dòng)運(yùn)行。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
#upstart-job
,且起始位置不能有空格。Upstart Job內(nèi)容示例
#upstart-job description "upstart test" start on runlevel [2345] #在運(yùn)行級(jí)別2、3、4、5執(zhí)行 stop on runlevel [!2345] #在運(yùn)行級(jí)別2、3、4、5以外不執(zhí)行 exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
示例Upstart Job表示在系統(tǒng)進(jìn)入指定的運(yùn)行級(jí)別時(shí)輸出一條包含時(shí)間戳的消息,并將該消息記錄到
/root/output.txt
文件中。當(dāng)系統(tǒng)離開(kāi)這些運(yùn)行級(jí)別時(shí),作業(yè)會(huì)停止執(zhí)行。
Windows實(shí)例
Windows實(shí)例是通過(guò)Vminit工具的Plugin_Main_CloudinitUserData插件來(lái)運(yùn)行自定義數(shù)據(jù)腳本,該插件僅支持在實(shí)例首次啟動(dòng)時(shí)運(yùn)行,該插件支持Bat和PowerShell兩種腳本。
bat腳本
運(yùn)行頻率
啟動(dòng)實(shí)例:實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次,重啟實(shí)例不會(huì)自動(dòng)運(yùn)行。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
[bat]
,且起始位置不能有空格。只能輸入半角字符,不能有多余字符。
寫入數(shù)據(jù)的路徑不能為
C:\Users
目錄,否則自定義數(shù)據(jù)會(huì)執(zhí)行失敗。說(shuō)明在Windows系統(tǒng)中,
C:\Users
及其子目錄是用戶配置文件和數(shù)據(jù)的默認(rèn)存儲(chǔ)位置,需要登錄系統(tǒng)后才可以訪問(wèn),而在系統(tǒng)初始化執(zhí)行userdata階段實(shí)際還未登錄系統(tǒng),所以寫入數(shù)據(jù)到C:\Users
目錄會(huì)失敗。
Bat腳本示例
運(yùn)行自定義腳本
[bat] echo "bat test" > C:\userdata_test.txt
示例Bat腳本的效果是在實(shí)例首次啟動(dòng)時(shí)向userdata_test.txt文件寫入內(nèi)容
"bat test"
。
PowerShell腳本
運(yùn)行頻率
啟動(dòng)實(shí)例:實(shí)例首次啟動(dòng)時(shí)運(yùn)行一次,重啟實(shí)例不會(huì)自動(dòng)運(yùn)行。
更換操作系統(tǒng):自動(dòng)運(yùn)行。
重新初始化系統(tǒng)盤:自動(dòng)運(yùn)行。
重要以下情況不會(huì)自動(dòng)運(yùn)行腳本:
如果更換操作系統(tǒng)使用的是自定義鏡像且來(lái)源于原實(shí)例,更換操作系統(tǒng)時(shí)會(huì)判斷實(shí)例不是初次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
如果創(chuàng)建使用的是自定義鏡像,則創(chuàng)建實(shí)例時(shí)系統(tǒng)盤就有數(shù)據(jù),初始化系統(tǒng)盤時(shí)會(huì)判斷實(shí)例不是首次啟動(dòng),因此不會(huì)自動(dòng)運(yùn)行腳本。
格式
首行為
[powershell]
,且起始位置不能有空格。只能輸入半角字符,不能有多余字符。
寫入數(shù)據(jù)的路徑不能為
C:\Users
目錄,否則自定義數(shù)據(jù)會(huì)執(zhí)行失敗。說(shuō)明在Windows系統(tǒng)中,
C:\Users
及其子目錄是用戶配置文件和數(shù)據(jù)的默認(rèn)存儲(chǔ)位置,需要登錄系統(tǒng)后才可以訪問(wèn),而在系統(tǒng)初始化執(zhí)行userdata階段實(shí)際還未登錄系統(tǒng),所以寫入數(shù)據(jù)到C:\Users
目錄會(huì)失敗。
PowerShell腳本示例
運(yùn)行自定義腳本
[powershell] write-output "powershell test" | Out-File C:\userdata_test.txt
示例PowerShell腳本的效果是在實(shí)例首次啟動(dòng)時(shí)向userdata_test.txt文件寫入內(nèi)容
powershell test
。
2. 創(chuàng)建實(shí)例時(shí)使用自定義數(shù)據(jù)
通過(guò)控制臺(tái)創(chuàng)建實(shí)例
在實(shí)例購(gòu)買頁(yè)展開(kāi)高級(jí)選項(xiàng)區(qū)域,在自定義數(shù)據(jù)區(qū)域輸入實(shí)例自定義數(shù)據(jù)。
重要如果實(shí)例自定義數(shù)據(jù)已進(jìn)行Base64編碼,請(qǐng)勾選輸入已采用Base64編碼,且在進(jìn)行Base64編碼前自定義數(shù)據(jù)內(nèi)容的大小不能超過(guò)32 KB。否則,無(wú)需勾選,系統(tǒng)會(huì)自動(dòng)對(duì)內(nèi)容進(jìn)行Base64編碼。
通過(guò)API創(chuàng)建實(shí)例
如果您通過(guò)API方式創(chuàng)建實(shí)例,請(qǐng)?jiān)?a href="http://bestwisewords.com/zh/ecs/developer-reference/api-ecs-2014-05-26-runinstances" id="fb9fcc5894e80" title="" class="xref">RunInstances - 批量創(chuàng)建ECS實(shí)例或CreateInstance - 創(chuàng)建ECS實(shí)例接口指定
UserData
字段。
3. 驗(yàn)證自定義數(shù)據(jù)運(yùn)行效果
您需要結(jié)合自定義腳本的實(shí)際內(nèi)容進(jìn)行運(yùn)行效果的驗(yàn)證,以下以在Linux實(shí)例中傳入如下User-Data腳本為例,為您演示如何進(jìn)行腳本運(yùn)行效果驗(yàn)證。
#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
該示例中,User-Data腳本的效果是在實(shí)例首次啟動(dòng)時(shí),向userdata_test.txt文件寫入系統(tǒng)時(shí)間。為驗(yàn)證該腳本的執(zhí)行效果,您可以運(yùn)行cat userdata_test.txt
命令來(lái)查看效果,系統(tǒng)已經(jīng)向userdata_test.txt
文件寫入系統(tǒng)時(shí)間。
當(dāng)User-Data執(zhí)行遇到問(wèn)題時(shí),可以通過(guò)云助手公共命令ACS-ECS-UserData-Check-for-linux.sh
來(lái)獲取失敗相關(guān)的錯(cuò)誤日志。如果返回有錯(cuò)誤信息表示腳本執(zhí)行有問(wèn)題,如果沒(méi)有返回錯(cuò)誤信息表示執(zhí)行沒(méi)有報(bào)錯(cuò),需要排查其他方面。關(guān)于云助手公共命令的更多信息,請(qǐng)參見(jiàn)查看和執(zhí)行公共命令。
其他操作
查看已有實(shí)例自定義數(shù)據(jù)
自定義數(shù)據(jù)傳入實(shí)例后,您可以通過(guò)元數(shù)據(jù)服務(wù)或控制臺(tái)查看實(shí)例的自定義數(shù)據(jù)信息。
通過(guò)元數(shù)據(jù)服務(wù)獲取(加固模式)
Linux實(shí)例
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:180"` curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/user-data
Windows實(shí)例
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "180"} -Method PUT -Uri http://100.100.100.200/latest/api/token Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/user-data
在上述示例中,設(shè)置的token有效期為180秒,實(shí)際應(yīng)用時(shí)可根據(jù)具體使用場(chǎng)景進(jìn)行調(diào)整。
本示例使用元數(shù)據(jù)服務(wù)的加固模式來(lái)獲取元數(shù)據(jù),關(guān)于元數(shù)據(jù)服務(wù)獲取信息的更多內(nèi)容,請(qǐng)參見(jiàn)通過(guò)元數(shù)據(jù)服務(wù)從ECS實(shí)例內(nèi)部獲取實(shí)例屬性等信息。
關(guān)于元數(shù)據(jù)的更多說(shuō)明,請(qǐng)參見(jiàn)實(shí)例元數(shù)據(jù)。
通過(guò)控制臺(tái)獲取
確保實(shí)例處于已停止狀態(tài)。
重要如果實(shí)例的計(jì)費(fèi)方式為按量付費(fèi)、網(wǎng)絡(luò)類型為專有網(wǎng)絡(luò),停止實(shí)例時(shí),停止模式建議選擇普通停機(jī)模式,選擇節(jié)省停機(jī)模式會(huì)因計(jì)算資源(vCPU和內(nèi)存)被回收,再次啟動(dòng)實(shí)例時(shí)可能因?yàn)閹?kù)存不足導(dǎo)致啟動(dòng)失敗。更多信息,請(qǐng)參見(jiàn)節(jié)省停機(jī)模式。
在實(shí)例頁(yè)面,選擇
,然后在用戶數(shù)據(jù)區(qū)域查看已設(shè)置的自定義數(shù)據(jù)。
通過(guò)調(diào)用API獲取
您可以通過(guò)調(diào)用DescribeUserData接口查詢一臺(tái)ECS實(shí)例的自定義數(shù)據(jù)。更多信息,請(qǐng)參見(jiàn)DescribeUserData。
修改已有實(shí)例自定義數(shù)據(jù)
如需修改已有實(shí)例的自定義數(shù)據(jù),您可以通過(guò)控制臺(tái)進(jìn)行操作。
確保實(shí)例處于已停止狀態(tài)。
重要如果實(shí)例的計(jì)費(fèi)方式為按量付費(fèi)、網(wǎng)絡(luò)類型為專有網(wǎng)絡(luò),停止實(shí)例時(shí),停止模式建議選擇普通停機(jī)模式,選擇節(jié)省停機(jī)模式會(huì)因計(jì)算資源(vCPU和內(nèi)存)被回收,再次啟動(dòng)實(shí)例時(shí)可能因?yàn)閹?kù)存不足導(dǎo)致啟動(dòng)失敗。更多信息,請(qǐng)參見(jiàn)節(jié)省停機(jī)模式。
在實(shí)例頁(yè)面,選擇
,然后在用戶數(shù)據(jù)區(qū)域輸入自定義數(shù)據(jù)。
修改已有實(shí)例的自定義數(shù)據(jù)之后,在啟動(dòng)實(shí)例后自定義數(shù)據(jù)腳本是否被執(zhí)行,取決于自定義數(shù)據(jù)的格式及運(yùn)行頻率,請(qǐng)您在修改自定義數(shù)據(jù)之前明確您的需求,更多信息,請(qǐng)參見(jiàn)自定義數(shù)據(jù)格式及運(yùn)行頻率。
相關(guān)文檔
您也可以通過(guò)彈性伸縮的自定義數(shù)據(jù)功能,讓多臺(tái)ECS實(shí)例在啟動(dòng)時(shí)自動(dòng)執(zhí)行配置的腳本或命令,確保ECS實(shí)例配置的一致性,簡(jiǎn)化了運(yùn)維工作。更多信息,請(qǐng)參見(jiàn)使用實(shí)例自定義數(shù)據(jù)自動(dòng)配置ECS實(shí)例。
如果希望服務(wù)或腳本因程序異常、服務(wù)器重啟、掉電等被中斷時(shí),及時(shí)恢復(fù)運(yùn)行,云助手插件
ecs-tool-servicekeepalive
實(shí)現(xiàn)。具體操作,請(qǐng)參見(jiàn)自動(dòng)恢復(fù)服務(wù)。如果您希望了解更多關(guān)于管理實(shí)例初始化的相關(guān)信息,請(qǐng)參見(jiàn)實(shí)例初始化。