实例自定义数据可用于管理ECS实例的启动行为或者向实例传入普通数据。本文介绍如何将ECS实例自定义数据传入ECS实例。
实例自定义数据介绍
Linux实例和Windows实例均支持实例自定义数据功能,主要有以下用途:
作为实例自定义脚本在启动实例时执行,实现自动化配置实例,例如自动获取软件资源包、开启服务、打印日志、安装依赖包、初始化Web服务环境等操作。
仅作为普通数据传入实例,方便您在实例中使用这些数据。
实例自定义数据可以通过不同类型的脚本编写,然后在创建实例时输入脚本内容即可传入实例。具体操作,请参见将实例自定义数据传入实例(Linux)和将实例自定义数据传入实例(Windows)。
您可以通过实例元数据查看已传入实例的自定义数据。具体操作,请参见实例元数据。
使用限制
仅网络类型为专有网络VPC的实例支持实例自定义数据功能。
实例必须使用公共镜像或基于公共镜像创建的自定义镜像,且必须为以下镜像之一:
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及更高版本
在售的实例规格均支持实例自定义数据功能。但已停售的实例规格中,仅I/O优化实例支持实例自定义数据功能,更多信息,请参见已停售的实例规格。
将实例自定义数据传入实例(Linux)
操作步骤
准备实例自定义数据。
您可以通过以下几种常用的脚本类型准备Linux实例的自定义数据,不同类型的脚本说明如下。
说明重启实例、更换操作系统、重新初始化系统盘时,cloud-init需要判断当前启动是否是作为一个新实例的第一次启动来运行脚本。它通过判断当前系统上是否存在缓存目录,且缓存是否指向了当前实例的实例ID来判断当前实例系统是否为第一次启动, 具体详情请参见https://cloudinit.readthedocs.io/en/latest/explanation/boot.html#first-boot-determination。
在第一次启动时,会执行运行频率为
once-per-instance
的配置,即这些配置在每台实例上只运行一次。在该实例后续重启系统时,cloud-init服务会执行频率为
always
的配置,即这些配置在系统每次启动时都会运行。
如果您采用Include文件或Gzip压缩内容的方式,需要使用存储服务进行上传脚本获取脚本链接、设置链接有效期等操作。推荐您使用阿里云对象存储OSS,具体操作,请参见OSS文档和基于最后一次修改时间的生命周期规则。您也可以阅读cloud-init文档了解更多准备实例自定义数据的方式,请参见User-Data Formats。
User-Data脚本
说明当User-Data执行遇到问题时,可以通过云助手公共命令ACS-ECS-UserData-Check-for-linux.sh来获取失败相关的错误日志。如果返回有错误信息表示脚本执行有问题,如果没有返回错误信息表示执行没有报错,需要排查其他方面。关于云助手公共命令的更多信息,请参见查看和执行公共命令。
特点
User-Data脚本传入Linux实例后直接作为Shell脚本执行。User-Data脚本具有以下特点:
首行以
#!
开头。仅在实例首次启动时运行一次。
示例脚本
#!/bin/sh echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
示例脚本表示在实例首次启动时向userdata_test.txt写入系统时间。
运行频率
重启实例:仅在实例首次启动时运行一次,重启实例不会自动运行。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
Cloud Config数据
重要Cloud Config是通过用户数据完成某些任务的最简单方法。当您使用cloud-init执行某些任务时,推荐使用Cloud Config的配置方式。
特点
以Cloud Config数据的形式编写内容可以方便地为实例预先配置一些服务,例如更新yum源、导入SSH密钥、安装依赖包等。Cloud Config数据具有以下特点:
首行为
#cloud-config
,且起始位置不能有空格。必须遵循YAML语法编写内容。
示例脚本
#cloud-config apt: primary: - arches: [default] uri: https://us.archive.ubuntu.com/ubuntu/ bootcmd: - echo "Hello World. The time is now $(date -R)!" | tee /root/userdata_test.txt
示例脚本表示修改默认的软件源,并在实例每次启动时向userdata_test.txt写入最新的系统时间。
运行频率
重启实例:由配置的模块决定。例如Apt模块配置每台实例仅运行一次,Bootcmd模块在实例每次启动时都会运行。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
Include文件
特点
Include文件包含一个或多个脚本链接,脚本链接按行分隔。实例启动时,cloud-init会逐个读取脚本链接以及脚本的内容。如果在读取某一个脚本的内容时出错,则停止读取剩余的脚本。Include文件具有以下特点:
首行为
#include
,且起始位置不能有空格。每个脚本内容的大小在Base64编码前不能超过16 KB。
示例脚本
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.sh
示例脚本表示Include文件包含一个脚本链接,运行频率由脚本的类型决定。例如该脚本为User-Data脚本,则仅在实例首次启动时运行一次。
运行频率
重启实例:由脚本类型和模块类型决定。例如链接的脚本类型为User-Data脚本,则仅在实例首次启动时运行一次。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
Gzip压缩内容
特点
如果您的User-Data脚本、Cloud Config数据和Include文件内容的大小可能超过16 KB,可以采用Gzip压缩内容(
.gz
格式)并做成链接,然后以Include文件的形式输入。cloud-init会自动解压Gzip压缩内容,运行解压后内容的效果和直接传入后运行没有区别。Gzip压缩内容具有以下特点:首行为
#include
,且起始位置不能有空格。每个压缩内容的大小在Base64编码前不能超过16 KB。
示例脚本
#include https://ecs-image-test.oss-cn-hangzhou.aliyuncs.com/userdata/myscript.gz
示例脚本表示Include文件包含一个Gzip压缩内容链接,cloud-init读取该Gzip压缩内容后会自动解压并运行,运行频率由脚本的类型决定。例如,该Gzip压缩内容由User-Data脚本压缩得到,则仅在实例首次启动时运行一次。
运行频率
重启实例:由脚本类型和模块类型决定。例如Gzip压缩内容链接的脚本类型为User-Data脚本,则仅在实例首次启动时运行一次。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
Upstart Job
说明如需使用Upstart Job,您需要为实例安装upstart服务,支持采用upstart服务管理启动行为的操作系统有CentOS 6、Ubuntu 10/12/14以及Debian 6/7。
特点
Upstart是一个事件驱动型的初始化系统,Upstart Job是一个配置文件,定义了一个服务或任务何时启动、停止和如何行为。它通常放置在/etc/init/目录下,文件扩展名为.conf。Upstart Job具有以下特点:首行为
#upstart-job
,且起始位置不能有空格。示例脚本
#upstart-job description "upstart test" start on runlevel [2345] #在运行级别2、3、4、5执行 stop on runlevel [!2345] #在运行级别2、3、4、5以外不执行 exec echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
示例脚本表示在系统进入指定的运行级别时输出一条包含时间戳的消息,并将该消息记录到
/root/output.txt
文件中。当系统离开这些运行级别时,作业会停止执行。运行频率
重启实例:实例每次启动都会自动运行。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
将实例自定义数据传入实例。
创建实例时传入实例自定义数据
展开高级选项,在自定义数据区域输入实例自定义数据。如果实例自定义数据已进行Base64编码,请选中输入已采用Base64编码。
如果选中输入已采用Base64编码:输入的自定义数据必须为Base64编码形式,且在进行Base64编码前自定义数据内容的大小不能超过16 KB。
如果不选中输入已采用Base64编码:您可以输入未经过Base64编码的实例自定义数据,控制台会自动进行Base64编码。
说明实例首次启动时向指定文件写入系统时间的示例如下图所示。
修改存量实例的自定义数据
在实例页面,选择
,然后在用户数据区域输入新的实例自定义数据。说明对于按量付费实例,如果您需要在修改自定义数据后立即启动实例,建议停止模式设置为普通停机模式。
实例每次启动时向指定文件写入最新系统时间的示例如下图所示。
查看传入实例的内容和运行效果。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
通过实例元数据查看内容。
curl http://100.100.100.200/latest/user-data
以查看步骤2中的创建实例时传入实例自定义数据为例,如下图所示,内容一致表明实例自定义数据已成功传入实例。
查看运行效果。
cat userdata_test.txt
运行效果和内容有关,向指定文件写入系统时间的效果如下图所示。
脚本使用示例
示例一:使用User-Data脚本自定义yum源、NTP服务和DNS服务
示例二:使用User-Data脚本自定义管理员账号
将实例自定义数据传入实例(Windows)
准备实例自定义数据。
您可以通过Bat和PowerShell脚本准备Windows实例的自定义数据,不同类型的脚本说明如下。
Bat脚本
特点
首行为
[bat]
,且起始位置不能有空格。只能输入半角字符,不能有多余字符。
示例脚本
[bat] echo "bat test" > C:\userdata_test.txt
示例脚本表示在实例首次启动时向userdata_test.txt写入内容
"bat test"
。运行频率
重启实例:首次启动时运行一次,重启实例不会自动运行。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
PowerShell脚本
特点
首行为
[powershell]
,且起始位置不能有空格。只能输入半角字符,不能有多余字符。
示例脚本
[powershell] write-output "powershell test" | Out-File C:\userdata_test.txt
示例脚本表示在实例首次启动时向userdata_test.txt写入内容
powershell test
。运行频率
重启实例:首次启动时运行一次,重启实例不会自动运行。
更换操作系统:自动运行。
重新初始化系统盘:自动运行。
说明如果更换操作系统使用的是自定义镜像且来源于原实例,或实例的系统盘来源于原实例,则更换操作系统、重新初始化系统盘时,系统会判断实例不是初次启动,因此脚本不会自行执行。
将实例自定义数据传入实例。
创建实例时传入实例自定义数据
展开高级选项区域,在自定义数据区域输入实例自定义数据。如果实例自定义数据已进行Base64编码,请选中输入已采用Base64编码。
说明如果选中输入已采用Base64编码:输入的自定义数据必须为Base64编码形式,且在进行Base64编码前自定义数据内容的大小不能超过16 KB。
如果不选中输入已采用Base64编码:您可以输入未经过Base64编码的实例自定义数据,控制台会自动进行Base64编码。
向指定文件写入内容的示例如下图所示。
为已有实例修改实例自定义数据
在实例页面中,选择
,然后在用户数据区域输入新的实例自定义数据。说明对于按量付费实例,如果您需要在修改自定义数据后立即启动实例,建议停止模式设置为保留并收费。
向指定文件写入内容的示例如下图所示。
说明修改Windows实例自定义数据后,启动实例时不会重新运行新的实例自定义数据。
查看传入实例的内容和运行效果。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Windows实例。
查看实例自定义数据内容。
Invoke-RestMethod http://100.100.100.200/latest/user-data
以查看步骤2中的创建实例时传入实例自定义数据为例,如下图所示,内容一致表明实例自定义数据已成功传入实例。
查看运行效果。
运行效果和内容有关,向指定文件写入内容的效果如下图所示。
- 本页导读 (1)