因此,我尝试使用Packer创建一个AWS镜像并通过user_data_file指定一些用户数据。实例启动时需要运行此文件的内容,因为每次都将是唯一的。我无法将其烘焙到AMI中。

使用打包程序,我有以下几点:

{
  "variables": {
  "ami_name": ""
  },
  "builders": [
  {
    "type": "amazon-ebs",
    "region": "us-east-1",
    "source_ami": "ami-c8580bdf",
    "instance_type": "t2.micro",
    "ssh_username": "ubuntu",
    "ami_name": "{{ user `ami_name` }}-{{ isotime | clean_ami_name }}",
    "user_data_file": "user_data.sh",
    "tags": {
      "os_version": "ubuntu",
      "built_by": "packer",
      "build_on": "{{ isotime | clean_ami_name }}",
      "Name": "{{ user `ami_name` }}"
    }
  }],
  "provisioners": [
  {
    "type": "ansible",
    "playbook_file": "playbook.yml",
    "user": "ubuntu"
  }]
}

我的user_data Shell脚本的内容只是通过在Provisioners步骤中运行的ansible脚本安装的软件包的一些基本配置行。观看Packer的输出,我可以确认ansible脚本均已运行。

Packer完成并创建了AMI,但是从未执行用户数据段。结果图像中不存在任何记录。没有/userdata.log文件,并且/var/lib/cloud/instance/user-data.txt为空,我觉得我缺少一些基本的知识,因为这对于Packer来说应该是一件非常简单的事情。

最佳答案

重读此内容,我认为您可能误解了用户数据脚本与Packer一起工作的方式。

Packer启动EC2实例时,将提供user_data。预配快照并另存为AMI之后,该实例最终结束。

从创建的AMI启动新实例时,它没有相同的用户数据,它将获取您在启动此新实例时指定的用户数据。

初始(在模板中定义)用户数据的影响可能会或可能不会出现在新实例中,具体取决于更改是否在AMI中保持不变。

关于amazon-web-services - 带有Packer的AWS user_data,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45110795/

10-13 04:54