如何手动运行cloud-init?

Flu*_*ffy 34 amazon-ec2 cloud-init

我正在编写CloudFormation模板,我正在尝试调试我在模板中提供的用户数据脚本.如何cloud-init手动运行并使其执行与启动新实例时相同的操作?

Ric*_*ico 39

您可以像这样运行它:

/usr/bin/cloud-init -d init
Run Code Online (Sandbox Code Playgroud)

这将使用初始模块运行云初始化设置.(-d选项用于调试)如果要运行必须运行的所有模块:

/usr/bin/cloud-init -d modules
Run Code Online (Sandbox Code Playgroud)

请记住,第二次运行它们并没有太大作用,因为它已经在启动时运行.要在引导时间后强制运行,可以从命令行运行:

( cd /var/lib/cloud/ && sudo rm -rf * )
Run Code Online (Sandbox Code Playgroud)

在旧版本中,相当于cloud-init init:

/usr/bin/cloud-init start
Run Code Online (Sandbox Code Playgroud)

虽然它适用于旧版本的云初始化,你也可以找到这个问题的有用:如何让云计算的初始化启动脚本运行,每次我的EC2实例靴?

这里的 cloud init文档仅为您提供示例.但它没有解释命令行选项或每个模块,因此您必须在配置中使用不同的值来获得所需的结果.当然你也可以查看代码.


小智 9

rm -f /var/log/cloud-init.log \
&& rm -Rf /var/lib/cloud/* \
&& cloud-init -d init \
&& cloud-init -d modules --mode final
Run Code Online (Sandbox Code Playgroud)


Lis*_*eth 8

作为文档,您可以简单地运行

sudo cloud-init clean
Run Code Online (Sandbox Code Playgroud)

并添加--logs以清理所有日志文件。当你重新启动时它会重做一切


Gus*_*uss 5

感谢@Rico,而且,如果您想运行单个模块 - 无论是用于测试还是因为您的发行版默认未启用模块(嗨,精确!),您都可以

/usr/bin/cloud-init -d single -n <module-name>
Run Code Online (Sandbox Code Playgroud)

例如,当我的发行版write_files默认不运行时(像很多旧发行版一样),我在 runcmd 的顶部使用它:

runcmd:
 - /usr/bin/cloud-init -d single -n write-files
Run Code Online (Sandbox Code Playgroud)

[我知道它并不是对 OP 的真正答案,但是在寻求解决我的问题时,这个问题是最好的结果之一,所以我认为其他人可能会觉得这很有用]