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