github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/website/source/docs/builders/amazon-ebssurrogate.html.md (about)

     1  ---
     2  description: |
     3      The amazon-ebssurrogate Packer builder is like the chroot builder, but does
     4      not require running inside an EC2 instance.
     5  layout: docs
     6  page_title: 'Amazon EBS Surrogate - Builders'
     7  sidebar_current: 'docs-builders-amazon-ebssurrogate'
     8  ---
     9  
    10  # EBS Surrogate Builder
    11  
    12  Type: `amazon-ebssurrogate`
    13  
    14  The `amazon-ebssurrogate` Packer builder is able to create Amazon AMIs by
    15  running a source instance with an attached volume, provisioning the attached
    16  volume in such a way that it can be used as the root volume for the AMI, and
    17  then snapshotting and creating the AMI from that volume.
    18  
    19  This builder can therefore be used to bootstrap scratch-build images - for
    20  example FreeBSD or Ubuntu using ZFS as the root file system.
    21  
    22  This is all done in your own AWS account. The builder will create temporary key
    23  pairs, security group rules, etc. that provide it temporary access to the
    24  instance while the image is being created.
    25  
    26  ## Configuration Reference
    27  
    28  There are many configuration options available for the builder. They are
    29  segmented below into two categories: required and optional parameters. Within
    30  each category, the available configuration keys are alphabetized.
    31  
    32  In addition to the options listed here, a
    33  [communicator](/docs/templates/communicator.html) can be configured for this
    34  builder.
    35  
    36  ### Required:
    37  
    38  -   `access_key` (string) - The access key used to communicate with AWS. [Learn
    39      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    40  
    41  -   `instance_type` (string) - The EC2 instance type to use while building the
    42      AMI, such as `m1.small`.
    43  
    44  -   `region` (string) - The name of the region, such as `us-east-1`, in which to
    45      launch the EC2 instance to create the AMI.
    46  
    47  -   `secret_key` (string) - The secret key used to communicate with AWS. [Learn
    48      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    49  
    50  -   `source_ami` (string) - The initial AMI used as a base for the newly
    51      created machine. `source_ami_filter` may be used instead to populate this
    52      automatically.
    53  
    54  -   `ami_root_device` (block device mapping) - A block device mapping describing
    55      the root device of the AMI. This looks like the mappings in `ami_block_device_mapping`,
    56      except with an additional field:
    57  
    58  -   `source_device_name` (string) - The device name of the block device on the
    59      source instance to be used as the root device for the AMI. This must correspond
    60      to a block device in `launch_block_device_mapping`.
    61  
    62  ### Optional:
    63  
    64  -   `ami_block_device_mappings` (array of block device mappings) - Add one or
    65      more [block device mappings](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
    66      to the AMI. These will be attached when booting a new instance from your
    67      AMI. To add a block device during the packer build see
    68      `launch_block_device_mappings` below. Your options here may vary depending
    69      on the type of VM you use. The block device mappings allow for the following
    70      configuration:
    71  
    72      -   `delete_on_termination` (boolean) - Indicates whether the EBS volume is
    73          deleted on instance termination. Default `false`. **NOTE**: If this
    74          value is not explicitly set to `true` and volumes are not cleaned up by
    75          an alternative method, additional volumes will accumulate after
    76          every build.
    77  
    78      -   `device_name` (string) - The device name exposed to the instance (for
    79          example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
    80  
    81      -   `encrypted` (boolean) - Indicates whether to encrypt the volume or not
    82  
    83      -   `iops` (integer) - The number of I/O operations per second (IOPS) that the
    84          volume supports. See the documentation on
    85          [IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html)
    86          for more information
    87  
    88      -   `no_device` (boolean) - Suppresses the specified device included in the
    89          block device mapping of the AMI
    90  
    91      -   `snapshot_id` (string) - The ID of the snapshot
    92  
    93      -   `virtual_name` (string) - The virtual device name. See the documentation on
    94          [Block Device
    95          Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
    96          for more information
    97  
    98      -   `volume_size` (integer) - The size of the volume, in GiB. Required if not
    99          specifying a `snapshot_id`
   100  
   101      -   `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
   102          volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
   103          volumes
   104  
   105  -   `ami_description` (string) - The description to set for the
   106      resulting AMI(s). By default this description is empty. This is a
   107      [template engine](/docs/templates/engine.html)
   108      where the `SourceAMI` variable is replaced with the source AMI ID and
   109      `BuildRegion` variable is replaced with the value of `region`.
   110  
   111  -   `ami_groups` (array of strings) - A list of groups that have access to
   112      launch the resulting AMI(s). By default no groups have permission to launch
   113      the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't
   114      accept any value other than `all`.
   115  
   116  -   `ami_product_codes` (array of strings) - A list of product codes to
   117      associate with the AMI. By default no product codes are associated with
   118      the AMI.
   119  
   120  -   `ami_regions` (array of strings) - A list of regions to copy the AMI to.
   121      Tags and attributes are copied along with the AMI. AMI copying takes time
   122      depending on the size of the AMI, but will generally take many minutes.
   123  
   124  -   `ami_users` (array of strings) - A list of account IDs that have access to
   125      launch the resulting AMI(s). By default no additional users other than the
   126      user creating the AMI has permissions to launch it.
   127  
   128  -   `ami_virtualization_type` (string) - The type of virtualization for the AMI
   129      you are building. This option must match the supported virtualization
   130      type of `source_ami`. Can be `paravirtual` or `hvm`.
   131  
   132  -   `associate_public_ip_address` (boolean) - If using a non-default VPC, public
   133      IP addresses are not provided by default. If this is toggled, your new
   134      instance will get a Public IP.
   135  
   136  -   `availability_zone` (string) - Destination availability zone to launch
   137      instance in. Leave this empty to allow Amazon to auto-assign.
   138  
   139  -   `custom_endpoint_ec2` (string) - this option is useful if you use
   140      another cloud provider that provide a compatible API with aws EC2,
   141      specify another endpoint like this "<https://ec2.another.endpoint>..com"
   142  
   143  -   `disable_stop_instance` (boolean) - Packer normally stops the build instance
   144      after all provisioners have run. For Windows instances, it is sometimes
   145      desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
   146      which will stop the instance for you. If this is set to true, Packer *will not*
   147      stop the instance and will wait for you to stop it manually. You can do this
   148      with a [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
   149  
   150      ``` json
   151      {
   152        "type": "windows-shell",
   153        "inline": ["\"c:\\Program Files\\Amazon\\Ec2ConfigService\\ec2config.exe\" -sysprep"]
   154      }
   155      ```
   156  
   157  -   `ebs_optimized` (boolean) - Mark instance as [EBS
   158      Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
   159      Default `false`.
   160  
   161  -   `ena_support` (boolean) - Enable enhanced networking (ENA but not SriovNetSupport)
   162      on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM policy.
   163      Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's
   164      documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking). Default `false`.
   165  
   166  -   `force_deregister` (boolean) - Force Packer to first deregister an existing
   167      AMI if one with the same name already exists. Default `false`.
   168  
   169  -   `force_delete_snapshot` (boolean) - Force Packer to delete snapshots associated with
   170      AMIs, which have been deregistered by `force_deregister`. Default `false`.
   171  
   172  -   `encrypt_boot` (boolean) - Instruct packer to automatically create a copy of the
   173      AMI with an encrypted boot volume (discarding the initial unencrypted AMI in the
   174      process). Packer will always run this operation, even if the base
   175      AMI has an encrypted boot volume to start with. Default `false`.
   176  
   177  -   `kms_key_id` (string) - The ID of the KMS key to use for boot volume encryption.
   178      This only applies to the main `region`, other regions where the AMI will be copied
   179      will be encrypted by the default EBS KMS key.
   180  
   181  -   `iam_instance_profile` (string) - The name of an [IAM instance
   182      profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
   183      to launch the EC2 instance with.
   184  
   185  -   `launch_block_device_mappings` (array of block device mappings) - Add one or
   186      more block devices before the packer build starts. These are not necessarily
   187      preserved when booting from the AMI built with packer. See
   188      `ami_block_device_mappings`, above, for details.
   189  
   190  -   `mfa_code` (string) - The MFA [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm)
   191      code. This should probably be a user variable since it changes all the time.
   192  
   193  -   `profile` (string) - The profile to use in the shared credentials file for
   194      AWS. See Amazon's documentation on [specifying
   195      profiles](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-profiles)
   196      for more details.
   197  
   198  -   `region_kms_key_ids` (map of strings) - a map of regions to copy the ami to,
   199      along with the custom kms key id to use for encryption for that region.
   200      Keys must match the regions provided in `ami_regions`. If you just want to
   201      encrypt using a default ID, you can stick with `kms_key_id` and `ami_regions`.
   202      If you want a region to be encrypted with that region's default key ID, you can
   203      use an empty string `""` instead of a key id in this map. (e.g. `"us-east-1": ""`)
   204      However, you cannot use default key IDs if you are using this in conjunction with
   205      `snapshot_users` -- in that situation you must use custom keys.
   206  
   207  -   `run_tags` (object of key/value strings) - Tags to apply to the instance
   208      that is *launched* to create the AMI. These tags are *not* applied to the
   209      resulting AMI unless they're duplicated in `tags`. This is a
   210      [template engine](/docs/templates/engine.html)
   211      where the `SourceAMI` variable is replaced with the source AMI ID and
   212      `BuildRegion` variable is replaced with the value of `region`.
   213  
   214  -   `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
   215      that are *launched* to create the AMI. These tags are *not* applied to the
   216      resulting AMI unless they're duplicated in `tags`. This is a
   217      [template engine](/docs/templates/engine.html)
   218      where the `SourceAMI` variable is replaced with the source AMI ID and
   219      `BuildRegion` variable is replaced with the value of `region`.
   220  
   221  -   `security_group_id` (string) - The ID (*not* the name) of the security group
   222      to assign to the instance. By default this is not set and Packer will
   223      automatically create a new temporary security group to allow SSH access.
   224      Note that if this is specified, you must be sure the security group allows
   225      access to the `ssh_port` given below.
   226  
   227  -   `security_group_ids` (array of strings) - A list of security groups as
   228      described above. Note that if this is specified, you must omit the
   229      `security_group_id`.
   230  
   231  -   `shutdown_behavior` (string) - Automatically terminate instances on shutdown
   232      incase packer exits ungracefully. Possible values are "stop" and "terminate",
   233      default is `stop`.
   234  
   235  -   `skip_region_validation` (boolean) - Set to true if you want to skip
   236      validation of the region configuration option. Default `false`.
   237  
   238  -   `snapshot_groups` (array of strings) - A list of groups that have access to
   239      create volumes from the snapshot(s). By default no groups have permission to create
   240      volumes form the snapshot(s). `all` will make the snapshot publicly accessible.
   241  
   242  -   `snapshot_users` (array of strings) - A list of account IDs that have access to
   243      create volumes from the snapshot(s). By default no additional users other than the
   244      user creating the AMI has permissions to create volumes from the backing snapshot(s).
   245  
   246  -   `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
   247      They will override AMI tags if already applied to snapshot. This is a
   248      [template engine](/docs/templates/engine.html)
   249      where the `SourceAMI` variable is replaced with the source AMI ID and
   250      `BuildRegion` variable is replaced with the value of `region`.
   251  
   252  -   `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
   253      Example:
   254  
   255      ``` json
   256      {
   257        "source_ami_filter": {
   258          "filters": {
   259            "virtualization-type": "hvm",
   260            "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
   261            "root-device-type": "ebs"
   262          },
   263          "owners": ["099720109477"],
   264          "most_recent": true
   265        }
   266      }
   267      ```
   268  
   269      This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical.
   270      NOTE: This will fail unless *exactly* one AMI is returned. In the above
   271      example, `most_recent` will cause this to succeed by selecting the newest image.
   272  
   273      -   `filters` (map of strings) - filters used to select a `source_ami`.
   274          NOTE: This will fail unless *exactly* one AMI is returned.
   275          Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
   276          is valid.
   277  
   278      -   `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
   279          This is helpful to limit the AMIs to a trusted third party, or to your own account.
   280  
   281      -   `most_recent` (bool) - Selects the newest created image when true.
   282          This is most useful for selecting a daily distro build.
   283  
   284  -   `spot_price` (string) - The maximum hourly price to pay for a spot instance
   285      to create the AMI. Spot instances are a type of instance that EC2 starts
   286      when the current spot price is less than the maximum price you specify. Spot
   287      price will be updated based on available spot instance capacity and current
   288      spot instance requests. It may save you some costs. You can set this to
   289      `auto` for Packer to automatically discover the best spot price or to "0"
   290      to use an on demand instance (default).
   291  
   292  -   `spot_price_auto_product` (string) - Required if `spot_price` is set
   293      to `auto`. This tells Packer what sort of AMI you're launching to find the
   294      best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
   295      `Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)`
   296  
   297  -   `sriov_support` (boolean) - Enable enhanced networking (SriovNetSupport but not ENA)
   298      on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM
   299      policy. Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's
   300      documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking).
   301      Default `false`.
   302  
   303  -   `ssh_keypair_name` (string) - If specified, this is the key that will be
   304      used for SSH with the machine. The key must match a key pair name loaded
   305      up into Amazon EC2. By default, this is blank, and Packer will
   306      generate a temporary keypair unless
   307      [`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
   308      [`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
   309      or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized.
   310  
   311  -   `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to
   312      authenticate connections to the source instance. No temporary keypair will
   313      be created, and the values of `ssh_password` and `ssh_private_key_file` will
   314      be ignored. To use this option with a key pair already configured in the source
   315      AMI, leave the `ssh_keypair_name` blank. To associate an existing key pair
   316      in AWS with the source instance, set the `ssh_keypair_name` field to the name
   317      of the key pair.
   318  
   319  -   `ssh_private_ip` (boolean) - If true, then SSH will always use the private
   320      IP if available.
   321  
   322  -   `subnet_id` (string) - If using VPC, the ID of the subnet, such as
   323      `subnet-12345def`, where Packer will launch the EC2 instance. This field is
   324      required if you are using an non-default VPC.
   325  
   326  -   `tags` (object of key/value strings) - Tags applied to the AMI and
   327      relevant snapshots. This is a
   328      [template engine](/docs/templates/engine.html)
   329      where the `SourceAMI` variable is replaced with the source AMI ID and
   330      `BuildRegion` variable is replaced with the value of `region`.
   331  
   332  -   `temporary_key_pair_name` (string) - The name of the temporary keypair
   333      to generate. By default, Packer generates a name with a UUID.
   334  
   335  -   `token` (string) - The access token to use. This is different from the
   336      access key and secret key. If you're not sure what this is, then you
   337      probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
   338      environmental variable.
   339  
   340  -   `user_data` (string) - User data to apply when launching the instance. Note
   341      that you need to be careful about escaping characters due to the templates
   342      being JSON. It is often more convenient to use `user_data_file`, instead.
   343  
   344  -   `user_data_file` (string) - Path to a file that will be used for the user
   345      data when launching the instance.
   346  
   347  -   `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
   348      in order to create a temporary security group within the VPC. Requires `subnet_id`
   349      to be set. If this field is left blank, Packer will try to get the VPC ID from the
   350      `subnet_id`.
   351  
   352  -   `windows_password_timeout` (string) - The timeout for waiting for a Windows
   353      password for Windows instances. Defaults to 20 minutes. Example value: `10m`
   354  
   355  ## Basic Example
   356  
   357  ``` json
   358  {
   359     "type" : "amazon-ebssurrogate",
   360     "secret_key" : "YOUR SECRET KEY HERE",
   361     "access_key" : "YOUR KEY HERE",
   362     "region" : "us-east-1",
   363     "ssh_username" : "ubuntu",
   364     "instance_type" : "t2.medium",
   365     "source_ami" : "ami-40d28157",
   366     "launch_block_device_mappings" : [
   367       {
   368         "volume_type" : "gp2",
   369         "device_name" : "/dev/xvdf",
   370         "delete_on_termination" : false,
   371         "volume_size" : 10
   372       }
   373     ],
   374     "ami_root_device": {
   375       "source_device_name": "/dev/xvdf",
   376       "device_name": "/dev/xvda",
   377       "delete_on_termination": true,
   378       "volume_size": 16,
   379       "volume_type": "gp2"
   380     }
   381  }
   382  ```
   383  
   384  -&gt; **Note:** Packer can also read the access key and secret access key from
   385  environmental variables. See the configuration reference in the section above
   386  for more information on what environmental variables Packer will look for.
   387  
   388  Further information on locating AMI IDs and their relationship to instance
   389  types and regions can be found in the AWS EC2 Documentation
   390  [for Linux](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)
   391  or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html).
   392  
   393  ## Accessing the Instance to Debug
   394  
   395  If you need to access the instance to debug for some reason, run the builder
   396  with the `-debug` flag. In debug mode, the Amazon builder will save the private
   397  key in the current directory and will output the DNS or IP information as well.
   398  You can use this information to access the instance as it is running.
   399  
   400  -&gt; **Note:** Packer uses pre-built AMIs as the source for building images.
   401  These source AMIs may include volumes that are not flagged to be destroyed on
   402  termination of the instance building the new image. In addition to those volumes
   403  created by this builder, any volumes inn the source AMI which are not marked for
   404  deletion on termination will remain in your account.