如何使用Packer制作的新建AMI上的EC2用户数据

Jul*_*son 5 amazon-ec2 packer amazon-web-services amazon-ami

我可以很好地构建AMI图像.但他们已停止使用EC2用户数据:

有用户数据:

$ cat /tmp/user_data.sh
#!/bin/bash

touch /tmp/i_have_user_data /root/i_have_user_data
Run Code Online (Sandbox Code Playgroud)

我可以启动一个普通的Ubuntu映像:

aws ec2 run-instances --instance-type m3.medium --image-id ami-eed10e86 --user-data file:///tmp/user_data.sh
Run Code Online (Sandbox Code Playgroud)

它有效:

ubuntu@ip-10-165-90-180:~$ ls /tmp/i_have_user_data
Run Code Online (Sandbox Code Playgroud)

的/ 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"
        }
    }
],
Run Code Online (Sandbox Code Playgroud)

...并以与以前完全相同的方式运行,/ 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
Run Code Online (Sandbox Code Playgroud)

我很确定这是一个状态问题,并且删除状态文件将使它完全神奇地工作.或者,有一个技巧可以使云终端新手脚本工作,这可能会被打破.无论如何,我还没有找到.

更新:

我通过将用户数据脚本转换为一个boothook来实现它:

#cloud-boothook
#!/bin/sh
echo "RUNNING USER DATA SCRIPT"
Run Code Online (Sandbox Code Playgroud)

仍在寻找解释他们为何停止工作的原因.Cloud Init的文档越来越好,但还有很长的路要走.

Ken*_*ain 5

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

我会尝试将文件放在别处,看看它是否仍然存在.

#云boothook运行每次,因为说明你负责禁用它的文档.