From 698f913bbfefbfd12420348aab4cd1cec39a5869 Mon Sep 17 00:00:00 2001 From: Kevin Fishner Date: Tue, 3 Mar 2015 17:18:22 -0800 Subject: [PATCH] explain how packer works with atlas --- .../getting-started/build-image.html.markdown | 9 ++- .../intro/getting-started/next.html.markdown | 3 + .../remote-builds.html.markdown | 75 +++++++++++++++++++ .../getting-started/vagrant.html.markdown | 4 +- website/source/layouts/intro.erb | 1 + 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 website/source/intro/getting-started/remote-builds.html.markdown diff --git a/website/source/intro/getting-started/build-image.html.markdown b/website/source/intro/getting-started/build-image.html.markdown index 1cda08a7c..989e4be29 100644 --- a/website/source/intro/getting-started/build-image.html.markdown +++ b/website/source/intro/getting-started/build-image.html.markdown @@ -157,10 +157,13 @@ the Packer output. Packer only builds images. It does not attempt to manage them in any way. After they're built, it is up to you to launch or destroy them as you see -fit. As a result of this, after running the above example, your AWS account -now has an AMI associated with it. +fit. If you want to store and namespace images for easy reference, you +can use [Atlas by HashiCorp](https://atlas.hashicorp.com). We'll cover +remotely building and storing images at the end of this getting started guide. -AMIs are stored in S3 by Amazon, so unless you want to be charged about $0.01 +After running the above example, your AWS account +now has an AMI associated with it. AMIs are stored in S3 by Amazon, +so unless you want to be charged about $0.01 per month, you'll probably want to remove it. Remove the AMI by first deregistering it on the [AWS AMI management page](https://console.aws.amazon.com/ec2/home?region=us-east-1#s=Images). Next, delete the associated snapshot on the diff --git a/website/source/intro/getting-started/next.html.markdown b/website/source/intro/getting-started/next.html.markdown index 11f5ea4f7..62480823a 100644 --- a/website/source/intro/getting-started/next.html.markdown +++ b/website/source/intro/getting-started/next.html.markdown @@ -16,6 +16,9 @@ From this point forward, the most important reference for you will be the [documentation](/docs). The documentation is less of a guide and more of a reference of all the overall features and options of Packer. +If you're interested in learning more about how Packer fits into the +HashiCorp ecosystem of tools, read our [Atlas getting started overview](https://atlas.hashicorp.com/help/getting-started/getting-started-overview). + As you use Packer more, please voice your comments and concerns on the [mailing list or IRC](/community). Additionally, Packer is [open source](https://github.com/mitchellh/packer) so please contribute diff --git a/website/source/intro/getting-started/remote-builds.html.markdown b/website/source/intro/getting-started/remote-builds.html.markdown new file mode 100644 index 000000000..dd7afa911 --- /dev/null +++ b/website/source/intro/getting-started/remote-builds.html.markdown @@ -0,0 +1,75 @@ +--- +layout: "intro" +page_title: "Remote Builds and Storage" +prev_url: "/intro/getting-started/vagrant.html" +next_url: "/intro/getting-started/next.html" +next_title: "Next Steps" +description: |- + Up to this point in the guide, you have been running Packer on your local machine to build and provision images on AWS and DigitalOcean. However, you can use Atlas by HashiCorp to both run Packer builds remotely and store the output of builds. +--- + +# Remote Builds and Storage +Up to this point in the guide, you have been running Packer on your local machine to build and provision images on AWS and DigitalOcean. However, you can use [Atlas by HashiCorp](https://atlas.hashicorp.com) to run Packer builds remotely and store the output of builds. + +## Why Build Remotely? +By building remotely, you can move access credentials off of developer machines, release local machines from long-running Packer processes, and automatically start Packer builds from trigger sources such as `vagrant push`, a version control system, or CI tool. + +## Run Packer Builds Remotely +To run Packer remotely, there are two changes that must be made to the Packer template. The first is the addition of the `push` [configuration](https://www.packer.io/docs/templates/push.html), which sends the Packer template to Atlas so it can run Packer remotely. The second modification is updating the variables section to read variables from the Atlas environment rather than the local environment. Remove the `post-processors` section for now if it is still in your template. + +```javascript +{ + "variables": { + "aws_access_key": "{{env `aws_access_key`}}", + "aws_secret_key": "{{env `aws_secret_key`}}" + }, + "builders": [{ + "type": "amazon-ebs", + "access_key": "{{user `aws_access_key`}}", + "secret_key": "{{user `aws_secret_key`}}", + "region": "us-east-1", + "source_ami": "ami-9eaa1cf6", + "instance_type": "t2.micro", + "ssh_username": "ubuntu", + "ami_name": "packer-example {{timestamp}}" + }], + "provisioners": [{ + "type": "shell", + "inline": [ + "sleep 30", + "sudo apt-get update", + "sudo apt-get install -y redis-server" + ] + }], + "push": { + "name": "ATLAS_USERNAME/packer-tutorial" + } +} +``` + +To get an Atlas username, [create an account here](https://atlas.hashicorp.com/account/new?utm_source=oss&utm_medium=getting-started&utm_campaign=packer). Replace "ATLAS_USERNAME" with your username, then run `packer push -create example.json` to send the configuration to Atlas, which automatically starts the build. + +This build will fail since neither `aws_access_key` or `aws_secret_key` are set in the Atlas environment. To set environment variables in Atlas, navigate to the [operations tab](https://atlas.hashicorp.com/operations), click the "packer-tutorial" build configuration that was just created, and then click 'variables' in the left navigation. Set `aws_access_key` and `aws_secret_key` with their respective values. Now restart the Packer build by either clicking 'rebuild' in the Atlas UI or by running `packer push example.json` again. Now when you click on the active build, you can view the logs in real-time. + +-> **Note:** Whenever a change is made to the Packer template, you must `packer push` to update the configuration in Atlas. + +## Store Packer Outputs +Now we have Atlas building an AMI with Redis pre-configured. This is great, but it's even better to store and version the AMI output so it can be easily deployed by a tool like [Terraform](https://terraform.io). The `atlas` [post-processor](/docs/post-processors/atlas.html) makes this process simple: + + ```javascript +{ + "variables": ["..."], + "builders": ["..."], + "provisioners": ["..."], + "push": ["..."] + "post-processors": [ + { + "type": "atlas", + "artifact": "ATLAS_USERNAME/packer-tutorial", + "artifact_type": "aws.ami" + } + ] +} +``` + +Update the `post-processors` block with your Atlas username, then `packer push example.json` and watch the build kick off in Atlas! When the build completes, the resulting artifact will be saved and stored in Atlas. \ No newline at end of file diff --git a/website/source/intro/getting-started/vagrant.html.markdown b/website/source/intro/getting-started/vagrant.html.markdown index 7353c6f0b..4d6e20caf 100644 --- a/website/source/intro/getting-started/vagrant.html.markdown +++ b/website/source/intro/getting-started/vagrant.html.markdown @@ -2,8 +2,8 @@ layout: "intro" page_title: "Vagrant Boxes" prev_url: "/intro/getting-started/parallel-builds.html" -next_url: "/intro/getting-started/next.html" -next_title: "Next Steps" +next_url: "/intro/getting-started/remote-builds.html" +next_title: "Remote Builds and Storage" description: |- Packer also has the ability to take the results of a builder (such as an AMI or plain VMware image) and turn it into a Vagrant box. --- diff --git a/website/source/layouts/intro.erb b/website/source/layouts/intro.erb index 8b1e6f18c..17e900baf 100644 --- a/website/source/layouts/intro.erb +++ b/website/source/layouts/intro.erb @@ -17,6 +17,7 @@
  • Provision
  • Parallel Builds
  • Vagrant Boxes
  • +
  • Remote Builds
  • Next Steps
  • <% end %>