Spring Framework is one of the most popular frameworks for application development using Java. Spring Boot is one of the top modules of Spring Framework, which is widely used to build enterprise-grade highly scalable backend applications. Spring Boot is very popular to develop microservices using open-source technologies, and its Pivotal Team develops it.
Microsoft and Pivotal/VMware build and operate Azure Spring Cloud, a native Azure service offered as Platform as a Service (PaaS) and available on Azure Marketplace.
Why Use Azure Spring Cloud?
There are many benefits in deploying an application to Azure Spring Cloud
- Spring Boot framework helps to reduce the overall application development time.
- Azure Spring Cloud further accelerates and simplifies infrastructure management needed for hosting Spring Boot applications.
- It’s easy to deploy existing Spring Boot applications without code changes.
- For new development, the managed environment provides infrastructure services such as Eureka, Config Server, Service Registry Server, and blue-green deployment. There is no need to create, deploy or manage services that can provide these functionalities.
- Develop and deploy rapidly without containerization dependencies.
- It is easy to bind applications with other Azure services such as Azure Cosmos DB, Azure Database for MySQL, and Azure Cache for Redis.
- Monitor production workload efficiently and effortlessly.
- Provides security features to manage secrets.
- Supports hybrid deployment.
- Easily control ingress and egress to the app.
- Scalable global infrastructure
- Automatically wire apps with Spring Cloud infrastructure
Azure Service Overview
Azure Spring Cloud offers first-class support for Spring tools, and it quickly binds to other Azure services, including storage, database, monitoring, etc.
Service Tiers and Limits
Azure Spring Cloud offers Basic and Standard tiers and set default limits and quotas. Some default limits can be increased vis a support ticket.
Java, Spring Boot, and Spring Cloud Versions
- Azure Spring Cloud hosting environment contains the latest Azul Zulu OpenJDK version for Azure, and it supports Java 8 and Java 11.
- The minimum Spring Boot version needed for Azure Spring Cloud is either Spring Boot version 2.1 or version 2.2
The following table lists the supported Spring Boot and Spring Cloud combinations:
Azure Spring Cloud Setup
In this review, the application to get weather details of cities is decomposed into three microservices to explain the capabilities of Azure Spring Cloud. It includes a gateway service and two microservices for city and weather details, respectively. Microservices talk to each other to retrieve weather details of cities. Various Azure infrastructure services used in the sample app are mentioned in respective sections of this document. Below are the details of microservices:
- A gateway microservice based on Spring Cloud Gateway: gateway application
- A reactive microservice that stores its data on Cosmos DB: city-service application
- A microservice that stores its data on MySQL: weather-service application
Deploying Spring Boot applications into Azure Spring Cloud includes the general steps below:
- Create an Azure Spring Cloud instance through Azure Portal or using CLI, if not already created.
- Add the Azure Spring Cloud extension by running the following command: az extension add -n spring-cloud -y
- Build Spring Boot application locally; mvn clean package
- Create a new Azure Spring Cloud app within your Azure Spring Cloud instance: az spring-cloud app create -n {my-app}
- Deploy the app to Azure Spring Cloud: az spring-cloud app deploy -n {my-app} –jar-path target/my-app.jar
Deploy a sample application to Azure Spring Cloud
Below are high-level steps to create and deploy a sample application on Azure Spring Cloud using Azure portal:
- Look for your Azure Spring Cloud instance in your resource group
- Click on the “Apps” link under “Settings” on the navigation sidebar.
- Click on the “Create App” link at the top of the Apps page.
- Create a new application named “simple-microservice.”
Key offerings from Azure Spring Cloud
Spring Cloud Config Server
Multiple microservices can use the same Spring Cloud Service Config Server, which is pre-configured and managed. It uses a pluggable repository that currently supports local storage, Git, and Subversion. Spring Cloud Config is used here to inject settings from a Git repository into the application and display it on the screen.
Below are steps to enable Azure Spring Cloud to create a configuration server with the configuration files from a public git repository – https://github.com/Azure-Samples/spring-cloud-sample-public-config.git
Note: A public git repository is used for example purposes only.
- Go to the Azure portal.
- Go to the overview page of your Azure Spring Cloud server and select “Config server” in the menu
- Set the repository URL: https://github.com/Azure-Samples/spring-cloud-sample-public-config.git
- Click on “Validate” and wait for the operation to succeed
- Click on “Apply” and wait for the operation to succeed
Log Streaming and Analytics
Log Analytics is part of Azure Monitor, and it’s integrated into Azure Spring Cloud. Azure Spring Cloud offers logs/metrics collection and storage relying on Log Analytics, Azure Storage, or Azure Event Hubs.
The following are steps to configure the Azure Spring Cloud instance to send its logs to the Log Analytics workspace:
- Create Log Analytics workspace named sclab-la-hqd2ksd3p6z3g
Configure the log analytics workspace for the Azure Spring Cloud instance:
The workspace allows running queries on the aggregated logs. Below is a screenshot of querying logs using Azure Portal.
Distributed Tracing
Azure Spring Cloud provides the capability to view Application Map, which completely relies on Azure Application Insights. It provides a detailed view of how components interact with each other and the ability to trace requests. This helps to quickly visualize how applications are performing, as well as detect and diagnose issues across microservices.
Performance Metrics
Azure Spring Cloud provides out-of-the-box capabilities to review application performance metrics.
Application Scaling
The application can be scaled out quickly based on insights from distributed tracing. Both manual scaling and auto-scaling options are available. An application can easily be configured to scale up Azure Spring Cloud app resources as needed through the Azure Portal or via equivalent Azure CLI commands.
Blue-Green Deployment
The blue-green deployment pattern allows testing the latest application changes on production infrastructure without exposing the changes to consumers until your testing is complete. Refer to this documentation to set up a staging environment in Azure Spring Cloud.
Conclusion
Azure Spring Cloud is an excellent service to quickly build, deploy and maintain Spring Boot applications securely in the cloud with minimal efforts and a rich set of application monitoring and alerting features.
In summary, Azure Spring Cloud provides the below benefits:
- Easy and simple development approaches
- Less infrastructure to manage
- High availability with b/g deployment
- A secure network
- Elastic and scalable infrastructure
- Highly automated environment
Known Limitations
- Azure portal and ARM templates do not support uploading application packages.
- Server.port default to port 1025; other values will be overridden.
- Spring.application.name will be overridden by the application name that’s used to create each application.
- The latest version of Java is not supported. Azure Spring Cloud supports Java 8 and 11.
- Spring Boot 2.4.x application has a known TLS authentication issue with Eureka.
- Service binding currently supports only limited services; Cosmos DB, Azure DB for MySQL, and Azure Cache for Redis are currently supported.