Posts in Azure

Comparing AWS and Azure: A Comprehensive Guide to Cloud Service Selection

The cloud computing landscape is dominated by two giants: Amazon Web Services (AWS) and Microsoft Azure. Both offer a vast array of services and features that cater to a wide range of enterprise needs. However, choosing between them can be a daunting task. In this comprehensive guide, we will compare AWS and Azure across various categories, including compute, storage, database, networking, security, analytics, and more. We will also explore the similarities and differences in terminology, pricing, and functionality. By the end, you’ll be better equipped to make an informed decision about which cloud provider is the best fit for your specific requirements.

Read More

A Comprehensive Guide to Migrating Your Workloads Between AWS and Azure

In the ever-evolving world of cloud computing, businesses often find themselves needing to migrate their workloads from one cloud provider to another for various reasons. Whether it’s to take advantage of unique services, reduce costs, or diversify their cloud strategy, migrating workloads between Amazon Web Services (AWS) and Microsoft Azure is a common challenge. In this comprehensive guide, we will walk you through the process of migrating your workloads from AWS to Azure or vice versa. We’ll cover topics such as assessing your current environment, planning your migration strategy, choosing the right migration tools, executing the migration steps, testing and validating the migrated workloads, and optimizing the new environment.

Read More

Introducing Azure DevOps

In 2009 Patrick Debois coined the term “DevOps” to refer to a new paradigm in IT culture, involving the closer integration of development and operations alongside a commitment to Agile working. Short for development and operations, DevOps is a natural extension of Agile and continuous delivery approaches that merges development, IT operations, and quality assurance into a single set of processes:

DevOps methodology

 

Today the combination of Agile and DevOps has largely supplanted more waterfall-style methodologies, which proved difficult to reconcile with the fact that customers often don’t know exactly what their requirements are before they see working software. That uncertainty can result in changing requirements, leading to redesign, reimplementation, and reverification. This can dramatically increase the costs of a project.

In Agile development, all stakeholders, including developers, administrators, testers, and a representative of the customer, are part of the same team. Applications are delivered in functional components, and rather than creating schedules and tasks at the start of the project, the project is divided into smaller phases, called sprints. The duration of each sprint is defined up front and has a list of deliverables that are planned at the start of each sprint. All those deliverables are defined together with the customer and prioritized by business value by the customer. At the end of each sprint, when work is completed, the work is reviewed and evaluated by the team through daily builds and end-of-sprint demos.

This gives a number of advantages:

  • By working directly with the project team throughout the whole project, the customer experiences a stronger sense of ownership;
  • The customer has opportunities to see the work being delivered early on in the project and can make appropriate decisions and changes to it;
  • Development is more business- and value-focused. This is a result of working closer with the customer and having a better understanding of their needs.
  • An Agile way of working enables the rapid creation of a base version of the product, which can be built upon in subsequent iterations.

DevOps places particular emphasis on automation, including automation of deployment through continuous integration (CI) and continuous delivery (CD). CI is used in the development phase of a project and refers to building and testing code in a fully automated way. Every time you commit changes to the master branch, the changes will be validated and then packaged into a build artifact automatically. With CD, the delivery phase is automated. Every time a build artifact is available, the artifact is automatically deployed to the desired environment. When CI/CD is used by development teams, the code remains ready for production at any time. The only thing that teams must do to deploy a working application into production is trigger the transition from development to deploy. This will make the automated build artifact available for deployment. This triggering can be as simple as pressing a button.

Introducing Azure DevOps

Azure DevOps provides a wide variety of services for DevOps teams so that they can plan work, collaborate on code development, and build and deploy software and services. Most DevOps teams rely on several tools, and build custom toolchains for each phase in the application life cycle.

The following diagram shows the main phases of the application life cycle:

Application life cycle

 

In the following sections we’ll explain these phases and the corresponding Microsoft tooling and products in more detail.

Plan

During the planning phase, teams can use Kanban boards and backlogs to define, track, and lay out the work that needs to be done in Azure Boards. They can also use GitHub for this. In GitHub, an issue can be created by suggesting a new idea or stating that a bug should be tracked. These issues can be organized and assigned to teams.

Develop

The development phase is supported by Visual Studio Code and Visual Studio. Visual Studio Code is a cross-platform editor, while Visual Studio is a Windows- and Mac-only IDE. You can use Azure DevOps for automated testing and use Azure Pipelines to create automatic builds for building the source code. Code can be shared across teams with Azure DevOps or GitHub.

Deliver

The delivery phase is about deploying your applications and services to target environments. You can use Azure Pipelines to deploy code automatically to any Azure service or on-premises environments. You can use Azure Resource Manager templates or Terraform to spin up environments for your applications or infrastructure components. You can also integrate Jenkins and Spinnaker inside your Azure DevOps Pipelines.

Operate

In this phase, you implement full-stack monitoring of your applications and services. You can also manage your cloud environment with different automation tools, such as Azure Automation, Chef, and more. Keeping your applications and services secure is also part of this phase. For this you can use features and services such as Azure Policy and Azure Security Center.

To support the full life cycle of analyzing, designing, building, deploying, and maintaining software and infrastructure products and services, Azure DevOps provides integrated features that can be accessed through any web browser.

Azure DevOps offers a combination of solutions and tooling that can be used to create unique and custom workflows throughout each of the application life cycle phases. These solutions will be described in the upcoming sections.

Continuous integration and continuous delivery (CI/CD)

With Azure DevOps you can automate the entire deployment process, from code commit to production. The trigger between the development and delivery phase is completely automatic. So, when code changes are validated and pass all the tests that are performed during the development phase, the changes will be published to production automatically as well. This means that customers will receive the new version, along with the improvements that accompany it, as soon as they are available.

Agile development support

Azure DevOps supports teams that adopt Agile development methods with planning, tracking, and reporting capabilities. This results in shorter release cycles and full visibility in the software development process. You can use Azure Boards, which will be covered in more detail in the next section, to manage backlogs and to define, assign, and track work items. You can also use advanced analytics and reporting and create custom dashboards to track progress.

Version control

A version control system, also known as a source control system, is an essential tool for multi-developer projects. It allows developers to collaborate on the code and track changes. The history of all the code files is also maintained in the version control system. This makes it easy to revert to a previous version of the code files should errors or bugs arise.

Azure DevOps supports two different types of source control: Git (distributed) and Team Foundation Version Control (TFVS). With Git, each developer has a copy of the source repository on their development machine. All branch and history information is included inside the source repository. Each developer works directly with their copy of the repository and all the changes are shared between the local and source repositories as a separate step. Changes can be committed on the local filesystem, and version control operations can be executed without a network connection. Branches can be created easily on the dev machine and later, they can be merged, published, or disposed by the developer independently. With TFVC, developers have only one version of each file on their local dev machines. All the others, as well as the historical data, are maintained only on the server. The branches are created on the server as well.

Infrastructure as Code

Teams can also manage the infrastructure in Azure DevOps. Infrastructure components that are used in a project, such as networks, virtual machines, and load balancers, can be managed using the same versioning features and capabilities that are used for source code.

Used together with continuous delivery, an Infrastructure as Code (IaC) model generates the same environment every time it is deployed. Without IaC, teams need to configure and maintain the settings of all the individual deployment environments manually, which is time-consuming and error-prone. The most plausible outcome is that, over time, each environment becomes a snowflake, which is a unique configuration that cannot be reproduced automatically. This inconsistency across environments will lead to issues during the deployment phase.

Configuration management

Configuration management refers to all the items and artifacts that are relevant to the project and the relationships between them. Those items are stored, retrieved, and uniquely identified and modified. This includes items such as source code, files, and binaries. The configuration management system is the one true source of configuration items.

Using Azure DevOps, resource configuration across the entire system can be managed by teams to roll out configuration updates, enforce desired states, and automatically resolve unexpected changes and issues. Azure offers multiple DevOps tools and capabilities for configuration management, such as Chef, Puppet, Ansible, and Azure Automation.

Monitoring

You can use Azure Monitor to practice full-stack continuous monitoring. The health of your infrastructure and applications can be integrated into existing dashboards in Grafana, Kibana, and the Azure portal with Azure Monitor. You can also monitor the availability, performance, and usage of your applications, whether they are hosted on-premises or in Azure. Most popular languages and frameworks are supported by Azure Monitor, such as .NET, Java, and Node.js, and they are integrated with DevOps processes and tools in Azure DevOps.

Discovering Azure DevOps services

In this section, we are going to introduce the different services that are offered by Azure DevOps. These services can be used to support teams throughout the whole life cycle of realizing business value for customers.

Azure Boards

Azure Boards can be used to plan, track, and discuss work across teams using the Agile planning tools that are available. Using Azure Boards, teams can manage their software projects. It capabilities include native support for Scrum and Kanban. You can also create customizable dashboards, and it offers integrated reporting and integration with Microsoft Teams and Slack.

You can use Azure Boards to create and track user stories, backlog items, tasks, features, and bugs that are associated with the project.

The following screenshot shows an example of an Azure Board:

 Azure Boards

 

Azure Repos

Azure Repos provides support for private Git repository hosting and for Team Foundation Server Control (TFSC). It offers a set of version control tools that can be used to manage the source code of every development project, large or small. When you edit the code, you ask the source control system to create a snapshot of the files. This snapshot is saved permanently so that it can be recalled later if needed.

Today, Git is the most used version control system among developers. Azure Repos offers standard Git so that developers can use the tools and clients of their choice, such as Git for Windows, Mac, third-party Git services, and tools such as Visual Studio and Visual Studio Code.

The following screenshot shows an example of the commits you can push to a repo in Azure:

Azure Repos

 

Azure Pipelines

You can use Azure Pipelines to automatically build, test, and deploy code to make it available to other users and deploy it to different targets, such as a development, test, acceptance, and production (DTAP) environments. It combines CI/CD to automatically build and deploy your code.

Before you can use Azure Pipelines, you should put your code in a version control system such as Azure Repos. Azure Pipelines can integrate with a number of version control systems, such as Azure Repos, Git, TFVS, GitHub, GitHub Enterprise, Subversion, and Bitbucket Cloud. You can also use Pipelines with most application types, such as Java, JavaScript, Node.js, Python, .NET, C++, Go, PHP, and XCode. Applications can be deployed to multiple target environments, including container registries, virtual machines, Azure services, or any on-premises or cloud targets.

The following screenshot shows an example of a run for an Azure Pipeline:

Azure Pipelines

 

Azure Test Plans

With Azure Test Plans, teams can improve their code quality using planned and exploratory services in Azure DevOps. Azure Test Plans offer features for planned manual testing, exploratory testing, user acceptance testing, and for gathering feedback from stakeholders. With manual testing, tests are organized into test plans and test suites by testers and test leads. Teams can begin testing from their Kanban boards or directly from the Work Hub. With user acceptance testing, the value delivered to meet customer requirements is verified. This is usually done by designated testers. Exploratory testing includes tests that are executed by the whole development team, including developers, product owners, and testers. The software is tested by exploring the software systems without the use of test plans or test suites. Stakeholder feedback gathering is done outside the development team by marketing or sales teams. Developers can request feedback on their user stories and features from Azure DevOps. Stakeholders can then respond directly to the feedback item.

The following screenshot shows an example of an Azure Test Plan:

 Azure Test Plan

 

Azure Artifacts

With Azure Artifacts, you can create and share NuGet, npm, Python, and Maven packages from private and public sources with teams in Azure DevOps. These packages can be used in source code and can be made available to the CI/CD pipelines. With Azure Artifacts, you can create multiple feeds that you can use to organize and control access to the packages.

The following screenshot shows an example of a feed in Azure Artifacts:

 Azure Artifacts 

 

Extension Marketplace

You can download extensions for Azure DevOps from the Visual Studio Marketplace. These extensions are simple add-ons that can be used to customize and extend your team’s experience with Azure DevOps. They can help by extending the planning and tracking of work items, code testing and tracking, pipeline build and release flows, and collaboration among team members. The extensions are created by Microsoft and the community.

The following screenshot shows some of the extensions that can be downloaded from the marketplace:

Extension Marketplace

 

 

Summary

In this introduction we’ve learnt what DevOps is, and have seen how the Azure ecosystem is able to support teams throughout each phase of the application life cycle in a DevOps context. Source control, testing, hosting, sprint management, CI/CD: Azure DevOps provides services that support all these and more.