Tag: infrastructure automation

  • Understanding the Infrastructure Automation Maturity Model

    Understanding the Infrastructure Automation Maturity Model

    Nearly every company wants to evolve its digital transformation and increase the pace of software delivery and operations. And infrastructure automation is a new means to achieve these ends. It supports the emerging discipline of platform engineering and can increase scalability and reactivity to unforeseen events, enabling software ecosystems to be more anti-fragile. Increased infrastructure automation also helps free up engineers from focusing too much on managing DevOps when they really should be building out new features.

    But introducing more infrastructure abstraction can be met with certain challenges. This is often because departments have a wide range of cultures, processes and tooling already in place. With varying maturity levels across teams, it can be challenging to gauge where a company is before attempting to introduce new automation across the board. And as further evolution may require significant changes, having a baseline is key to planning for the future.

    I recently chatted with David Williams, senior vice president of market strategy at Quali, about an internal technique they’ve been using at Quali to gauge the maturity of their clients’ infrastructure automation. Their infrastructure automation maturity model breaks down the journey into four unique stages, moving from the least-mature ad-hoc automation to the most-mature autonomous solutions. Below, we’ll review this model and consider what questions need to be asked to ascertain where your team sits on the spectrum. We’ll see how enterprises can leverage such a model to hone in on improving their software operations.

    Four Questions to Determine Infrastructure Maturity

    DevOps is still a wild west in terms of how people approach it, said Williams. So before attempting to mandate sweeping cultural changes, it helps to first determine the base level of DevOps maturity within an organization. Here are four questions that can quickly assess the state of infrastructure automation within an organization.

    1. What Culture Already Exists?

    First, it’s good to evaluate the culture that already exists. How do teams deliver value and how is this value measured? Perhaps throughput or code quality is measured with specific metrics or SLAs. Understanding the DevOps attitude (and aptitude) within the organization will highlight pre-existing capabilities and show how teams collaborate.

    2. How Are People Organized?

    The genetic makeup of teams can dictate much about development and operations. How are teams organized? Are they large, siloed teams? Or are they two-pizza-sized teams? Understanding team organization and communication patterns are necessary to identify bottlenecks.

    3. What Processes Are Already in Place?

    Next, consider the development timelines and procedures already established and in use. Are teams applying SAFe, Lean, Agile or Scrum methodologies? What are these exact processes and how mature are they? Answers to these questions will demonstrate general release cadences and how teams drive productization.

    4. What Infrastructure Automation is Already Being Used?

    Lastly, you’ll need a window into what level of infrastructure automation, if any, is already in use today. How is it delivered? How is it managed? How is the success of this automation measured, and what is the overall outcome? You will likely find that automation is typically quite siloed and teams have differing approaches. This auditing is vital to identify what works well and what doesn’t.

    The Four Levels of the Infrastructure Automation Maturity Model

    Asking the above questions will quickly determine an organization’s “readiness state,” said Williams. But how do these answers map to the overall maturity of the organization’s infrastructure automation? Well, he shared four basic levels of infrastructure automation maturity that are commonly found in practice throughout today’s software development environments, ranging from bespoke scripts to more robust self-defining automation.

    Level 1: Ad-hoc

    The most basic level of infrastructure automation is ad-hoc integrations involving a mix of old and new technology. This level is chaotic and fragmented, with varying processes used throughout the organization. These bespoke integrations and scripts also may not have excellent visibility, limiting the potential for reusability within an organization.

    Level 2: Automation

    Next is having automation that is specifically tied to a certain technology stack. Nowadays, organizations are commonly hybrid multi-cloud, having adopted automation piecemeal with each new stack. This often results in multiple silos of automation stacks that are blind to each other. At this maturity level, one automation might fire off another automated procedure and so on, but engineers aren’t 100% aware of how they influence each other.

    Level 3: Frictionless

    The next level of infrastructure maturity begins to take the reins with more intentional automation adoption. At this stage, organizations embrace an internal developer platform, similar to Spotify’s Backstage, that helps engineers deliver and manage infrastructure more seamlessly. This tooling is more advanced than other levels integrating key commands into the developer’s IDE. Doing so eliminates the need to switch between environments and reduces friction.

    Level 4: Self-Defining

    Finally, the most advanced form of automation involves deeper intelligence within application operations, including the ability to dynamically optimize infrastructure. At this stage, infrastructure is self-defining, meaning production applications can automatically adapt, be self-governed and enable bursting and non-bursting capabilities. Such intelligence is typically proprietary to cloud providers, said Williams, yet companies often desire this intelligence inherent at the application level. Williams describes this stage as the “intelligent allocation of resources in line with application life cycle requirements.”

    Benefits of Self-Defining Infrastructure Automation

    Self-defining infrastructure automation has many benefits for companies, including having the infrastructure in line with application needs, scalability and measuring usage to optimize cloud spending. Many points within the software development life cycle could warrant increased automation, such as infrastructure-as-code (IaC), deployment release engines, configuration, traffic scalability, cloud management, containerization and documentation. But it’s not until you open conversations around infrastructure automation maturity and understand who is responsible for managing it that you can hone in on what areas can be improved.

  • Enabling Developers with Infrastructure Automation

    Enabling Developers with Infrastructure Automation

    Enabling developers with infrastructure automation

    Being first to market with new and improved applications and services is how successful organizations grow and differentiate business offerings.  Continuous software delivery means everything is fluid and constantly changed to enable the speed and agility required to ensure applications deliver on increasingly higher consumer satisfaction expectations.

    Everything released and rolled out needs to be evaluated and updated frequently with new capabilities and features added as requirements change. DevOps, continuous integration and delivery practices play a growing part in the streamlining of software pipelines and accelerating software releases, however for enterprises, the infrastructure supporting the pipelines remains siloed, provisioned (potentially, multiple times) at each stage of the software delivery pipeline.

    While infrastructure remains a skill intensive, stage based practice, there is no greater inhibitor to pipeline execution speed and agility and the requirement to scale DevOps to meet the needs of the business.

    The result is that IT organizations cannot keep pace and struggle to provide development and testing teams with the infrastructure environments they need, while maintaining security, compliance and efficiency. To help achieve speed and control, many DevOps-focused companies are turning to infrastructure automation. The goal of such an approach is to give DevOps teams access to the environments they need in a timely manner, all while maintaining control and oversight of costs and governance.

    The way businesses operate today, DevOps needs production environments available immediately. Developers cannot afford to wait days or longer when starting new projects. Some businesses try to address the challenge by building automated scripts to set up environments.

    The problem is that automated scripts are typically custom, hand-coded and require increasingly scarce skills. When changes to environments are needed, custom scripts need the same high level of skills to understand, evaluate, change, and test environments taking crucial time from pipeline execution.

    DevOps teams need instant access to infrastructure. The solution must be, application pipeline centric, automated, on-demand and self-service. It must be a platform that not only delivers and manages environments throughout the pipelines but integrate with existing infrastructure tools, subsuming what they create to ensure enterprises meet the demands of the business without inhibiting application software development innovation.

    The role of immutable infrastructure

    Enabling developers with infrastructure automation is the concept of reusable automation and immutable infrastructure. The concept for immutable infrastructure is to build the infrastructure components to an exact set of specifications. If a change to a specification is required, then a whole new set of infrastructure is provisioned based on the updated requirements, and the previous infrastructure is taken out of service as it is obsolete.

    How does that play into automating infrastructure for DevOps teams? Continuous delivery uses automation to make deployments routine and repeatable. To achieve this, delivery is built on the concept of versioning and automation to push deployments to variable environments on a development pipeline.

    Immutable infrastructure comes into play in that IT-heavy infrastructure chores, such as implementing updates and installing patches, are eliminated. If an infrastructure element needs an update or must be replaced, the old elements are replaced by new entities that have already made these changes and been incorporated, tested and verified.

    Bottom line: Reusable immutable building blocks make it easier to deliver the resources developers really need.

    Addressing governance

    Infrastructure automation should be used to ensure governance. However, traditional cloud governance approaches are limited by features, with infrastructure automation achieved through complex scripting. This results in the automation becoming a major maintenance challenge and a time commitment. With multi-cloud environments, complexity multiples.

    The smart approach is to focus infrastructure automation on managing governance across common cloud resources.  Putting infrastructure automation in the hands of DevOps practitioners does not mean relinquishing governance control, but ensures corporate compliance is maintained and enforced with policies controlling usage, security and cost. This prevents cloud sprawl without slowing down development cycles.

    Summing up

    Meeting todays growing DevOps infrastructure needs is a time-consuming task for IT organizations. It slows down every stage of the application development pipeline. The need is for a solution that provides developers and DevOps practitioners access to the cloud infrastructure and application environments they need on demand. This is accomplished using an Environments as a service (EaaS) platform, accessible through a GUI portal, command line interface and existing CI/CD tools.

    A modern environment automation platform must be designed for all team members of a DevOps practice to automate the requesting, provisioning and lifecycle management of infrastructure environments. The platform must integrate without impacting efficiency or limiting innovation. It must deliver environments on-demand with self-service automation capabilities and oversee and enforce governance compliance. This solution is the answer to organizations seeking to streamline the continuous software delivery pipeline for application development, testing and release to production.

     

  • IT Automation Tools Are No Longer Enough

    IT Automation Tools Are No Longer Enough

    As Chris Gardner—who conducted the Forrester Wave on Infrastructure Automation Platforms—stated, “Infrastructure automation isn’t just on-premises or in the cloud. It’s at the edge and everywhere in between.” And that’s because, well, it needs to be.

    It shouldn’t come as a surprise to anyone reading this that IT automation is a must-have for organizations today. With infrastructure spread across on-premises data centers, multiple clouds and a multitude of technologies, the complexity of IT long ago outgrew manual management. Automation is the only way to keep pace with constantly changing environments that need enhanced security, greater compliance and be easily adaptable to changing business and market conditions.

    Because of these needs, the market has been relatively quick to adapt and embrace automation technology. According to a recent study by Forrester Research, 56% of global infrastructure technology decision makers have implemented/are implementing or are expanding/upgrading their implementation of automation software. Many of these IT organizations have a trusted tool in place and have been automating scripts and tasks for years.

    Along with outgrowing managing infrastructure by hand, the industry is also quickly outgrowing automation tools. The automation market has now reached a point of maturity where an automation tool alone is not enough. In order for automation to continue to have an impact on an organization and keep pace with the speed IT changes, organizations need a platform that allows them to create a culture of automation.

    Automation as a Trait, Not a State

    Typically, when an organization acquires a new technology, they try to adapt it to their needs and how they work. Automation technology, along with most technology tools, does exactly that—it lets you adapt it to how you want to use it, and performs tasks as desired. But ultimately, successful automation comes down to more than just supporting task execution. Enterprises have realized that they need to support the behavior of automation in order for it to continue to scale.

    As opposed to automation being a state, use automation as a trait—something that is done naturally without thought. The analogy we like to use is one of learning a new language. When you learn conversational Spanish, your mind still thinks in English, then translates what you want to say into Spanish based on what you have learned. Yes, you improve over time, but when you start to dream in another language, that is when it has become second nature. It is no longer something you have to do, you just simply do it.

    When automation becomes second nature, that is when it can make the biggest impact and will help address a continually evolving infrastructure. As a discipline, automation is not technology-specific. As much as we talk about the technology behind it, it actually has little to do with automation. The technology itself is the easy part, the part that is reliant on a tool. Many have reached a point of maturity with using tools and are now working toward IT staff viewing automation akin to testing or documentation—while we may not always do it, we know we should. 

    Having automation become second nature is easier said than done, and something organizations are struggling with, realizing that a tool alone will not support this effort. It doesn’t provide the coordination and collaboration that is desperately needed to unlock the next level of automation capabilities. We need more than a tool to continue to scale automation and spread it to new areas of IT.

    The Next Phase of Automation and What to Look for

    There are multiple personas within an organization that are paramount to successful business-wide automation, and, to be blunt, automation must cater to all of them. Between developers, those trying to simply consume automation or sys-admins executing automation of mundane tasks, they all need something that works for them—but can also work consistently across these personas. Organizations need a common automation language across the entire enterprise and the hybrid cloud that creates a standardized experience for solving problems (and solving them only once). 

    Not only that, but they need a repository or catalog where everyone can find an answer to what they need, along with easily accessed integrations. Part of why automation is growing so rapidly is because of how many technology vendors have embraced the concept and, in turn, are working with automation vendors to integrate their technologies and make them easier to use.

    To continue to spread automation to new areas of a business, organizations need a single repository to more securely search and find necessary modules. Additionally, having a shared repository helps create an automation community within an organization. It brings different personas together to find what they each need, fosters collaboration and ultimately encourages sharing automation specific to their organization. It also provides a place to find integrations that they may not even have been aware they needed.

    When preparing for the next step in their automation journey, organizations should look for automation platforms that provide access to analytics, specifically those that can tell you how your automation is being used and where. As the adage goes, knowledge is power, and the more you know about your automation, the more successful it can be. More importantly though, if you are trying to create it as a behavior, analytics let you track and measure progress. It allows you to better understand what is working, what groups are thriving and what areas need improvement. Using automation analytics enables organizations to create a system for enabling standardized practices. 

    On the whole, a successful automation initiative needs a supporting automation platform to provide coordination and embrace collaboration between different groups. Simplification is also essential for making automation more accessible across these groups, especially in the face of competing needs and varying levels of engagement. Scaling automation successfully applies both to technologies, as well as the users that want to benefit from automation.

    Strategy for 2020

    There is no such thing as a perfect tool, and don’t let anyone try to tell you otherwise. The good news is it’s not about having a perfect solution, it’s about the experience that can be gained from a solution. Every organization is unique and there is no one-size-fits-all option.

    What is needed when developing an automation strategy that takes organizations into the future is a foundation for growing that automation. Automation platforms offer so much more than a tool alone, allowing it to be more easily scaled and being leveraged how the organization needs. It may never solve all problems but will take away a lot of the efforts. You need to find a vendor that is not selling a tool—but selling automation as a whole.

    — Richard Henshall

  • Speaking the Language of Applications

    Speaking the Language of Applications

    I arrived early to a meeting, and the pleasant security guard at AT&T suggested I take a look at their innovation museum while I wait. Among motion picture sound technology and life-size photos of switchboard operators on roller-skates stood a transistor prototype. The transistor was invented in Bell labs in 1947, and it changed the world. Steve Wozniak considered it the greatest innovation of all time in his 2014 article.

    But almost nobody needs to think about transistors anymore. The transistor had to become transparent and abstracted, so the next generations can build great things in higher level. The transistor made a huge influence on our lives as an enabler, but if people had to keep talking about transistors it wouldn’t be possible.

    Abstracting technologies is key to advancing to a higher level, making it possible to solve real business problems.

    The language of a client-focused business is applications. If we want to make a business execute faster these days, we need to make the development and release of its applications execute faster. But one thing stands in our way: the infrastructure. Applications reside on infrastructure–they are installed on servers, bundled in containers, on cloud instances, in networks, using storage.

    If we want to speak the language of applications, we need to abstract them from the infrastructure, and make the infrastructure transparent.

    The concept of abstracting applications is what stands at the basis of every new approach to application development and release around us.

    • Containers are all about abstracting services from specific infrastructure and making them mobile.
    • Serverless takes it to the extreme.
    • Public cloud makes it easier not to worry about owning physical infrastructure.

    Technology screams, “Think applications, soon you will not have to worry about infrastructure!”

    And yet, most of us mix applications and infrastructure in an unhealthy way when we try to automate them. It is unhealthy because mixing applications and infrastructure prevents reuse of automation assets and makes it very difficult to connect infrastructure usage to a business context.

    Understanding how mixing applications and infrastructure is manifested requires looking back into the evolution of infrastructure and application automation.

    The Evolution of Infrastructure: Manual Deployment and the Inception of Its Automation

    In the beginning there was manual. We got a server; it was sitting on a shelf. We got the application artifacts, maybe on a CD or a USB stick. We installed the application on the server. Our application was ready for use. When we needed to upgrade, we went back to the shelf and installed the update on our server. It was very hard to make this operation faster.

    This is where automation of applications and infrastructure started.

     

    Behind any automation tool or standard stands a model. This model reflects how its creators originally perceived the problem they were trying to solve. It consists of the entities they defined as first-class citizens, the operations they wanted to apply on these entities, their attributes.

    “All models are wrong, some are useful,” said George E. P. Box in 1976. This is true for automation models too. Automation models are usually nice and clean when we start off. But as the problems we try to solve transform, our models need to grow and adapt. Until at some point they are not useful anymore and we need to replace them with next generation modelling approaches.

    The Configuration Management Model

    Configuration management tools such as Puppet and Chef were originally built to manage application deployment and configuration on static infrastructure. This new approach to Ops optimized manually updating applications on servers. Better network connectivity made it possible for this model to thrive, with the ability to configure applications on servers remotely.

    But within a decade we witnessed the fast rise of immutable infrastructure. Immutable infrastructure is an approach to deploying applications where the infrastructure components are replaced instead of updated. This approach somewhat pulled the rug from under the configuration management model. With each update or change, the application must be re-deployed. This forced adding dynamic infrastructure provisioning to the configuration management model. Combining infrastructure automation and immutable infrastructure concepts into the configuration management model is a difficult task, since this model was never designed to accommodate something like that.

    The Infrastructure-as-Code Model

    Pure Infrastructure-as-Code tools were built to provision infrastructure dynamically. Terraform is an example for an open source tool that does this well. This model is created with infrastructure in mind.

    Whether we look into Terraform, AWS, CloudFormation or ARM templates, we will see the infrastructure is the starting point (defining network connectivity, VM instances and services) and the applications are an implicit addition. They are artifacts that happen to be deployed on and are tightly coupled to the infrastructure. We may look at a component that says “App A” but it actually stands for “specific infrastructure with app A installed on it.”

    This seems natural, because it’s the same way it worked in the good old physical-infrastructure world: We fetch a box, we install something on it. We focus on the infrastructure, because this is our starting point. The application is the artifacts we put on the infrastructure and scripts we run after we provision it. Presumably, the application cannot live without something to be on.

    Infrastructure-as-Code tools evolved the way open tools do–their base model was extended by the community because there was a need to automate applications deployment and not just infrastructure. But it is becoming difficult to extend this model to reflect a world where applications are built to move between clustered servers, and the starting point is no longer the infrastructure, but rather the application’s requirements.

    Mixing Infrastructure and Applications

    Trying to fit infrastructure provisioning and application deployment in a single model that was originally designed for just one of them creates issues. Infrastructure is lower level than applications. Applications reside on the infrastructure. The same app can reside on different infrastructure configurations. This critical relationship is completely flattened if you mix them.

    Moreover, from a business perspective it is important to make applications explicit. It’s our product. Our website. Our mobile app. The applications need to be the center of the attention and discussion. This kind of modelling puts applications in the shade of infrastructure.

    Four Great Reasons to Model Applications as a First-Class Citizen Right Now

    The models we use today are broken, and it is time to evolve. No matter if your applications reside in containers, or on cloud instances, or include native cloud services or a mix of them. Applications should be a first-class citizen, and not some artifact installed as an afterthought on the infrastructure we started from.

    The notion that applications should be abstracted from infrastructure doesn’t eliminate all the challenges of infrastructure provisioning and application deployment, but it creates a foundation for better and more scalable automation.

    1. Achieve Application Re-Use

    Modelling applications as a first-class citizen is the only way to make applications a re-usable element throughout the development and release pipeline.

    If there’s one thing I learned in my automation journey, it is that if automation doesn’t get frequently and consistently reused, you don’t get value for your money.

     2. The Path to Multi-Cloud

    Abstracting application is also the best approach for moving application workloads between cloud providers. If everything starts from infrastructure, we need to start from scratch when we move. If our applications are abstracted and defined separately—this definition stays the same when we move, only the infrastructure changes.

    3. The Path to Breaking Silos

    The vision of Dev, Sec, and Ops all dealing with the same language (code) is wonderful. But bringing everyone to the same code pool is not always easy. Applications and infrastructure are not the same thing, even though we can code both. Mixing them makes them unnecessarily hard to build and troubleshoot. It forces us to deal with fuzzy boundaries when it comes to responsibility for this code. Basing automation on a model that organizes the world in a way the different stakeholders can understand it, can help overcome this barrier.

    4. Connect Infrastructure to Business Needs

    Infrastructure-as-Code is a huge breakthrough, but the bigger story is about making application development and release faster. This doesn’t undermine the importance of infrastructure; infrastructure is the foundation of everything. But if we want to solve business problems, we need to talk the language of the business, and that’s the language of applications. Our automation should be built in a way that reflects this.

    — Maya Ber Lerner

  • Using Automation to Control Cloud Costs

    Using Automation to Control Cloud Costs

    By building in cost control automation from the very beginning, you can keep your cloud costs low while encouraging innovation.

    Infrastructure automation has become vital for every modern sys admin and operations team. Applications and systems are evolving from single-host mainframes to distributed microservices architectures. This automation has gone from basic operating system installation and setup to full-blown multistep deployments of production code from a single developer’s commit. By automating these mundane processes and eliminating the element of human error, production systems are much more stabile than ever before.

    But why stop at automating deployments? There are other elements that need to be automated, too. One of the main ones is cost control.

    Continually rolling out new infrastructure without ever taking a step back to analyze the cost often leads to the panic-driven cloud-bill-based phone calls from your finance department. Instead, applying automation to your cloud costs can help you to save money, so you never have that unpleasant surprise of a major bill.

    Scaling Up Without Ever Spinning Down

    Developers and operations teams often use infrastructure automation early in application development and deployment processes to get servers and databases deployed and functioning. Modern automation tools aren’t just powerful, but they’re also quick to deploy and fit into your current workflow. This is fantastic, but the problem is the automation effort can taper off once the environments are running—too often, users and teams move on to the next project before figuring out a way to keep costs from getting out of control. Then it’s too late, and users simply accept that money needs to be dumped into the deployment pipeline to keep everything on task.

    Easy-to-use automation is the key to spinning these environments up efficiently. It also can be key for keeping the costs of these environments low. Sure, you may need to keep the production systems scaled up for maximum application performance and customer satisfaction, but what about the test lab, sandbox environment, dev systems, UAT servers, QA deployments, staging hosts and other pre-production workloads? Having giant environments with system sizes that match production can be useful for some testing, but leaving it all running can be easily doubling your cloud costs. This is true for each environment you have, including for elements that are only used for a fraction of the time.

    As your infrastructure automation toolkit grows and evolves, there are a few things you should start building into all of your applications and deployments. These include:

    As this list grows, there’s one more thing you need: continuous cost control.

    By building in cost control automation from the very beginning, you can keep your cloud costs low while maintaining the flexibility required to keep up the pace of innovation. Without this, your costs are destined to rise faster than you intended, which will then cause headaches (and endless meetings) in the future. It may not be coming out of your bank account directly, but saving money at an enterprise organization is everyone’s job. Automating this is the key.

    — Jay Chapel