AWS user_data with Packer

Viewed 11565

So I'm trying to use Packer to create an AWS image and specify some user data via user_data_file. The contents of this file needs to be run when the instance boots as it will be unique each time. I can't bake this into the AMI.

Using packer I have the following:

{
  "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"
  }]
}

The contents of my user_data shell script are just a few basic config lines for a package that was installed via the ansible scripts that were run in the provisioners step. Watching the output of Packer I can confirm that the ansible scripts all run.

Packer completes and creates the AMI, but the user data piece is never executed. No record of it exists in resulting image. There is no /userdata.log file and /var/lib/cloud/instance/user-data.txt is empty I feel like I missing something basic as this should be a very simple thing to do with Packer.

3 Answers

Uploading to /var/lib/cloud/scripts/* will work, but it depends on how you want your images built. Do you need to be able to spin up an instance quickly?

The best solution would be to us Packer provisioners. Provisioners are used to install and configure the machine image after booting by using ansible/salt/puppet/cheff/shell scripts etc, you can provision your image with what ever you need. That way you are not tied down to having to provision deps on each instance launch, which can cause some issues (think intermittent network issues/failures, which could cause some deps not to be installed)

The provisioners for packer are third party u

Related