AWS DevOps Blog

Deploying MongoDB with OpsWorks

AWS OpsWorks is an application management service that makes it easy to deploy and operate applications of all shapes and sizes. OpsWorks uses Chef to install and configure software on Amazon EC2 instances and lets you automate any task that can be scripted. In this blog post, we will show a step-by-step example for how to install MongoDB on Amazon EC2 instances using OpsWorks.  
MongoDB is a document-oriented NoSQL database system. While it is easy to get started and install MongoDB, configuring and running a multi-node production environment requires planning. This is where an application management service like OpsWorks can help by automating and simplifying the deployment and the operations involved in running a distributed database on EC2. Because OpsWorks utilizes the Chef framework, instead of starting from scratch, we can leverage the community-built cookbooks that implement some of the best practices out of the box. 
For the purposes of this walk-through, we will set up a simple single-node MongoDB environment. 

Create Repository

With the latest release, OpsWorks supports Chef 11.10 and Berkshelf. Let’s create a repository that will reference the community cookbook and our own recipes to start:
Using GitHub, create a new repository “MyMongoDB”:
Then create a Berksfile which will direct OpsWorks to the community cookbooks:
site :opscode

cookbook 'mongodb'
Next, create a folder for your cookbooks. In this example it is named “mongodb-mysite”. 
Inside that folder create metadata.rb:
name        "mongodb-mysite"
description 'Example cookbook for MongoDB Berkshelf based install'
maintainer  "MyOrg"
license     "Apache 2.0"
version     "1.0.0"

depends 'mongodb'
Then create the recipes folder. Inside the recipes folder create a file default.rb:
include_recipe "mongodb::10gen_repo"
include_recipe "mongodb::default"


Create Stack

Now you’re ready to create an OpsWorks stack using the OpsWorks console
1. Select Add a Stack to create an OpsWorks stack.
2. Select Ubuntu 12.04 LTS for the default operating system.
3. Give it a name and select Advanced.
4. Set Use custom Chef Cookbooks to Yes.
5. Set Repository type to Git.
6. Set the Repository URL to your repository 
7. Set Manage Berkshelf to Yes.
8. Click the Add Stack button at the bottom of the page to create the stack.

Add a Layer

1. Select Add Layer
2. Choose the Custom layer, give it a name and shortname. Click Add Layer. 
3. Click the layer’s edit Recipes action and scroll to the Custom Chef recipes section. You will notice there are several headings—Setup, Configure, Deploy, Undeploy, and Shutdown—which correspond to OpsWorks lifecycle events. OpsWorks triggers these events at these key points in instance’s lifecycle, which runs the associated recipes. 
4. Enter mongodb-mysite::default next to Setup, click + to add it to the list and click the Save button at the bottom to save the updated configuration. OpsWorks will then run this recipe whenever you initially boot an instance in this layer.

Add an Instance

The layer just controls how to configure instances. You now need to add some instances to the layer. Click Instances in the navigation pane and under your custom MongoDB layer, click + Instance. For this walkthrough, just accept the default settings and click Add Instance to add the instance to the layer. Click start in the row’s Actions column to start the instance. OpsWorks will then launch a new EC2 instance and configure it as a MongoDB server. The instance’s status will change to online when it’s ready.


These instructions have demonstrated how to create a single MongoDB instance using the community cookbooks. See the community cookbooks for information about advanced options such as sharding the database to use OpsWorks automatic instance scaling.