You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS自定义AMI实例Cloud-init无法获取数据源求助

问题:AWS自定义AMI启动实例后Cloud-Init用户数据未生效

问题现象

  • 通过AWS控制台使用自定义AMI启动实例,系统初始化阶段需更新XML文件,但输入的用户数据未生效。
  • 查看ds-identify.log和cloud-init-generator.log发现Cloud-Init无法获取数据源,导致Cloud-Init被禁用。

关键日志信息

ds-identify.log

[up 1.17s] ds-identify
policy loaded: mode=search report=false found=all maybe=all notfound=disabled
no datasource_list found, using default: MAAS ConfigDrive NoCloud AltCloud Azure Bigstep CloudSigma CloudStack DigitalOcean AliYun Ec2 GCE OpenNebula OpenStack OVF SmartOS Scaleway Hetzner IBMCloud Oracle Exoscale RbxCloud
DMI_PRODUCT_NAME=t3.small
DMI_SYS_VENDOR=Amazon EC2
DMI_PRODUCT_SERIAL=ec2972df-81d1-c72e-f54d-0da7741efa46
DMI_PRODUCT_UUID=DF7229EC-D181-2EC7-F54D-0DA7741EFA46
PID_1_PRODUCT_NAME=unavailable
DMI_CHASSIS_ASSET_TAG=Amazon EC2
FS_LABELS=any:scandir,any:scandir,any:scandir,any:scandir,var,config,deferred,logs,wk,boot,opt,root,notused,rescue
ISO9660_DEVS=
KERNEL_CMDLINE=BOOT_IMAGE=/vmlinuz-x.x.xx-x.xx..0.x86_64 ro root=LABEL=root quiet nmi_watchdog=2 fsck.repair=yes fips=1 elevator=noop rootdelay=300 console=ttyS0,115200n8 aws nvme_core.io_timeout=255 rootfstype=ext4
VIRT=kvm
UNAME_KERNEL_NAME=Linux
UNAME_KERNEL_RELEASE=x.x.xx-x.xx..0.x86_64
UNAME_KERNEL_VERSION=#1 SMP Thu Mar 21 13:43:44 UTC 2024
UNAME_MACHINE=x86_64
UNAME_NODENAME=mlos-tiny
UNAME_OPERATING_SYSTEM=GNU/Linux
DSNAME=
DSLIST=MAAS ConfigDrive NoCloud AltCloud Azure Bigstep CloudSigma CloudStack DigitalOcean AliYun Ec2 GCE OpenNebula OpenStack OVF SmartOS Scaleway Hetzner IBMCloud Oracle Exoscale RbxCloud
MODE=search
ON_FOUND=all
ON_MAYBE=all
ON_NOTFOUND=disabled
pid=734 ppid=722
is_container=false
is_ds_enabled(IBMCloud) = true.
ec2 platform is 'Unknown'.
is_ds_enabled(IBMCloud) = true.
No ds found [mode=search, notfound=disabled]. Disabled cloud-init [1]
[up 1.44s] returning 1

cloud-init-generator.log

/usr/lib/systemd/system-generators/cloud-init-generator normal=/run/systemd/generator early=/run/systemd/generator.early late=/run/systemd/generator.late
kernel command line (/proc/cmdline): BOOT_IMAGE=/vmlinuz-x.x.xx-x.xx.xx.x.x86_64 ro root=LABEL=root quiet nmi_watchdog=2 fsck.repair=yes fips=1 elevator=noop rootdelay=300 console=ttyS0,115200n8 aws nvme_core.io_timeout=255 rootfstype=ext4
kernel_cmdline found unset
etc_file found unset
default found enabled
checking for datasource
ds-identify rc=1
ds-identify _RET=notfound
**cloud-init is enabled but no datasource found, disabling**
already disabled: no change needed [no /run/systemd/generator.early/multi-user.target.wants/cloud-init.target]
[root@ip-xx-xx-xx-xx cloud-init]#

当前配置信息

  • Cloud-Init版本:cloud-init-19.4-12
  • /etc/cloud/cloud.cfg配置:
users:
 - default

disable_root: 0
ssh_pwauth:   0

mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys:   1
ssh_genkeytypes:  ~
syslog_fix_perms: null
disable_vmware_customization: false

datasource_list: [Ec2]
datasource:
 Ec2:
  metadata_urls: ["http://169.254.169.254:80"]
  max_wait: 120
  timeout: 50
  strict_id: false

#/etc/hosts file will be replaced with the one in /etc/cloud/templates.
manage_etc_hosts: true

cloud_init_modules:
 - disk_setup
 - migrator
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - rsyslog
 - users-groups
 - ssh

cloud_config_modules:
 - mounts
 - locale
 - set-passwords
 - rh_subscription
 - yum-add-repo
 - package-update-upgrade-install
 - timezone
 - puppet
 - chef
 - salt-minion
 - mcollective
 - runcmd

cloud_final_modules:
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

system_info:
  default_user:
    name: centos
    lock_passwd: true
    gecos: Cloud User
    groups: [adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_svcname: sshd

# vim:syntax=yaml

测试用用户数据

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]
runcmd:
 - [ mkdir, /test-cloudinit ]
write_files:
 - path: /test-cloudinit/cloud-init.txt
   content: Created by cloud-init

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
  mkdir test-userscript
  touch /test-userscript/userscript.txt
  echo "Created by bash shell script" >> /test-userscript/userscript.txt
--//--

解决方案

  1. 修复Cloud-Init配置加载问题
    日志显示no datasource_list found,说明当前cloud.cfg的配置未被正确读取:

    • 确认文件权限:执行chmod 644 /etc/cloud/cloud.cfg && chown root:root /etc/cloud/cloud.cfg
    • 验证YAML语法:执行cloud-init devel schema --config-file /etc/cloud/cloud.cfg检查是否存在语法错误
  2. 解决EC2数据源识别问题
    日志中ec2 platform is 'Unknown'是旧版本Cloud-Init的已知问题,可通过以下方式处理:

    • 在/etc/cloud/cloud.cfg.d/目录下创建90_datasource.cfg文件,内容如下:
      datasource_list: [Ec2]
      datasource:
        Ec2:
          strict_id: false
      
    • 或在启动实例时,通过AWS控制台"高级详情"的"内核启动参数"添加ds=Ec2
  3. 确保元数据访问正常

    • 执行curl http://169.254.169.254/latest/meta-data/instance-id,验证能否获取实例ID,若失败则检查安全组/网络ACL是否允许访问169.254.169.254
    • 日志中显示启用了FIPS模式(fips=1),可尝试临时关闭FIPS(修改内核参数fips=0)测试是否兼容
  4. 更新Cloud-Init版本
    19.4版本存在较多兼容性问题,建议更新到最新稳定版:

    • CentOS/RHEL系统执行yum update cloud-init -y,更新后重新生成AMI测试
  5. 修正用户数据格式

    • shell脚本中的mkdir test-userscript会在Cloud-Init执行目录创建,建议改为绝对路径mkdir /test-userscript
    • 检查用户数据是否存在多余空格或换行,避免解析失败

验证步骤

修改配置后,手动触发Cloud-Init测试:

cloud-init clean
cloud-init init
cloud-init modules --mode config
cloud-init modules --mode final

随后检查/test-cloudinit、/test-userscript目录是否创建,或查看/var/log/cloud-init.log确认执行情况

内容的提问来源于stack exchange,提问作者shiv chittora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:00:05