如何在使用Packer构建的全新AMI上使EC2用户数据生效

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

我相信这是一个州的问题,删除州文件会让它变得不可思议地工作。另外,有一个技巧可以使云最终的upstart脚本正常工作,这可能是出了问题的原因。无论如何,我还没有找到解决方法。
更新:通过将用户数据脚本转换为引导钩子,我让它工作了。
#cloud-boothook
#!/bin/sh
echo "RUNNING USER DATA SCRIPT"

仍在寻找他们停止工作的原因。Cloud Init文档正在变得更好,但还有一段路要走。

1个回答

7
Packer 在创建 AMI 之前会先创建镜像并拍摄快照。这是第一次启动。此时,您需要启动实例,根据 Ubuntu 的说法,这将清理 /tmp 目录。
我建议尝试将文件放在其他地方,看看是否仍然存在。 #cloud-boothook 会每次运行,根据文档,您需要负责禁用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接