Packer by HashiCorp#

You can use Packer 1.5.x to automate the creation of modified images.

Installation and configuration#

Download and unpack the Packer executable file ver. 1.5.x for the required OS and processor architecture. If the official page is unavailable, download the installation package. To use Packer, allocate a public address and import a public SSH key first.

Template file example#

This example uses Fedora 28 [Cloud Images], shell provisioner, and amazon-ebs builder to create a modified image. In Packer terms, the configuration file with the description of the created image is called template and is a JSON file.

template_fedora.json
{
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "<my_ec2_access_key>",
    "secret_key": "<my_ec2_secret_key>",
    "skip_region_validation": true,
    "availability_zone": "ru-msk-vol51",
    "subnet_id": "<subnet_id>",
    "ssh_keypair_name": "cloud_key",
    "ssh_private_key_file": "/home/test_user/.ssh/cloud_key",
    "custom_endpoint_ec2": "https://ec2.k2.cloud",
    "source_ami": "cmi-3214AD17",
    "instance_type": "m2.small",
    "ssh_username": "ec2-user",
    "ami_name": "fedora_modified_cmi",
  }],
  "provisioners" : [{
    "script": "./setup.sh",
    "type": "shell"
  }]
}
setup.sh
#!/bin/sh

echo "have fun!¡" >> ~/.bash_profile

Currently, K2 Cloud supports only amazon-ebs builder. You can read more information about creation of templates in the documentation. In the template_fedora.json example, the following parameters are used:

  • access_key and secret_key — API access keys, getting of which is described in the documentation;

  • skip_region_validation — to skip the region validation step put the true value here;

  • availability_zone — one of the available availability zones for an instance launch;

  • subnet_id — id of the subnet, where the instance will be launched;

  • ssh_keypair_name – name of the imported SSH key;

  • ssh_private_key_file – path to the private SSH key;

  • custom_endpoint_ec2 — K2 Cloud EC2 API address;

  • source_ami — ID of the base image;

  • instance_type — type of instance to launch when the image is created;

  • ssh_username — name of the user used to establish an SSH connection;

  • ami_name — name of new image;