github.com/marksheahan/packer@v0.10.2-0.20160613200515-1acb2d6645a0/website/source/docs/builders/amazon-ebs.html.md (about)

     1  ---
     2  description: |
     3      The `amazon-ebs` Packer builder is able to create Amazon AMIs backed by EBS
     4      volumes for use in EC2. For more information on the difference between
     5      EBS-backed instances and instance-store backed instances, see the storage for
     6      the root device section in the EC2 documentation.
     7  layout: docs
     8  page_title: 'Amazon AMI Builder (EBS backed)'
     9  ...
    10  
    11  # AMI Builder (EBS backed)
    12  
    13  Type: `amazon-ebs`
    14  
    15  The `amazon-ebs` Packer builder is able to create Amazon AMIs backed by EBS
    16  volumes for use in [EC2](https://aws.amazon.com/ec2/). For more information on
    17  the difference between EBS-backed instances and instance-store backed instances,
    18  see the ["storage for the root device" section in the EC2
    19  documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device).
    20  
    21  This builder builds an AMI by launching an EC2 instance from a source AMI,
    22  provisioning that running machine, and then creating an AMI from that machine.
    23  This is all done in your own AWS account. The builder will create temporary
    24  keypairs, security group rules, etc. that provide it temporary access to the
    25  instance while the image is being created. This simplifies configuration quite a
    26  bit.
    27  
    28  The builder does *not* manage AMIs. Once it creates an AMI and stores it in your
    29  account, it is up to you to use, delete, etc. the AMI.
    30  
    31  ## Configuration Reference
    32  
    33  There are many configuration options available for the builder. They are
    34  segmented below into two categories: required and optional parameters. Within
    35  each category, the available configuration keys are alphabetized.
    36  
    37  In addition to the options listed here, a
    38  [communicator](/docs/templates/communicator.html) can be configured for this
    39  builder.
    40  
    41  ### Required:
    42  
    43  -   `access_key` (string) - The access key used to communicate with AWS. [Learn
    44      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    45  
    46  -   `ami_name` (string) - The name of the resulting AMI that will appear when
    47      managing AMIs in the AWS console or via APIs. This must be unique. To help
    48      make this unique, use a function like `timestamp` (see [configuration
    49      templates](/docs/templates/configuration-templates.html) for more info)
    50  
    51  -   `instance_type` (string) - The EC2 instance type to use while building the
    52      AMI, such as "m1.small".
    53  
    54  -   `region` (string) - The name of the region, such as "us-east-1", in which to
    55      launch the EC2 instance to create the AMI.
    56  
    57  -   `secret_key` (string) - The secret key used to communicate with AWS. [Learn
    58      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    59  
    60  -   `source_ami` (string) - The initial AMI used as a base for the newly
    61      created machine.
    62  
    63  -   `ssh_username` (string) - The username to use in order to communicate over
    64      SSH to the running machine.
    65  
    66  ### Optional:
    67  
    68  -   `ami_block_device_mappings` (array of block device mappings) - Add the block
    69      device mappings to the AMI. The block device mappings allow for keys:
    70  
    71      -   `device_name` (string) - The device name exposed to the instance (for
    72           example, "/dev/sdh" or "xvdh"). Required when specifying `volume_size`.
    73      -   `delete_on_termination` (boolean) - Indicates whether the EBS volume is
    74          deleted on instance termination
    75      -   `encrypted` (boolean) - Indicates whether to encrypt the volume or not
    76      -   `iops` (integer) - The number of I/O operations per second (IOPS) that the
    77          volume supports. See the documentation on
    78          [IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
    79          for more information
    80      -   `no_device` (boolean) - Suppresses the specified device included in the
    81          block device mapping of the AMI
    82      -   `snapshot_id` (string) - The ID of the snapshot
    83      -   `virtual_name` (string) - The virtual device name. See the documentation on
    84          [Block Device
    85          Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
    86          for more information
    87      -   `volume_size` (integer) - The size of the volume, in GiB. Required if not
    88          specifying a `snapshot_id`
    89      -   `volume_type` (string) - The volume type. gp2 for General Purpose (SSD)
    90          volumes, io1 for Provisioned IOPS (SSD) volumes, and standard for Magnetic
    91          volumes
    92  -   `ami_description` (string) - The description to set for the
    93      resulting AMI(s). By default this description is empty.
    94  
    95  -   `ami_groups` (array of strings) - A list of groups that have access to
    96      launch the resulting AMI(s). By default no groups have permission to launch
    97      the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
    98      accept any value other than "all".
    99  
   100  -   `ami_product_codes` (array of strings) - A list of product codes to
   101      associate with the AMI. By default no product codes are associated with
   102      the AMI.
   103  
   104  -   `ami_regions` (array of strings) - A list of regions to copy the AMI to.
   105      Tags and attributes are copied along with the AMI. AMI copying takes time
   106      depending on the size of the AMI, but will generally take many minutes.
   107  
   108  -   `ami_users` (array of strings) - A list of account IDs that have access to
   109      launch the resulting AMI(s). By default no additional users other than the
   110      user creating the AMI has permissions to launch it.
   111  
   112  -   `associate_public_ip_address` (boolean) - If using a non-default VPC, public
   113      IP addresses are not provided by default. If this is toggled, your new
   114      instance will get a Public IP.
   115  
   116  -   `availability_zone` (string) - Destination availability zone to launch
   117      instance in. Leave this empty to allow Amazon to auto-assign.
   118  
   119  -   `disable_stop_instance` (boolean) - Packer normally stops the build instance
   120      after all provisioners have run. For Windows instances, it is sometimes
   121      desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
   122      which will stop the instance for you. If this is set to true, Packer *will not*
   123      stop the instance and will wait for you to stop it manually. You can do this
   124      with a [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
   125  
   126      ``` {.javascript}
   127      {
   128        "type": "windows-shell",
   129        "inline": ["\"c:\\Program Files\\Amazon\\Ec2ConfigService\\ec2config.exe\" -sysprep"]
   130      }```
   131  
   132  -   `ebs_optimized` (boolean) - Mark instance as [EBS
   133      Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
   134      Default `false`.
   135  
   136  -   `enhanced_networking` (boolean) - Enable enhanced
   137      networking (SriovNetSupport) on HVM-compatible AMIs. If true, add
   138      `ec2:ModifyInstanceAttribute` to your AWS IAM policy.
   139  
   140  -   `force_deregister` (boolean) - Force Packer to first deregister an existing
   141      AMI if one with the same name already exists. Default `false`.
   142  
   143  -   `iam_instance_profile` (string) - The name of an [IAM instance
   144      profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
   145      to launch the EC2 instance with.
   146  
   147  -   `launch_block_device_mappings` (array of block device mappings) - Add the
   148      block device mappings to the launch instance. The block device mappings are
   149      the same as `ami_block_device_mappings` above.
   150  
   151  -   `run_tags` (object of key/value strings) - Tags to apply to the instance
   152      that is *launched* to create the AMI. These tags are *not* applied to the
   153      resulting AMI unless they're duplicated in `tags`.
   154  
   155  -   `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
   156      that are *launched* to create the AMI. These tags are *not* applied to the
   157      resulting AMI unless they're duplicated in `tags`.
   158  
   159  -   `security_group_id` (string) - The ID (*not* the name) of the security group
   160      to assign to the instance. By default this is not set and Packer will
   161      automatically create a new temporary security group to allow SSH access.
   162      Note that if this is specified, you must be sure the security group allows
   163      access to the `ssh_port` given below.
   164  
   165  -   `security_group_ids` (array of strings) - A list of security groups as
   166      described above. Note that if this is specified, you must omit the
   167      `security_group_id`.
   168  
   169  -   `skip_region_validation` (boolean) - Set to true if you want to skip 
   170      validation of the region configuration option.  Defaults to false.
   171  
   172  -   `spot_price` (string) - The maximum hourly price to pay for a spot instance
   173      to create the AMI. Spot instances are a type of instance that EC2 starts
   174      when the current spot price is less than the maximum price you specify. Spot
   175      price will be updated based on available spot instance capacity and current
   176      spot instance requests. It may save you some costs. You can set this to
   177      "auto" for Packer to automatically discover the best spot price or to "0"
   178      to use an on demand instance (default).
   179  
   180  -   `spot_price_auto_product` (string) - Required if `spot_price` is set
   181      to "auto". This tells Packer what sort of AMI you're launching to find the
   182      best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
   183      `Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
   184  
   185  -   `ssh_keypair_name` (string) - If specified, this is the key that will be
   186      used for SSH with the machine. By default, this is blank, and Packer will
   187      generate a temporary keypair.
   188      [`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
   189      must be specified with this.
   190  
   191  -   `ssh_private_ip` (boolean) - If true, then SSH will always use the private
   192      IP if available.
   193  
   194  -   `subnet_id` (string) - If using VPC, the ID of the subnet, such as
   195      "subnet-12345def", where Packer will launch the EC2 instance. This field is
   196      required if you are using an non-default VPC.
   197  
   198  -   `tags` (object of key/value strings) - Tags applied to the AMI and
   199      relevant snapshots.
   200  
   201  -   `temporary_key_pair_name` (string) - The name of the temporary keypair
   202      to generate. By default, Packer generates a name with a UUID.
   203  
   204  -   `token` (string) - The access token to use. This is different from the
   205      access key and secret key. If you're not sure what this is, then you
   206      probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
   207      environmental variable.
   208  
   209  -   `user_data` (string) - User data to apply when launching the instance. Note
   210      that you need to be careful about escaping characters due to the templates
   211      being JSON. It is often more convenient to use `user_data_file`, instead.
   212  
   213  -   `user_data_file` (string) - Path to a file that will be used for the user
   214      data when launching the instance.
   215  
   216  -   `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
   217      in order to create a temporary security group within the VPC.
   218  
   219  -   `windows_password_timeout` (string) - The timeout for waiting for a Windows
   220      password for Windows instances. Defaults to 20 minutes. Example value: "10m"
   221  
   222  ## Basic Example
   223  
   224  Here is a basic example. You will need to provide access keys, and may need to change the AMI IDs according to what images exist at the time the template is run:
   225  
   226  ``` {.javascript}
   227  {
   228    "type": "amazon-ebs",
   229    "access_key": "YOUR KEY HERE",
   230    "secret_key": "YOUR SECRET KEY HERE",
   231    "region": "us-east-1",
   232    "source_ami": "ami-fce3c696",
   233    "instance_type": "t2.micro",
   234    "ssh_username": "ubuntu",
   235    "ami_name": "packer-quick-start {{timestamp}}"
   236  }
   237  ```
   238  
   239  -> **Note:** Packer can also read the access key and secret access key from
   240  environmental variables. See the configuration reference in the section above
   241  for more information on what environmental variables Packer will look for.
   242  
   243  Further information on locating AMI IDs and their relationship to instance types and regions can be found in the AWS EC2 Documentation [for Linux](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html) or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html).
   244  
   245  ## Accessing the Instance to Debug
   246  
   247  If you need to access the instance to debug for some reason, run the builder
   248  with the `-debug` flag. In debug mode, the Amazon builder will save the private
   249  key in the current directory and will output the DNS or IP information as well.
   250  You can use this information to access the instance as it is running.
   251  
   252  ## AMI Block Device Mappings Example
   253  
   254  Here is an example using the optional AMI block device mappings. This will add
   255  the /dev/sdb and /dev/sdc block device mappings to the finished AMI. As with the basic example, you will need to provide access keys and may need to change the source AMI ID based on what images exist when this template is run:
   256  
   257  ``` {.javascript}
   258  {
   259    "type": "amazon-ebs",
   260    "access_key": "YOUR KEY HERE",
   261    "secret_key": "YOUR SECRET KEY HERE",
   262    "region": "us-east-1",
   263    "source_ami": "ami-fce3c696",
   264    "instance_type": "t2.micro",
   265    "ssh_username": "ubuntu",
   266    "ami_name": "packer-quick-start {{timestamp}}",
   267    "ami_block_device_mappings": [
   268      {
   269        "device_name": "/dev/sdb",
   270        "virtual_name": "ephemeral0"
   271      },
   272      {
   273        "device_name": "/dev/sdc",
   274        "virtual_name": "ephemeral1"
   275      }
   276    ]
   277  }
   278  ```
   279  
   280  ## Tag Example
   281  
   282  Here is an example using the optional AMI tags. This will add the tags
   283  "OS\_Version" and "Release" to the finished AMI. As before, you will need to provide your access keys, and may need to change the source AMI ID based on what images exist when this template is run:
   284  
   285  ``` {.javascript}
   286  {
   287    "type": "amazon-ebs",
   288    "access_key": "YOUR KEY HERE",
   289    "secret_key": "YOUR SECRET KEY HERE",
   290    "region": "us-east-1",
   291    "source_ami": "ami-fce3c696",
   292    "instance_type": "t2.micro",
   293    "ssh_username": "ubuntu",
   294    "ami_name": "packer-quick-start {{timestamp}}",
   295    "tags": {
   296      "OS_Version": "Ubuntu",
   297      "Release": "Latest"
   298    }
   299  }
   300  ```
   301  
   302  -> **Note:** Packer uses pre-built AMIs as the source for building images.
   303  These source AMIs may include volumes that are not flagged to be destroyed on
   304  termination of the instance building the new image. Packer will attempt to clean
   305  up all residual volumes that are not designated by the user to remain after
   306  termination. If you need to preserve those source volumes, you can overwrite the
   307  termination setting by specifying `delete_on_termination=false` in the
   308  `launch_device_mappings` block for the device.