Stay Out of the Rain, Episode 2: Adapting to the World of Cloud Deployments
Stay Out of the Rain, Episode 2: Adapting to the World of Cloud Deployments
The second in this series will help you avoid the pitfalls of scripting, automation, and dependency managment when migrating to cloud.
Join the DZone community and get the full member experience.Join For Free
Learn how to migrate and modernize stateless applications and run them in a Kubernetes cluster.
"Stay Out of the Rain" is a series of essential insights for modern companies looking to release software faster and with higher quality, across ever-changing and complex environments. Written by XebiaLabs Chief Product Officer, former Forrester Research Principal Analyst, and long-time software guru Robert Stroud, this series lays down a clear path of DevOps best practices for moving to the cloud, flags the puddles to avoid, and shares secret shortcuts to get you back on track when the inevitable thunderstorm strikes. Read on and let Rob teach you how to stay out of the rain!
Cloud adoption is accelerating as it becomes increasingly popular with DevOps teams. The cloud offers access to affordable, flexible IT resources that application developers can use to speed up development, often in conjunction with automated delivery and deployment pipelines. According to LogicMonitor's Cloud Vision 2020: The Future of the Cloud Study, 83% of enterprise workloads will be in the cloud by 2020, with "excelling at DevOps" being one of the most common driving factors (58%) after digital transformation and IT agility (from 83% Of Enterprise Workloads Will Be In The Cloud By 2020 by Louis Columbus).
Today, many organizations are taking a cloud-first approach to building new applications. Empowering DevOps teams to use cloud resources is a smart way to facilitate process improvements and foster innovation in both application development and operations. However, deploying applications to Production-ready cloud environments at enterprise scale poses some unique-and a few not-so-unique- challenges for DevOps teams.
1. Scripting Cloud Deployments Doesn't Scale
Teams start out small, developing one or two applications for the cloud as an experiment. At this small scale, it's natural for them to try to automate deployments by writing scripts as they figure out what's needed to get an application up and running in the cloud.
But as organizational scaling takes place and additional teams start transitioning more complex applications to the cloud, they quickly learn that scripting deployments doesn't scale. Scripts that work for one application or set of services rarely work for others. More often than not, each development team writes their own scripts, leading to the proliferation of processes and a complete lack of standards.
The challenge becomes increasingly complex as the organization grows beyond a simple setup where they only use one cloud provider's Infrastructure as a Service (IaaS) product. Teams often need to adopt, integrate, and manage multiple cloud services to actually achieve a working application. And at enterprise scale, it's common to use multiple cloud providers or to adopt a hybrid setup that combines public and private cloud infrastructure.
Scripting, although relatively simple for one-off tasks, erodes development team productivity. As deployments grow in complexity and scale, teams increasingly spend time writing deployment scripts, losing time that could be spent developing value-adding application features.
This problem doesn't disappear over time; scripts require constant updating as applications grow, cloud APIs change, and cloud providers roll out new services. This perpetual evolution leads to more technical considerations and complications to deal with as teams try to keep cloud deployments manageable.
"How do we handle rollbacks?" isn't a question that's automatically answered by moving to the cloud. Application deployments still occasionally fail, and you have to be prepared to recover in a fast, automated way — which isn't something that you can achieve with handwritten scripts.
2. You Still Have to Manage Dependencies
Dependencies are a fact of life, whether that means dependencies between applications or microservices, between containers or other virtual machines, or between parts of the infrastructure located in the cloud or on-premises.
Managing dependencies when applications are deployed to different types of infrastructure poses a new challenge: how do you ensure that the right versions of applications are deployed to the right environments, at the right time? Are the versions of microservices in sync with each other? Will your current dependency management strategies work when those environments are cloud-based or a hybrid of cloud and on-premise? And how do you manage dependencies over time as applications and infrastructure change and grow?
3. Provisioning Cloud-Based Environments Takes Time
Cloud computing promises faster, easier access to the infrastructure that you need to run applications: no more ordering servers, installing them in racks, and waiting for a system administrator to install an OS and other software. But many organizations implement manual reviews and approvals for cloud usage in an attempt to ensure security checks are in place or simply to manage costs.
DevOps teams can't move faster if they're hindered by cumbersome, time-consuming approval processes before they can spin up and start using new cloud environments. It's more efficient to automate cloud instance management so that DevOps teams can optimize their cloud usage. And with the right cloud management solution, you can ensure that automated security checks are a built-in, immutable part of the process.
Enjoy Sunny Skies with Continuous Delivery and Deployment
The cloud doesn't have to rain on your Continuous Delivery and Continuous Deployment efforts; you can take control of deployment processes while rapidly testing and releasing applications on the cloud. Release orchestration and deployment automation can enable you to accelerate delivery while delivering enterprise-level scalability, reusability, security, testing, and standardization, so you can optimize the benefits that cloud-based infrastructure has to offer.
Escape the Scripting Trap with Model-Based Deployments
To escape the scripting trap, you need to future-proof cloud-based application delivery by leveraging a declarative, model-based solution for automating deployments. A model-based approach decouples applications from environments, so you don't have to manually script each deployment step in every single workflow for every single application.
You specify the components that make up your application and the environment where you want to deploy them-whether it's on-premises or in the cloud. Model-based deployment automation can determine the steps that are needed to deploy the application and run them in the right order, every time.
Roll Back Application Deployments Intelligently
A significant benefit of cloud-based infrastructure is the ability to destroy cloud instances quickly and easily. In the event of a failed deployment, the ability to rapidly restore the application to a working state instead of completely tearing down and recreating the environment is critical to business success.
To fully ensure application stability, you need a deployment automation solution that supports intelligent rollback to restore the application to a usable state, without impacting other applications that are running in the same environment. Additionally, the rollback needs to work correctly, no matter how much of the deployment was executed successfully.
Centralize Dependency Management Across Applications
To efficiently manage application, deployment, and infrastructure dependencies across the enterprise, you need to centralize them in a single place that all teams can access. This structure ensures that each team can maintain the dependency information that is related to their area of responsibility.
An integrated release orchestration and deployment automation platform will identify application dependencies and determine the state of the target environment during each stage of the release and deployment pipeline. This type of infrastructure for your release pipeline provides a single source of truth, ensuring all technical dependencies are in place when you upgrade applications that are running on-premises or in the cloud.
Build Cloud Environment Provisioning into Your Pipelines
It's important to enable DevOps teams to provision cloud-based infrastructure automatically on demand, so that provisioning becomes an automated, repeatable, auditable part of the software delivery lifecycle instead of a cumbersome, time-consuming manual process. The right deployment automation platform can also automatically tear down cloud instances that are no longer needed, so you don't pay for cloud resources that aren't being used.
Published at DZone with permission of Robert Stroud , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.