freshidea - Fotolia
Create a cloud development environment for on-premises apps
With built-in tools from many of the mature public cloud services and a well-planned deployment strategy, IT teams can -- and should -- move test/dev to public cloud.
Even if you're not moving on-premises applications to the cloud in the near term, you can still enjoy the benefits of a cloud development environment. Many organizations are taking a hybrid cloud approach: Running development and test environments in the public cloud and production applications on premises.
With the variety of tools now available from multiple cloud providers, it's easier than in previous years to stand up infrastructure on-demand, deploy code and run a battery of tests against an application to ensure that it's ready for production.
Benefits of cloudy dev/test
Whether it's a simple app that runs on a single server, or a sophisticated multi-tier application that requires a complex test environment, cloud computing platforms like Amazon Web Services (AWS) and Microsoft Azure can drastically speed up the development process.
Public cloud providers make it easy to spin up VMs. A single application programming interface call will provision a virtual machine for the developer or test engineer to deploy and validate the application with a series of tests. But not all applications are that simple.
Some enterprise applications require a lot of supporting infrastructure to mimic the on-premises production environment for suitable real-world tests. The app team -- developers and IT ops -- needs to understand app performance in the real world with the best approximation of the specifics of the environment, so it can more accurately predict behaviors such as latency. Mature platforms, such as AWS and Azure, use declarative JSON-based templates to support automating complex infrastructure environments with custom networking, storage, VM instances and more. Operations teams can create fully-configured replicas of the on-premises production environment in the cloud in a matter of minutes. This concept is known as Infrastructure as Code, called CloudFormation on AWS and Azure Resource Manager templates on Azure.
Data center managers always face constraints on hardware when allocating resources to the development and test teams. The hardware specs for the test environment must be similar to those that you'll deploy in production. You also have to keep these physical systems up and running. Hardware and supporting peripheral components eventually fail, and when that happens, it only slows down the process of testing code until the ops team can replace or fix the component. With cloud development environments, physical hardware is abstracted away, along with all the maintenance tasks for it. Developers can spin up as many virtual servers as needed on the chosen cloud platform.
Maintaining physical boxes to run development and test workloads means the IT organization pays for it to sit idle at times. It takes up floor space in the data center and probably consumes power even when not in use. With the cloud, users only pay for what they use. Environments can be built up and torn down on demand so that the organization only pays for needed resources while using them.
Many continuous integration (CI) and application lifecycle management tools integrate with cloud platforms as well as owned servers. Providers such as AWS and Microsoft have a suite of DevOps tools that work with on-premises as well as cloud-based servers, easing the hybrid transition from dev to production.
Tools that make hybrid cloud happen
If you're starting from scratch, consider a tool chain that will build a fully automated software release pipeline.
Source control. Git is the most widely used source control tool, offering a distributed version control system. Many continuous testing and integration tools work easily with Git, and you'll find a lot of companies using GitHub, a web-based Git repository hosting service. Application teams can set up public and private source code repositories, collaborating on the code base that is eventually pushed into test and production environments.
Continuous integration. When it comes to automating code deployment to test environments in the cloud, try a CI server. The CI server can be set up to poll source control repository for commits -- changes to application code -- then trigger a series of stages based on the latest changes. For example, you could use the open source Jenkins CI server -- or competitors TeamCity, Travis CI, CircleCI or Codeship -- to poll a GitHub repository for an application. When a change is committed, Jenkins runs a build on the code, executes unit tests then triggers the deployment of a test environment by launching a CloudFormation template. Once the environment is up and running, another job deploys the application to the servers in your test environment. This keeps application code off of production servers until it passes all tests, at which point the ops team can either manually deploy to the servers or activate an automated task to do it.
Performance, load and user interface testing. Performance or user interface (UI) tests ensure that an application can handle the expected user load in production and that it functions properly at scale. Popular tools that can run load and performance tests for both on-premises and cloud-based resources are offered from Apica and BlazeMeter. Ghost Inspector is a great tool for catching website bugs and other UI issues.
Cloud-native DevOps tools
AWS and Microsoft have created straightforward cloud-native software lifecycle management tools to flexibly manage applications in hybrid clouds using on-premises infrastructure and public cloud.
AWS CodeDeploy automates the deployment of application code to an Amazon Elastic Compute Cloud instance or to owned servers. AWS CodePipeline builds an orchestrated continuous delivery (CD) pipeline in the cloud, which polls a source control repository for changes, kicks off builds and/or tests on the CI server and then rolls out code to development instances in the cloud and to private servers running the CodeDeploy agent.
Microsoft's cloud-based Visual Studio Team Services product works in a similar fashion to the AWS DevOps tool set. The Release Management feature enables IT teams to build an automated release pipeline so that the application team can deploy code to any server.
A CI server can run either on premises or in the cloud. In addition, cloud servers don't have to be one single cloud: On-premises servers can use a different cloud platform than the development and test servers. For example, there's nothing stopping you from running the AWS CodeDeploy agent on an Azure VM.
Making it all work in the real world
The technology for a hybrid development and test cloud deployment is here today. One of the biggest challenges will likely be the complexity of the environment.
Team members need certain resources to get the job done. This may include training on public cloud platforms and on the specific CI/CD tools that form the app's pipeline.
Get all the teams in the organization on board with the approach. For example, there may be scenarios where your on-premises networking and/or security teams need to understand the flow of data from on premises into the cloud to adhere to regulations or to internal security policies. Whatever the reason, fostering a working relationship outside of the DevOps bubble will ensure successful transitions from public cloud to production servers. Involve all of the teams that can help achieve the broader goal and should work together to get the job done.