github.com/rahart/packer@v0.12.2-0.20161229105310-282bb6ad370f/website/source/docs/builders/amazon.html.md (about)

     1  ---
     2  description: |
     3      Packer is able to create Amazon AMIs. To achieve this, Packer comes with
     4      multiple builders depending on the strategy you want to use to build the AMI.
     5  layout: docs
     6  page_title: Amazon AMI Builder
     7  ...
     8  
     9  # Amazon AMI Builder
    10  
    11  Packer is able to create Amazon AMIs. To achieve this, Packer comes with
    12  multiple builders depending on the strategy you want to use to build the AMI.
    13  Packer supports the following builders at the moment:
    14  
    15  -   [amazon-ebs](/docs/builders/amazon-ebs.html) - Create EBS-backed AMIs by
    16      launching a source AMI and re-packaging it into a new AMI
    17      after provisioning. If in doubt, use this builder, which is the easiest to
    18      get started with.
    19  
    20  -   [amazon-instance](/docs/builders/amazon-instance.html) - Create
    21      instance-store AMIs by launching and provisioning a source instance, then
    22      rebundling it and uploading it to S3.
    23  
    24  -   [amazon-chroot](/docs/builders/amazon-chroot.html) - Create EBS-backed AMIs
    25      from an existing EC2 instance by mounting the root device and using a
    26      [Chroot](https://en.wikipedia.org/wiki/Chroot) environment to provision
    27      that device. This is an **advanced builder and should not be used by
    28      newcomers**. However, it is also the fastest way to build an EBS-backed AMI
    29      since no new EC2 instance needs to be launched.
    30  
    31  -> **Don't know which builder to use?** If in doubt, use the [amazon-ebs
    32  builder](/docs/builders/amazon-ebs.html). It is much easier to use and Amazon
    33  generally recommends EBS-backed images nowadays.
    34  
    35  # Amazon EBS Volume Builder
    36  
    37  Packer is able to create Amazon EBS Volumes which are preinitialized with a
    38  filesystem and data.
    39  
    40  -   [amazon-ebsvolume](/docs/builders/amazon-ebs-volume.html) - Create EBS volumes
    41      by launching a source AMI with block devices mapped. Provision the instance,
    42      then destroy it, retaining the EBS volumes.
    43  
    44  <span id="specifying-amazon-credentials"></span>
    45  
    46  ## Specifying Amazon Credentials
    47  
    48  When you use any of the amazon builders, you must provide credentials to the API
    49  in the form of an access key id and secret. These look like:
    50  
    51      access key id:     AKIAIOSFODNN7EXAMPLE
    52      secret access key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    53  
    54  If you use other AWS tools you may already have these configured. If so, packer
    55  will try to use them, *unless* they are specified in your packer template.
    56  Credentials are resolved in the following order:
    57  
    58  1.  Values hard-coded in the packer template are always authoritative.
    59  2.  *Variables* in the packer template may be resolved from command-line flags
    60      or from environment variables. Please read about [User
    61      Variables](https://www.packer.io/docs/templates/user-variables.html)
    62      for details.
    63  3.  If no credentials are found, packer falls back to automatic lookup.
    64  
    65  ### Automatic Lookup
    66  
    67  If no AWS credentials are found in a packer template, we proceed on to the
    68  following steps:
    69  
    70  1.  Lookup via environment variables.
    71      -   First `AWS_ACCESS_KEY_ID`, then `AWS_ACCESS_KEY`
    72      -   First `AWS_SECRET_ACCESS_KEY`, then `AWS_SECRET_KEY`
    73  
    74  2.  Look for [local AWS configuration
    75      files](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-config-files)
    76      -   First `~/.aws/credentials`
    77      -   Next based on `AWS_PROFILE`
    78  
    79  3.  Lookup an IAM role for the current EC2 instance (if you're running in EC2)
    80  
    81  \~&gt; **Subtle details of automatic lookup may change over time.** The most
    82  reliable way to specify your configuration is by setting them in template
    83  variables (directly or indirectly), or by using the `AWS_ACCESS_KEY_ID` and
    84  `AWS_SECRET_ACCESS_KEY` environment variables.
    85  
    86  Environment variables provide the best portability, allowing you to run your
    87  packer build on your workstation, in Atlas, or on another build server.
    88  
    89  ## Using an IAM Instance Profile
    90  
    91  If AWS keys are not specified in the template, a
    92  [credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-config-files)
    93  file or through environment variables Packer will use credentials provided by
    94  the instance's IAM profile, if it has one.
    95  
    96  The following policy document provides the minimal set permissions necessary for
    97  Packer to work:
    98  
    99  ``` {.javascript}
   100  {
   101    "Version": "2012-10-17",
   102    "Statement": [{
   103        "Effect": "Allow",
   104        "Action" : [
   105          "ec2:AttachVolume",
   106          "ec2:AuthorizeSecurityGroupIngress",
   107          "ec2:CopyImage",
   108          "ec2:CreateImage",
   109          "ec2:CreateKeypair",
   110          "ec2:CreateSecurityGroup",
   111          "ec2:CreateSnapshot",
   112          "ec2:CreateTags",
   113          "ec2:CreateVolume",
   114          "ec2:DeleteKeypair",
   115          "ec2:DeleteSecurityGroup",
   116          "ec2:DeleteSnapshot",
   117          "ec2:DeleteVolume",
   118          "ec2:DeregisterImage",
   119          "ec2:DescribeImageAttribute",
   120          "ec2:DescribeImages",
   121          "ec2:DescribeInstances",
   122          "ec2:DescribeRegions",
   123          "ec2:DescribeSecurityGroups",
   124          "ec2:DescribeSnapshots",
   125          "ec2:DescribeSubnets",
   126          "ec2:DescribeTags",
   127          "ec2:DescribeVolumes",
   128          "ec2:DetachVolume",
   129          "ec2:GetPasswordData",
   130          "ec2:ModifyImageAttribute",
   131          "ec2:ModifyInstanceAttribute",
   132          "ec2:ModifySnapshotAttribute",
   133          "ec2:RegisterImage",
   134          "ec2:RunInstances",
   135          "ec2:StopInstances",
   136          "ec2:TerminateInstances"
   137        ],
   138        "Resource" : "*"
   139    }]
   140  }
   141  ```
   142  
   143  ## Troubleshooting
   144  
   145  ### Attaching IAM Policies to Roles
   146  
   147  IAM policies can be associated with user or roles. If you use packer with IAM
   148  roles, you may encounter an error like this one:
   149  
   150      ==> amazon-ebs: Error launching source instance: You are not authorized to perform this operation.
   151  
   152  You can read more about why this happens on the [Amazon Security
   153  Blog](https://blogs.aws.amazon.com/security/post/Tx3M0IFB5XBOCQX/Granting-Permission-to-Launch-EC2-Instances-with-IAM-Roles-PassRole-Permission).
   154  The example policy below may help packer work with IAM roles. Note that this
   155  example provides more than the minimal set of permissions needed for packer to
   156  work, but specifics will depend on your use-case.
   157  
   158  ``` {.json}
   159  {
   160      "Sid": "PackerIAMPassRole",
   161      "Effect": "Allow",
   162      "Action": "iam:PassRole",
   163      "Resource": [
   164          "*"
   165      ]
   166  }
   167  ```
   168  
   169  ### Checking that system time is current
   170  
   171  Amazon uses the current time as part of the [request signing
   172  process](http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html). If
   173  your system clock is too skewed from the current time, your requests might
   174  fail. If that's the case, you might see an error like this:
   175  
   176      ==> amazon-ebs: Error querying AMI: AuthFailure: AWS was not able to validate the provided access credentials
   177  
   178  If you suspect your system's date is wrong, you can compare it against
   179  http://www.time.gov/. On Linux/OS X, you can run the `date` command to get the
   180  current time. If you're on Linux, you can try setting the time with ntp by
   181  running `sudo ntpd -q`.