Getting Started

This guide will walk you through deploying an application to a public cloud.

We will be deploying an example 3-tier web application, described using this blueprint:

name: My Web Cluster
location: location
services:

- serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
  name: My Web
  brooklyn.config:
    wars.root: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.7.0-M1/brooklyn-example-hello-world-sql-webapp-0.7.0-M1.war
    java.sysprops:
      brooklyn.example.db.url: >
        $brooklyn:formatString("jdbc:%s%s?user=%s\\&password=%s",
        component("db").attributeWhenReady("datastore.url"),
        "visitors", "brooklyn", "br00k11n")

- serviceType: brooklyn.entity.database.mysql.MySqlNode
  id: db
  name: My DB
  brooklyn.config:
    creationScriptUrl: https://bit.ly/brooklyn-visitors-creation-script

(This is written in YAML, following the camp specification. )

Install Brooklyn

Download the Brooklyn distribution and expand it to your home directory ( ~/ ), or in a location of your choice. (Other download options are available.)

Expand the tar.gz archive:

$ tar -zxf brooklyn-dist-0.7.0-M1-dist.tar.gz

This will create a brooklyn-0.7.0-M1 folder.

Note: You'll need a Java JRE or SDK installed (version 6 or later), as Brooklyn is Java under the covers.

Launch Brooklyn

Let's setup some paths for easy commands.

(Click the clipboard on these code snippets for easier c&p.)

$ cd brooklyn-0.7.0-M1
$ BROOKLYN_DIR="$(pwd)"
$ export PATH=$PATH:$BROOKLYN_DIR/bin/

We can do a quick test drive by launching Brooklyn:

$ brooklyn launch

Brooklyn will output the address of the management interface:

INFO Starting brooklyn web-console on loopback interface because no security config is set

INFO Started Brooklyn console at http://127.0.0.1:8081/, running classpath://brooklyn.war and []

But before we really use Brooklyn, we need to setup some Locations.

Stop Brooklyn with ctrl-c.

Configuring a Location

Brooklyn deploys applications to Locations.

Locations can be clouds, machines with fixed IPs or localhost (for testing).

Brooklyn loads Location configuration from ~/.brooklyn/brooklyn.properties.

Create a .brooklyn folder in your home directory and download the template brooklyn.properties to that folder.

$ mkdir ~/.brooklyn
$ cd ~/.brooklyn
$ wget /v/0.7.0-M1/use/guide/quickstart/brooklyn.properties

Open brooklyn.properties in a text editor and add your cloud credentials.

If you would rather test Brooklyn on localhost, follow these instructions to ensure that your Brooklyn can access your machine.

Restart Brooklyn:

$ brooklyn launch

Launching an Application

There are several ways to deploy a YAML blueprint (including specifying the blueprint on the command line or submitting it via the REST API).

For now, we will simply copy-and-paste the raw YAML blueprint into the web console.

Open the web console (127.0.0.1:8081). As Brooklyn is not currently managing any applications the 'Create Application' dialog opens automatically. Select the YAML tab.

Brooklyn web console, showing the YAML tab of the Add Application dialog.

Chose your Cloud / Location

Edit the 'location' parameter in the YAML template (repeated below) to use the location you configured.

For example, replace:

location: location

with (one of):

location: aws-ec2:us-east-1
location: rackspace-cloudservers-us:ORD
location: google-compute-engine:europe-west1-a
location: localhost

My Web Cluster Blueprint

name: My Web Cluster
location: location
services:

- serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
  name: My Web
  brooklyn.config:
    wars.root: http://search.maven.org/remotecontent?filepath=io/brooklyn/example/brooklyn-example-hello-world-sql-webapp/0.7.0-M1/brooklyn-example-hello-world-sql-webapp-0.7.0-M1.war
    java.sysprops:
      brooklyn.example.db.url: >
        $brooklyn:formatString("jdbc:%s%s?user=%s\\&password=%s",
        component("db").attributeWhenReady("datastore.url"),
        "visitors", "brooklyn", "br00k11n")

- serviceType: brooklyn.entity.database.mysql.MySqlNode
  id: db
  name: My DB
  brooklyn.config:
    creationScriptUrl: https://bit.ly/brooklyn-visitors-creation-script

Paste the modified YAML into the dialog and click 'Finish'. The dialog will close and Brooklyn will begin deploying your application.

Your application will be shown as 'Starting' on the web console's front page.

My Web Cluster is STARTING.

Monitoring and Managing Applications

Click on the application name, or open the Applications tab.

We can explore the management hierarchy of the application, which will show us the entities it is composed of.

  • My Web Cluster (A BasicApplication)
    • My DB (A MySqlNode)
    • My Web (A ControlledDynamicWebAppCluster)
      • Cluster of JBoss7 Servers (A DynamicWebAppCluster)
      • NginxController (An NginxController)

Clicking on the 'My Web' entity will show the Summary tab. Here we can see if the cluster is ready to serve and, when ready, grab the web address for the front of the loadbalancer.

Exploring My Web.

The Activity tab allows us to drill down into what activities each entity is currently doing or has recently done. It is possible to drill down to all child tasks, and view the commands issued, and any errors or warnings that occured.

Drill into the 'My DB' start operation. Working down through 'Start (processes)', then 'launch', we can discover the ssh command used including the stdin, stdout and stderr.

My DB Activities.

Stopping the Application

To stop an application, select the application in the tree view (the top/root entity), click on the Effectors tab, and invoke the 'Stop' effector. This will cleanly shutdown all components in the application and return any cloud machines that were being used.

My DB Activities.

Next

So far we have touched on Brooklyn's ability to deploy an application blueprint to a cloud provider, but this a very small part of Brooklyn's capabilities!

Brooklyn's real power is in using Policies to automatically manage applications. There is also the (very useful) ability to store a catalog of application blueprints, ready to go.

Getting Started - Policies and Catalogs