实例自定义数据
为了提供更加高效灵活的伸缩服务,弹性伸缩配置中新增了实例自定义数据(UserData)。您可以利用 UserData 自动完成 ECS 实例配置,从而安全快速地实现应用级别的扩容和缩容。
本文将详细介绍 UserData,并结合具体场景向您展示 UserData 的使用方式。您可以根据自己的业务场景,灵活地使用 UserData 来满足您的业务需求。
UserData 是阿里云 ECS 为您提供的一种自定义实例启动行为及传入数据的功能,该功能兼容 Windows 实例及 Linux 实例,主要有两种用途:
- 作为实例自定义脚本,在实例启动时自动执行。
- 作为普通数据,将一定的信息传入实例中,您可以在实例中引用这些数据。
在使用弹性伸缩调整 ECS 实例数时,如果您希望自动实现应用级别的扩容和缩容,常用方法是利用自定义镜像或者 Terraform 等开源的 IT 基础架构管理工具。
利用 UserData 参数,您只需要准备好自定义脚本数据,然后以 Base64 编码的方式传入伸缩配置中即可。当弹性扩容 ECS 实例时,实例自定义脚本会在实例启动时自动执行。相比自定义镜像和 Terraform 等开源工具,弹性伸缩原生的 UserData 特性更加快捷安全。
注意事项
如果您要在创建伸缩配置时使用 UserData 参数,需要注意:
- 只有专有网络(VPC)的伸缩配置能够使用 UserData 参数。
- 要以 Base64 编码的方式传入 UserData 参数。
另外,UserData 将以不加密的方式传入,请避免以明文方式传入机密的信息(比如密码、私钥数据等)。如果必须传入,建议先进行加密,以 Base64 的方式编码后再传入,然后在实例内部以同样的方式反解密。
最佳实践
本章节将结合 Userdata 参数介绍伸缩组和伸缩配置的创建过程,并设置一个简单的使用场景,以便您理解弹性伸缩服务并准确地应用到自己的业务中。
创建伸缩组
首先,您需要创建一个伸缩组。由于只有专有网络(VPC)的伸缩配置能够使用 UserData 参数,因此本文将基于专有网络伸缩组展开介绍。
- 登录 ,单击页面右上角的 创建伸缩组。
- 在 创建伸缩组 对话框中,填写必需参数并指定伸缩组所在的虚拟交换机。
- 单击 提交 创建一个专有网络伸缩组。
创建伸缩配置
创建完伸缩组以后,会弹出 伸缩组创建成功 对话框,单击 创建伸缩配置 按钮,继续创建伸缩配置,如下图所示:
基本的伸缩配置参数这里不做过多介绍,您可以参考 来了解每个参数的作用和设置方式,完成伸缩配置并启用伸缩组。下面通过 2 个场景来介绍 UserData 参数的设置。
UserData参数设置
UserData 支持 Windows 系统和 Linux 操作系统,这里介绍在 Linux 操作系统中的应用。您可以利用 UserData 实现在 ECS 实例启动时自动执行自定义 shell 脚本,在定义 shell 脚本时,需注意以下几点:
- 格式:首行必须以
#!
开头,例如#!/bin/sh
。 - 限制:在 Base64 编码前,脚本内容(包括首行在内)不能超过 16 KB。
- 频率:仅在首次启动实例时执行一次。
示例1
定义一个 shell 脚本,来实现在实例首次启动后向 /root/output10.txt
文件写入字符串 Hello World. The time is now {当前时间}
。
脚本内容如下:
#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/output10.txt
脚本经过 Base64 编码后内容如下:
IyEvYmluL3NoDQplY2hvICJIZWxsbyBXb3JsZC4gIFRoZSB0aW1lIGlzIG5vdyAkKGRhdGUgLVIpISIgfCB0ZWUgL3Jvb3Qvb3V0cHV0MTAudHh0
示例2
定义一个 shell 脚本,来实现在 ECS 启动时配置 DNS、yum、NTP 等。
脚本内容如下:
#!/bin/sh
# Modify DNS
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
# Modify yum repo and update
rm -rf /etc/yum.repos.d/*
touch myrepo.repo
echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
echo "baseurl=http://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
yum update -y
# Modify NTP Server
echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
systemctl restart ntpd.service
脚本经过 Base64 编码后内容如下:
IyEvYmluL3NoCiMgTW9kaWZ5IEROUwplY2hvICJuYW1lc2VydmVyIDguOC44LjgiIHwgdGVlIC9ldGMvcmVzb2x2LmNvbmYKIyBNb2RpZnkgeXVtIHJlcG8gYW5kIHVwZGF0ZQpybSAtcmYgL2V0Yy95dW0ucmVwb3MuZC8qCnRvdWNoIG15cmVwby5yZXBvCmVjaG8gIltiYXNlXSIgfCB0ZWUgL2V0Yy95dW0ucmVwb3MuZC9teXJlcG8ucmVwbwplY2hvICJuYW1lPW15cmVwbyIgfCB0ZWUgLWEgL2V0Yy95dW0ucmVwb3MuZC9teXJlcG8ucmVwbwplY2hvICJiYXNldXJsPWh0dHA6Ly9taXJyb3IuY2VudG9zLm9yZy9jZW50b3MiIHwgdGVlIC1hIC9ldGMveXVtLnJlcG9zLmQvbXlyZXBvLnJlcG8KZWNobyAiZ3BnY2hlY2s9MCIgfCB0ZWUgLWEgL2V0Yy95dW0ucmVwb3MuZC9teXJlcG8ucmVwbwplY2hvICJlbmFibGVkPTEiIHwgdGVlIC1hIC9ldGMveXVtLnJlcG9zLmQvbXlyZXBvLnJlcG8KeXVtIHVwZGF0ZSAteQojIE1vZGlmeSBOVFAgU2VydmVyCmVjaG8gInNlcnZlciBudHAxLmFsaXl1bi5jb20iIHwgdGVlIC9ldGMvbnRwLmNvbmYKc3lzdGVtY3RsIHJlc3RhcnQgbnRwZC5zZXJ2aWNl
shell 脚本准备完毕后,伸缩配置中镜像类型选择 系统镜像,然后选择 Linux 类型的镜像(例如 Ubuntu):
在 高级选项 下的 实例自定义数据 中填写 Base64 编码以后的脚本数据,并勾选 输入已采用base64编码选项,下图为 的效果:
3. 查看伸缩活动
由于创建伸缩组时指定 伸缩最小实例数 为 1,启动伸缩组后,弹性伸缩服务会立即启动一个伸缩任务,向当前伸缩组添加 1 台实例,以满足最小实例数的限制。您可以进入伸缩活动列表页,查看当前伸缩组对应的伸缩活动执行详情,如下图所示:
4. 验证 UserData 参数效果
登录伸缩活动中创建的实例,查看 /root/output10.txt
文件,验证 的 UserData 参数的执行结果,如下图所示:
查看服务状态,验证 的 UserData 参数的执行结果,如下图所示:
可以看出伸缩配置中设置的 UserData 参数已经生效。
本最佳实践向您展示了 UserData 的使用方式,但使用的 shell 脚本比较简单。您可以根据自己的需求定制脚本,更加高效灵活地管理您的 ECS 实例。
更多特性
面对不断变化的业务需求,弹性伸缩不仅为您提供了在业务需求高峰或低谷时自动调节 ECS 实例数量的能力,而且为您提供了在 ECS 实例上快速安全地部署服务的能力。除实例自定义数据(UserData)外,SSH 密钥对(KeyPairName)、RAM 角色名称(RamRoleName)和标签(Tags)也可以帮助您更加高效灵活地管理 ECS 实例。合理地使用弹性伸缩服务,不仅能够有效地降低您的服务器成本,而且能够有效地降低您的服务管理和运维成本。
您可以登录 体验弹性伸缩的新特性,同时也可以参考 来使用这些新特性。
发布者:lidazhuang,转转请注明出处:https://www.cms2.cn/aliyun/4600.html