Category: DevOps Practice

  • Runtime Security and Incident Response with Loris Degioanni

    Runtime Security and Incident Response with Loris Degioanni

    By adopting DevOps, Kubernetes and containers you can accelerate innovation and deliver a better experience for customers and employees. While Kubernetes adoption simplifies application deployment, security needs to adapt and be cloud-first, open and frictionless as a new set of complexities may surface.

    Check out this interview with Sysdig Founder and CTO Loris Degioanni to find out how you can manage the health of your applications and learn more about runtime security and incident response.

    Loris is a security expert and an open source veteran, and he’s also one of the keynote speakers presenting at this year’s DevOps Experience Virtual Summit. During his presentation, Loris will share his perspective on where security is going and practical advice for managing security risk in a Kubernetes and DevOps world.

    For more insights and tips on Kubernetes security, attend Loris’s keynote session at DevOps Experience 2020 on Oct. 22. To check out the full agenda or to register for free, visit the DevOps Experience website.

  • Why It’s Time for Site Reliability Engineering to Shift Left

    By adopting a multilevel approach to site reliability engineering and arming your team with the right tools, you can unleash benefits that impact the entire service-delivery continuum

    In today’s application-driven economy, the infrastructure supporting business-critical applications has never been more important. In response, many companies are recruiting site reliability engineering (SRE) specialists to help them improve reliability, availability, latency and a host of other metrics that impact customer satisfaction. These vital new people resources are focused on keeping sites and services running in peak form.

    There are clear limitations to this operations focus, though. A service is made up of many application components that can impact business-critical services. How do you ensure reliability is baked into each app and each code change if your engineers focus only on backend performance?

    Some trailblazers are beginning to tackle this issue head-on, tasking their SREs with taking on new roles that support key stages of the DevOps life cycle. The goal is to take early, proactive steps to ensure quality and reliability are built in from the beginning.

    A Path Pioneered by Test Teams

    To understand why this “shift left” is so important, consider recent revolutionary changes in the software testing function. Not that long ago, testing was considered a distinct phase in the software life cycle, timed to begin well after the work of application developers was done. Testing Centers of Excellence uncovered defects and passed code back to the development team for rework.

    As developers moved to agile sprints, though, this approach to testing quickly became a bottleneck. By the time Centers of Excellence uncovered issues, developers had moved on to other projects. In response, new continuous testing programs emerged, staffed by a new breed of software development engineers who had honed their testing skills.

    These individuals are now embedded with development teams to ensure applications are built better from the start. Open source test automation tools help them test early and often, without impeding agile delivery schedules.

    It’s important to note that Testing Centers of Excellence haven’t gone away. Instead, they have taken on a broader leadership role and are now responsible for coordinating testing across the enterprise in support of continuous software integration and delivery.

    A 3-Level Model for SRE

    There is much that SRE teams can learn from the experiences of their testing colleagues. To produce optimal results, it is important to integrate reliability experts into your organization’s overarching agile framework. Consider adopting the following three-level model that shifts the function to the left and integrates skilled engineers at key points in the DevOps life cycle:

    1. Application level. Embed SREs with development and testing teams to ensure application components and new releases won’t disrupt reliability. These individuals focus on application-level service objectives, error budgets and integration into the DevOps pipeline.
    2. System level. Assign SREs to focus on the applications in your organization’s release train. These individuals support release and launch coordination, evaluate system architecture readiness and ensure your organization meets systemwide service-level objectives.
    3. Enterprise level. Establish a Site Reliability Engineering Center of Excellence, staffed by engineers who oversee the governance of your enterprise architecture. These individuals establish best practices and select the tools and resources required to support your site reliability function companywide.

    An Expanded Toolset

    To support this broadened role, you will need tools that can support your engineers across the entire DevOps life cycle. You will need to be able to see and track issues engineers uncover and to evaluate system-level readiness and performance against your service-level objectives. You will also need a big-picture view that spans activity across the entire enterprise.

    Fortunately, a new generation of solutions is now available to help, powered by artificial intelligence, machine learning and intelligent automation. These resources can help your team process massive amounts of data from disparate toolsets and turn that data into actional insights. As a result, you’ll have all the lifecycle analytics you need to be effective in your new and broadened role.

    SRE and Shift Left: Broad New Benefits

    By adopting a multilevel approach to sire reliability engineering and arming your team with the right tools, you can unleash benefits that impact the entire service-delivery continuum.

    You can build a continuous cycle of feedback, collaboration and governance that spans design, development and the launch and operation of new services. You can better manage configuration changes, service levels and error budgets. You can get a clearer view of application reliability and production readiness to guide planning initiatives and to help you prioritize investments.  And you can build better-informed business cases to move your organization forward. Shifting left is clearly a win-win move.

  • Has the Time Come for IT Predictive Analytics?

    Has the Time Come for IT Predictive Analytics?

    Predictive analytics technologies have become critical to compete in manufacturing (predicting machine failure), banking (predicting fraud), e-commerce (predicting buying behavior) as well as to address horizontal use cases such as cybersecurity breach prevention and sales forecasting. Using data to predict and prevent IT outages and issues is also a growing best practice—especially as advances in monitoring software have made it easier to deliver analytics in a timely manner.

    The process of rapidly collecting IT systems data, including by integrating data from various monitoring tools in use, has become rudimentary. The magic is in the algorithms, which can deliver actionable intelligence. IT predictive analytics, once known as IT operations analytics (ITOA), is still nascent in many organizations, but it’s far more streamlined than it used to be when one needed to export data sets to specialized analytics tools such as Tableau or Microsoft PowerBI. Data analysts and then data scientists were necessary to interact with these advanced tools and deliver valuable predictions—a process that could take weeks.

    Today, IT professionals can use modern IT operations monitoring and management systems for collecting and integrating the data, normalizing it and then analyzing it in real-time. That’s making predictive analytics in IT far more user-friendly, affordable and useful for all organizations, not just the largest companies with the biggest budgets.

    Advances in predictive analytics technology, aided by machine learning and AI, are creating more proactive workflows for IT operations teams. For instance:

    • Storage usage. It is not a happy moment when IT finds out that the expensive storage array is down. It’s not enough to know after the fact that storage volumes were steadily climbing out of the normal pattern. By knowing ahead of time that a trend is heading out of the acceptable range, IT can research the cause and fix it before any damage is done. With cloud storage, risks include slow connectivity if network bandwidth is insufficient or security breaches if the cloud provider’s security mechanisms are not sufficient for your use case. Predictive analytics can alert on these possibilities in time to take corrective action.
    • Cloud-to-cloud performance comparison. An important aspect of predictive analytics is the ability to make correlations and show relationships between multiple data points. IT leaders are interested in learning about an application’s performance across the entire IT environment, which may include comparing historical performance across multiple clouds to predict weaknesses in one service over the other and mitigate them proactively. This use of predictive analysis could also be valuable in helping companies choose one cloud provider over another for particular applications and workloads.
    • Container optimization. Making correlations is especially valuable when it comes to managing performance in a microservices environment. Collecting metrics for a containerized application isn’t useful by looking at each container per se, but it is useful when looking across the container environment to see if there are common metrics dangerously trending the wrong way across many or all containers.

     A Few Tenets for Predictive Analytics in IT Operations

    Regardless of the tools that you choose to create a predictive analytics practice in your organization, there are several things you must get right first. Here are six recommendations to consider:

    1. Centralize the data into one or two systems at the most. This allows for data cleansing, normalization and a single (ideally) system of record for all other users and integrations.
    2. Invest in first-class data visualization. As business units now interact with IT management systems to see departmental usage and troubleshoot minor issues, tools should be user-friendly for people who are not data analysts. Dashboards and charts can tell the story simply and explain the correlations and conclusions which the software delivers.
    3. Make it actionable. There is no use in creating predictive data if it’s not automatically sent to the right individuals and/or shared with other systems to execute actions when needed. Think about it the Amazon way: We all know that people aren’t sitting behind monitors sending millions of individualized recommendations to customers every day. Your IT operations portfolio should behave the same way: automated, intelligent, helpful and always adapting to new information.
    4. Correlate data at the speed of IT change. Before there was such a thing as virtualization and cloud infrastructure, there weren’t many devices to monitor and things didn’t change much day-to-day. You could actually “set and forget” data center infrastructure components for weeks. Now, of course, changes are happening behind the scenes every minute without our knowledge. Yet your monitoring and change management tools need to know about it. By using standard deviation for change detection monitoring—four-hour increments are typical—you can ensure that your team always has an updated understanding of infrastructure status as well as the relationships between the various systems and components.
    5. Avoid the black box. Enrich your data lake continuously with event data and allow users to see the IT operations platform working in real-time. With machine learning and artificial intelligence, there’s always a measure of doubt and a margin of error. This uncertainty can be counteracted by sending more diverse data sets so that the user can make her own conclusions. As well, when the machine makes an error in judgment, train it to avoid making the same mistake again.
    6. Update internal IT skills. You’ve heard it before. In the age of big data, IT organizations need data science expertise and skills. It’s important to acquire or develop these skills so that your team can combine machine intelligence with human insight and make better decisions. That is where AI-driven analytics holds the most promise.

    We are just getting started on this new age of predictive analytics in IT operations. Before long, organizations will move from predicting downtime and serious application issues to driving infrastructure optimization and cost savings. IT leaders will be able to answer with confidence, how much cloud infrastructure needs to be provisioned or de-provisioned over time. They will understand with better clarity common application scaling patterns, as well as overall capacity management needs. As predictive analytics takes hold, IT leaders will need to determine how to reorganize employees who previously spent hours scanning data on screens into more strategic roles.

  • 6 Advantages of Microservices

    6 Advantages of Microservices

    Microservices have recently gained in popularity, but you may be unsure whether this architecture is right for your environment. What’s great is microservices are not necessarily a new beast, as the concepts behind them have been a solid part of software development for decades. Topics such as modular programming, separation of concerns and service-oriented architecture (SOA) all align with the objectives of a microservices architecture. In fact, many development teams have adopted microservices without necessarily calling them that—event-driven architectures are one example.

    Before discussing the advantages of microservices, let’s make sure we’re aligned on a definition and the key principles:

    • Microservices are a set of software applications that work together, each designed with a limited functional scope.
    • They work with each other to form a larger solution.
    • Each microservice has minimal capabilities for the sake of creating a highly modularized overall architecture.

    Does this sound like an architecture your development team has been utilizing? If not, there are several advantages for use within the enterprise, especially as businesses build more complex solutions for customers.

    Easier to Build, Easier to Enhance

    Microservices are “micro,” requiring much less code than their monolithic application counterparts. The sum of code may compare to a monolithic application, but it’s the physical separation of code that draws cleaner, distinct lines between different functions for microservices. They also excel in experimentation and testing because the focus is on one small feature or capability, making incremental code updates simpler. As a result, companies increase agility, bringing higher-quality systems that have less complex code, require lower testing effort, support easier unit testing and reduce problem risk.

    Microservices also free users from concerns of how one task will affect the next. When coupled with a messaging system such as Apache Kafka, they can actually simplify the development process. Each microservice can write to the messaging system in a standardized format the next can understand—no strict messaging format required. By opening the architecture to a system of smaller applications you can also base each microservice on almost any programming language. This grants you freedom in a few ways because:

    • A variety of development teams can work together on a single microservice architecture without commonality on technologies.
    • Each team can use a software stack they choose for their specific skills.
    • You can incrementally incorporate or experiment with new technologies.

    Gone are the days of worrying about updates impacting your system or waiting to update all your microservices at once, too. As long as you adhere to the simple input and output messaging formats, you can update a single microservice at your leisure without having to shut down the entire system.

    Deploy With No Hesitation

    Microservices are easier to deploy than monolithic applications for the same reason they’re easier to build and enhance: they’re small and modular. Consider the various dependencies between development and production environments like OS or the amount of random-access memory (RAM) and you begin to understand how complex deployment within a tech stack can be.

    By reducing dependencies to a smaller scope, thus decreasing the potential for dependency conflicts, microservices become advantageous for deploying in a container with other virtualized technologies. Further, there are no limits to a single deployment option. Whether on-premises, in the cloud, in serverless environments or at the edge—which will continue to gain in significance and popularity—the possibilities are nearly endless.

    Maintain, Troubleshoot and Extend With Ease

    Maintenance is key to making our most valuable investments last. This is especially true for large-scale software environments where monolithic architectures can prove challenging. Microservices offer a way to seamlessly enable ongoing maintenance and fault tolerance, as well as troubleshooting, as individual outputs make isolating the source of problems easier.

    Moreover, single points of failure are not an issue because the distributed nature of microservices means any given one can be deployed redundantly, in parallel, and on a continuous basis. If any single microservice for a given task fails, the others associated will pick up the slack.

    Another benefit is they help extend your systems to provide more outputs. Making incremental updates is relatively low-risk because microservices are highly modular and can be plugged in easily with new or updated code. Should an unforeseen error occur, you needn’t fret about shutting down the entire system and stopping the flow of data. Instead, you can shut down a given task and temporarily stop data flow, with the messages queued in the messaging layer to be read once it is restored.

    Simplify Cross-Team Coordination

    Many companies overcomplicate large projects and software development is no different, with integration points serving as cumbersome, headache moments. In a microservice, internal workflows are as straightforward as:

    • Reading data from a source.
    • Performing an action on the data.
    • Sending output to a destination.

    Since microservices are designed to navigate small bits of data at a time from an otherwise large data set, managing and sharing output is straightforward. Teams simply coordinate what their respective microservices do and how the exchanged messages are formatted. Lightweight messaging systems are recommended for allowing communication, as they further support simplifying coordination across development teams by providing a fast and reliable means for exchanging data.

    Speed and Scalability

    It may seem with the many independent, moving parts in a microservices architecture that performance will take a severe hit, whereas a monolith runs as a single process. However, keep in mind there is a clearer opportunity for parallelism with microservices, so any task can be spread across multiple CPUs/cores and be run with much higher overall throughput. For example, machine learning models that require complex calculations in addition to lookups in external databases can be parallelized to process more data at once.

    The scalability of microservices is tied in with this capability. As the workload grows with more and faster data, additional microservices can be deployed to run in mirror to spread the load across further hardware resources. In contrast, refactoring a monolithic application to handle more load—which will require significant changes—potentially creates greater risk for introducing errors.

    Streamline Real-Time Processing

    Demands for immediacy are only continuing to grow. As a result, businesses must increase performance and function in real-time to stay ahead. Microservices provide that competitive advantage by enabling efficient, instantaneous processing and streaming architectures.

    Real-time processing is centered on fast data, often in the form of streaming. As data continues to flow in from a source such as an internet of things (IoT) device, applications must keep up with the input rate and operate reliably. A microservices architecture provides the parallelism and redundancy to maintain the load and respond quickly in a consistently reliable way. Additionally, as the flow increases, more microservices can be deployed to accommodate the growth. This structure also allows easy identification of bottlenecks that can be addressed to maintain immediate responsiveness.

    The swath of consumer data available to enterprise business today is at a scale never seen before. Thinking strategically about how to handle and process it for the benefit of the business—and the consumer—is an important priority today. Microservices are just one strategy to leverage on this journey and could serve as the advantageous choice for increasing performance, speed and ease on the workloads of many.

  • Cloud Orchestration Language Roundup: A Comparison

    Cloud Orchestration Language Roundup: A Comparison

    What cloud providers do you work with? Google Cloud Platform (GCP)? Amazon AWS? Microsoft Azure? Which services? Are you using a managed Kubernetes such as GKE, AKS, Openshift or EKS? How do you manage your cloud resources? How do you manage the release cycle of the infrastructure and applications that you deploy?

    If the above questions are the basic introduction to describe your work, then you are probably also familiar with the console, API or both of a major cloud provider. You probably know how to use a configuration management tool such as Ansible or Chef, Terraform or CloudFormation, or some other similar tool. Additionally, you are familiar with the languages of one of these tools. You probably have opinions on those languages, which inform your attraction to the tools you choose.

    Kubernetes and Ansible use YAML. CloudFormation and Azure ARM can be JSON or YAML. Chef and Terraform have their own languages. (To be precise, Terraform can also be expressed in JSON.)

    cloudify orchestration language comparison
    A comparison of cloud orchestration languages

    Whenever you start learning a new tool, it is helpful to already know the tool’s language. The strength of using a standard language is that new users will feel more at home learning to use a language if they already understand the basics of its syntax. In the same way that many English speakers will relate to cognates in French, German or Latin than in Greek or Sanskrit without using transliteration, developers that know YAML will find it easier to learn Ansible than a tool that relies on XML. However, just because you know the language doesn’t mean you know the DSL. A DSL might use a language in a novel or even strange way that contradicts what you believe is proper.

    A number of variables may come into play when a user develops an opinion of a tool. The most important is, “How simple is it for me to create something that does what I want and minimizes frustration later on?” The next often are, “Which I venture is dependent on the first, are apparent scientific and analytical reflections? Does it lend itself to convoluted data structures? Do efforts to remain readable flounder because of inefficient use of space or punctuation?”

    Some projects, such as HashiCorp’s (Terraform), abandon a standard language to avoid such issues and instead create their own languages. The main drawback here is that it is more difficult to integrate the tool with existing projects and software libraries (although, providing for input and output in standard languages such as JSON can alleviate such problems).

    Cloudify has a DSL, which is based on YAML. Cloudify uses YAML, because it is easier to read than JSON, but powerful enough to define new types when necessary.

    Whether using a general language such as YAML or a proprietary one, certain designations are necessary: the type of resource, the name of the resource and often even whether the line refers to a resource, a parameter or a dependency.

    To illustrate the differences between the languages, and associated products that have been mentioned, let’s take a look at a few examples. Let’s use a relatively simple example, an AWS VPC, named “myVPC.” This is a simple resource to define in any language because it has relatively few parameters and no dependencies aside from an AWS account.

    Terraform:

     

      resource “aws_vpc” “myVPC” {

        cidr_block       = “10.0.0.0/16”

        instance_tenancy = “dedicated”

        tags = {

          foo = “bar”

        }

      }

     

    Terraform, or HCL, is notable for two reasons. First, the HCL “block” syntax recalls method definition syntax in a number of familiar programming languages. This is a nod to how Terraform, among all of these tools, relates to packaging infrastructure definition as code. Second, Terraform is the most concise. It only takes seven lines.

    Also, Terraform syntax infers significance from string position through the use of identifiers, such as “resource,” “aws_vpc” and “main.” HCL knows that block type comes first, followed by type and then name. For readability, this may be an ideal and certainly elegant method for defining components. Inside of the block definition is the API payload accepted by AWS EC2 Service for the creation of a VPC.

    One drawback of HCL is the punctuation requirements. Braces are required to enclose blocks as well as dictionaries. Arrays require square brackets.

    Let’s compare HCL/Terraform to CloudFormation:

     

      myVPC:

        Type: AWS::EC2::VPC

        Properties:

          CidrBlock: 10.0.0.0/16

          InstanceTenancy: dedicated

          Tags:

           – Key: foo

             Value: bar

     

    CloudFormation utilitizes YAML as well as JSON. These are data serialization languages. So, we are looking at our resource definition, less as code and more as information. This results in greater verbosity and decreased readability. Less concise, CloudFormation is eight lines.

    Whereas HCL uses “blocks” for resources. CloudFormation templates just call them “resources.” Instead of positional arguments, we have keys and values. “Type” defines the type. Properties introduce the resource API payload accepted by AWS EC2 service. However, YAML reduces the need for punctuation. Dictionaries are introduced by indentation and lists with hyphens. This can result in improved readability, and if someone really likes to use braces and brackets, no one is forcing them not to. However, it increases the number of lines and characters needed, because even abstract sections of the DSL require keys for introduction. This is because YAML accepts JSON.

    Ansible also has a module for creating a VPC in AWS.

     

      – name: create VPC.

        ec2_vpc_net:

          name: myVPC

          cidr_block: 10.10.0.0/16

          region: us-east-1

          tags:

            foo: bar

          tenancy: dedicated

     

    Ansible also uses YAML; however, there is no separation between API payload and other parameters. For example, authentication parameters are on the same level as payload parameters. Ansible uses modules for infrastructure management the way it uses modules for managing applications, which, while novel, is implemented in a clunky and relatively useless way. For example, you need a playbook for creation and a playbook for deletion.

    Cloudify:

     

      myVPC:

        type: cloudify.nodes.aws.ec2.Vpc

        properties:

          resource_config:

            CidrBlock: 10.10.0.0/16

            InstanceTenancy: dedicated

            Tags:

              – Key: foo

              – Value: bar

     

    Cloudify also uses YAML. It also works with key-value pairs. Cloudify is even more verbose than CloudFormation.

    A node template can be a resource or a group of resources. In Cloudify, there are three types of properties. The resource_config, which contains the API Payload; the client_config, which contains the API Authentication; and orchestration properties,which are additional properties that enable you to describe how Cloudify will interact with the resource. For example, all resources have the use_external_resource, which means that Cloudify can use resources that Cloudify did not create.

    Whereas Terraform/HCL uses “resource blocks” and CloudFormation uses “resources,” Cloudify uses “node templates.” Node templates can be a VPC or other cloud resource, or even a CloudFormation Template or a Terraform template.

    Azure also sports an orchestrator, Azure ARM, and has its own DSL to describe Azure resources. This is how a virtual network is defined in Azure ARM:

     

      type: Microsoft.Network/virtualNetworks

      apiVersion: ‘2019-11-01’

      name: myVPC

      location: “[parameters(‘location’)]”

      properties:

        addressSpace:

          addressPrefixes:

          – 10.0.0.0/24

        subnets:

        – name: “[parameters(‘subnet_name’)]”

          properties:

            addressPrefix: 10.0.0.0/24

     

    One notable difference in Azure ARM is that the resource entry in the YAML does not have a key name with the definition being the value of the name key; instead, the entire dictionary is a list item. This is perhaps more concise, but it may forfeit a modest amount of readability. Also, Azure is similar to Cloudify in that the resource definition “properties” is not on the same level as other more general details, such as “apiVersion” or “location.”

    The syntax for accessing a parameter is also a tad obtuse. Accessing a key in a dictionary via square brackets and parentheses is probably one of the most unreadable methods in the DSLs we are looking at.

    Like Cloud Formation, ARM can be written in JSON or YAML.

    Terraform can define the same Azure resource using fewer lines.

     

      resource “myVPC” “example” {

        name                = “virtualNetwork1”

        location            = azurerm_resource_group.example.location

        resource_group_name = azurerm_resource_group.example.name

        address_space       = [“10.0.0.0/16”]

        subnet {

          name           = “subnet1”

          address_prefix = “10.0.1.0/24”

        }

      }

     

    Cloudify will define the same resource in 14 lines. However, this could be shortened using default values.

     

      network:

        type: cloudify.azure.nodes.network.VirtualNetwork

        properties:

          resource_group_name: { get_input: resource_group_name }

          name: { get_input: network_name }

          location: { get_input: location }

          resource_config:

            addressSpace:

              addressPrefixes:

                – 10.10.0.0/16

            subnets:

              – name: subnet1

                address_prefix: 10.0.1.0/24

     

    Azure and Amazon expose ARM and CloudFormation as API objects respectively. This enables orchestrators to manage those resource stacks as single resources.

    You can define an ARM deployment in Terraform like this:

     

      resource “azurerm_template_deployment” “deployment” {

        name                = “myArmDeployment”

        resource_group_name = azurerm_resource_group.example.name

        template_body = file(“${path.module}/environment.json”)

      }

     

    The type requires deployment name, resource group name and template body. The latter can be supplied inline or using Terraform’s file function.

    Ansible can also define ARM templates:

     

      – name: Create Azure Deploy

        azure_rm_deployment:

          resource_group: myResourceGroup

          name: myDeployment

          template_link: ‘https://…/azuredeploy.json’

          parameters_link: ‘https://…/azuredeploy.parameters.json’

     

    Cloudify can also orchestrate ARM deployments. Here is a simple infrastructure stack in ARM using Cloudify:

     

      deployment:

        type: cloudify.azure.Deployment

        properties:

          location: { get_input: location }

          name: { get_input: resource_group_name }

          template_file: ‘resources/arm/environment.json’

     

    Cloudify can also accept a file or inline JSON (or YAML).

    Having defined the source code for our infrastructure components, we can now connect other resources and processes to this infrastructure dependency. We can use the Terraform template to a CICD workflow or a networking application.

    Using the same approach, Cloudify can also call Terraform stacks:

     

      infrastructure:

        type: cloudify.nodes.terraform.Module

        properties:

          resource_config:

            source: resources/terraform/template.zip

            variables:

              access_key: { get_secret: aws_access_key_id }

              secret_key: { get_secret: aws_secret_access_key }

              aws_region: { get_input: aws_region_name }

              aws_zone: { get_input: aws_zone_name }

              admin_user: { get_input: agent_user }

              admin_key_public: { get_input: public_key }

     

    Cloudify also utilizes other Cloudify deployment stacks as service components:

     

      infrastructure:

        type: cloudify.nodes.Component

        properties:

          resource_config:

            blueprint:

              id: my_deployment

              blueprint_archive: { get_input: infra_archive }

              main_file_name: infra.yaml

            deployment:

              id: my_deployment

     

    To summarize, there are many DSLs for orchestrating cloud resources. Each has its own focus: Terraform on simplicity and repeatability, CloudFormation on Amazon, ARM on Azure, Ansible on setting up applications and Cloudify on enabling users to automate any task, including automating Cloudify. We call this “orchestrating the orchestrator.”

  • Q&A: Implementing DevOps at Scale with Akash Tayal and Bob Vuong

    Q&A: Implementing DevOps at Scale with Akash Tayal and Bob Vuong

    Enterprises may be successful adopting DevOps initiatives but adopting DevOps at scale could become a challenge for some organizations.

    In this Q&A session, Akash Tayal, principal and U.S. cloud strategy and operating model leader at Deloitte Consulting, and  Bob Vuong, principal at Deloitte Consulting, discuss the benefits and challenges of adopting DevOps at scale.

    Akash and Bob are two of the keynote speakers presenting at this year’s DevOps Experience. During their keynote session “Scaling DevOps Across the Enterprise,” Akash and Bob will take a deep dive into the typical DevOps journey and the ingredients for success.

    What is the first step toward implementing DevOps at scale?

    In order to scale DevOps across an enterprise, we need to shift our mindset as the key driver. It begins with people creating value-driven capabilities. In our experience, this is based on four key areas: PACE (Process, Architecture, Culture and Engineering). An organization needs to shift to adopting flexible Process (ways of working) with tight guardrails, modular and loosely coupled application Architecture, Culture shift through cross-functional Product teams with aligned incentives and Engineering driving everything as code.

    What are some of the key benefits of scaling DevOps?

    In addition to frequent code deployments and lower time from concept to actual release, DevOps also puts more responsibility on developers, leading to lower failure rate. Scaled DevOps across the enterprise can shift IT from a cost center to a value driver for the organization

    What is the main challenge organizations encounter when scaling DevOps?

    The two primary challenges we see organizations encountering with scaling DevOps are: One, multiple tool choices available with each line of business preferring their own tools, causing fragmentation and proliferation which makes stitching the DevOps pipeline problem even harder. We see organizations adopting at scale focused on standardization of tools as one of the key drivers. Second challenge is a complicated software delivery lifecycle that further expands the problem due to security, compliance and multiple other processes required to release code to production. We see successful organizations managing CI/CD pipelines as a product in itself and engineering the pipelines to help developers focus the majority of their time on building business value code.

    What are the main takeaways from your DevOps Experience keynote session?

    Adopting DevOps is not just a technology transformation. It requires a process and culture shift as well. Whether you are starting your DevOps journey or have already been on the journey but facing challenges, this session should help you understand how organizations adopting DevOps have transformed their software delivery approach and delivered Better-Value-Sooner-Safer-Happier (BVSSH) to achieve their business goal.

    Akash, what advice would you give to organizations looking to implement DevOps at scale?

    Several organizations get bogged down in tools debate when focused on DevOps and building CI/CD pipelines. I suggest you focus on the business outcomes and create a single view across the pipeline to monitor the bottlenecks and address them. Driving aligned incentives across the delivery and release value chain is essential to ensure frequent releases of high-quality code versus stitching together fragmented tools across each line of business to make the pipeline work. A single view of the entire process and pipeline helps identify these bottlenecks and solve for them.

    Bob, what’s your advice for organizations looking to implement DevOps at scale?

    Tools are generally an easy place to start. The implementation of tools and developing a pipeline can be seen as a fundamental part of how teams will engage. Also they are measurable and show progress. You can see what tools are being implemented, and you can gauge how far along they are. However, too often the focus moves away from the people and process changes that need to occur. I would focus on the people dynamic and how to integrate and improve on the years of siloed IT divisions, expecting to work together toward common goals and objectives.

    For more insights and tips on how to implement DevOps at scale, attend Akash and Bob’s keynote session at DevOps Experience 2020 on Oct. 22. To check out the full agenda or to register for free, visit the DevOps Experience website.

  • How to Automate Testing for Optimal Customer Experience

    How to Automate Testing for Optimal Customer Experience

    During a sudden surge in online traffic like the one many companies have seen over the past few months, automated testing can help organizations optimize the customer experience

    Imagine you manage an e-commerce office supply company and are dealing with a sudden surge in traffic—with more people working from home, demand for your products has grown significantly. But when a customer attempts to complete a purchase, they encounter a debilitating error such as a broken button or a page that won’t load. Now imagine this happening to hundreds of customers simultaneously, during the most critical time of day for purchases on your site. Imagine the revenue lost, the customers never to return, the complaints on social media—it’s a situation everyone wants to avoid.

    But this is a situation many will have to handle at some point. Web pages are large, complex beasts made up of different images, fonts, style sheets, local JavaScript code, asynchronous requests to the backend and more. It’s easy to forget how many scripts hold a website together. And any small change can have a butterfly effect on the overall page performance.

    What does the user actually see and experience on the website? And what happens if changes are made in the backend? Does the “Buy” button suddenly disappear? Is everything still working as it should? To understand how an application behaves with users, companies need to understand those users’ experiences when they interact with the application over a browser. All too often this means manually checking the availability and functionality of individual online applications, and then hoping that users do not stumble upon additional problems that may have fallen through the cracks.

    Accounting for and identifying these potential problems and regressions is not only an uncomfortable process, but also a lengthy one. Especially in times of increasing traffic and new digital business, as we’ve experienced in these times of WFH and e-commerce, the continuous review of all digital experiences is essential. A customer’s first impression is crucial, and even a long-term customer may go elsewhere if a page doesn’t load or if a button doesn’t work. Options abound on the internet—you can’t risk someone giving up on your business and trying a competitor’s.

    Why Automating Browser Tests Is Important

    In browser-based applications and websites, browser tests can monitor the user experience and ensure that user actions, such as registering for a new account or adding items to a shopping cart, work smoothly—even after changes in the backend.

    Popular browser test solutions have long since reduced the manual effort required to confirm that new features didn’t break already existing functions, but the implementation and maintenance of these tests is very time-consuming. In addition to learning a new test framework for these solutions, teams need to set up a test infrastructure and update faulty tests with every change to the user interface, costing valuable time that could be used for new product development.

    The latest generation of fully automated browser tests, on the other hand, allows everyone on the team to record and automate rich browser-based test scenarios in minutes—without any code. The “Tester” opens the corresponding website or application via the test tool and starts the recording. As she interacts with the website or application, the solution automatically records all actions as a series of steps, which can then be edited or changed when reviewing the recording. Assertions can also be added, such as whether a user sees a welcome message when they log in.

    If a test is recorded, it is possible to define how often and on which devices it is to be carried out and from which places around the globe the tests are to be played to mimic users’ behavior. The recordings can be played over a variety of websites, including internal, non-publicly accessible applications or pre-production and CI environments. For each test run performed, the end-to-end duration of the test and a visualization of the duration of each step are provided. A screenshot is automatically created for each step and each query so testers can follow exactly what the user sees in each respective step. All the frontend errors and resources happening along the test are also collected for a simplified troubleshooting of failing test runs.

    Because websites are constantly modified by developers, once a test is created, machine learning algorithms detect changes to the application and automatically update the tests accordingly. If a browser test fails due to frontend or backend problems, an automated tool provides the context for quick troubleshooting. In addition to screenshots, frontend errors and frontend resources, the behavior of the backend services and infrastructure for this specific step is also provided.

    Using Time More Effectively

    Automated browser tests have traditionally been notoriously fragile, often breaking with minor changes to the user interface. To eliminate false positives, today’s ML-supported browser tests mimic human decision-making processes and adapt intelligently to changes in the application.

    For example, if a button is moved in a web application or the identifier of an element changes, the browser test derives from this how the existing test should be carried out in the updated user interface. If all steps and assertions in the test are successfully completed, the saved identification mechanism and test definition will be updated to reflect the changes on the page.

    If you’re always in a reactive mode, putting out fires that could have been avoided, the impact to revenue and customer satisfaction is only one half of the story. The revenue not generated, and customers not acquired, from improvements and new features, is the real problem for a business’ long-term health. Ultimately, browser tests give teams more freedom to focus on developing new features rather than manually reviewing functionality or redefining test frameworks over and over again. And in a distributed, work-from-home, always-online world, new product development is what wins the day.

  • Akamai Enables Microservices Deployment at the Edge

    Akamai today announced it is adding the ability to deploy microservices on its edge computing platform to enable developers to run latency-sensitive applications faster.

    David Theobald, principal product manager at Akamai, said developers can now code dynamic content assembly at the edge to create microservices on the Akamai Intelligent Edge platform that include external requests and the ability to manipulate response bodies. That approach provides developers with the primitives required to run edge computing applications on the equivalent of a serverless computing framework, he said.

    In addition, Akamai is adding EdgeWorker reporting and debugging tools for JavaScript applications deployed on the edge of its content delivery platform (CDN) and updated its application programming interfaces (APIs) to make it easier and faster to deploy “cloudlet” applications.

    Finally, Akamai also has updated its Akamai Image and Video Manager software-as-a-service (SaaS) offering by adding a video status optimization API through which IT teams can track the status of videos as they are being optimized by the Akamai CDN.

    While CDNs have been widely employed for decades, they are now evolving into platforms for deploying edge computing applications that are developed and deployed using best DevOps practices. Rather than having to replicate the IT infrastructure already put in place by a CDN provider, many organizations are opting to essentially consume IT infrastructure as a service as they deploy edge computing applications alongside existing web applications.

    Competition is already fierce among CDN providers seeking to leverage points of presence around the globe to enable IT teams to deploy applications closer to the point where data is generated and consumed. Many of these edge computing applications are at the core of digital business transformation initiatives that require data to be processed in near real-time. As such, processing that data in a local data center creates too much latency.

    Of course, cloud service providers have also extended the range of services they provide to include CDN services. It’s not clear to what degree IT organizations will prefer to leverage those cloud services versus the CDN capabilities many of them already rely on to deploy web applications.

    Regardless of the approach, the number of IT teams building, deploying and maintaining their own edge computing infrastructure is likely to be reduced sharply in the wake of the COVID-19 pandemic. IT teams are trying to reduce the potential risk to their IT staff by limiting travel as much as possible, which makes putting IT personnel on a plane to install infrastructure an option of last resort.

    Developers, in the meantime, are building more applications faster than ever, thanks mainly to DevOps processes that enable them to work from home. As the deployment backlog for edge computing applications builds, the need to rely more on external services becomes that much more pressing. It may be a while before most DevOps teams routinely view CDNs as just another target platform for deploying applications, but in many cases, that day is already here.

  • Bringing Agility to Mainframes in COVID-19 and Beyond

    Bringing Agility to Mainframes in COVID-19 and Beyond

    Of the many ways this pandemic has shifted resources online, financial transactions are among the most critical. With the use of cash and checks grinding to a halt, transactions generated with our devices are increasing, and most of them are being completed on a mainframe. It’s not hyperbole to state that mainframes—the systems of record for major banks, investment houses and insurers—are helping to keep the world economy resilient, all without a single glitch.

    Will the increases in online transactions be temporary while sheltering and social distancing are in place or does this mark a critical inflection point in the market? There are already signs that the online uptick is here to stay. J.D. Power research says approximately one-third of retail banking customers plan to increase their use of online and mobile banking services post COVID-19, with this percentage expected to increase with the duration of the crisis. It’s likely similar increases in online transactions will take permanent hold with commerce beyond finances and retailing.

    Bringing the Mainframe and Digital Transformation Together

    The main beneficiaries of this trend will be those organizations that have committed to better serving their customers through digital means and include their mainframe assets in their necessary digital transformation. While the mainframe is the most securable, reliable, performant and scalable platform, mainframe software development and delivery have traditionally followed slow waterfall processes, further hampered by archaic tooling. New and growing workload demands will require organizations to apply Agile and DevOps methodologies to their mainframe code and data to increase their overall agility. What are the keys to doing this?

    Articulate Your Vision and Identify Impediments: Articulating your vision starts with outlining your goals. Maybe you want to improve velocity (compressing the time between business need identification and code in production), agility (the ability to make more frequent changes to application code), efficiency (automating time wasted on manual execution of common repetitive tasks) and integration (better coordination of code changes across platforms). Or perhaps an important strategic focus for your organization is empowering technical staff with mainstream skill sets to assume responsibility for mainframe DevOps.

    The key to achieving these goals is to identify your organization’s unique constraints – these could be tools that lock you into slow, waterfall processes; entrenched habits that fail to place sufficient emphasis on speed and collaboration; or lack of funding. Once an organization knows where it wants to go and what it needs to do to get there, it can start crafting a rational, credible transformation road map without compromising the reliability and stability of core applications.

    Modernize Your Mainframe Development Environment: The “green screen” ISPF environments of most mainframe shops require highly specialized knowledge and problematically limit new staff productivity. Modernizing the mainframe begins with modernizing the developer experience, which should feature a user-friendly interface that allows staff to toggle easily as they work on both mainframe and non-mainframe applications. The modernized mainframe user interface should also support integration with best-of-breed DevOps solutions to help improve the quality, velocity and efficiency of mainframe software development.

    Automate Testing: According to a Vanson Bourne survey, 90% of application development managers say that automating more test cases could be the single most important factor in their success as the pressure to accelerate innovation increases. Yet currently only 7% of organizations automate the execution of test cases on mainframe code.

    Technical obstacles have historically prevented the kind of “shift-left” automated testing that is commonplace in Java from being applied to mainframe development. Luckily, these obstacles have been removed and reliable automated unit testing can become a mainframe reality. Once unit testing is automated, organizations can extend automation to functional testing (to validate the implementation works as specified) as well as integration testing (evaluating if the collaboration between two or more programs works as expected) and ultimately improve an organization’s ability to accelerate innovation.

    Empower Developers: As mainframe applications have been expanded and enhanced over many years, they have typically become large and complex. They may also not be very well-documented. This combination of complexity and poor documentation is a major block to core transformation goals—including agility, confidence and efficiency. The undocumented idiosyncrasies of some mainframe applications and data structures tend to make enterprise IT highly dependent on the personal/tribal knowledge of senior mainframe staff. Worse yet, if a seasoned mainframe developer is no longer available, IT may be fearful of making any changes at all.

    Empowering developers means more than modernizing the mainframe development environment, as discussed above; it means making it much easier for any new participant/contributor to quickly “read” existing application logic, program interdependencies, data structures and data relationships. This enables them to work on even the most unfamiliar and complex systems with clarity and confidence—in essence, to be less reliant and more independent. It also means empowering developers to take on jobs that may have traditionally been done by a testing team, e.g. unit testing, or a DBA, e.g. test data setup to remove bottlenecks and speed delivery.

    Training: Once an organization has the right development environment in place, it can start shifting its process from a traditional waterfall model with large sets of requirements and long project timelines to a more incremental model. The move from large-scale waterfall projects to Agile represents a significant change in work culture for most mainframe teams. Training in Agile processes and work culture is really a must.

    Technical leadership roles and product owners, in particular, need in-depth training and coaching. All team members should have at least some formal introduction to basic Agile concepts. To ensure that mainframe development is not left behind, organizations should consider pairing mainframe developers with agile-experienced developers from other platforms.

    Include Mainframe Code in All Aspects of the DevOps Toolchain: If an organization fails to include mainframe code in all aspects of the DevOps toolchain, there will always be one code component (mainframe) that slows down the rest of the DevOps process. To truly enable DevOps and Agile on the mainframe, mainframe code must integrate easily and seamlessly with other tools in the end-to-end toolchain, including Jenkins, Digital.ai, Slack, CloudBees and others.

    Among the processes that must be integrated and automated include source code management (SCM). The shift from waterfall-based SCM to Agile-enabling SCM is a pivotal moment in mainframe transformation—an absolutely essential shift if an organization’s goal is to increase the speed and frequency of new mainframe code drops, optimize developer productivity and simplify end-to-end management of the software development life cycle.

    Organizations also need to be able to pinpoint mainframe code deployment issues as soon as they occur, so immediate corrective action can be taken. If such corrective action does not produce its expected effect, there must be the ability to quickly and automatically fall back to the previous working version of the application. This automated fallback is, in fact, a key enabler of rapid deployment and particularly important for mainframe code, since it is the primary means of mitigating the business risk associated with the promotion of mission-critical code.

    Enable Coordinated Cross-Platform Continuous Delivery: Mainframe applications and data increasingly serve as a back-end resource for multi-platform customer- and employee-facing applications that include mobile, web and/or cloud components. DevOps teams therefore must be able to fully synchronize the delivery of new, approved code across all platforms.

     This is the desired state of enterprise DevOps: a de-siloed environment where the mainframe is “just another platform” that can be quickly and appropriately modified to meet the needs of the business.

    Conclusion

    From the changes in the daily commute to the way we buy food, the COVID-19 pandemic is likely to exert long-lasting, sweeping changes in the ways we live and our preferences. As more people become accustomed to conducting more of their day-to-day activities online—including banking but so much more—mainframe development will be required to exhibit higher levels of agility than ever before. The tips described here can help organizations transform their venerable mainframes into platforms for innovation and become an autonomous digital enterprise that can thrive during seismic changes. After all, those who do this the best are likely not to be hampered by COVID-19’s enduring imprint on society.

  • Accelerate Your Digital Transformation with IBM

    Accelerate Your Digital Transformation with IBM

    DevOps practices, processes and solutions help businesses accelerate their digital transformation by improving the speed and quality of software development. DevOps tools enable teams to do their job more efficiently by embracing automation, increasing agility and building speed, versatility and security into the framework.

    At the IBM DevOps Virtual Summit, attendees will learn how to keep their applications running smoothly with automation and data-driven solutions that can reduce mean time to resolution and explore IBM solutions to help innovate hybrid environments, disrupt cloud native development and transform existing mainframe infrastructures. The free virtual event will take place on Oct. 29 from 10 a.m. to 2 p.m. ET.

    IBM leaders will discuss the benefits of DevSecOps, how to increase business value, SRE best practices and how IBM Cloud software and services can help organizations succeed on their DevOps journey.

    The virtual event will feature four educational sessions from leading DevOps technologists:

    • “Application Modernization Enabling Hybrid Cloud with IBM Z,” by Rosalind Radcliffe, distinguished engineer and chief architect for DevOps at IBM.
    • “The Modern DevOps Manifesto,” by Andrea Crawford, distinguished engineer at IBM.
    • “DevSecOps in a Hybrid Multicloud World,” by Sunil Joshi, executive architect at IBM.
    • “Common Tooling Approaches from Kubernetes to the Mainframe,” by Eric Minick, program director at IBM.

    For more information about the virtual summit or to register, please visit the IBM DevOps Virtual Summit website.