github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/website/source/docs/builders/amazon-instance.html.md (about) 1 --- 2 description: | 3 The `amazon-instance` Packer builder is able to create Amazon AMIs backed by 4 instance storage as the root device. For more information on the difference 5 between instance storage and EBS-backed instances, see the storage for the root 6 device section in the EC2 documentation. 7 layout: docs 8 page_title: 'Amazon AMI Builder (instance-store)' 9 ... 10 11 # AMI Builder (instance-store) 12 13 Type: `amazon-instance` 14 15 The `amazon-instance` Packer builder is able to create Amazon AMIs backed by 16 instance storage as the root device. For more information on the difference 17 between instance storage and EBS-backed instances, see the ["storage for the 18 root device" section in the EC2 19 documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device). 20 21 This builder builds an AMI by launching an EC2 instance from an existing 22 instance-storage backed AMI, provisioning that running machine, and then 23 bundling and creating a new AMI from that machine. This is all done in your own 24 AWS account. The builder will create temporary keypairs, security group rules, 25 etc. that provide it temporary access to the instance while the image is being 26 created. This simplifies configuration quite a bit. 27 28 The builder does *not* manage AMIs. Once it creates an AMI and stores it in 29 your account, it is up to you to use, delete, etc. the AMI. 30 31 -> **Note:** This builder requires that the [Amazon EC2 AMI 32 Tools](https://aws.amazon.com/developertools/368) are installed onto the 33 machine. This can be done within a provisioner, but must be done before the 34 builder finishes running. 35 36 ~> Instance builds are not supported for Windows. Use [`amazon-ebs`](amazon-ebs.html) instead. 37 38 ## Configuration Reference 39 40 There are many configuration options available for the builder. They are 41 segmented below into two categories: required and optional parameters. Within 42 each category, the available configuration keys are alphabetized. 43 44 In addition to the options listed here, a 45 [communicator](/docs/templates/communicator.html) can be configured for this 46 builder. 47 48 ### Required: 49 50 - `access_key` (string) - The access key used to communicate with AWS. [Learn 51 how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials) 52 53 - `account_id` (string) - Your AWS account ID. This is required for bundling 54 the AMI. This is *not the same* as the access key. You can find your account 55 ID in the security credentials page of your AWS account. 56 57 - `ami_name` (string) - The name of the resulting AMI that will appear when 58 managing AMIs in the AWS console or via APIs. This must be unique. To help 59 make this unique, use a function like `timestamp` (see [configuration 60 templates](/docs/templates/configuration-templates.html) for more info) 61 62 - `instance_type` (string) - The EC2 instance type to use while building the 63 AMI, such as "m1.small". 64 65 - `region` (string) - The name of the region, such as "us-east-1", in which to 66 launch the EC2 instance to create the AMI. 67 68 - `s3_bucket` (string) - The name of the S3 bucket to upload the AMI. This 69 bucket will be created if it doesn't exist. 70 71 - `secret_key` (string) - The secret key used to communicate with AWS. [Learn 72 how to set this.](/docs/builders/amazon.html#specifying-amazon-credentials) 73 74 - `source_ami` (string) - The initial AMI used as a base for the newly 75 created machine. 76 77 - `x509_cert_path` (string) - The local path to a valid X509 certificate for 78 your AWS account. This is used for bundling the AMI. This X509 certificate 79 must be registered with your account from the security credentials page in 80 the AWS console. 81 82 - `x509_key_path` (string) - The local path to the private key for the X509 83 certificate specified by `x509_cert_path`. This is used for bundling 84 the AMI. 85 86 ### Optional: 87 88 - `ami_block_device_mappings` (array of block device mappings) - Add the block 89 device mappings to the AMI. The block device mappings allow for keys: 90 - `delete_on_termination` (boolean) - Indicates whether the EBS volume is 91 deleted on instance termination 92 - `device_name` (string) - The device name exposed to the instance (for 93 example, "/dev/sdh" or "xvdh"). Required when specifying `volume_size`. 94 - `encrypted` (boolean) - Indicates whether to encrypt the volume or not 95 - `iops` (integer) - The number of I/O operations per second (IOPS) that the 96 volume supports. See the documentation on 97 [IOPs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html) 98 for more information 99 - `no_device` (boolean) - Suppresses the specified device included in the 100 block device mapping of the AMI 101 - `snapshot_id` (string) - The ID of the snapshot 102 - `virtual_name` (string) - The virtual device name. See the documentation on 103 [Block Device 104 Mapping](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_BlockDeviceMapping.html) 105 for more information 106 - `volume_size` (integer) - The size of the volume, in GiB. Required if not 107 specifying a `snapshot_id` 108 - `volume_type` (string) - The volume type. gp2 for General Purpose (SSD) 109 volumes, io1 for Provisioned IOPS (SSD) volumes, and standard for Magnetic 110 volumes 111 - `ami_description` (string) - The description to set for the 112 resulting AMI(s). By default this description is empty. 113 114 - `ami_groups` (array of strings) - A list of groups that have access to 115 launch the resulting AMI(s). By default no groups have permission to launch 116 the AMI. `all` will make the AMI publicly accessible. AWS currently doesn't 117 accept any value other than "all". 118 119 - `ami_product_codes` (array of strings) - A list of product codes to 120 associate with the AMI. By default no product codes are associated with 121 the AMI. 122 123 - `ami_regions` (array of strings) - A list of regions to copy the AMI to. 124 Tags and attributes are copied along with the AMI. AMI copying takes time 125 depending on the size of the AMI, but will generally take many minutes. 126 127 - `ami_users` (array of strings) - A list of account IDs that have access to 128 launch the resulting AMI(s). By default no additional users other than the 129 user creating the AMI has permissions to launch it. 130 131 - `ami_virtualization_type` (string) - The type of virtualization for the AMI 132 you are building. This option is required to register HVM images. Can be 133 "paravirtual" (default) or "hvm". 134 135 - `associate_public_ip_address` (boolean) - If using a non-default VPC, public 136 IP addresses are not provided by default. If this is toggled, your new 137 instance will get a Public IP. 138 139 - `availability_zone` (string) - Destination availability zone to launch 140 instance in. Leave this empty to allow Amazon to auto-assign. 141 142 - `bundle_destination` (string) - The directory on the running instance where 143 the bundled AMI will be saved prior to uploading. By default this is "/tmp". 144 This directory must exist and be writable. 145 146 - `bundle_prefix` (string) - The prefix for files created from bundling the 147 root volume. By default this is "image-{{timestamp}}". The `timestamp` 148 variable should be used to make sure this is unique, otherwise it can 149 collide with other created AMIs by Packer in your account. 150 151 - `bundle_upload_command` (string) - The command to use to upload the 152 bundled volume. See the "custom bundle commands" section below for 153 more information. 154 155 - `bundle_vol_command` (string) - The command to use to bundle the volume. See 156 the "custom bundle commands" section below for more information. 157 158 - `ebs_optimized` (boolean) - Mark instance as [EBS 159 Optimized](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html). 160 Default `false`. 161 162 - `enhanced_networking` (boolean) - Enable enhanced 163 networking (SriovNetSupport) on HVM-compatible AMIs. If true, add 164 `ec2:ModifyInstanceAttribute` to your AWS IAM policy. 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 - `iam_instance_profile` (string) - The name of an [IAM instance 170 profile](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html) 171 to launch the EC2 instance with. 172 173 - `launch_block_device_mappings` (array of block device mappings) - Add the 174 block device mappings to the launch instance. The block device mappings are 175 the same as `ami_block_device_mappings` above. 176 177 - `run_tags` (object of key/value strings) - Tags to apply to the instance 178 that is *launched* to create the AMI. These tags are *not* applied to the 179 resulting AMI unless they're duplicated in `tags`. 180 181 - `security_group_id` (string) - The ID (*not* the name) of the security group 182 to assign to the instance. By default this is not set and Packer will 183 automatically create a new temporary security group to allow SSH access. 184 Note that if this is specified, you must be sure the security group allows 185 access to the `ssh_port` given below. 186 187 - `security_group_ids` (array of strings) - A list of security groups as 188 described above. Note that if this is specified, you must omit the 189 `security_group_id`. 190 191 - `skip_region_validation` (boolean) - Set to true if you want to skip 192 validation of the region configuration option. Defaults to false. 193 194 - `source_ami_filter` (object) - Filters used to populate the `source_ami` field. 195 Example: 196 ``` {.javascript} 197 "source_ami_filter": { 198 "filters": { 199 "virtualization-type": "hvm", 200 "name": "*ubuntu-xenial-16.04-amd64-server-*", 201 "root-device-type": "ebs" 202 }, 203 "owners": ["099720109477"], 204 "most_recent": true 205 } 206 ``` 207 This selects the most recent Ubuntu 16.04 HVM EBS AMI from Canonical. 208 NOTE: This will fail unless *exactly* one AMI is returned. In the above 209 example, `most_recent` will cause this to succeed by selecting the newest image. 210 211 - `filters` (map of strings) - filters used to select a `source_ami`. 212 NOTE: This will fail unless *exactly* one AMI is returned. 213 Any filter described in the docs for [DescribeImages](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) 214 is valid. 215 216 - `owners` (array of strings) - This scopes the AMIs to certain Amazon account IDs. 217 This is helpful to limit the AMIs to a trusted third party, or to your own account. 218 219 - `most_recent` (bool) - Selects the newest created image when true. 220 This is most useful for selecting a daily distro build. 221 222 - `spot_price` (string) - The maximum hourly price to launch a spot instance 223 to create the AMI. It is a type of instances that EC2 starts when the 224 maximum price that you specify exceeds the current spot price. Spot price 225 will be updated based on available spot instance capacity and current spot 226 Instance requests. It may save you some costs. You can set this to "auto" 227 for Packer to automatically discover the best spot price or to "0" to use 228 an on demand instance (default). 229 230 - `spot_price_auto_product` (string) - Required if `spot_price` is set 231 to "auto". This tells Packer what sort of AMI you're launching to find the 232 best spot price. This must be one of: `Linux/UNIX`, `SUSE Linux`, `Windows`, 233 `Linux/UNIX (Amazon VPC)`, `SUSE Linux (Amazon VPC)`, `Windows (Amazon VPC)` 234 235 - `ssh_keypair_name` (string) - If specified, this is the key that will be 236 used for SSH with the machine. The key must match a key pair name loaded 237 up into Amazon EC2. By default, this is blank, and Packer will 238 generate a temporary keypair unless 239 [`ssh_password`](/docs/templates/communicator.html#ssh_password) is used. 240 [`ssh_private_key_file`](/docs/templates/communicator.html#ssh_private_key_file) 241 or `ssh_agent_auth` must be specified when `ssh_keypair_name` is utilized. 242 243 - `ssh_agent_auth` (boolean) - If true, the local SSH agent will be used to 244 authenticate connections to the source instance. No temporary keypair will 245 be created, and the values of `ssh_password` and `ssh_private_key_file` will 246 be ignored. To use this option with a key pair already configured in the source 247 AMI, leave the `ssh_keypair_name` blank. To associate an existing key pair 248 in AWS with the source instance, set the `ssh_keypair_name` field to the name 249 of the key pair. 250 251 - `ssh_private_ip` (boolean) - If true, then SSH will always use the private 252 IP if available. 253 254 - `subnet_id` (string) - If using VPC, the ID of the subnet, such as 255 "subnet-12345def", where Packer will launch the EC2 instance. This field is 256 required if you are using an non-default VPC. 257 258 - `tags` (object of key/value strings) - Tags applied to the AMI. 259 260 - `temporary_key_pair_name` (string) - The name of the temporary keypair 261 to generate. By default, Packer generates a name with a UUID. 262 263 - `user_data` (string) - User data to apply when launching the instance. Note 264 that you need to be careful about escaping characters due to the templates 265 being JSON. It is often more convenient to use `user_data_file`, instead. 266 267 - `user_data_file` (string) - Path to a file that will be used for the user 268 data when launching the instance. 269 270 - `vpc_id` (string) - If launching into a VPC subnet, Packer needs the VPC ID 271 in order to create a temporary security group within the VPC. 272 273 - `x509_upload_path` (string) - The path on the remote machine where the X509 274 certificate will be uploaded. This path must already exist and be writable. 275 X509 certificates are uploaded after provisioning is run, so it is perfectly 276 okay to create this directory as part of the provisioning process. Defaults to 277 `/tmp`. 278 279 - `windows_password_timeout` (string) - The timeout for waiting for a Windows 280 password for Windows instances. Defaults to 20 minutes. Example value: "10m" 281 282 ## Basic Example 283 284 Here is a basic example. It is completely valid except for the access keys: 285 286 ``` {.javascript} 287 { 288 "type": "amazon-instance", 289 "access_key": "YOUR KEY HERE", 290 "secret_key": "YOUR SECRET KEY HERE", 291 "region": "us-east-1", 292 "source_ami": "ami-d9d6a6b0", 293 "instance_type": "m1.small", 294 "ssh_username": "ubuntu", 295 296 "account_id": "0123-4567-0890", 297 "s3_bucket": "packer-images", 298 "x509_cert_path": "x509.cert", 299 "x509_key_path": "x509.key", 300 "x509_upload_path": "/tmp", 301 302 "ami_name": "packer-quick-start {{timestamp}}" 303 } 304 ``` 305 306 -> **Note:** Packer can also read the access key and secret access key from 307 environmental variables. See the configuration reference in the section above 308 for more information on what environmental variables Packer will look for. 309 310 ## Accessing the Instance to Debug 311 312 If you need to access the instance to debug for some reason, run the builder 313 with the `-debug` flag. In debug mode, the Amazon builder will save the private 314 key in the current directory and will output the DNS or IP information as well. 315 You can use this information to access the instance as it is running. 316 317 ## Custom Bundle Commands 318 319 A lot of the process required for creating an instance-store backed AMI involves 320 commands being run on the actual source instance. Specifically, the 321 `ec2-bundle-vol` and `ec2-upload-bundle` commands must be used to bundle the 322 root filesystem and upload it, respectively. 323 324 Each of these commands have a lot of available flags. Instead of exposing each 325 possible flag as a template configuration option, the instance-store AMI builder 326 for Packer lets you customize the entire command used to bundle and upload the 327 AMI. 328 329 These are configured with `bundle_vol_command` and `bundle_upload_command`. Both 330 of these configurations are [configuration 331 templates](/docs/templates/configuration-templates.html) and have support for 332 their own set of template variables. 333 334 ### Bundle Volume Command 335 336 The default value for `bundle_vol_command` is shown below. It is split across 337 multiple lines for convenience of reading. The bundle volume command is 338 responsible for executing `ec2-bundle-vol` in order to store and image of the 339 root filesystem to use to create the AMI. 340 341 ``` {.text} 342 sudo -i -n ec2-bundle-vol \ 343 -k {{.KeyPath}} \ 344 -u {{.AccountId}} \ 345 -c {{.CertPath}} \ 346 -r {{.Architecture}} \ 347 -e {{.PrivatePath}}/* \ 348 -d {{.Destination}} \ 349 -p {{.Prefix}} \ 350 --batch \ 351 --no-filter 352 ``` 353 354 The available template variables should be self-explanatory based on the 355 parameters they're used to satisfy the `ec2-bundle-vol` command. 356 357 \~> **Warning!** Some versions of ec2-bundle-vol silently ignore all .pem and 358 .gpg files during the bundling of the AMI, which can cause problems on some 359 systems, such as Ubuntu. You may want to customize the bundle volume command to 360 include those files (see the `--no-filter` option of ec2-bundle-vol). 361 362 ### Bundle Upload Command 363 364 The default value for `bundle_upload_command` is shown below. It is split across 365 multiple lines for convenience of reading. Access key and secret key are omitted 366 if using instance profile. The bundle upload command is responsible for taking 367 the bundled volume and uploading it to S3. 368 369 ``` {.text} 370 sudo -i -n ec2-upload-bundle \ 371 -b {{.BucketName}} \ 372 -m {{.ManifestPath}} \ 373 -a {{.AccessKey}} \ 374 -s {{.SecretKey}} \ 375 -d {{.BundleDirectory}} \ 376 --batch \ 377 --region {{.Region}} \ 378 --retry 379 ``` 380 381 The available template variables should be self-explanatory based on the 382 parameters they're used to satisfy the `ec2-upload-bundle` command.