实例自定义数据为您提供实例自定义启动行为及传入数据的功能。您可以在创建实例时指定实例自定义数据,为您的实例自定义启动行为。例如,自动获取软件资源包、开启服务、打印日志、安装依赖包、初始化Web服务环境等其他配置实例环境的操作。实例自定义数据主要通过不同类型的自定义脚本实现。实例自定义数据也可以作为普通数据,将某些信息传入实例中,您可以在实例中引用这些数据。
使用说明
配置实例自定义数据时,您需要注意:
运行频率
实例开始运行时(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实例设置自定义数据。
- 使用编辑器创建文本文件,例如Notepad++。
- 在创建的文本文件中编辑自定义数据的相关脚本。
说明 第一行必须满足实例自定义脚本的格式要求,比如 #!/bin/sh、 #cloud-config、 #upstart-job、 [bat] 和 [powershell]。更多详情,请参见 Linux实例自定义数据 和 Windows实例自定义数据。
- 调试脚本文件以确认内容正确。
- (可选)如果您制作的是 Gzip 压缩脚本 文件,您需要压缩脚本文件为 .gz 格式。
- (可选)如果您制作的是 Include文件 文件或 Gzip 压缩脚本 文件,上传脚本文件到可用的存储服务中并获取链接,并设置链接有效期为您的期望值。
- 登录 ECS管理控制台。
- 参阅 步骤 2:创建ECS实例 创建一台Linux实例。
创建实例时,在 高级选项 中的 实例自定义数据 文本框中输入自定义数据。若您的自定义数据已经过Base64加密,勾选 输入已采用 Base64 编码。
- 等待创建实例过程。
- 实例启动后,参考 连接实例概述 远程连接到目标实例。
- 根据您指定的自定义数据查看运行结果,如果出现故障您需要注意查看相关日志文件。以下为在CentOS实例上使用Upstart Job脚本配置自定义数据的输出示例:
从上面的结果中您可以看到,在实例的 /etc/init 文件夹中生成了一个 part-001.conf 启动任务文件。
相关API:RunInstances + 参数 UserData
查看自定义数据
您可以通过 100.100.100.200
服务器查看实例自定义数据。
- 远程连接实例。
- 在实例内部运行:
curl http://100.100.100.200/latest/user-data
查看Linux实例自定义数据。Invoke-RestMethod http://100.100.100.200/latest/user-data/
查看Windows实例自定义数据。
相关API:DescribeUserdata
修改自定义数据
修改自定义数据之前,您必须停止实例。对于按量付费 VPC 类型实例,若您修改自定义数据后需要立即启动实例时,建议您关闭停机不收费选项。
- 登录 ECS管理控制台。
- 在左侧导航栏中,单击 实例。
- 选择地域。
- 选中需要修改自定义数据的实例,并在 操作 列中,单击 。
- 在弹窗中填入信息后单击 确定。
相关API:ModifyInstanceAttribute + 参数 UserData
Linux实例自定义数据
Linux实例自定义数据可以由几类Linux实例自定义脚本执行,包括 User-Data 脚本、Cloud Config、Include 文件、Gzip 压缩脚本 和 Upstart Job 等类型脚本。脚本采用开源的cloud-init架构,以 实例元数据 为数据来源,自动化配置Linux实例属性。更多详情,请参见cloud-init Formats。
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预先配置实例的部分服务,如更新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文件的内容由脚本链接组成,一行一个链接。实例启动时,cloud-init读取Include文件中脚本链接里的内容,一旦在某一行读取脚本内容时出错,实例停止读取自定义数据。Include文件首行固定为 #include
且页首不能有空格。实例自定义数据的运行频率跟随Include文件中配置的脚本类型。
Include文件中脚本链接包含的内容在Base64编码前脚本内容不能超过16 KB。以下为Include文件示例:
#include
http://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/UserData/myscript.sh
实例创建完成后,启动并连接实例,查看执行结果。
User-Data 脚本、Cloud Config 和 Include文件 均要求脚本内容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作为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]
echo "bat test" > c:\1.txt
实例创建完成后,连接实例查看执行结果,在 C:\ 盘添加了 1.txt 文本文件。

首行固定为 [powershell]
,且页首不能有空格。例如:
[powershell]
write-output "Powershell Test" | Out-File C:\2.txt
参考链接
更多关于Linux实例自定义数据的信息,请参见 cloud-init Formats。
更多关于自定义数据运行频率的信息,请参见 cloud-init Modules。
在文档使用中是否遇到以下问题
更多建议
匿名提交