github.com/StackPointCloud/packer@v0.10.2-0.20180716202532-b28098e0f79b/website/source/docs/builders/amazon-ebsvolume.html.md (about)

     1  ---
     2  description: |
     3      The amazon-ebsvolume Packer builder is like the EBS builder, but is intended
     4      to create EBS volumes rather than a machine image.
     5  layout: docs
     6  page_title: 'Amazon EBS Volume - Builders'
     7  sidebar_current: 'docs-builders-amazon-ebsvolume'
     8  ---
     9  
    10  # EBS Volume Builder
    11  
    12  Type: `amazon-ebsvolume`
    13  
    14  The `amazon-ebsvolume` Packer builder is able to create Amazon Elastic Block
    15  Store volumes which are prepopulated with filesystems or data.
    16  
    17  This builder builds EBS volumes by launching an EC2 instance from a source AMI,
    18  provisioning that running machine, and then destroying the source machine,
    19  keeping the volumes intact.
    20  
    21  This is all done in your own AWS account. The builder will create temporary key
    22  pairs, security group rules, etc. that provide it temporary access to the
    23  instance while the image is being created.
    24  
    25  The builder does *not* manage EBS Volumes. Once it creates volumes and stores it
    26  in your account, it is up to you to use, delete, etc. the volumes.
    27  
    28  -> **Note:** Temporary resources are, by default, all created with the prefix
    29  `packer`. This can be useful if you want to restrict the security groups and
    30  key pairs Packer is able to operate on.
    31  
    32  ## Configuration Reference
    33  
    34  There are many configuration options available for the builder. They are
    35  segmented below into two categories: required and optional parameters. Within
    36  each category, the available configuration keys are alphabetized.
    37  
    38  In addition to the options listed here, a
    39  [communicator](/docs/templates/communicator.html) can be configured for this
    40  builder.
    41  
    42  ### Required:
    43  
    44  -   `access_key` (string) - The access key used to communicate with AWS. [Learn
    45      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    46  
    47  -   `instance_type` (string) - The EC2 instance type to use while building the
    48      AMI, such as `m1.small`.
    49  
    50  -   `region` (string) - The name of the region, such as `us-east-1`, in which to
    51      launch the EC2 instance to create the AMI.
    52  
    53  -   `secret_key` (string) - The secret key used to communicate with AWS. [Learn
    54      how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials)
    55  
    56  -   `source_ami` (string) - The initial AMI used as a base for the newly
    57      created machine. `source_ami_filter` may be used instead to populate this
    58      automatically.
    59  
    60  ### Optional:
    61  
    62  -   `ebs_volumes` (array of block device mappings) - Add the block
    63      device mappings to the AMI. The block device mappings allow for keys:
    64  
    65      -   `device_name` (string) - The device name exposed to the instance (for
    66          example, `/dev/sdh` or `xvdh`). Required when specifying `volume_size`.
    67  
    68      -   `delete_on_termination` (boolean) - Indicates whether the EBS volume is
    69          deleted on instance termination.
    70  
    71      -   `encrypted` (boolean) - Indicates whether to encrypt the volume or not
    72  
    73      -   `kms_key_id` (string) - The ARN for the KMS encryption key. When
    74          specifying `kms_key_id`, `encrypted` needs to be set to `true`.
    75  
    76      -   `iops` (number) - 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  
    81      -   `no_device` (boolean) - Suppresses the specified device included in the
    82          block device mapping of the AMI
    83  
    84      -   `snapshot_id` (string) - The ID of the snapshot
    85  
    86      -   `virtual_name` (string) - The virtual device name. See the documentation on
    87          [Block Device
    88          Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html)
    89          for more information
    90  
    91      -   `volume_size` (number) - The size of the volume, in GiB. Required if not
    92          specifying a `snapshot_id`
    93  
    94      -   `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD)
    95          volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
    96          volumes
    97  
    98      -   `tags` (map) - Tags to apply to the volume. These are retained after the
    99          builder completes. This is a
   100          [template engine](/docs/templates/engine.html),
   101          see [Build template data](#build-template-data) for more information.
   102  
   103  -   `associate_public_ip_address` (boolean) - If using a non-default VPC, public
   104      IP addresses are not provided by default. If this is toggled, your new
   105      instance will get a Public IP.
   106  
   107  -   `availability_zone` (string) - Destination availability zone to launch
   108      instance in. Leave this empty to allow Amazon to auto-assign.
   109  
   110  -   `custom_endpoint_ec2` (string) - This option is useful if you use a cloud
   111      provider whose API is compatible with aws EC2. Specify another endpoint
   112      like this `https://ec2.custom.endpoint.com`.
   113  
   114  -   `disable_stop_instance` (boolean) - Packer normally stops the build instance
   115      after all provisioners have run. For Windows instances, it is sometimes
   116      desirable to [run Sysprep](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ami-create-standard.html)
   117      which will stop the instance for you. If this is set to true, Packer *will not*
   118      stop the instance but will assume that you will send the stop signal
   119      yourself through your final provisioner. You can do this with a
   120      [windows-shell provisioner](https://www.packer.io/docs/provisioners/windows-shell.html).
   121  
   122      Note that Packer will still wait for the instance to be stopped, and failing
   123      to send the stop signal yourself, when you have set this flag to `true`,
   124      will cause a timeout.
   125  
   126      Example of a valid shutdown command:
   127  
   128      ``` json
   129      {
   130        "type": "windows-shell",
   131        "inline": ["\"c:\\Program Files\\Amazon\\Ec2ConfigService\\ec2config.exe\" -sysprep"]
   132      }
   133      ```
   134  
   135  -   `ebs_optimized` (boolean) - Mark instance as [EBS
   136      Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html).
   137      Default `false`.
   138  
   139  -   `ena_support` (boolean) - Enable enhanced networking (ENA but not SriovNetSupport)
   140      on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM policy.
   141      Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's
   142      documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking). Default `false`.
   143  
   144  -   `enable_t2_unlimited` (boolean) - Enabling T2 Unlimited allows the source
   145      instance to burst additional CPU beyond its available [CPU Credits]
   146      (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-credits-baseline-concepts.html)
   147      for as long as the demand exists.
   148      This is in contrast to the standard configuration that only allows an
   149      instance to consume up to its available CPU Credits.
   150      See the AWS documentation for [T2 Unlimited]
   151      (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-unlimited.html)
   152      and the 'T2 Unlimited Pricing' section of the [Amazon EC2 On-Demand
   153      Pricing](https://aws.amazon.com/ec2/pricing/on-demand/) document for more
   154      information.
   155      By default this option is disabled and Packer will set up a [T2
   156      Standard](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-std.html)
   157      instance instead.
   158  
   159      To use T2 Unlimited you must use a T2 instance type e.g. t2.micro.
   160      Additionally, T2 Unlimited cannot be used in conjunction with Spot
   161      Instances e.g. when the `spot_price` option has been configured.
   162      Attempting to do so will cause an error.
   163  
   164      !> **Warning!** Additional costs may be incurred by enabling T2
   165      Unlimited - even for instances that would usually qualify for the
   166      [AWS Free Tier](https://aws.amazon.com/free/).
   167  
   168  -   `iam_instance_profile` (string) - The name of an [IAM instance
   169      profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
   170      to launch the EC2 instance with.
   171  
   172  -   `mfa_code` (string) - The MFA [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm)
   173      code. This should probably be a user variable since it changes all the time.
   174  
   175  -   `profile` (string) - The profile to use in the shared credentials file for
   176      AWS. See Amazon's documentation on [specifying
   177      profiles](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-profiles)
   178      for more details.
   179  
   180  -   `run_tags` (object of key/value strings) - Tags to apply to the instance
   181      that is *launched* to create the AMI. These tags are *not* applied to the
   182      resulting AMI unless they're duplicated in `tags`. This is a
   183      [template engine](/docs/templates/engine.html),
   184      see [Build template data](#build-template-data) for more information.
   185  
   186  -   `security_group_id` (string) - The ID (*not* the name) of the security group
   187      to assign to the instance. By default this is not set and Packer will
   188      automatically create a new temporary security group to allow SSH access.
   189      Note that if this is specified, you must be sure the security group allows
   190      access to the `ssh_port` given below.
   191  
   192  -   `security_group_ids` (array of strings) - A list of security groups as
   193      described above. Note that if this is specified, you must omit the
   194      `security_group_id`.
   195  
   196  -   `temporary_security_group_source_cidr` (string) - An IPv4 CIDR block to be authorized
   197      access to the instance, when packer is creating a temporary security group.
   198      The default is `0.0.0.0/0` (ie, allow any IPv4 source). This is only used
   199      when `security_group_id` or `security_group_ids` is not specified.
   200  
   201  -   `shutdown_behavior` (string) - Automatically terminate instances on shutdown
   202      in case Packer exits ungracefully. Possible values are `stop` and `terminate`.
   203      Defaults to `stop`.
   204  
   205  -   `skip_region_validation` (boolean) - Set to `true` if you want to skip
   206      validation of the region configuration option. Defaults to `false`.
   207  
   208  -   `snapshot_groups` (array of strings) - A list of groups that have access to
   209      create volumes from the snapshot(s). By default no groups have permission to create
   210      volumes from the snapshot(s). `all` will make the snapshot publicly accessible.
   211  
   212  -   `snapshot_users` (array of strings) - A list of account IDs that have access to
   213      create volumes from the snapshot(s). By default no additional users other than the
   214      user creating the AMI has permissions to create volumes from the backing snapshot(s).
   215  
   216  -   `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
   217      Example:
   218  
   219      ``` json
   220      {
   221        "source_ami_filter": {
   222          "filters": {
   223            "virtualization-type": "hvm",
   224            "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
   225            "root-device-type": "ebs"
   226          },
   227          "owners": ["099720109477"],
   228          "most_recent": true
   229        }
   230      }
   231      ```
   232  
   233      This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical.
   234      NOTE: This will fail unless *exactly* one AMI is returned. In the above
   235      example, `most_recent` will cause this to succeed by selecting the newest image.
   236  
   237      -   `filters` (map of strings) - filters used to select a `source_ami`.
   238          NOTE: This will fail unless *exactly* one AMI is returned.
   239          Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
   240          is valid.
   241  
   242      -   `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs.
   243          This is helpful to limit the AMIs to a trusted third party, or to your own account.
   244  
   245      -   `most_recent` (boolean) - Selects the newest created image when true.
   246          This is most useful for selecting a daily distro build.
   247  
   248      You may set this in place of `source_ami` or in conjunction with it. If you
   249      set this in conjunction with `source_ami`, the `source_ami` will be added to
   250      the filter. The provided `source_ami` must meet all of the filtering criteria
   251      provided in `source_ami_filter`; this pins the AMI returned by the filter,
   252      but will cause Packer to fail if the `source_ami` does not exist.
   253  
   254  -   `spot_price` (string) - The maximum hourly price to pay for a spot instance
   255      to create the AMI. Spot instances are a type of instance that EC2 starts
   256      when the current spot price is less than the maximum price you specify. Spot
   257      price will be updated based on available spot instance capacity and current
   258      spot instance requests. It may save you some costs. You can set this to
   259      `auto` for Packer to automatically discover the best spot price or to `0`
   260      to use an on-demand instance (default).
   261  
   262  -   `spot_price_auto_product` (string) - Required if `spot_price` is set
   263      to `auto`. This tells Packer what sort of AMI you're launching to find the
   264      best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`,
   265      `Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)` or `Windows (Amazon VPC)`
   266  
   267  -   `spot_tags` (object of key/value strings) - Requires `spot_price` to
   268      be set. This tells Packer to apply tags to the spot request that is
   269      issued.
   270  
   271  -   `sriov_support` (boolean) - Enable enhanced networking (SriovNetSupport but not ENA)
   272      on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM
   273      policy. Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's
   274      documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking).
   275      Default `false`.
   276  
   277  -   `ssh_keypair_name` (string) - If specified, this is the key that will be
   278      used for SSH with the machine. By default, this is blank, and Packer will
   279      generate a temporary key pair unless
   280      [`ssh_password`](/docs/templates/communicator.html#ssh_password) is used.
   281      [`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file)
   282      must be specified with this.
   283  
   284  -   `ssh_private_ip` (boolean) - No longer supported. See
   285      [`ssh_interface`](#ssh_interface). A fixer exists to migrate.
   286  
   287  -   `ssh_interface` (string) - One of `public_ip`, `private_ip`,
   288      `public_dns` or `private_dns`. If set, either the public IP address,
   289      private IP address, public DNS name or private DNS name will used as the host for SSH.
   290      The default behaviour if inside a VPC is to use the public IP address if available,
   291      otherwise the private IP address will be used. If not in a VPC the public DNS name
   292      will be used. Also works for WinRM.
   293  
   294      Where Packer is configured for an outbound proxy but WinRM traffic should be direct,
   295      `ssh_interface` must be set to `private_dns` and `<region>.compute.internal` included
   296      in the `NO_PROXY` environment variable.
   297  
   298  -   `subnet_id` (string) - If using VPC, the ID of the subnet, such as
   299      `subnet-12345def`, where Packer will launch the EC2 instance. This field is
   300      required if you are using an non-default VPC.
   301  
   302  -   `temporary_key_pair_name` (string) - The name of the temporary key pair
   303      to generate. By default, Packer generates a name that looks like
   304      `packer_<UUID>`, where &lt;UUID&gt; is a 36 character unique identifier.
   305  
   306  -   `token` (string) - The access token to use. This is different from the
   307      access key and secret key. If you're not sure what this is, then you
   308      probably don't need it. This will also be read from the `AWS_SESSION_TOKEN`
   309      environmental variable.
   310  
   311  -   `user_data` (string) - User data to apply when launching the instance. Note
   312      that you need to be careful about escaping characters due to the templates
   313      being JSON. It is often more convenient to use `user_data_file`, instead.
   314  
   315  -   `user_data_file` (string) - Path to a file that will be used for the user
   316      data when launching the instance.
   317  
   318  -   `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID
   319      in order to create a temporary security group within the VPC. Requires `subnet_id`
   320      to be set. If this field is left blank, Packer will try to get the VPC ID from the
   321      `subnet_id`.
   322  
   323  -   `windows_password_timeout` (string) - The timeout for waiting for a Windows
   324      password for Windows instances. Defaults to 20 minutes. Example value: `10m`
   325  
   326  ## Basic Example
   327  
   328  ``` json
   329  {
   330    "type" : "amazon-ebsvolume",
   331    "secret_key" : "YOUR SECRET KEY HERE",
   332    "access_key" : "YOUR KEY HERE",
   333    "region" : "us-east-1",
   334    "ssh_username" : "ubuntu",
   335    "instance_type" : "t2.medium",
   336    "source_ami" : "ami-40d28157",
   337    "ebs_volumes" : [
   338      {
   339        "volume_type" : "gp2",
   340        "device_name" : "/dev/xvdf",
   341        "delete_on_termination" : false,
   342        "tags" : {
   343          "zpool" : "data",
   344          "Name" : "Data1"
   345        },
   346        "volume_size" : 10
   347      },
   348      {
   349        "volume_type" : "gp2",
   350        "device_name" : "/dev/xvdg",
   351        "tags" : {
   352          "zpool" : "data",
   353          "Name" : "Data2"
   354        },
   355        "delete_on_termination" : false,
   356        "volume_size" : 10
   357      },
   358      {
   359        "volume_size" : 10,
   360        "tags" : {
   361          "Name" : "Data3",
   362          "zpool" : "data"
   363        },
   364        "delete_on_termination" : false,
   365        "device_name" : "/dev/xvdh",
   366        "volume_type" : "gp2"
   367      }
   368    ]
   369  }
   370  ```
   371  
   372  -&gt; **Note:** Packer can also read the access key and secret access key from
   373  environmental variables. See the configuration reference in the section above
   374  for more information on what environmental variables Packer will look for.
   375  
   376  Further information on locating AMI IDs and their relationship to instance
   377  types and regions can be found in the AWS EC2 Documentation
   378  [for Linux](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)
   379  or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html).
   380  
   381  ## Accessing the Instance to Debug
   382  
   383  If you need to access the instance to debug for some reason, run the builder
   384  with the `-debug` flag. In debug mode, the Amazon builder will save the private
   385  key in the current directory and will output the DNS or IP information as well.
   386  You can use this information to access the instance as it is running.
   387  
   388  ## Build template data
   389  
   390  The available variables are:
   391  
   392  - `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
   393  - `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
   394  - `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
   395  - `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
   396  
   397  -&gt; **Note:** Packer uses pre-built AMIs as the source for building images.
   398  These source AMIs may include volumes that are not flagged to be destroyed on
   399  termination of the instance building the new image. In addition to those volumes
   400  created by this builder, any volumes inn the source AMI which are not marked for
   401  deletion on termination will remain in your account.