首页/云/云平台与虚拟化速查/实例自定义数据 user-data

实例自定义数据 user-data

创建实例时传入 user-data,实例首次启动由 cloud-init 执行,用于自动装包、写配置、注册到监控或跳板机等初始化动作。

云平台与虚拟化速查云更新于 2026-10-13

user-data 是什么

user-data 是创建实例时传入的一段自定义数据,实例首次启动时由 cloud-init 读取并执行,用来完成装包、写配置、注册监控、加入集群等初始化动作。它只在首次启动阶段生效,是把手工装机步骤标准化成模板的主要手段,也是弹性伸缩伸缩出来的实例能自动就绪的原因。

基本信息

适用平台主流公有云创建实例参数;Linux 依赖 cloud-init,Windows 走 EC2Launch/Sysprep 类机制
执行时机实例首次启动的 cloud-init 初始化阶段
传入格式云 API 通常要求 Base64 编码,控制台可粘贴明文
常见类型#cloud-config(YAML)与 shell 脚本两类,按首个字符识别
排查入口guest 内 cloud-init 日志与控制台的启动日志输出

典型使用场景

  • 统一初始化规范:新建实例自动装 agent、写时区与 hosts
  • 批量建机:一次创建数十台时保证每台配置一致
  • 伸缩自动就绪:扩容实例启动后自动注册到负载均衡后端
  • 注册监控与日志:开机自动安装采集组件并打上标签
  • 一次性初始化标记:写一个完成标记文件,便于判断初始化是否成功

cloud-config 示例

cloud-config 示例
#cloud-config
package_update: true          # 首次启动更新包索引
packages:
  - nginx                    # 需要预装的软件包
runcmd:
  - [ systemctl, enable, --now, nginx ]                     # 启用并启动服务
  - [ sh, -c, "echo ready > /var/log/init.flag" ]            # 写初始化完成标记

初始化失败排查位置

位置内容用途
/var/log/cloud-init.log各阶段执行过程定位脚本在哪一步报错
/var/log/cloud-init-output.log脚本输出查看命令真实报错信息
/var/lib/cloud/初始化状态与已执行记录判断是否已经执行过
控制台启动日志串口输出实例未起来时仍能看到输出
user-data 内容是明文可读的,不要把密钥、令牌等敏感信息直接写入,改用密钥管理服务或启动后从受控位置拉取。
修改 user-data 不会影响已创建的实例;需要重新执行时,要在 guest 内清理 cloud-init 状态并手动触发。做脚本化交付时,把初始化脚本纳入版本管理,实例上的实际内容也要能追溯回某个版本。

易错点

  • 脚本含交互式命令(如等待确认的包管理操作),初始化期间卡住不返回
  • 编码方式错误(明文传给要求 Base64 的接口)导致数据不被执行
  • 初始化依赖外网源,但实例未绑定公网或未配置私网代理,装包超时
  • 把密钥写进 user-data:实例内元数据接口可被读取,凭据等同泄漏
  • 初始化脚本执行时间过长,实例已就绪但业务组件尚未装完,验收时表现为服务不可用

数据来源与参考

  • 阿里云 实例自定义数据文档
  • 腾讯云 CVM 自定义数据文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌