The following post references code hosted in

Full documentation for the work can be found at This code provides a demonstration of using open-source tools to configure and orchestrate BIG-IP.




So far we have talked above AWS networking basics, how to run BIG-IP in a VPC, and highly-available deployment footprints. In this post, we’ll move on to my favorite topic, orchestration.


By this point, you probably have several VMs running in AWS. You’ve lost track of which configuration is setup on which VM, and you have found yourself slowly going mad as you toggle between the AWS web portal and several SSH windows.  I call this ‘point-and-click’ purgatory. Let's be blunt, why would you move to cloud without realizing the benefits of automation, of which cloud is a large enabler.  


If you remember our second article, we mentioned CloudFormation templates as a great way to deploy a standardized set of resources (perhaps BIG-IP + the additional virtualized network resources) in EC2.  This is a great start, but we need to configure these resources once they have started, and we need a way to define and execute workflows which will run across a set of hosts, perhaps even hosts which are external to the AWS environment. Enter the use of open-source configuration management and workflow tools that have been popularized by the software development community.


Open-source configuration management and AWS APIs

Lately, I have been playing with Ansible, which is a python-based, agentless workflow engine for IT automation. By agentless, I mean that you don’t need to install an agent on hosts under management.  Ansible, like the other tools, provides a number of libraries (or “modules”) which provide the ability to manage a diverse collection of remote systems.  These modules are typically implemented through the use of API calls, often over HTTP. Out of the box, Ansible comes with several modules for managing resources in AWS.  While the ‘ec2_’ libraries provided are useful for basic orchestration use cases, we decided it would be easier to atomically manage sets of resources using the ‘cloudformation’ module. In doing so, we were able to deploy entire CloudFormation stacks which would include items like VPCs, networking elements, BIG-IP, app servers, etc.  Underneath the covers, the ‘cloudformation’ Ansible module and our own project use the ‘boto’ python module to interact with AWS service endpoints. Ansible provides some basic modules for managing BIG-IP configuration resources. These along with libraries for similar tools can be found here:


  • Ansible:
  • Puppet:
  • SaltStack:


In the rest of this post, I’ll discuss some work colleagues and I have done to automate BIG-IP deployments in AWS using Ansible. While we chose to use Ansible, we readily admit that Puppet, Chef, Salt and are all good choices for implementing deployment and configuration management workflows for your network. Each have their upsides and downsides, and different tools may lend themselves to different use cases for your infrastructure. Browse the web to figure out which tool is right for you.

Using standardized BIG-IP interfaces

Speaking of APIs, for years F5 has provided the ability to programmatically configure BIG-IP using iControlSOAP.  As the audiences performing automation work have matured, so have the weapons of choice.  The new hot ticket is REST (Representational State Transfer), and guess what, BIG-IP has a REST interface (you can probably figure out what it is called).  Together, iControlSOAP and iControlREST give you the power to manage nearly every configuration element and feature of BIG-IP.  These interfaces become extremely powerful when you combine them with your favorite open-source configuration management tool and a cloud that allows you to spin up and down compute and networking resources.  


In the project described below, we have also made use of iApps using iControlRest as a way to create a standard virtual server configuration with the correct policies and profiles. The documentation in Github describes this in detail, but our approach shows how iApps provide a strongly supported approach for managing network policy across engineering teams. For example, imagine that a team of software engineers has written a framework to deploy applications. You can package the network policy into iApps for various types of apps, and pass these to the teams writing the deployment framework.


Implementing a service catalog offering to deploy applications

To pull the above concepts together, a colleague and I put together the aws-deployments project. The goal was to build a simple service catalog which would enable a user to deploy a containerized application in EC2 with BIG-IP network services sitting in front. This is example code that is not supported by F5 support but is a proof of concept to show how you can fully automate production-like deployments in AWS.


Some highlights of the project include:

  • Use of iControlRest and iControlSoap within Ansible playbooks to setup advanced topologies of BIG-IP in AWS.
  • Automated deployment of a basic ASM web application firewall policy to protect a vulnerable web app (Hackazon).
  • Use of iApps to manage virtual server configurations, including the WAF policy mentioned above. (Coming soon)

Figure 1 - Generic Architecture for automating application deployments in public or private cloud

In examination of the code, you will see that we provide the opportunity to provision all the development models outlined in our earlier post (a single standalone VE, standalones BIG-IP VEs striped availability zones, clusters within an availability zone, etc). We used Ansible and the interfaces on BIG-IP to orchestrate the workflows assoiated with these deployment models. To perform the clustering step, we have used the iControlSoap interface on BIG-IP. The final set of technology used is depicted in Figure 3.


Figure 2 - Technologies used in the aws-deployments project on Github

Read the code and test it for yourself

All the code I have mentioned is available at We encourage you to download and run the code for yourself. Instructions for setting up a development environment which includes the necessary dependencies is easy.  We have packaged all the dependencies for use with either Vagrant or Docker as development tools.   The instructions for either of these approaches can be found in the or in the /docs directory. The following video shows an end-to-end usage example. (Keep in mind that the code has been updated since this video was produced.)




At the end of the day, our goal for this work was to collect customer feedback. Please provide some by leaving a comment below, or by filing ‘pull requests’ or ‘issues’ in Github. In the next few weeks, we will be updating the project to include the Hackazon app mentioned above, show how to cluster BIG-IP across availability zones, and how to deploy an ASM profile with an iApp.


Have fun!