Blog Post

Apps on Azure Blog
4 MIN READ

Introducing Azure Container Apps: a serverless container service for running modern apps at scale

DariaGrigoriu's avatar
DariaGrigoriu
Icon for Microsoft rankMicrosoft
Nov 02, 2021

The fast pace of innovation today requires businesses to focus on differentiated business logic and high velocity delivery to maximize impact. Business logic is often encapsulated in modern cloud native applications represented as microservices with multiple application components that are independently developed and interconnected. Many cloud hosting options for microservices and containerized applications require infrastructure management and orchestration that can increase solution complexity, overall cost, and time to market.

 

At Ignite, we announced Azure Container Apps, a serverless application centric hosting service where users do not see or manage any underlying VMs, orchestrators, or other cloud infrastructure. Azure Container Apps enables executing application code packaged in any container and is unopinionated about runtime or programming model. Applications can scale in response to HTTP requests, events (e.g. storage queue messages, Kafka topics, etc.), or simply run as always-on background jobs. Azure Container Apps addresses specific requirements for microservices including encrypted service to service communication and the independent versioning and scaling of services.

 

Azure Container Apps is built on the foundation of powerful open-source technology in the Kubernetes ecosystem . The open-source centric approach enables a path for teams to build microservices without having to overcome the concept and operational overhead of working with Kubernetes directly and enables continued application portability by leveraging open standards and APIs. Behind the scenes, every application runs on Azure Kubernetes Service, with Kubernetes Event Driven Autoscaling (KEDA), Distributed Application Runtime (Dapr), and Envoy deeply integrated in the hosting service.

 

Getting started with Azure Container Apps

Multiple individual Container Apps can be deployed to a single Container Apps environment, which acts as an isolation and observability boundary between a group of Container Apps. Container Apps deployed to the same environment write logs to the same Log Analytics workspace. This structure enables easy communication between microservices that compose the overall solution. Additionally, multiple containers can be deployed to the same container app and in that case, they’ll be deployed and scaled together as a single unit or pod of containers. To get started with Azure Container Apps see Quickstart: Deploy an HTTP application to Azure Container Apps.

 

Create a container app

You can use the Azure CLI to create and manage Container Apps.

 

Create a new Container App using the Azure CLI

 

Horizontal autoscaling and scale triggers

Azure Container Apps manages horizontal autoscaling through a set of declarative scaling rules. By default, Azure Container Apps scale to zero and pause billing when not in use. As a Container App scales out, new instances of the Container App are created on-demand. Container Apps supports many scale triggers including HTTP and event-based triggers using Kubernetes Event Driven Autoscaling (KEDA). KEDA is a rich autoscaler with many event scaler options continuously contributed by the community. For more information about supported scale triggers, see KEDA Scalers. See How-to – Set scaling rules in Azure Container Apps for more details.

 

Add a scale rule

 

Making microservices development easier with Distributed Application Runtime (Dapr)

Dapr is an open-source event-driven runtime that codifies best practices for building portable microservice applications into independent platform agnostic building blocks using the development language and framework of your choice. Azure Container Apps offers a fully managed version of the Dapr APIs. With Dapr for Azure Container Apps, sidecars can be enabled to run next to your application instances and provide a rich set of capabilities and productivity gains. You can use the following Dapr APIs: Service to Service calls, Pub/Sub, Event Bindings, State Stores, and Actors. See Tutorial – Use Dapr in Azure Container Apps for more details.

 

Dapr integration

App lifecycle management

Azure Container Apps streamlines the application lifecycle management by supporting multiple revisions to manage application versions, enabling traffic splitting and balancing across application versions, securing application secrets, connecting different applications, and delivering integrated monitoring via Log Analytics. See Concepts - Application lifecycle management in Azure Container Apps for more details.

 

Revision management

Partner feedback

"Many of our users want to package up their microservices and apps in containers, have them scale with demand and not have to worry about managing an underlying cluster," said Luke Hoban, CTO of Pulumi. "We're excited to announce launch day support for Azure Container Apps - so cloud engineers everywhere can define, deploy and manage container apps using their favorite programming languages.".

 

We’re looking forward to the applications you will build with Azure Container Apps! To learn more about Azure Container Apps visit the Getting Started guide on Microsoft Docs and make sure to watch Jeff Hollan do a demo during the Innovate with cloud-native apps and open source on Azure session at Microsoft Ignite, happening tomorrow November 3rd, 2021.

 

Learn more about pricing details by heading over to the Azure Container Apps pricing pagereach us directly via our GitHub microsoft/azure-container-apps repo, and deploy example application at Azure-Samples/container-apps-store-api-microservice.

Updated Nov 02, 2021
Version 3.0
  • satykrish's avatar
    satykrish
    Copper Contributor

    This was something we were hoping Azure would support, and glad to see it being previewed. A potential replacement for docker without the overhead of managing Kubernetes clusters. DAPR and KEDA support are nice feature add-ons. Are any of the following in your roadmap?

    • Customer VNet integration - for isolated workloads
    • Support for servicemesh- like OSM
    • Support for PodIdentity - for accessing services using User Managed Identity
    • Support for custom sidecar/init containers
    • Integration with cloud native tools like Prometheus, Grafana
  • valentinoz950's avatar
    valentinoz950
    Copper Contributor

    This truly excites me. Was thinking of Fargate for teams without lots of container skills but this turns the recommendations back to Azure to leverage the existing Azure skills

  • markus_granis's avatar
    markus_granis
    Copper Contributor

    This service seems amazing, just needs a lot more tutorials and finished portal experience (still some TBA-content) to help people start using it.

  • Stef_Heyenrath's avatar
    Stef_Heyenrath
    Copper Contributor

    DariaGrigoriu

     

    When creating a container app using the CLI, I get this error:

    Deployment failed. Correlation ID: 745d4050-9ebb-4566-a1e2-3e7f4701f030. Failed to provision revision for container app 'xxx'. Error details: Operation expired.

     

    Is there any way to investigate the error in more detail?

     

    And how to connect to a running container app, and see the Console.WriteLine statements?