问题标签 [cloud-init]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
86898 浏览

amazon-ec2 - 每次我的 EC2 实例启动时,如何让 cloud-init 启动脚本运行?

我有一个 EC2 实例运行基于 Amazon Linux AMI 的 AMI。与所有此类 AMI 一样,它支持cloud-init系统,用于根据传递到每个实例的用户数据运行启动脚本。在这种特殊情况下,我的用户数据输入恰好是一个包含其他几个启动脚本的源文件:

第一次启动实例时,cloud-init 启动脚本运行正常。但是,如果我对实例进行软重启(例如,通过运行sudo shutdown -r now),实例会重新启动,而不会第二次运行启动脚本。如果我进入系统日志,我可以看到:

这不是我想要的——我可以看到每个实例生命周期只运行一次的启动脚本的实用程序,但在我的情况下,这些应该在每次实例启动时运行,就像正常的启动脚本一样。

rc.local我意识到一个可能的解决方案是在第一次运行后手动让我的脚本自行插入。然而,这似乎很麻烦,因为 cloud-init 和 rc.d 环境略有不同,我现在必须在首次启动和所有后续启动时分别调试脚本。

有谁知道我如何告诉 cloud-init 始终运行我的脚本?这听起来确实像是 cloud-init 的设计者会考虑的。

0 投票
1 回答
191 浏览

amazon - setUserData 没有为 aws 执行脚本

我试图弄清楚如何让 cloud-init 执行脚本。目前我有一个名为 myscript 的文件,内容为

!/bin/sh

echo 'Hello world - 我刚刚执行了用户数据!' > /root/helloworld sudo mkdir scripttest

然后在我的 Java 代码中,我有 String usrdata = new String(); usrdata=“我的脚本”;req.setUserData(usrdata); req.setUserData(org.apache.commons.codec.binary.Base64.encodeBase64String(usrdata.getBytes()));

当我 ssh 进入我正在运行的实例时,这似乎不起作用。有什么想法为什么?

0 投票
6 回答
14514 浏览

windows - Windows 的 Cloud-Init 等效项是什么?

Windows 上似乎有点缺乏股票引导过程。

Linux 具有 cloud-init,它将安装包、存储文件并从用户数据运行 bash 脚本。

Windows 有 ec2config,但目前不支持在系统“准备就绪”时运行 cmd 或 powershell 脚本——这意味着所有初始重启都已完成。

似乎有第三方选项。例如 RightScale 具有执行此功能的 RightLink 代理。

是否有可用的开源选项?是否有计划将此功能添加到 Ec2Config?我必须自己建立这个吗?

我错过了什么吗?

0 投票
1 回答
3594 浏览

amazon-ec2 - ubuntu ec2-instance 上的 cloud-init 每次启动脚本

我正在尝试在 ubuntu 11.10 ec2 实例上使用 cloud-init 启动脚本。

我把脚本script.sh放在文件夹中/var/lib/cloud/scripts/per-boot
内容script.sh很简单:

重新启动后,我收到以下错误:

任何想法如何解决它?

0 投票
4 回答
19520 浏览

amazon-s3 - 如何(安全地)使用 cloudinit 将私有 S3 资产下载到新的 EC2 实例上?

我正在使用 CloudFormation 管理 Tomcat 网络服务器堆栈,但厌倦了为新应用程序版本进行原始 AMI 管理。我想朝大厨的方向前进,但现在没有时间。相反,我试图解决网络服务器实例化中的一个简单问题:当新机器启动时,如何下载“当前”WAR?

我的想法是使用私有 S3 存储桶和 cloudinit,但我对如何处理 IAM 凭证感到有些困惑。我可以将它们放入模板的用户数据中,但我不愿意这样做,特别是因为我正在控制该文件的版本。我能想到的唯一选择是在 AMI 本身中使用环境变量。它们必须是纯文本的,但是……嗯,如果你能闯入我的实例,你可以压缩并下载我的整个网络服务器。只要 IAM 用户不被重复用于其他任何事情并且定期轮换,这似乎是解决问题的合理方法。我错过了什么吗?如何使用 cloudinit 安全地下载私有 S3 资产?

0 投票
2 回答
6475 浏览

amazon-ec2 - IAM 角色临时凭证可以在 cloudformation 模板中使用吗?

我正在构建一个需要访问私有 S3 存储桶以下载我的应用程序的最新版本的堆栈。我正在使用IAM 角色,这是一项相对较新的 AWS 功能,它允许为 EC2 实例分配特定角色,然后将这些角色与 IAM 策略相结合。不幸的是,这些角色带有在实例化时生成的临时 API 凭证。这不是很严重,但它迫使我做这个 cloud-init 脚本之类的事情(简化为相关位):

首先也是最重要的:这很有效,而且效果很好。尽管如此,我很想使用 CloudFormation 对源访问的现有支持。具体来说,cfn-init支持使用身份验证资源来获取受保护的数据,包括 S3 存储桶。无论如何可以从内部获取这些密钥cfn-init,或者可能将 IAM 角色绑定到身份验证资源?

我想另一种选择是将我的来源放在其他经过身份验证的服务之后,但目前这不是一个可行的选择。

另一个有希望的线索是AWS::IAM::AccessKey 资源,但文档不建议它可以与角色一起使用。反正我要试试。

0 投票
4 回答
33134 浏览

chef-infra - 为什么人们将 Puppet/Chef 与 Amazon Cloud Formation 结合使用,而不仅仅是使用 CloudInit?

我们计划使用非“预烘焙”的 AMI EC2 实例。即,当它们启动时,它们是 AWS linux 的裸安装。我们的引导过程将引入我们需要的各种安装,例如 python、tomcat。我们将有最少 3 个实例和最多 8 个实例。

鉴于这些要求,使用 Puppet/Chef 会比使用 Amazon Cloud Formation (CloudInit) 有用吗?

我能看到的最好的情况是,如果我们使用 Puppet,那么我们将拥有更容易审计的声明式编程,以查看发生了什么而不是脚本。CloudInit 也有一个 16k 的脚本大小限制,我们可能会也可能不会遇到。

是否有人出于特定原因从 CloudInit 迁移到 Puppet 或 Chef,他们可以在此处提供以回答我的问题?

0 投票
3 回答
12356 浏览

ubuntu - Cloud-init 每次启动脚本什么都不做

我是 cloud-init 的新手,我的最终目标是每次 EC2 Spot 实例激活时运行一个 R 脚本,但为了测试它,我创建了一个按需 Ubuntu 12.04 实例并创建了一个简单的脚本,但之后没有任何反应重启。以下是我采取的步骤:

  • 启动了新的 Ubunut 12.04 实例
  • 导航/var/lib/cloud/scripts/per-boot
  • sudo vi script.sh
  • 添加了以下代码:

#!/bin/sh
回显“测试”

  • sudo reboot

在这一点上,我想当实例重新启动时我应该看到一个“测试”打印,但那里什么也没有。我去看看,/var/log/cloud-init.log但没有错误或任何异常。

我显然错过了一些东西,所以任何正确方向的提示都将不胜感激!

谢谢!

0 投票
3 回答
1976 浏览

amazon-ec2 - Puppet 代理守护程序未读取事实事实(EC2,cloud-init)

我正在使用 puppet 从 facter 中读取事实,并基于此将不同的配置应用于我的模块。

问题:

傀儡特工没有看到这个事实。以交互方式运行puppet agent --test按预期工作。即使从脚本以非交互方式运行它似乎也可以正常工作。只有代理本身在搞砸。

过程:

我正在 EC2 上部署一个基于 Ubuntu 的应用程序堆栈。使用 userdata (#cloud-config),我在 /etc/environment 中设置了一个环境变量:

然后立即在#cloud-config 中,我获取/etc/environment。只有那么我 apt-get install puppet (我不再使用 package: puppet 来消除#cloud-config 步骤序列中的歧义)

实例启动后,我确认事实可用:运行facter tl_role返回“开发”。然后我检查 /var/log/syslog,显然 puppet 代理没有看到这个事实 - 我知道这一点是因为它无法编译目录,并且没有任何(空白)我应该看到的值变量集取决于这个事实。

但是,puppet agent --test交互式运行可以很好地编译和运行目录。即使从#cloud-config 脚本(安装puppet 后立即)运行它也可以正常工作。

我如何让 puppet 代理了解这个事实?重新启动代理服务没有任何区别,它仍然不知道自定义事实。重新启动实例也没有任何区别。

这是一些代码:

EC2 用户数据:

主要木偶清单:

然后我看到 $sitedomain 应该是失败的地方,所以 $tl_role 似乎没有设置。

有任何想法吗?这让我脑洞大开……

0 投票
4 回答
3941 浏览

amazon-web-services - 我可以使用 cloud-init 来安装和配置 chef,但不能实际运行它吗?

我有一个有效的 CloudFormation 模板,其中包含用户数据和 cloud-init,成功连接并构建到托管的 Chef 服务器。我在 AWS EC2 库存图像上使用 Ubuntu 12.04。

出于我自己的目的,我想继续这样做,但是

1)将 Chef 配置为作为服务运行,仅按需运行(“sudo chef-client”)

...或者,或补充这一点

2) 像以前一样执行整个 Chef 安装/配置,但只运行一次,而不是作为服务

我找不到合适的钩子,如果有的话,可以通过 cloud-init 示例来实现这一点。我想知道 Chef 是否有一些设置允许这个用例?我尝试使用 update-rc.d 禁用 chef-client 但这不起作用,因为它已经在运行。

以下是与 EC2 实例关联的 CF 模板中的用户数据片段: