Book Image

A Developer's Guide to Cloud Apps Using Microsoft Azure

By : Hamida Rebai Trabelsi
Book Image

A Developer's Guide to Cloud Apps Using Microsoft Azure

By: Hamida Rebai Trabelsi

Overview of this book

Companies face several challenges during cloud adoption, with developers and architects needing to migrate legacy applications and build cloud-oriented applications using Azure-based technologies in different environments. A Developer’s Guide to Cloud Apps Using Microsoft Azure helps you learn how to migrate old apps to Azure using the Cloud Adoption Framework and presents use cases, as well as build market-ready secure and reliable applications. The book begins by introducing you to the benefits of moving legacy apps to the cloud and modernizing existing ones using a set of new technologies and approaches. You’ll then learn how to use technologies and patterns to build cloud-oriented applications. This app development book takes you on a journey through three major services in Azure, namely Azure Container Registry, Azure Container Instances, and Azure Kubernetes Service, which will help you build and deploy an application based on microservices. Finally, you’ll be able to implement continuous integration and deployment in Azure to fully automate the software delivery process, including the build and release processes. By the end of this book, you’ll be able to perform application migration assessment and planning, select the right Azure services, and create and implement a new cloud-oriented application using Azure containers and orchestrators.
Table of Contents (20 chapters)
1
Part 1 – Migrating Applications to Azure
6
Part 2 – Building Cloud-Oriented Applications Using Patterns and Technologies in Azure
10
Part 3 – PaaS versus CaaS to Deploy Containers in Azure
14
Part 4 – Ensuring Continuous Integration and Continuous Deployment on Azure
17
Assessments

The challenges of cloud-native applications

Cloud-native applications take advantage of the cloud operating model, the benefits of which we discussed previously. However, as well as benefits, there are also challenges with cloud-native development that every organization should consider before beginning their move to it.

Although the theory behind the development of cloud-oriented applications seems clear and simple enough, problems remain at the level of implementation, especially if an enterprise has longstanding legacy applications.

Let’s take a look at some of the most common challenges faced by enterprises in their cloud-native journeys.

The challenges of service discovery and CI/CD pipelines for microservices applications

If we have several microservices that communicate with each other, these microservices run in different instances. The number of service instances and their locations change dynamically. The number of service instances and their locations change dynamically. The service discovery mechanism helps us to locate each instance.

CI encourages continuous code merging and testing, leading to the early detection of bugs. Other benefits include less time wasted dealing with merge issues and faster feedback to the development team.

CD is an extension of CI. It is a semi-manual process that allows developers to deploy all changes to their customers with a simple click of a button. It also allows you to auto-deploy code changes to diverse environments (development, staging, testing, QA, production, and so on…) so that companies can quickly troubleshoot and fix bugs and respond to changing business needs.

This challenge of service discovery and CI and CD for a microservices application involves being able to identify where dynamically deployed microservices are deployed, especially in the case of additional instances.

Microservices are composed of a set of separate components and services, each managed by a separate team with an independent lifecycle and an independent CI/CD pipeline.

There are many challenges in the implementation of microservices:

  • Low visibility into the quality of changes introduced in each service’s pipeline in the application
  • Uncertainty about whether each launched pipeline meets security and compliance requirements
  • The independence of each pipeline can pose a pipeline control problem – for example, security vulnerabilities, performance issues, a flawed automated testing system, version control, and technological limitations
  • Infrastructure duplication caused by multiple services and pipelines

Security and observability challenges

Cloud-native applications present additional challenges for security and risk management because they are inherently complex.

Several independent services to secure

Especially if we’re using a combination of containers, Kubernetes, and serverless functions to take advantage of microservices, we’ll have multiple services to protect in multiple environments throughout the application lifecycle.

Regular changes in environments

In the agile methodology, teams unveil a new version every week (or even daily, in order to correct a bug, for example). This presents a challenge in terms of the security of what is deployed, which makes the task of security personnel more difficult in terms of taking control of these deployments without slowing down the speed of release each time.

Zero trust and service identity

Unlike monolithic applications that use a physical machine or a virtual machine as a reference point or the stable node of a network, cloud-native applications and, especially, services are deployed in different places. They can even be replicated in several places, providing us with the ability to stop and then restart them at any time. The security of these services requires a network security model that takes into consideration the context of the application, the identity of the microservices, and their networking requirements. This leads us to build a model of zero trust around these requirements.

Zero trust is a strategic approach that consists of protecting organizations by eliminating implicit trust and continuously validating all phases of digital interactions. Zero-trust security is an IT security model that requires strict identity verification for all persons and devices attempting to access resources on a private network, whether inside or outside the network perimeter.