7

我可以很好地构建 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

但是,如果我使用 Packer 基于该 AMI 构建一个 AMI:

"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

我很确定这是一个状态问题,删除状态文件将使这一切神奇地工作。或者,有一个技巧可以让云最终的新贵脚本工作,这可能是坏的。反正我还没找到。

更新

我通过将用户数据脚本变成了一个bootook来使它工作:

#cloud-boothook
#!/bin/sh
echo "RUNNING USER DATA SCRIPT"

仍在寻找他们停止工作的原因。Cloud Init 的文档越来越好,但仍有一段路要走。

4

1 回答 1

6

Packer 会创建您的映像,然后在制作 AMI 之前拍摄快照。这是你的第一次启动。此时您需要启动实例,根据 Ubuntu,它会清理/tmp目录。

我会尝试将文件放在其他地方,看看它是否仍然存在。

#cloud-boothook每次都会运行,因为文档说明您负责禁用它。

于 2015-08-18T00:33:54.273 回答