亚马逊ec2用户数据,它是如何工作的?

时间:2012-03-19 02:05:01

标签: amazon-ec2 amazon-web-services

我们正在启动实例,并访问我们放置的用户数据。但有没有人理解这项行动的内部(来自亚马逊方面)?当我们传入用户数据时,传输到VM的数​​据(这是Xen功能)在哪里存储?

我首先想到的是,它被设置为USER_DATA env var,但我们也可以将其作为文件传递。该文件存储在哪里?它是通用的所有实例还是因AMI而异?

这本身并不是问题,只是想知道亚马逊是如何做到的。

用户数据屏幕截图:http://d.pr/GZlY

5 个答案:

答案 0 :(得分:56)

实例可以通过此URL使用简单的HTTP请求来获取用户数据:

http://169.254.169.254/latest/user-data

Amazon EC2不直接将此用户数据放在实例上,但许多AMI都有代码指示实例自动下载和处理用户数据。

另见:

答案 1 :(得分:6)

每个人都能理解的简单示例:如果您想在计算机启动时创建文件/tmp/testfile.txt,只需在User data字段中添加这两行即可。

#!/bin/bash
touch /tmp/testfile.txt

请记住在命令之前将#!/bin/bash放在顶部。

运行实例(Linux AMI)时,您可以在User data

看到/var/lib/cloud/instance/user-data.txt字段内容

答案 2 :(得分:3)

很抱歉发布这么老的问题,但这似乎是放置这些额外信息的最佳位置。

大多数AWS文档都将User Data描述为一个属性,用于放置实例生命周期启动脚本,即只有在实例首次启动时才能运行的内容。

通常就是这种情况,但除了我自己想要在重启时执行不同的脚本时,至少还有一个人,比如修复损坏的密钥或其他东西。猜猜是什么......你可以使用用户数据做到这一点。

以下是代码和link to the AWS document ...

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]

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

#!/bin/bash
/bin/echo "Hello World." >> /tmp/sdksdfjsdlf
--//

我找不到有关这种用户数据格式的文档,它允许这种情况发生。我已经尝试过它并且有效。我试图看看它是否在每次启动时运行,而且确实如此。

所以,如果你认为你需要这样做,我建议你备份。确保您拥有原始用户数据的副本,并使用修改后提供的代码,并在下次停止实例时删除代码(以避免多次运行脚本)。

答案 3 :(得分:1)

AWS userdata是您可以在启动时为实例提供的命令/数据集。例如,如果要启动ec2实例并希望在新启动的ec2上安装docker,则可以在aws ec2 config页面的userdata字段中提供一组bash命令。

用例

Here 是一个很好解释的AWS用户数据示例 video tutorial

答案 4 :(得分:-1)

#!/bin/bash
yum update -y
yum install httpd -y
echo "<html><h1>webpage 1(whatever you want, give the page name here)</h1></html>"
/var/www/html/index.html
service httpd start
chkconfig httpd on