18. August 2025
by Markus Zimmermann | 2090 words | ~10 min read
cloud migration architecture open source analysis
Migrating applications to the cloud is a complex endeavour with substantial technical and organisational implications. It requires assessing cloud readiness, selecting the right migration strategy, and adapting code where necessary. Automated tools now play a key role in streamlining both analysis and transformation.
This article presents two open-source tools, the CNCF project Konveyor and OpenRewrite by Moderne, that aid in planning and executing Java-based enterprise application migrations. We cover both strategic considerations and technical workflows down to code-level adjustments.
Cloud platforms promise scalability, resilience, automation, and cost control. Legacy systems, however, are often monolithic and tightly coupled to specific infrastructures. Successful migration demands tailored strategies; neither simple “lift and shift” nor full rewrites are always optimal.
Effective projects balance cost, functionality, and modernisation. They rely on interdisciplinary teams, clear communication, and tools that deliver transparent analyses and reproducible changes. Konveyor helps evaluate migration needs, while OpenRewrite automates code updates—addressing common issues like classpath conflicts, logging frameworks, configuration, and legacy servlet containers.
Cloud migration is not merely a technical exercise; it is an architectural decision with far-reaching consequences. It affects source code, build processes, infrastructure dependencies, deployment strategies, and security requirements. Common technical obstacles include:
Typical obstacles in cloud migration. Image generated with ChatGPT.
Another challenge is the lack of a consistent testing strategy. Applications without reproducible builds, automated tests, or Infrastructure-as-Code are difficult to integrate into automated CI/CD pipelines—yet such pipelines are essential for cloud-native operations.
A central concept we use at QAware in cloud readiness assessments is categorising applications into three groups:
Cloud Readiness Categories.
Konveyor uses a similar classification that the analysis generates automatically and transparently. Key checks include:
The Konveyor project has three key components:
Application Inventory: Serves as the portfolio management system. It enables you to catalogue applications, associate them with business services, define interdependencies, and add metadata via an extendable tagging model.
Assessment Module (Pathfinder): A questionnaire-based tool embedded within Tackle that evaluates application suitability for containerization (e.g., Kubernetes). It identifies risks, assesses readiness, and produces reports that help drive an adoption plan.
Analysis Module: Analyses source code and dependencies using predefined or custom rules. The analysis provides a detailed report outlining all issues that might block a migration to Kubernetes and offers effort estimations.
A CLI tool called Kantra that encapsulates the analysis capability into a standalone command-line interface. It analyses source code and dependencies, produces reports that highlight migration blockers and provides actionable insights.
A new component to include AI capabilities called Konveyor AI. It is using the analysis results and provides automatic fixes using Generative AI. This component is still evolving, but it is promising.
Konveyor’s analysis uses static code analysis and heuristics, detecting elements such as JDBC statements, web frameworks, hardcoded paths, or sun.*
classes. The output is available in HTML or JSON and can integrate directly into CI/CD pipelines.
To analyze a Java application using the Konveyor CLI tool Kantra, you can follow these steps:
Install the Kantra CLI by downloading it from the Kantra releases page.
Once installed, you can run the following command to analyse your Java application for cloud readiness:
|
|
Kantra generates the report in HTML format inside the specified output directory (../out
in this example).
Example report generated from the analysis.
With the report you can assess the cloud readiness of your application, identify potential migration blockers, and provide actionable insights for refactoring or modernisation efforts.
Based on the analysis results, teams can select a migration strategy that fits their application landscape and business goals. In practice, three core migration strategies have emerged, each with distinct goals, efforts, and risks.
Cloud Migration Strategies.
The developer of the application moves it to the cloud without modifications. This approach is fast and requires minimal development effort but delivers no structural improvements. It is often used for short-term capacity needs or infrastructure transitions (e.g., data center shutdowns). Technically, this can mean migrating VMs 1:1 to IaaS offerings like AWS EC2 or Azure VM, preserving most existing CI/CD pipelines. Downsides include limited scalability, restricted observability, and modest cost benefits—often leading to “Cloud in Name Only” scenarios.
The developer adapts the application to cloud-native paradigms, typically involving:
Refactoring is common for functionally stable but technically outdated applications. It enables debt reduction, observability (Prometheus, Grafana, OpenTelemetry), resilient Kubernetes deployments, and future-proof scaling. Tools like OpenRewrite facilitate this through rule-based, reproducible code changes.
The developer performs a complete rewrite based on modern cloud architectures. A rewrite is necessary when:
Typical technologies include microservices, serverless components (AWS Lambda, Azure Functions), and event-driven designs. Rebuilding is costly but forward-looking, with ROI tied to innovation potential.
Most real-world migrations blend strategies, for example, refactoring the transactional core while rehosting auxiliary modules, combining quick ROI with long-term modernisation. Successful migration balances business continuity with technical renewal.
While Konveyor focuses on analysis and strategy planning, OpenRewrite takes the next step: automated code modifications based on declarative rules.
At its core, OpenRewrite parses code into a full Abstract Syntax Tree (AST), enabling semantically precise transformations. So-called recipes define the transformation logic as modular, reusable and versionable components.
OpenRewrite provides a rich set of community recipes for common migration tasks, such as:
Using Maven, it is easy to integrate OpenRewrite into your build process and apply a specific recipe.
The following example demonstrates how to upgrade a Spring Boot application from version 2.x to 3.4, which includes significant changes such as Jakarta EE namespace migration.
pom.xml
under <plugins>
|
|
|
|
OpenRewrite lets you go beyond community rules by authoring your own recipes. You can do this declaratively with YAML (compose existing building blocks) or imperatively with Java (full control over AST‑level transformations). A pragmatic middle path is to start from Refaster‑style templates to scaffold simple Java recipes quickly.
When to use: composition, quick wins, and centrally managed policy roll‑outs.
Example
|
|
Pros
Cons
When to use: complex, context‑aware refactorings that require AST access.
Minimal Recipe Skeleton
|
|
Pros
Cons
Use Refaster‑style before/after patterns to generate Java visitors.
Example
|
|
When to use
Benefits
With the rise of powerful Large Language Models (LLMs) like GPT‑5 or Claude 4, the question arises: how can these technologies contribute to cloud migration? Unlike rule‑based tools such as OpenRewrite, LLMs operate probabilistically—leveraging statistical language models trained on large code bases and text corpora.
Promising use cases for LLMs in migration include:
The strengths of LLMs lie in their:
However, LLMs also have significant limitations:
Combined with rule‑based tools like OpenRewrite and analysis frameworks like Konveyor, LLMs could serve as a “creative complement” for:
A hybrid solution with reproducibility and contextual understanding emerges as a promising approach. Konveyor already explores this direction with its Konveyor AI component, which integrates LLM capabilities into the migration process.
Migrating to the cloud demands strong architectural understanding, high code quality, and precise planning. It is rarely a linear process—instead, it is an iterative cycle of analysis, decision-making, adaptation, and validation. This is where open-source tools like Konveyor and OpenRewrite demonstrate their full value:
Together, they form a complementary toolset: analysis and execution, strategy and implementation, transparency and automation. For organisations aiming to future-proof their software landscapes, these tools offer a scalable, open, and well-integrated path to the cloud. Free of black-box behaviour, but with clear rules, high reusability, and growing community support.
However, the future lies in the combination: Konveyor and OpenRewrite for structured migration, LLMs for creative enhancements, embedded into DevOps processes and cloud-native principles. Migration thus becomes not a one-time effort, but a continuous modernisation process - scalable, traceable, and automated.