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 <UUID> 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 -> **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 -> **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.