github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/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 - `delete_on_termination` (boolean) - Indicates whether the EBS volume is 68 deleted on instance termination 69 - `encrypted` (boolean) - Indicates whether to encrypt the volume or not 70 - `iops` (integer) - The number of I/O operations per second (IOPS) that the 71 volume supports. See the documentation on 72 [IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html) 73 for more information 74 - `no_device` (boolean) - Suppresses the specified device included in the 75 block device mapping of the AMI 76 - `snapshot_id` (string) - The ID of the snapshot 77 - `virtual_name` (string) - The virtual device name. See the documentation on 78 [Block Device 79 Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html) 80 for more information 81 - `volume_size` (integer) - The size of the volume, in GiB. Required if not 82 specifying a `snapshot_id` 83 - `volume_type` (string) - The volume type. `gp2` for General Purpose (SSD) 84 volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic 85 volumes 86 - `tags` (map) - Tags to apply to the volume. These are retained after the 87 builder completes. This is a \[template engine\] 88 (/docs/templates/engine.html) where the `SourceAMI` 89 variable is replaced with the source AMI ID and `BuildRegion` variable 90 is replaced with the value of `region`. 91 92 - `associate_public_ip_address` (boolean) - If using a non-default VPC, public 93 IP addresses are not provided by default. If this is toggled, your new 94 instance will get a Public IP. 95 96 - `availability_zone` (string) - Destination availability zone to launch 97 instance in. Leave this empty to allow Amazon to auto-assign. 98 99 - `custom_endpoint_ec2` (string) - this option is useful if you use 100 another cloud provider that provide a compatible API with aws EC2, 101 specify another endpoint like this "<https://ec2.another.endpoint>..com" 102 103 - `ebs_optimized` (boolean) - Mark instance as [EBS 104 Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html). 105 Default `false`. 106 107 - `ena_support` (boolean) - Enable enhanced networking (ENA but not SriovNetSupport) 108 on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM policy. 109 Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's 110 documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking). Default `false`. 111 112 - `iam_instance_profile` (string) - The name of an [IAM instance 113 profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html) 114 to launch the EC2 instance with. 115 116 - `mfa_code` (string) - The MFA [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm) 117 code. This should probably be a user variable since it changes all the time. 118 119 - `profile` (string) - The profile to use in the shared credentials file for 120 AWS. See Amazon's documentation on [specifying 121 profiles](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html#specifying-profiles) 122 for more details. 123 124 - `region_kms_key_ids` (map of strings) - a map of regions to copy the ami to, 125 along with the custom kms key id to use for encryption for that region. 126 Keys must match the regions provided in `ami_regions`. If you just want to 127 encrypt using a default ID, you can stick with `kms_key_id` and `ami_regions`. 128 If you want a region to be encrypted with that region's default key ID, you can 129 use an empty string `""` instead of a key id in this map. (e.g. `"us-east-1": ""`) 130 However, you cannot use default key IDs if you are using this in conjunction with 131 `snapshot_users` -- in that situation you must use custom keys. 132 133 - `run_tags` (object of key/value strings) - Tags to apply to the instance 134 that is *launched* to create the AMI. These tags are *not* applied to the 135 resulting AMI unless they're duplicated in `tags`. This is a 136 [template engine](/docs/templates/engine.html) 137 where the `SourceAMI` variable is replaced with the source AMI ID and 138 `BuildRegion` variable is replaced with the value of `region`. 139 140 - `security_group_id` (string) - The ID (*not* the name) of the security group 141 to assign to the instance. By default this is not set and Packer will 142 automatically create a new temporary security group to allow SSH access. 143 Note that if this is specified, you must be sure the security group allows 144 access to the `ssh_port` given below. 145 146 - `security_group_ids` (array of strings) - A list of security groups as 147 described above. Note that if this is specified, you must omit the 148 `security_group_id`. 149 150 - `shutdown_behavior` (string) - Automatically terminate instances on shutdown 151 in case Packer exits ungracefully. Possible values are `stop` and `terminate`. 152 Defaults to `stop`. 153 154 - `skip_region_validation` (boolean) - Set to `true` if you want to skip 155 validation of the region configuration option. Defaults to `false`. 156 157 - `snapshot_groups` (array of strings) - A list of groups that have access to 158 create volumes from the snapshot(s). By default no groups have permission to create 159 volumes form the snapshot(s). `all` will make the snapshot publicly accessible. 160 161 - `snapshot_users` (array of strings) - A list of account IDs that have access to 162 create volumes from the snapshot(s). By default no additional users other than the 163 user creating the AMI has permissions to create volumes from the backing snapshot(s). 164 165 - `source_ami_filter` (object) - Filters used to populate the `source_ami` field. 166 Example: 167 168 ``` json 169 { 170 "source_ami_filter": { 171 "filters": { 172 "virtualization-type": "hvm", 173 "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*", 174 "root-device-type": "ebs" 175 }, 176 "owners": ["099720109477"], 177 "most_recent": true 178 } 179 } 180 ``` 181 182 This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical. 183 NOTE: This will fail unless *exactly* one AMI is returned. In the above 184 example, `most_recent` will cause this to succeed by selecting the newest image. 185 186 - `filters` (map of strings) - filters used to select a `source_ami`. 187 NOTE: This will fail unless *exactly* one AMI is returned. 188 Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) 189 is valid. 190 191 - `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs. 192 This is helpful to limit the AMIs to a trusted third party, or to your own account. 193 194 - `most_recent` (bool) - Selects the newest created image when true. 195 This is most useful for selecting a daily distro build. 196 197 - `spot_price` (string) - The maximum hourly price to pay for a spot instance 198 to create the AMI. Spot instances are a type of instance that EC2 starts 199 when the current spot price is less than the maximum price you specify. Spot 200 price will be updated based on available spot instance capacity and current 201 spot instance requests. It may save you some costs. You can set this to 202 `auto` for Packer to automatically discover the best spot price or to `0` 203 to use an on-demand instance (default). 204 205 - `spot_price_auto_product` (string) - Required if `spot_price` is set 206 to `auto`. This tells Packer what sort of AMI you're launching to find the 207 best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`, 208 `Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)` or `Windows (Amazon VPC)` 209 210 - `sriov_support` (boolean) - Enable enhanced networking (SriovNetSupport but not ENA) 211 on HVM-compatible AMIs. If true, add `ec2:ModifyInstanceAttribute` to your AWS IAM 212 policy. Note: you must make sure enhanced networking is enabled on your instance. See [Amazon's 213 documentation on enabling enhanced networking](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html#enabling_enhanced_networking). 214 Default `false`. 215 216 - `ssh_keypair_name` (string) - If specified, this is the key that will be 217 used for SSH with the machine. By default, this is blank, and Packer will 218 generate a temporary key pair unless 219 [`ssh_password`](/docs/templates/communicator.html#ssh_password) is used. 220 [`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file) 221 must be specified with this. 222 223 - `ssh_private_ip` (boolean) - If `true`, then SSH will always use the private 224 IP if available. Also works for WinRM. 225 226 - `subnet_id` (string) - If using VPC, the ID of the subnet, such as 227 `subnet-12345def`, where Packer will launch the EC2 instance. This field is 228 required if you are using an non-default VPC. 229 230 - `temporary_key_pair_name` (string) - The name of the temporary key pair 231 to generate. By default, Packer generates a name that looks like 232 `packer_<UUID>`, where <UUID> is a 36 character unique identifier. 233 234 - `token` (string) - The access token to use. This is different from the 235 access key and secret key. If you're not sure what this is, then you 236 probably don't need it. This will also be read from the `AWS_SESSION_TOKEN` 237 environmental variable. 238 239 - `user_data` (string) - User data to apply when launching the instance. Note 240 that you need to be careful about escaping characters due to the templates 241 being JSON. It is often more convenient to use `user_data_file`, instead. 242 243 - `user_data_file` (string) - Path to a file that will be used for the user 244 data when launching the instance. 245 246 - `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID 247 in order to create a temporary security group within the VPC. Requires `subnet_id` 248 to be set. If this field is left blank, Packer will try to get the VPC ID from the 249 `subnet_id`. 250 251 - `windows_password_timeout` (string) - The timeout for waiting for a Windows 252 password for Windows instances. Defaults to 20 minutes. Example value: `10m` 253 254 ## Basic Example 255 256 ``` json 257 { 258 "type" : "amazon-ebsvolume", 259 "secret_key" : "YOUR SECRET KEY HERE", 260 "access_key" : "YOUR KEY HERE", 261 "region" : "us-east-1", 262 "ssh_username" : "ubuntu", 263 "instance_type" : "t2.medium", 264 "source_ami" : "ami-40d28157", 265 "ebs_volumes" : [ 266 { 267 "volume_type" : "gp2", 268 "device_name" : "/dev/xvdf", 269 "delete_on_termination" : false, 270 "tags" : { 271 "zpool" : "data", 272 "Name" : "Data1" 273 }, 274 "volume_size" : 10 275 }, 276 { 277 "volume_type" : "gp2", 278 "device_name" : "/dev/xvdg", 279 "tags" : { 280 "zpool" : "data", 281 "Name" : "Data2" 282 }, 283 "delete_on_termination" : false, 284 "volume_size" : 10 285 }, 286 { 287 "volume_size" : 10, 288 "tags" : { 289 "Name" : "Data3", 290 "zpool" : "data" 291 }, 292 "delete_on_termination" : false, 293 "device_name" : "/dev/xvdh", 294 "volume_type" : "gp2" 295 } 296 ] 297 } 298 ``` 299 300 -> **Note:** Packer can also read the access key and secret access key from 301 environmental variables. See the configuration reference in the section above 302 for more information on what environmental variables Packer will look for. 303 304 Further information on locating AMI IDs and their relationship to instance 305 types and regions can be found in the AWS EC2 Documentation 306 [for Linux](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html) 307 or [for Windows](http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html). 308 309 ## Accessing the Instance to Debug 310 311 If you need to access the instance to debug for some reason, run the builder 312 with the `-debug` flag. In debug mode, the Amazon builder will save the private 313 key in the current directory and will output the DNS or IP information as well. 314 You can use this information to access the instance as it is running. 315 316 -> **Note:** Packer uses pre-built AMIs as the source for building images. 317 These source AMIs may include volumes that are not flagged to be destroyed on 318 termination of the instance building the new image. In addition to those volumes 319 created by this builder, any volumes inn the source AMI which are not marked for 320 deletion on termination will remain in your account.