我可以很好地构建AMI图像。但他们已停止使用EC2用户数据:
有用户数据:
$ cat /tmp/user_data.sh
#!/bin/bash
touch /tmp/i_have_user_data /root/i_have_user_data
我可以启动一个简单的Ubuntu映像:
aws ec2 run-instances --instance-type m3.medium --image-id ami-eed10e86 --user-data file:///tmp/user_data.sh
它有效:
ubuntu@ip-10-165-90-180:~$ ls /tmp/i_have_user_data
的/ tmp / i_have_user_data
但是,如果我基于那个建立一个AMI,使用Packer:
"builders": [
{
"type": "amazon-ebs",
"region": "us-east-1",
"source_ami": "ami-eed10e86",
"instance_type": "m3.large",
"ssh_username": "ubuntu",
"tags": {
"OS_Version": "Ubuntu",
"Release": "LTS"
}
}
],
...并以与以前完全相同的方式运行,/ tmp中没有任何内容。但是,如果您运行 ec2metadata ,很明显有用户数据:
ramdisk-id: unavailable
reserveration-id: unavailable
security-groups: default
user-data: #!/bin/bash
touch /tmp/i_have_user_data /root/i_have_user_data
我非常确定这是一个状态问题,并且删除状态文件会让它完全神奇。或者,有一个技巧可以使云终端新手脚本工作,这可能会被打破。无论如何,我还没有找到。
更新:
我通过将用户数据脚本转换为一个展位来实现它的工作:
#cloud-boothook
#!/bin/sh
echo "RUNNING USER DATA SCRIPT"
仍在寻找解释他们为何停止工作的原因。 Cloud Init的文档正在变得越来越好,但还有很长的路要走。
答案 0 :(得分:5)
Packer会创建您的图像,然后在制作AMI之前拍摄快照。这是你的第一次启动。此时,您需要引导实例,根据Ubuntu,该实例将清除/tmp目录。
我会尝试将文件放在别处,看看它是否仍然存在。
#cloud-boothook每次运行,因为文档声明您负责禁用它。