--- layout: "intro" page_title: "Build an Image" prev_url: "/intro/getting-started/setup.html" next_url: "/intro/getting-started/provision.html" next_title: "Provision" --- # Build an Image With Packer installed, let's just dive right into it and build our first image. Our first image will be an [Amazon EC2 AMI](http://aws.amazon.com/ec2/) with Redis pre-installed. This is just an example. Packer can create images for [many platforms](/intro/platforms.html) with anything pre-installed. If you don't have an AWS account, [create one now](http://aws.amazon.com/free/). For the example, we'll use a "t1.micro" instance to build our image, which qualifies under the AWS [free-tier](http://aws.amazon.com/free/), meaning it will be free. If you already have an AWS account, you may be charged some amount of money, but it shouldn't be more than a few cents.
{ "builders": [{ "type": "amazon-ebs", "access_key": "YOUR KEY HERE", "secret_key": "YOUR SECRET KEY HERE", "region": "us-east-1", "source_ami": "ami-de0d9eb7", "instance_type": "t1.micro", "ssh_username": "ubuntu", "ami_name": "packer-example {{.CreateTime}}" }] }Please fill in the `access_key` and `secret_key` with the proper values for your account. Your security credentials can be found on [this page](https://console.aws.amazon.com/iam/home?#security_credential). This is a basic template that is ready-to-go. It should be immediately recognizable as a normal, basic JSON object. Within the object, the `builders` section contains an array of JSON objects configuring a specific _builder_. A builder is a component of Packer that is responsible for creating a machine and turning that machine into an image. In this case, we're only configuring a single builder of type `amazon-ebs`. This is the Amazon EC2 AMI builder that ships with Packer. This builder builds an EBS-backed AMI by launching a source AMI, provisioning on top of that, and re-packaging it into a new AMI. The additional keys within the object are configuration for this builder, specifying things such as access keys, the source AMI to build from, and more. The exact set of configuration variables available for a builder are specific to each builder and can be found within the [documentation](/docs). Before we take this template and build an image from it, let's validate the template by running `packer validate example.json`. This command checks the syntax as well as the configuration values to verify they look valid. The output should look similar to below, because the template should be valid. If there are any errors, this command will tell you. ``` $ packer validate example.json Template validated successfully. ``` Next, let's build the image from this template. An astute reader may notice that we said earlier we'd be building an image with Redis pre-installed, and yet the template we made doesn't reference Redis anywhere. In fact, this part of the documentation will only cover making a first basic, non-provisioned image. The next section on provisioning will cover installing Redis. ## Your First Image With a properly validated template. It is time to build your first image. This is done by calling `packer build` with the template file. The output should look similar to below. Note that this process typically takes a few minutes. ``` $ packer build example.json ==> amazon-ebs: amazon-ebs output will be in this color. ==> amazon-ebs: Creating temporary keypair for this instance... ==> amazon-ebs: Creating temporary security group for this instance... ==> amazon-ebs: Authorizing SSH access on the temporary security group... ==> amazon-ebs: Launching a source AWS instance... ==> amazon-ebs: Waiting for instance to become ready... ==> amazon-ebs: Connecting to the instance via SSH... ==> amazon-ebs: Stopping the source instance... ==> amazon-ebs: Waiting for the instance to stop... ==> amazon-ebs: Creating the AMI: packer-example 1371856345 ==> amazon-ebs: AMI: ami-19601070 ==> amazon-ebs: Waiting for AMI to become ready... ==> amazon-ebs: Terminating the source AWS instance... ==> amazon-ebs: Deleting temporary security group... ==> amazon-ebs: Deleting temporary keypair... ==> amazon-ebs: Build finished. ==> Builds finished. The artifacts of successful builds are: --> amazon-ebs: AMIs were created: us-east-1: ami-19601070 ``` At the end of running `packer build`, Packer outputs the _artifacts_ that were created as part of the build. Artifacts are the results of a build, and typically represent an ID (such as in the case of an AMI) or a set of files (such as for a VMware virtual machine). In this example, we only have a single artifact: the AMI in us-east-1 that was created. This AMI is ready to use. If you wanted you can go and launch this AMI right now and it would work great.