{"id":5483,"date":"2025-11-18T12:07:40","date_gmt":"2025-11-18T11:07:40","guid":{"rendered":"https:\/\/www.infinity-group.pl\/blog\/?p=5483"},"modified":"2026-03-03T15:26:10","modified_gmt":"2026-03-03T14:26:10","slug":"microservices-not-so-scary-after-all-thanks-to-azure-container-apps","status":"publish","type":"post","link":"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/","title":{"rendered":"Microservices Not so Scary After All\u2014Thanks to Azure Container Apps"},"content":{"rendered":"\n<p>A tried-and-tested monolith or microservices\u2014that is the question. And it is a perfectly valid one. A monolith is tempting because of its simplicity\u2014one application, one codebase, fewer moving parts. It is easier to deploy, easier to monitor, and, at the beginning at least, easier to maintain. But what happens when the system starts to grow? Every change requires caution, and extending a monolith often leads to a complex, difficult-to-maintain codebase.&nbsp;<\/p><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Summary<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#microservices%e2%80%94an-opportunity-or-a-pitfall\" >Microservices\u2014an opportunity or a pitfall?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#are-microservices-suitable-for-everyone\" >Are microservices suitable for everyone?&nbsp;<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#azure-container-apps-what-it-is-and-why-it-matters\" >Azure Container Apps: what it is and why it matters&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#dedicated-plan-in-aca\" >Dedicated plan in ACA&nbsp;<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#security-and-compliance\" >Security and compliance&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#full-integration-with-azure-devops\" >Full integration with Azure DevOps&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#monitoring-applications-with-azure-tools\" >Monitoring Applications with Azure tools&nbsp;<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#example-architecture-using-azure-container-apps\" >Example architecture using Azure Container Apps&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#when-should-you-choose-azure-container-apps\" >When should you choose Azure Container Apps?&nbsp;<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#situations-when-azure-container-apps-is-an-excellent-choice\" >Situations when Azure Container Apps is an excellent choice<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#but-sometimes-it-is-better-to-consider-alternatives\" >But sometimes it is better to consider alternatives<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#summary\" >Summary&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.infinity-group.dev\/blog\/2025\/11\/18\/microservices-not-so-scary-after-all-thanks-to-azure-container-apps\/#contact-with-us\" >Contact with us<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<p>On the other hand, microservices offer flexibility, independent scalability, and the ability to evolve in several directions at once. It sounds like an ideal solution, doesn\u2019t it? The challenge, however, lies in the implementation. You must carefully consider inter-service communication, high availability, monitoring, and deployment automation. All of this can be overwhelming, particularly if you do not have a large DevOps team and do not want to spend weeks configuring infrastructure.&nbsp;<\/p>\n\n\n\n<p>Are microservices a solution reserved only for large enterprises? Or is there a way to simplify their management and make them accessible to smaller teams and projects as well? Microsoft provides an answer in the form of <strong>Azure Container Apps, which significantly streamlines the deployment and management of microservices and eliminates many issues associated with traditional microservices approaches<\/strong>. How does it work? That is exactly what this article explores.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"microservices%e2%80%94an-opportunity-or-a-pitfall\"><\/span>Microservices\u2014an opportunity or a pitfall?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Microservices are one of the hottest topics in modern software architecture. Technology companies, industry blogs, and IT conferences have for years presented them as the future of scalable application development. But are they really the right choice for everyone? <strong>We have already discussed the advantages of this approach here:<\/strong> <a href=\"https:\/\/www.infinity-group.pl\/blog\/en\/2024\/09\/04\/exploring-microservices-their-functionality-benefits-and-business-impact\/\">https:\/\/www.infinity-group.pl\/blog\/en\/2024\/09\/04\/exploring-microservices-their-functionality-benefits-and-business-impact\/.&nbsp;<\/a><\/p>\n\n\n\n<p>Despite their strengths, microservices also introduce several challenges:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>System complexity: instead of a single application, we now have dozens (or even hundreds) of services that must work together. This brings significant challenges related to communication, API versioning, and data consistency.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Infrastructure management: every service must be deployed, monitored, and secured. This typically requires a robust container orchestration platform (e.g., Kubernetes)\u2014which can be difficult for smaller teams.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Service dependencies: in a monolith, communication between components happens locally within the same application. In microservices, communication occurs via the network (HTTP, gRPC, message brokers), leading to latency, availability issues, and the need for built-in fault-handling mechanisms.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cost and time to implement: although microservices provide flexibility, their implementation and maintenance require significantly more effort and resources.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"are-microservices-suitable-for-everyone\"><\/span>Are microservices suitable for everyone?&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Fortunately, <strong>you do not need to abandon microservices simply because they are complex.<\/strong> Modern platforms such as Azure Container Apps help simplify the process of managing and deploying microservices by removing much of the infrastructure burden. In the next section, we will take a closer look at how this solution works.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"azure-container-apps-what-it-is-and-why-it-matters\"><\/span>Azure Container Apps: what it is and why it matters&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Azure Container Apps is a fully managed serverless container platform that:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hides infrastructure: there is no need to manually configure Kubernetes clusters, virtual machines, or load balancers.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Runs Docker containers: deploy any Docker image built locally or stored in Azure Container Registry (ACR).&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses KEDA (Kubernetes Event-Driven Autoscaling): automatically scales based on HTTP traffic, queue length, or any other trigger.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Provides built-in service-to-service communication: internal routing within an application environment without additional configuration.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>Azure Container Apps (ACA) offers two main deployment and billing models:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consumption plan<\/strong>: a serverless mode where you pay only for actual CPU\/RAM usage. Services can scale down to zero.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dedicated plan<\/strong>: a model with a dedicated Kubernetes cluster, reserved capacity, and full VNet integration. Designed for organisational requirements around security and compliance.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>While the Consumption plan offers rapid deployment and cost savings, many organisations today require more: network isolation, compliance with security policies, and full control over infrastructure. For such cases,<strong> the ACA Dedicated plan is the optimal choice, supporting advanced enterprise scenarios. <\/strong>Thus the remainder of this article focuses primarily on this approach.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"dedicated-plan-in-aca\"><\/span>Dedicated plan in ACA&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>The Dedicated plan is based on <strong>a fully managed Kubernetes cluster <\/strong>deployed within your Azure subscription. Compared to the Consumption plan, it offers:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reserved resources: fixed cluster capacity (nodes, vCPU, RAM) ensures predictable performance.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VNet integration: attach the cluster to your virtual network to enable private endpoints and network peering, ensuring full traffic isolation.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Private Link: services communicate exclusively through your private network, aligned with enterprise security requirements.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compliance and policy enforcement: full support for Azure Policy, Azure Defender, and other Azure Security services.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>This table highlights key benefits of the Dedicated plan<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Feature&nbsp;<\/td><td>Corporate-grade Benefits&nbsp;<\/td><\/tr><tr><td>VNet Integration&nbsp;<\/td><td>Network isolation and private IP access only&nbsp;<\/td><\/tr><tr><td>Private Link \/ Endpoints&nbsp;<\/td><td>All traffic to container registries and ACA remains private&nbsp;<\/td><\/tr><tr><td>Reserved capacity&nbsp;<\/td><td>Guaranteed performance and enterprise-level SLAs&nbsp;<\/td><\/tr><tr><td>Azure Policy&nbsp;<\/td><td>Enforced tagging, audit rules, and security constraints&nbsp;<\/td><\/tr><tr><td>Cost based on allocation&nbsp;<\/td><td>Stable, predictable billing&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"security-and-compliance\"><\/span>Security and compliance&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>1. Network isolation&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A dedicated cluster inside your VNet, with no direct exposure to the public Internet and access restricted to private endpoints.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Network control can be further enhanced through Azure Firewall or Network Security Groups (NSG).&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>2. Identity control&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure Active Directory, Managed Identities, and RBAC can be applied both at the environment and application level.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This allows assigning different roles and permissions to teams working on separate applications within the same environment.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>3. Audit and policy enforcement&nbsp;<\/p>\n\n\n\n<p>Azure Policy enables automated governance such as:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mandatory container image scanning (Defender for Containers)&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enforced tagging and naming conventions&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IP allow\/deny rules&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"full-integration-with-azure-devops\"><\/span>Full integration with Azure DevOps&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Azure Container Apps integrates seamlessly with Azure DevOps, <strong>enabling repeatable, secure, fully automated microservices deployments.<\/strong> Leveraging Infrastructure as Code (IaC) and robust CI\/CD pipelines provides:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fully automated deployments: changes in code or Bicep files trigger pipelines that build container images, push them to ACR, and deploy them to ACA.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consistency and policy compliance: infrastructure and environment configurations are defined as code, deployed identically across environments.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Private VNet support: Azure DevOps can use private agents hosted inside the same VNet as the ACA Dedicated environment.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Infrastructure versioning: Bicep files and pipeline configurations stored in Git provide traceability and easy rollbacks.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrated tests and validation: pipelines can include Bicep validation (what-if), application smoke tests, or security scanning.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Access control: Azure AD and RBAC ensure precise permissions for approvals, pipeline execution, and infrastructure configuration changes.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"monitoring-applications-with-azure-tools\"><\/span>Monitoring Applications with Azure tools&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Reliability and rapid incident response are <strong>essential in enterprise environments.<\/strong> Azure Container Apps integrates deeply with Azure observability tools, making it easy to track application health, detect errors, and respond in real time.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Azure Monitor and log analytics&nbsp;<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Centralised logs and metrics: ACA applications can send diagnostics directly to Azure Monitor and Log Analytics.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kusto Query Language (KQL): create complex queries to analyse behaviours such as HTTP 500 errors or service response times.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Data visualisation: dashboards provide real-time operational insights.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Alerts and automation&nbsp;<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Metric and log-based alerts: e.g. CPU &gt; 80% for 5 minutes or specific exceptions in logs.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integration with ITSM tools: <strong>alerts can be routed to Microsoft Teams, ServiceNow, Jira, and others<\/strong>, <strong>hastening project teams&#8217; reactions.<\/strong><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Automated actions: trigger Logic Apps, runbooks, or webhooks to restart containers, scale services, or notify administrators.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"example-architecture-using-azure-container-apps\"><\/span>Example architecture using Azure Container Apps&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Having covered the fundamentals, let\u2019s look at an example. The following conceptual architecture illustrates a microservices-based system deployed in an ACA Dedicated environment.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"984\" height=\"634\" src=\"https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-55-1.png\" alt=\"\" class=\"wp-image-5490\" title=\"\" srcset=\"https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-55-1.png 984w, https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-55-1-300x193.png 300w, https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-55-1-768x495.png 768w\" sizes=\"auto, (max-width: 984px) 100vw, 984px\" \/><\/figure>\n\n\n\n<p>In this model, key components\u2014the frontend (React), API services (Customers, Products), integrations (DB Service, Integration Service), and content management\u2014<strong>are packaged as separate containerised applications and deployed within a single ACA environment.&nbsp;<\/strong>The whole thing runs on a Dedicated plan, with full integration with a private VNet network.<\/p>\n\n\n\n<p>User traffic flows through Azure Front Door with WAF\/CDN enabled, <strong>ensuring security and high availability<\/strong>. The system leverages various Azure services:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure SQL Database for application data&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure Key Vault for secure secret storage via Managed Identities&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure Cache for Redis for application caching&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure Log Analytics for centralised logging and monitoring&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Azure Storage as file storage, scanned by Microsoft Defender for Cloud&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>The system also integrates with external services such as SendGrid and SMS API for email and SMS delivery. Administrative access is provided through a secure VPN connection.&nbsp;<\/p>\n\n\n\n<p>This is just one example of how Azure Container Apps can be used in a microservices architecture. The above application architecture built on Azure Container Apps can be <strong>efficiently integrated with Azure DevOps, which makes it possible to fully automate the processes of building, testing, and deploying both code and infrastructure<\/strong>. The simplified DevOps flow for this architecture is shown in the diagram below:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"986\" height=\"621\" src=\"https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-56-1.png\" alt=\"\" class=\"wp-image-5491\" title=\"\" srcset=\"https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-56-1.png 986w, https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-56-1-300x189.png 300w, https:\/\/www.infinity-group.pl\/blog\/wp-content\/uploads\/2025\/11\/Zrzut-ekranu-56-1-768x484.png 768w\" sizes=\"auto, (max-width: 986px) 100vw, 986px\" \/><\/figure>\n\n\n\n<p>Source code repositories (Azure Repos) store the frontend and backend applications (e.g., React, .NET) as well as infrastructure-as-code definitions (e.g., in Bicep files). Azure Pipelines enables the creation of CI\/CD pipelines that:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>build the application and containers,&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>publish artefacts and images to Azure Container Registry,&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>deploy the environment based on Bicep files.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>The process can be further extended with Bicep template validation, security scanning, artefact signing, or automatic rollbacks. Deployments can be carried out using a self-hosted agent operating within the same VNet as the ACA environment, which ensures full network isolation and compliance with security policies. This approach guarantees complete control over the entire application lifecycle\u2014from source code through testing to automatic,<strong> secure, and repeatable deployments across individual environments.&nbsp;<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"when-should-you-choose-azure-container-apps\"><\/span>When should you choose Azure Container Apps?&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Adopting microservices is a major architectural decision. Beyond <strong>defining service boundaries, you must also choose the right deployment and management mode<\/strong>l. Azure Container Apps is a powerful alternative to traditional Kubernetes\u2014especially for organisations that prefer to focus on application development rather than infrastructure.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"situations-when-azure-container-apps-is-an-excellent-choice\"><\/span>Situations when Azure Container Apps is an excellent choice<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to deploy microservices quickly without running your own Kubernetes cluster.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need to run containers in a secure, isolated environment aligned with corporate policies (VNet, RBAC, Azure Policy).&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your applications experience dynamic workloads\u2014ACA supports autoscaling, including scale-to-zero.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You are building CI\/CD workflows with Azure DevOps and want to use IaC (e.g. Bicep).&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You already rely on Azure services and want a consistent ecosystem.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"but-sometimes-it-is-better-to-consider-alternatives\"><\/span>But sometimes it is better to consider alternatives<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Especially when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You require full control over cluster configuration and orchestration.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You depend on highly advanced networking scenarios beyond ACA\u2019s capabilities.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your applications are not container-based and fit better in VM-based or Azure App Services environments.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"summary\"><\/span>Summary&nbsp;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Azure Container Apps is a mature platform that, combined with Azure DevOps, Bicep, and the Azure ecosystem, enables the creation of modern, scalable, secure microservices environments\u2014without requiring a full-time DevOps team. With the Dedicated plan, ACA becomes a <strong>compelling alternative to Kubernetes in environments with stringent security requirements, where VNet integration, compliance, monitoring, cost control and automation play a critical role<\/strong>. It relieves project teams of infrastructure complexity, allowing them to focus on delivering business value.&nbsp;<\/p>\n\n\n\n<p>Our experts specialise in many areas\u2014including microservices architecture implementations. If you would like to see this solution in your organisation, <strong>please complete the form below.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-contact-form-7-contact-form-selector\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f5799-o1\" lang=\"pl-PL\" dir=\"ltr\" data-wpcf7-id=\"5799\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/blog\/wp-json\/wp\/v2\/posts\/5483#wpcf7-f5799-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formularz kontaktowy\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"5799\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"pl_PL\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f5799-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<h2 class=\"form-title\"><span class=\"ez-toc-section\" id=\"contact-with-us\"><\/span>Contact with us\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"form-row\">\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name and surname*\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Company*\" value=\"\" type=\"text\" name=\"your-company\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<div class=\"form-row\">\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"E-mail*\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"form-column\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"phone-number\"><input size=\"40\" maxlength=\"15\" class=\"wpcf7-form-control wpcf7-tel wpcf7-text wpcf7-validates-as-tel\" aria-invalid=\"false\" placeholder=\"Phone number\" value=\"\" type=\"tel\" name=\"phone-number\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n<\/div>\n<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" aria-invalid=\"false\" placeholder=\"Message\" name=\"your-message\"><\/textarea><\/span>\n<\/p>\n<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Submit\" \/>\n<\/p>\n<div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<p>*Required\n<\/p>\n<p class=\"klauzula-naglowek\">Clause:\n<\/p>\n<p>The administrator of your personal data is Infinity Group Sp. z o.o., with its registered office in Bia\u0142ystok.<br \/>\nThe data provided in the form will be processed for the purpose of responding to your inquiry (Article 6(1)(f) of the GDPR \u2013 the administrator\u2019s legitimate interest consisting in conducting correspondence). Providing your data is voluntary, but necessary in order to receive a response.<br \/>\nYou have, among others, the right to object to the processing of your data and the right to lodge a complaint with the President of the Personal Data Protection Office (Poland). Detailed information, including information on data recipients, the data retention period, and possible transfers of data outside the EEA, can be found under the link \u201cInformation on the processing of your personal data\u201d.\n<\/p>\n<\/form>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A tried-and-tested monolith or microservices\u2014that is the question. And it is a perfectly valid one. A monolith is tempting because of its simplicity\u2014one application, one codebase, fewer moving parts. It is easier to deploy, easier to monitor, and, at the beginning at least, easier to maintain. But what happens when the system starts to grow?&#8230;<\/p>\n","protected":false},"author":41,"featured_media":6143,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-5483","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development-en"],"_links":{"self":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/comments?post=5483"}],"version-history":[{"count":6,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5483\/revisions"}],"predecessor-version":[{"id":5894,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/posts\/5483\/revisions\/5894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/media\/6143"}],"wp:attachment":[{"href":"https:\/\/www.infinity-group.pl\/blog\/wp-json\/wp\/v2\/media?parent=5483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}