<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Apps on Azure Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/bg-p/AppsonAzureBlog</link>
    <description>Apps on Azure Blog articles</description>
    <pubDate>Fri, 05 Jun 2026 07:26:02 GMT</pubDate>
    <dc:creator>AppsonAzureBlog</dc:creator>
    <dc:date>2026-06-05T07:26:02Z</dc:date>
    <item>
      <title>Regional Endpoints for Azure Container Registry Geo-Replication — Now in Public Preview</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/regional-endpoints-for-azure-container-registry-geo-replication/ba-p/4525717</link>
      <description>&lt;P&gt;By &lt;A class="lia-external-url" href="https://www.linkedin.com/in/johnsonshi/" target="_blank" rel="noopener"&gt;Johnson Shi&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/zhuyul/" target="_blank" rel="noopener"&gt;Zoey (Zhuyu) Li&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/huangli-wu-806070126/" target="_blank" rel="noopener"&gt;Huangli Wu&lt;/A&gt;&lt;/P&gt;
&lt;H2 id="what-s-new"&gt;What's new&lt;/H2&gt;
&lt;P&gt;Regional endpoints for geo-replicated Azure Container Registries are now in &lt;STRONG&gt;public preview&lt;/STRONG&gt;. See the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-geo-replication" target="_blank" rel="noopener"&gt;feature's official MS Learn documentation&lt;/A&gt;. If you've been following since the&amp;nbsp;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/regional-endpoints-for-geo-replicated-azure-container-registries-private-preview/4496186" target="_blank" rel="noopener" data-lia-auto-title="private preview announcement" data-lia-auto-title-active="0"&gt;private preview announcement&lt;/A&gt;, here's what changed:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;No feature flag registration.&lt;/STRONG&gt; No subscription enrollment so all Azure subscriptions and customers can now use this feature.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;No CLI extension.&lt;/STRONG&gt; Regional endpoints commands are built into &lt;STRONG&gt;Azure CLI 2.86.0+&lt;/STRONG&gt; natively. If you installed the private preview &lt;CODE&gt;acrregionalendpoint&lt;/CODE&gt; extension, uninstall it to avoid conflicts.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Native CLI and portal support.&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;With&amp;nbsp;&lt;STRONG&gt;Azure CLI 2.86.0+&lt;/STRONG&gt;, enable regional endpoints for all geo-replicas of a registry with &lt;CODE&gt;az acr create --regional-endpoints enabled&lt;/CODE&gt; or &lt;CODE&gt;az acr update --regional-endpoints enabled&lt;/CODE&gt;.&lt;/LI&gt;
&lt;LI&gt;The Azure portal also supports configuring regional endpoints natively.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;CLI flag rename for configuring a geo-replica's global endpoint routing (an existing separate feature).&lt;/STRONG&gt; The existing flag&amp;nbsp;&lt;CODE&gt;--region-endpoint-enabled&lt;/CODE&gt; (on &lt;CODE&gt;az acr replication create/update&lt;/CODE&gt;) has been renamed to &lt;CODE&gt;--global-endpoint-routing&lt;/CODE&gt;.
&lt;UL&gt;
&lt;LI&gt;Key clarifications:
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;"--global-endpoint-routing" (formerly "--region-endpoint-enabled" on "az acr replication create / az acr replication update")&lt;/STRONG&gt; —&amp;nbsp;&lt;STRONG&gt;controls whether a specific geo-replica participates in global endpoint routing&lt;/STRONG&gt;. This is an existing feature that is different from the new registry-level "--regional-endpoints" feature being discussed in this post.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;"--regional-endpoints" (on az "acr create / az acr update") —&amp;nbsp;enables or disables the regional endpoints feature at the registry level for all geo-replicas.&amp;nbsp;&lt;/STRONG&gt;This is the feature discussed in this post.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;See the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-endpoint-reference" target="_blank" rel="noopener"&gt;endpoint reference&lt;/A&gt; for the full breakdown of the various registry endpoints (global endpoints, regional endpoints, and data endpoints).&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Regional endpoints are available on &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-skus" target="_blank" rel="noopener"&gt;Premium SKU&lt;/A&gt; registries in all Azure public cloud regions.&lt;/STRONG&gt;&lt;/P&gt;
&lt;H2 id="what-are-regional-endpoints-"&gt;What are regional endpoints?&lt;/H2&gt;
&lt;P&gt;Regional endpoints give you dedicated, per-region login server URLs for each geo-replica with the following URL pattern:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;CODE&gt;myregistry.&lt;STRONG&gt;eastus.geo&lt;/STRONG&gt;.azurecr.io&lt;/CODE&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;CODE&gt;myregistry.&lt;STRONG&gt;westeurope.geo&lt;/STRONG&gt;.azurecr.io&lt;/CODE&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Regional endpoints coexist with the registry's global endpoint &lt;/STRONG&gt;(&lt;CODE&gt;myregistry.azurecr.io&lt;/CODE&gt;) — enabling regional endpoints doesn't disable a registry's global endpoint that is backed by Azure-managed routing. You can choose per workload:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You can use the global endpoint with automatic Azure-managed routing with health-aware failover, where Azure will route your requests to the geo-replica with the best network performance profile to the client.&lt;/LI&gt;
&lt;LI&gt;You can use a regional endpoint when you need explicit control or routing to a specific geo-replica.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Other resources:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For the full background on &lt;EM&gt;why&lt;/EM&gt; regional endpoints exist and the problems they solve, see the &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/regional-endpoints-for-geo-replicated-azure-container-registries-private-preview/4496186" target="_blank" rel="noopener" data-lia-auto-title="private preview blog post" data-lia-auto-title-active="0"&gt;private preview blog post&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;For the complete operational deep dive — health-aware failover, throttling considerations, storage quota and pricing, eventual consistency, home region outage behavior, DNS propagation, private endpoint interaction, capacity planning, and monitoring guidance — see&amp;nbsp;&lt;A class="lia-external-url" href="https://gist.github.com/johnsonshi/0034f8fdc014da64242ffdb8b632709e" target="_blank" rel="noopener"&gt;How ACR geo-replication handles failover, failback, and traffic redirection&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;For the behind-the-scenes engineering implementation — architectural overview and the engineering system design of the feature — see &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/determinism-over-magic-the-engineering-design-behind-azure-container-registry-re/4524101" target="_blank" rel="noopener" data-lia-auto-title="Determinism over magic: the engineering design behind Azure Container Registry Regional Endpoints" data-lia-auto-title-active="0"&gt;Determinism over magic: the engineering design behind Azure Container Registry Regional Endpoints&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 id="getting-started"&gt;Getting started&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Enable regional endpoints on an existing registry:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az acr update -n myregistry -g myrg --regional-endpoints enabled
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;View all registry endpoint URLs, including the registry global endpoint, geo-replica regional endpoints, and data endpoints:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az acr show-endpoints --name myregistry --resource-group myrg
&lt;/LI-CODE&gt;
&lt;H2&gt;Using regional endpoints&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Authenticate to a specific regional endpoint:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az acr login --name myregistry --endpoint eastus
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Push to a specific geo-replica.&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Images and tags pushed to a geo-replica via regional endpoints still propagate to all other geo-replicas under&amp;nbsp;&lt;U&gt;eventual consistency&lt;/U&gt;.&lt;/STRONG&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;LI-CODE lang="bash"&gt;docker tag   myapp:v1  myregistry.eastus.geo.azurecr.io/myapp:v1
docker push            myregistry.eastus.geo.azurecr.io/myapp:v1
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Pull an image:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;docker pull myregistry.eastus.geo.azurecr.io/myapp:v1&lt;/LI-CODE&gt;
&lt;P&gt;You can specify regional endpoints directly in Kubernetes deployment manifests if you need to pin workloads to specific regions. This ensures clusters in specific regions always pull from their colocated replica, providing predictable routing and reduced latency.&lt;/P&gt;
&lt;P&gt;By using different regional endpoints in each cluster's manifests, you can choose to guarantee that each cluster pulls from its local replica instead of relying on Azure-managed routing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;East US cluster deployment:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="yaml"&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-eastus
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: myregistry.eastus.geo.azurecr.io/myapp:v1&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;West Europe cluster deployment:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="yaml"&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-westeurope
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: myregistry.westeurope.geo.azurecr.io/myapp:v1&lt;/LI-CODE&gt;
&lt;H2 id="when-to-use-regional-endpoints"&gt;When to use regional endpoints&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;What to do&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Most workloads&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Keep using the global endpoint (&lt;CODE&gt;myregistry.azurecr.io&lt;/CODE&gt;). Health-aware failover handles routing automatically.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Pin AKS clusters to co-located replicas&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Use regional endpoint URLs in deployment manifests.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;CI/CD push-then-pull consistency&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Pin pushes to a regional endpoint to avoid eventual-consistency races.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Client-side failover&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Switch between regional endpoints based on your own health checks.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Capacity planning&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Spread workloads across multiple regional endpoints to avoid per-replica throttling.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Troubleshooting&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Target a specific geo-replica to reproduce or isolate an issue.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2 id="what-changed-from-private-preview"&gt;What changed from private preview&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Private preview&lt;/th&gt;&lt;th&gt;Public preview&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Feature flag registration required (&lt;CODE&gt;az feature register&lt;/CODE&gt;)&lt;/td&gt;&lt;td&gt;No registration needed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subscription private preview enrollment and propagation wait&lt;/td&gt;&lt;td&gt;Immediately available to all Azure subscriptions for all Premium SKU registries in all Azure public cloud regions.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Separate CLI extension (&lt;CODE&gt;acrregionalendpoint&lt;/CODE&gt;)&lt;/td&gt;&lt;td&gt;Built into Azure CLI 2.86.0+ natively&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;No registry-level CLI flag&lt;/td&gt;&lt;td&gt;&lt;CODE&gt;az acr update --regional-endpoints enabled&lt;/CODE&gt; enables regional endpoints for all geo-replicas&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;CODE&gt;--region-endpoint-enabled&lt;/CODE&gt; flag for controlling a geo-replica's global endpoint routing via &lt;CODE&gt;az acr replication update&lt;/CODE&gt;&lt;/td&gt;&lt;td&gt;Flag for controlling a geo-replica's global endpoint routing renamed to &lt;CODE&gt;--global-endpoint-routing&lt;/CODE&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;No portal support&lt;/td&gt;&lt;td&gt;Native Azure portal support for enabling regional endpoints for new registries (during creation) and for existing registries&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Private preview docs in &lt;A class="lia-external-url" href="https://github.com/Azure/acr" target="_blank" rel="noopener"&gt;Azure/acr&lt;/A&gt;&lt;/td&gt;&lt;td&gt;Full documentation on &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-geo-replication" target="_blank" rel="noopener"&gt;MS Learn&lt;/A&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3 id="enabling-regional-endpoints-in-the-azure-portal"&gt;Enabling regional endpoints in the Azure portal&lt;/H3&gt;
&lt;P&gt;You can enable regional endpoints directly from the Azure portal for both new registries (during creation), as well as existing registries:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="https://gist.github.com/user-attachments/assets/ef9532ad-dfdc-47be-892b-dfbc5234f7f0" alt="Enabling regional endpoints in the Azure portal" width="1121" height="761" /&gt;&lt;/P&gt;
&lt;H2 id="if-you-were-in-the-private-preview"&gt;If you were in the private preview&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;1. Uninstall the CLI extension.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The private preview CLI extension conflicts with the built-in commands in Azure CLI 2.86.0+. Remove it:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az extension remove --name acrregionalendpoint
&lt;/LI-CODE&gt;
&lt;P&gt;Verify it's gone:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az extension list --query "[?name=='acrregionalendpoint']" -o table
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;2. Ensure you're running Azure CLI 2.86.0 or later.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Regional endpoints commands are available natively starting in Azure CLI 2.86.0. Check your version:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;az version
&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;3. Update scripts that use &lt;CODE&gt;--region-endpoint-enabled&lt;/CODE&gt; for controlling global endpoint routing for a geo-replica.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The old flag name for controlling a geo-replica's global endpoint routing configuration is deprecated and will be removed in Azure CLI 2.87.0 (June 2026). Update to &lt;CODE&gt;--global-endpoint-routing&lt;/CODE&gt;:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;# Old (deprecated)
az acr replication update --registry myregistry --name westus \
  --region-endpoint-enabled false

# New
az acr replication update --registry myregistry --name westus \
  --global-endpoint-routing false
&lt;/LI-CODE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Why the rename?&lt;/STRONG&gt; The old flag name &lt;CODE&gt;--region-endpoint-enabled&lt;/CODE&gt; was confusing — it sounded like it controlled the &lt;EM&gt;regional endpoints&lt;/EM&gt; feature, but it &lt;EM&gt;actually controlled whether a geo-replica participates in global endpoint routing&lt;/EM&gt;. The new name &lt;CODE&gt;--global-endpoint-routing&lt;/CODE&gt; says exactly what it does. For a full breakdown of all three CLI flags and how they relate, see the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-endpoint-reference" target="_blank" rel="noopener"&gt;endpoint reference&lt;/A&gt;.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2 id="learn-more"&gt;Learn more&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Full documentation&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-geo-replication" target="_blank" rel="noopener"&gt;Geo-replication in Azure Container Registry — Regional endpoints&lt;/A&gt; — prerequisites, CLI commands, network considerations, private endpoint integration, and troubleshooting.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Operational deep dive&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://gist.github.com/johnsonshi/0034f8fdc014da64242ffdb8b632709e" target="_blank" rel="noopener"&gt;How ACR geo-replication handles failover, failback, and traffic redirection&lt;/A&gt; — health-aware failover, throttling, eventual consistency, DNS considerations, monitoring, pricing, and a full walkthrough.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Behind-the-scenes engineering implementation&lt;/STRONG&gt;: &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/determinism-over-magic-the-engineering-design-behind-azure-container-registry-re/4524101" target="_blank" rel="noopener" data-lia-auto-title="Determinism over magic: the engineering design behind Azure Container Registry Regional Endpoints" data-lia-auto-title-active="0"&gt;Determinism over magic: the engineering design behind Azure Container Registry Regional Endpoints&lt;/A&gt; — architectural details and the engineering system design behind the feature.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Endpoint reference&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-endpoint-reference" target="_blank" rel="noopener"&gt;Azure Container Registry endpoint reference&lt;/A&gt; — all endpoint types, URL formats, and CLI flags in one place.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Private endpoints&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-private-endpoints" target="_blank" rel="noopener"&gt;Connect privately to a registry using private endpoints&lt;/A&gt; — IP allocation math, subnet sizing, and NIC queries for registries with regional endpoints.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Firewall rules&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-firewall-access-rules" target="_blank" rel="noopener"&gt;Configure firewall access rules&lt;/A&gt; — which FQDNs to allow for regional endpoints.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 id="feedback"&gt;Feedback&lt;/H2&gt;
&lt;P&gt;We'd love to hear how you're using regional endpoints and what we can improve. Reach out via:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://github.com/Azure/acr" target="_blank" rel="noopener"&gt;Azure Container Registry GitHub repository&lt;/A&gt; — issues, feature requests, and discussion&lt;/LI&gt;
&lt;LI&gt;Azure portal feedback — use the feedback button in the Azure portal on your registry's page&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Regional endpoints are on the path to GA. Your feedback directly shapes the feature's direction.&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jun 2026 06:12:53 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/regional-endpoints-for-azure-container-registry-geo-replication/ba-p/4525717</guid>
      <dc:creator>johnsonshi_msft</dc:creator>
      <dc:date>2026-06-05T06:12:53Z</dc:date>
    </item>
    <item>
      <title>Inside ACR Artifact Cache: Pull-Through Caching at Scale</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/inside-acr-artifact-cache-pull-through-caching-at-scale/ba-p/4524949</link>
      <description>&lt;P&gt;By: &lt;A class="lia-external-url" href="https://www.linkedin.com/in/akash-singhal-941441155/" target="_blank" rel="noopener"&gt;Akash Singhal&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/luis-dieguez-12388b4a/" target="_blank" rel="noopener"&gt;Luis Dieguez&lt;/A&gt;, Kiran Challa, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/nathan-anderson-206224238/" target="_blank" rel="noopener"&gt;Nathan Anderson&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/antoniovt/" target="_blank" rel="noopener"&gt;Tony Vargas&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/carolinenbarker/" target="_blank" rel="noopener"&gt;Caroline Barker&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/renshao/" target="_blank" rel="noopener"&gt;Ren Shao&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/mabelegba/" target="_blank" rel="noopener"&gt;Mabel Egba&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/toddysm/" target="_blank" rel="noopener"&gt;Toddy Mladenov&lt;/A&gt;, &lt;A class="lia-external-url" href="https://www.linkedin.com/in/johnsonshi/" target="_blank" rel="noopener"&gt;Johnson Shi&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;Introduction&lt;/H2&gt;
&lt;P&gt;For many customers, Azure Container Registry (ACR) is the only registry their workloads can trust, even when images and artifacts originate from a different registry such as Docker Hub, Microsoft Artifact Registry, GitHub Container Registry, Quay, another ACR, or a private registry. ACR Artifact Cache makes this many-to-one model practical by letting a platform team map a downstream ACR repository path to an upstream source repository. Here, upstream means the source registry and repository ACR contacts on behalf of the customer, and downstream means the ACR-facing path customers pull from.&lt;/P&gt;
&lt;P&gt;From the outside, the experience looks like a normal pull from ACR. Inside the service, that pull moves through the same multi-tenant registry platform that serves ACR traffic across regions, clouds, and data plane stamps. This series is about the gap between that simple external experience and the internal system. The goal is to show what happens inside ACR, why the system is designed this way, and how those design choices shape the behavior customers ultimately observe.&lt;/P&gt;
&lt;P&gt;Some implementation details are simplified, and the system continues to evolve. The request paths and design constraints are representative, but this article intentionally avoids service-by-service internals that are not necessary to understand the feature.&lt;BR /&gt;For this overview, the useful mental model is: serve now, hydrate for later. Later sections will show where that model helps, and where it creates engineering pressure.&lt;/P&gt;
&lt;H2&gt;Why serve upstream content from ACR?&lt;/H2&gt;
&lt;P&gt;Pulling directly from an upstream is often sufficient for development, but production systems need stronger guarantees from the pull path.&lt;BR /&gt;The failure modes are familiar to anyone who has operated containerized workloads at scale:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;an upstream registry is slow or temporarily unavailable&lt;/LI&gt;
&lt;LI&gt;an upstream applies rate limits or burst protection&lt;/LI&gt;
&lt;LI&gt;credentials for various upstream sources need to be handled safely&lt;/LI&gt;
&lt;LI&gt;ACR-to-ACR scenarios should avoid customer-managed credentials entirely by using managed identity&lt;/LI&gt;
&lt;LI&gt;network policy expects pulls to stay inside an approved network boundary&lt;/LI&gt;
&lt;LI&gt;a platform team wants one shared, sanitized catalog of public content for first-party consumption while individual teams pull only what they need&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Let’s take Docker Hub as a concrete example. Docker Hub pull &lt;A class="lia-external-url" href="https://docs.docker.com/docker-hub/usage/pulls/" target="_blank" rel="noopener"&gt;rate limits&lt;/A&gt; mean that unauthenticated users and Docker Personal users can exhaust their allowed pulls in a time window, causing shared build agents or Kubernetes nodes to receive rate-limit errors instead of images. That is a useful example because it makes the upstream dependency visible, but it is not the whole story. The broader engineering problem is that upstream-sourced artifacts should behave like local registry dependencies once a customer chooses to route them through ACR.&lt;/P&gt;
&lt;P&gt;Artifact Cache addresses that problem by letting customers map a downstream ACR namespace to an upstream namespace, pull through ACR, and allow ACR to materialize content locally as it is requested.&lt;/P&gt;
&lt;H2&gt;A pull-through cache inside ACR&lt;/H2&gt;
&lt;P&gt;Azure Container Registry operates across 60+ Azure regions and 6 public and sovereign clouds, serves hundreds of thousands of registries, and handles billions of requests per day. Artifact Cache is only one part of that larger service, but it is large enough to be a distributed systems problem in its own right: more than 100 million image pulls per day, petabyte-scale egress, upstreams with different behavior, and customers who expect registry pulls to remain predictable.&lt;/P&gt;
&lt;P&gt;This scale matters because Artifact Cache is not deployed beside ACR as a separate service. It is part of the same registry system that serves normal pushes, pulls, tag listing, catalog operations, authentication flows, private networking scenarios, and other registry API traffic.&lt;BR /&gt;That means Artifact Cache has to fit into ACR's existing resource model and request-serving model. Customers configure cache rules and authentication boundaries through the control plane, then their pulls are served through the data plane. The next sections follow those two parts in order: first the resources customers create, then the runtime path those resources affect.&lt;/P&gt;
&lt;H2&gt;The customer workflow&lt;/H2&gt;
&lt;P&gt;The setup begins in the control plane, where customers define the relationship between an ACR namespace and an upstream source.&lt;BR /&gt;A customer starts with an ACR and chooses an upstream repository. In the examples below, myregistry.azurecr.io is the customer's ACR login server. The dockerhub/library/node path is the downstream ACR namespace the customer wants to use for cached content.&lt;/P&gt;
&lt;P&gt;The authentication model depends on the upstream:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For a public upstream, the cache rule may not need credentials.&lt;/LI&gt;
&lt;LI&gt;For a private upstream, the customer stores upstream credential material in their Azure Key Vault, creates a credential set that references those secrets, and then associates that credential set with a cache rule. At access time, ACR uses the system-assigned managed identity associated with the cache rule to read the referenced Key Vault secrets, so the customer controls access by granting that identity the required secret permissions. ACR materializes those credentials only when it needs to contact the upstream, so the customer-owned Key Vault remains the secret store.&lt;/LI&gt;
&lt;LI&gt;For an ACR-to-ACR upstream, the customer can use a user-assigned managed identity. In that scenario, credential sets are not part of the flow; managed identity replaces the credential-set and Key Vault path.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;At a high level, the customer defines a namespace mapping:&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;docker pull myregistry.azurecr.io/dockerhub/library/node:latest&lt;/LI-CODE&gt;
&lt;P&gt;maps to:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;docker pull docker.io/library/node:latest&lt;/LI-CODE&gt;
&lt;P&gt;&lt;BR /&gt;In ACR, that mapping is stored as a cache rule: a control-plane resource that maps a downstream ACR path to an upstream source path. If the upstream requires authentication, the cache rule links to the appropriate credential boundary: a credential set backed by customer-owned Key Vault secrets, or a user-assigned managed identity for ACR-to-ACR.&lt;/P&gt;
&lt;P&gt;This is where the control-plane/data-plane split shows up. The control plane manages registry configuration through surfaces such as CLI, portal, Bicep, ARM templates, and other Azure Resource Manager clients. ARM sends those resource operations to the ACR control plane, which creates or updates the cache rule and, when needed, the credential set as child resources under the registry. Those resources do not own customer secrets or identities directly; they link to existing Azure resources such as the customer's Key Vault or an optional user-assigned managed identity. Later, the data plane uses that persisted configuration to decide whether a runtime registry request, such as a pull or tag listing, should be handled by Artifact Cache.&lt;/P&gt;
&lt;img&gt;Diagram A: Control plane resource provisioning&lt;/img&gt;
&lt;P&gt;After setup, the runtime path begins with the simplest possible pull:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;docker pull myregistry.azurecr.io/dockerhub/library/node:latest&lt;/LI-CODE&gt;
&lt;P&gt;To understand what happens after that command, we need a map of the ACR components that participate in the request path.&lt;/P&gt;
&lt;H2&gt;The ACR components involved&lt;/H2&gt;
&lt;P&gt;The architecture needed for this overview is much smaller than ACR's full internal service graph.&lt;/P&gt;
&lt;P&gt;ACR is a regionalized service. The control plane operates at the regional level, while data plane stamps serve hot-path registry traffic for the registries assigned to them. A registry is pinned to a stamp, and high-traffic regions may have more than one stamp. Stamp architecture is an ACR concept covered in more detail in the &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/how-acr-runs-multi-tenancy-at-scale-compute-stamp-rebalancing-and-why-you-never-/4523014" target="_blank" rel="noopener" data-lia-auto-title="stamp rebalancing post" data-lia-auto-title-active="0"&gt;stamp rebalancing post&lt;/A&gt;; this article only needs the simplified model below.&lt;/P&gt;
&lt;P&gt;For this article, ACR has three important boundaries:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The regional control plane manages registry resources and provisioning operations.&lt;/LI&gt;
&lt;LI&gt;The data plane stamp serves hot-path registry traffic for registries pinned to that stamp.&lt;/LI&gt;
&lt;LI&gt;The storage layer holds downstream registry metadata, blobs, and storage-backed event queues.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;At this level of detail, a data plane stamp is composed of a few major runtime substrates. The registry data plane virtual machine scale set (VMSS) is the core ACR data plane. It runs containerized services including the frontend, the registry API entry point that receives and routes OCI and ACR-specific requests. The data proxy VMSS also runs containerized services and serves selected blob-content paths. It serves eligible blob-content traffic behind ACR's dedicated data endpoint; see the ACR data endpoint &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-dedicated-data-endpoints" target="_blank" rel="noopener"&gt;documentation&lt;/A&gt;. The stamp also includes a runtime cluster for additional data plane services, including services that are not on the hot path.&lt;/P&gt;
&lt;P&gt;This article will not explain why ACR uses both VMSS-based services and a runtime cluster inside the data plane stamp. That tradeoff is useful context, but it belongs in a separate deep dive. For Artifact Cache, the important point is narrower: the stamp contains the runtime substrates that participate in data plane serving, including runtime-cluster services that process async import and hydration work.&lt;/P&gt;
&lt;P&gt;The component list is:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; height: 535.2px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;&lt;U&gt;&lt;STRONG&gt;Component&lt;/STRONG&gt;&lt;/U&gt;&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;&lt;U&gt;&lt;STRONG&gt;&lt;SPAN class="lia-text-color-21"&gt;Role&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Region control plane&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Manages registry resources and provisioning operations&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Data plane stamp&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Serves pinned registries in a region&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Registry data plane VMSS&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Core ACR data plane for OCI and ACR-specific APIs&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Frontend&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Handles OCI registry API traffic inside the registry data plane&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Data proxy VMSS&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Serves selected blob-content paths, including Artifact Cache&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 58.8px;"&gt;&lt;td style="height: 58.8px;"&gt;Runtime Kubernetes Cluster&lt;/td&gt;&lt;td style="height: 58.8px;"&gt;Hosts additional data plane services, including async import and hydration workers&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Cache rule&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Maps downstream ACR path to upstream path&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Credential set or managed identity&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Provides the upstream authentication boundary when needed&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Cache Backend service&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Handles cache-rule-backed pulls&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Storage queue&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Regional storage resource used for hydration events&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Metadata/blob storage&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Stores downstream manifests, tags, digests, and layer blobs&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 58.8px;"&gt;&lt;td style="height: 58.8px;"&gt;Import workers&lt;/td&gt;&lt;td style="height: 58.8px;"&gt;Run in the data plane runtime cluster and hydrate downstream content asynchronously&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.8px;"&gt;&lt;td style="height: 34.8px;"&gt;Upstream registry&lt;/td&gt;&lt;td style="height: 34.8px;"&gt;Public, private, or another ACR registry used as the source&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The diagram below is a component map rather than a step-by-step pull trace. It shows one visible data plane stamp in West US for myregistry.azurecr.io, with a muted marker to indicate that larger regions can contain multiple stamps. The stamp contains a registry data plane VMSS, a data proxy VMSS, and a runtime Kubernetes cluster. Regional metadata/blob storage and the storage queue sit outside the stamp boundary. The storage queue is also outside the regional control plane cluster; it is a storage resource consumed by data plane runtime-cluster workers.&lt;/P&gt;
&lt;img&gt;Diagram B: Region, stamp, data plane, and control plane&lt;/img&gt;
&lt;H2&gt;First artifact pull&lt;/H2&gt;
&lt;P&gt;Now return to the pull request:&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;docker pull myregistry.azurecr.io/dockerhub/library/node:latest&lt;/LI-CODE&gt;
&lt;P&gt;The request reaches the data plane stamp where myregistry is pinned. The frontend in the registry data plane VMSS handles the registry API request and forwards it to the Cache Backend Service, which checks whether the requested repository path matches a cache rule.&lt;/P&gt;
&lt;P&gt;If there is no matching cache rule, the request follows the normal ACR path. If a cache rule matches, Artifact Cache logic applies.&lt;/P&gt;
&lt;P&gt;The next check is local state. ACR looks at downstream metadata and blob storage to determine whether the requested manifest and blobs are already available locally. If the content is present, ACR can serve it from the downstream registry path.&lt;/P&gt;
&lt;P&gt;If the content is not available locally, ACR resolves the upstream repository path from the cache rule. If the upstream requires authentication, ACR uses the configured auth boundary for that upstream: a credential set for private upstreams, or a user-assigned managed identity for ACR-to-ACR upstreams. The request can then be served through the upstream-backed data path, with the data proxy handling the blob content path.&lt;/P&gt;
&lt;P&gt;The first pull does not need to wait for durable hydration to complete before the client receives content. Serving the pull and hydrating the downstream registry are related operations, but they are deliberately separated.&lt;/P&gt;
&lt;img&gt;Diagram C: First docker pull before hydration&lt;/img&gt;
&lt;P&gt;The trace above follows the same node:latest image used in the setup example. On a cache miss, the data plane queues an async import event for the requested image while still serving the client request. Manifest content returns through the frontend path. For layer blobs, the frontend returns a redirect to the data proxy, and the client follows that redirect while the data proxy streams blob content from the upstream CDN.&lt;/P&gt;
&lt;P&gt;The data plane serves the customer request, but it also detects that durable downstream state needs to be populated. That durable work is where hydration comes in.&lt;/P&gt;
&lt;H2&gt;Hydration&lt;/H2&gt;
&lt;P&gt;Hydration is the process that materializes upstream content into the downstream ACR registry.&lt;/P&gt;
&lt;P&gt;ACR performs hydration asynchronously because the data plane workload can be bursty and variable. A deployment or scale-out event can cause many clients to request the same not-yet-hydrated image at nearly the same time. Image size, layer count, multi-platform manifest trees, upstream behavior, queue depth, and retry behavior all matter in a multi-tenant service.&lt;/P&gt;
&lt;P&gt;The north star is to coordinate those requests: collapse duplicate work, hydrate the content from upstream, and serve all waiting clients without turning one customer action into unnecessary upstream load. That coordination problem is challenging at ACR scale, and we are continuing to improve it.&lt;/P&gt;
&lt;P&gt;The existing async import path gives Artifact Cache a durable and scalable foundation while that serving path continues to evolve. At a high level, the data plane queues an import event. A notification service consumes the event and dispatches work to import workers in the data plane runtime cluster. Those workers fetch the required content from the upstream registry and write manifests, tags, digests, and layer blobs into ACR metadata and blob storage.&lt;/P&gt;
&lt;img&gt;Diagram D: Async hydration&lt;/img&gt;
&lt;P&gt;When import workers complete, they notify the notification service, which can publish completion signals through ACR eventing surfaces such as Event Grid and webhooks. This allows customers to use webhooks to detect when cached content is fully available locally. You can read more about how it works &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/how-acr-artifact-cache-handles-multi-arch-images-what-gets-cached-and-when-webho/4514744" target="_blank" rel="noopener" data-lia-auto-title="here" data-lia-auto-title-active="0"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The mental model is that the first pull can serve immediately, while hydration makes future local serving durable. A follow-up post will go deeper on the work ACR does to reduce upstream load during this hydration window.&lt;/P&gt;
&lt;H2&gt;Later pulls&lt;/H2&gt;
&lt;P&gt;After hydration completes, later pulls for the same content can be served from ACR.&lt;/P&gt;
&lt;P&gt;For digest references, the model is relatively direct because a digest is content-addressed. If ACR has the requested digest and its blobs downstream, the data plane can serve that content locally.&lt;/P&gt;
&lt;P&gt;Tags are more subtle because tags can change. A tag such as latest is a name that can point to different content over time. Artifact Cache therefore must care about freshness semantics for tag-based pulls. This is one of the reasons a pull-through cache becomes more complex than "fetch once and forget."&lt;BR /&gt;The benefit is not only lower latency. ACR also reduces repeated dependency on the upstream for content that has already been materialized downstream.&lt;/P&gt;
&lt;H2&gt;Guarding the pull path&lt;/H2&gt;
&lt;P&gt;Once content is hydrated, ACR must serve that content from the customer's registry boundary even when the upstream is slow, unavailable, or returning errors. That distinction matters for tag-based pulls: ACR may need upstream checks to reason about freshness, but an upstream failure should not automatically prevent ACR from serving content that is already available downstream.&lt;/P&gt;
&lt;P&gt;Artifact Cache also must be careful about how it behaves when upstreams are unhealthy. If an upstream starts returning 5xx errors or throttling requests, ACR should avoid amplifying the problem by repeatedly sending customer-triggered requests upstream. Circuit breaking and upstream work minimization are part of being a good steward of both customer traffic and upstream registry limits. More details to follow in subsequent posts.&lt;/P&gt;
&lt;P&gt;There is a separate availability question inside ACR: what happens if Artifact Cache-specific components, such as the cache backend path, are operationally unavailable? ACR handles that case gracefully by falling back to normal registry pull behavior: it checks the customer's registry state and serves the image if the requested content already exists in ACR. In other words, cache-backend unavailability should not block pulls for content that is already present in the registry.&lt;/P&gt;
&lt;H2&gt;What we will explore next&lt;/H2&gt;
&lt;P&gt;This overview is the map for the rest of the series. The following posts will go deeper into the parts of the system where the design pressure is highest.&lt;/P&gt;
&lt;H4&gt;Minimizing upstream work&lt;/H4&gt;
&lt;P&gt;We will start with how Artifact Cache avoids making more upstream requests than necessary.&lt;/P&gt;
&lt;P&gt;This becomes difficult when many clients request the same not-yet-hydrated image at the same time. A Kubernetes scale-out event is the classic example: many nodes may ask for the same image concurrently, and the system must avoid turning one customer's action into unnecessary duplicate upstream work.&lt;/P&gt;
&lt;H4&gt;Making Artifact Cache observable to customers&lt;/H4&gt;
&lt;P&gt;We will also look at how customers understand whether their cache rule is healthy, whether credentials are usable, and why a pull failed.&lt;BR /&gt;This is hard because a failed pull can involve customer configuration, Key Vault access, managed identity configuration, upstream credentials, upstream availability, data plane request handling, or asynchronous hydration. The engineering challenge is to expose the right customer-facing health and debug signals without turning internal topology into the user interface.&lt;/P&gt;
&lt;H4&gt;Repository semantics in Artifact Cache&lt;/H4&gt;
&lt;P&gt;Finally, we will look at repository semantics. Once upstream content becomes local, the repository is no longer just a mirror.&lt;/P&gt;
&lt;P&gt;Tags can move upstream, digest references are content-addressed, and customers may push their own content into downstream repositories. The visible repository state can involve both upstream-derived content and customer-owned downstream writes.&lt;/P&gt;
&lt;H2&gt;Closing&lt;/H2&gt;
&lt;P&gt;Artifact Cache is designed to make upstream-sourced artifacts behave like ACR-served content once customers choose to route those artifacts through their registry. The design goal is that customers can pull from ACR and reason about the result using ACR boundaries: registry configuration, local serving, customer-visible health, and predictable repository semantics.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 22:43:58 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/inside-acr-artifact-cache-pull-through-caching-at-scale/ba-p/4524949</guid>
      <dc:creator>akashsinghal</dc:creator>
      <dc:date>2026-06-02T22:43:58Z</dc:date>
    </item>
    <item>
      <title>Anyscale on Azure: Powering Enterprise AI at Massive Scale on Azure Kubernetes Service</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/anyscale-on-azure-powering-enterprise-ai-at-massive-scale-on/ba-p/4523806</link>
      <description>&lt;P&gt;Somewhere on your AI platform team, an engineer is on call this weekend — not for the model, not for the training run, but for the integration code &lt;STRONG&gt;&lt;EM&gt;holding five separate AI processing systems together&lt;/EM&gt;&lt;/STRONG&gt;. Data preparation on one. Training on a second. Evaluation on a third. Serving on a fourth. Observability bolted on across all of it. The glue between them has quietly evolved into a production system of its own, complete with its own failure modes and its own pager.&lt;/P&gt;
&lt;P&gt;This is what running AI at scale looks like for most enterprises in 2026. To process the full breadth of AI workloads, teams don’t have one platform, but a stack of multiple compute engines — stitched together and monitored around the clock. Training failures become increasingly costly as multi-node GPU clusters remain underutilized and difficult to operate. Inference costs climb in a straight line when they should be bending the other way. And the accelerators underneath, at six figures a year per node, sit at 30–40% utilization.&lt;/P&gt;
&lt;P&gt;None of this is a model problem. &lt;STRONG&gt;&lt;EM&gt;It is a systems problem,&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;and it exposes a divide that is widening across the industry.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;The AI shift: Moving from API inference calls only to end-to-end AI&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Most enterprises start an AI journey by calling hosted model APIs. It’s the fastest way to experiment and ship. But as adoption grows, inference costs scale in a straight line while differentiation remains limited. The organizations pulling ahead are doing more than consuming models. They are customizing them with proprietary data, operating them at scale, and owning the infrastructure between their data and their models. Their unit economics improve as they scale. The dividing line isn’t budget. It isn’t ambition. &lt;STRONG&gt;It is a single architectural decision&lt;/STRONG&gt;: whether the layer between your data and your models is something you rent in pieces or &lt;STRONG&gt;run as a single system&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;That unified system for end-to-end AI, almost without exception, is built on one runtime: &lt;A href="https://www.ray.io/" target="_blank" rel="noopener"&gt;Ray, &lt;/A&gt;&lt;STRONG&gt;an open-source framework&lt;/STRONG&gt; widely adopted by AI-natives such as Cursor, Mistral and xAI to act as the engine that powers many of their workloads from multimodal data processing to reinforcement learning.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Anyscale on Azure: Build and run end-to-end AI on your Azure subscription&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzure" target="_blank" rel="noopener"&gt;Anyscale on Azure&lt;/A&gt; brings the distributed compute runtime the AI industry has converged on — &lt;A class="lia-external-url" href="https://www.ray.io/" target="_blank" rel="noopener"&gt;Ray&lt;/A&gt;— into your Azure tenant as an Azure Native service, that includes purpose-built developer tooling and unified pane for cluster management, built through deep engineering collaboration between Anyscale and Microsoft.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Unlike other processing engines which either only support one hardware type (e.g. CPUs) or focus on a single workload (e.g. inference), Ray turns a heterogeneous cluster of CPUs and GPUs into a&lt;STRONG&gt; single Python runtime&lt;/STRONG&gt; composing data preparation, distributed training, fine-tuning, reinforcement learning, high-throughput inference, and agentic execution as one program, &lt;STRONG&gt;not five interlocking systems&lt;/STRONG&gt;. Anyscale created Ray and stewards the open-source Ray project, now governed by the &lt;A href="https://pytorch.org/blog/pytorch-foundation-welcomes-ray-to-deliver-a-unified-open-source-ai-compute-stack/" target="_blank" rel="noopener"&gt;PyTorch Foundation&lt;/A&gt;; the Anyscale Runtime is the production-grade layer that enterprises can utilize on critical paths from day one, bringing managed cluster operations, enterprise-grade support, and the operational reliability needed to run AI and data workloads at scale.&lt;/P&gt;
&lt;P&gt;On Azure, that runtime executes on your Azure Kubernetes Service (&lt;A class="lia-external-url" href="https://docs.azure.cn/en-us/aks/what-is-aks" target="_blank" rel="noopener"&gt;AKS&lt;/A&gt;) clusters, &lt;STRONG&gt;inside your subscription&lt;/STRONG&gt;, and under Microsoft Entra ID workload identity. &lt;STRONG&gt;Your data, models, and weights never leave your cloud&lt;/STRONG&gt;, and consumption is billed through Azure with drawdown against your existing &lt;A class="lia-external-url" href="https://learn.microsoft.com/marketplace/azure-consumption-commitment-benefit" target="_blank" rel="noopener"&gt;Azure commitment (MACC)&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Sovereignty isn't a label bolted on after the fact. It is the architectural starting point: customer-owned data and models in the customer-owned tenant and governance boundary. The variable per-token economics of hosted APIs are replaced with compute you govern directly. Your proprietary data becomes a compounding advantage rather than a payload shipped to a third-party endpoint.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;A single runtime for the full AI lifecycle&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;The cost profile of enterprise AI is largely architectural. Fragmented stacks — separate systems for prep, training, evaluation, and serving — produce a predictable set of failure modes such as Idle GPU time, Integration code and cross-system data movement.&lt;/P&gt;
&lt;P&gt;The result: production &lt;STRONG&gt;GPU utilization only in the 30–40% range,&amp;nbsp;&lt;/STRONG&gt;against accelerators that cost six figures per node per year.&lt;/P&gt;
&lt;P&gt;On the same fleet, Anyscale customers run those&lt;STRONG&gt; accelerators at 80%+ sustained utilization&lt;/STRONG&gt; and report &lt;STRONG&gt;40–60% lower GPU&lt;/STRONG&gt; spend versus static, single-tenant clusters — driven by fractional GPU allocation (down to 0.2 of a device), bin-packing across complementary memory and compute profiles, gang scheduling for distributed training, priority-aware preemption that lets production inference take precedence over ad-hoc training, and spot integration with checkpoint-aware preemption so long-running jobs survive reclamation without lost work.&lt;/P&gt;
&lt;P&gt;Anyscale on Azure replaces this with a single Ray-powered runtime that spans the lifecycle as one distributed computation graph:&lt;/P&gt;
&lt;img&gt;
&lt;P&gt;&lt;STRONG&gt;Ray Data&lt;/STRONG&gt; (distributed preparation) → &lt;STRONG&gt;Ray Train&lt;/STRONG&gt; (fault-tolerant training) → &lt;STRONG&gt;Ray Tune&lt;/STRONG&gt; (hyperparameter search) → &lt;STRONG&gt;Ray Serve&lt;/STRONG&gt; (inference) — under one managed control plane.&lt;/P&gt;
&lt;/img&gt;
&lt;P&gt;On top of open-source Ray, the Anyscale Runtime adds fault-tolerant training with checkpoint/restart, optimized scheduling, faster cluster bring-up, inference-aware autoscaling, and per-stage observability.&lt;/P&gt;
&lt;P&gt;Ray is the unifying layer that, rather than replacing, streamlines distributed processing of the framework stack the AI industry already uses: PyTorch, Hugging Face Transformers, FSDP, DeepSpeed, and Megatron for training, vLLM and SGLang for high-throughput inference with continuous batching, paged attention, and speculative decoding. Ray Train orchestrates the three parallelism patterns modern training requires — data parallel, model parallel, and hybrid 3D parallel (data + tensor + pipeline) — for trillion-parameter models, without requiring teams to write custom distributed code.&lt;/P&gt;
&lt;P&gt;The architectural payoff is direct: a single Python program defines a graph spanning CPU-heavy preparation and GPU-heavy training. The model produced by Ray Train is served by Ray Serve in the same cluster, against the same storage. The operational, identity, and observability surface is unified instead of fragmented.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;What enterprises deploy with Anyscale on Azure&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;There are five workloads that power the development of modern AI systems, spanning data processing, training, inference, and simulation. But in most environments, each depends on separate engines, frameworks, and orchestration layers. The resulting fragmentation drives up infrastructure spend, latency, and engineering complexity. This makes a single Ray-based runtime under Anyscale’s managed control plane the operationally rational choice.&lt;/P&gt;
&lt;P&gt;Anyscale on Azure provides a complete platform to build and deploy AI applications using the same APIs as open-source Ray. While the data plane runs inside the customer’s AKS cluster, the managed control plane provides a unified interface for development, debugging, and cluster operations.&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;AI in your trust boundary by design: t&lt;/SPAN&gt;&lt;SPAN class="lia-text-color-15"&gt;he architecture&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Anyscale on Azure is an&amp;nbsp;&lt;STRONG&gt;Azure Native product&lt;/STRONG&gt; — discoverable via the &lt;A class="lia-external-url" href="https://aka.ms/AoA/PortalCreate" target="_blank" rel="noopener"&gt;Azure portal&lt;/A&gt; and provisioned through Azure Resource Manager with every resource tagged, scoped, and policy‑bound like any other in your subscription.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Anyscale on Azure is a &lt;STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoAArchitecture" target="_blank" rel="noopener"&gt;split-plane deployment&lt;/A&gt;:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Control plane (managed by Anyscale)&amp;nbsp;— scheduling, jobs, services, workspaces, and observability.&lt;/LI&gt;
&lt;LI&gt;Data plane (&lt;STRONG&gt;your Azure subscription&lt;/STRONG&gt;)&amp;nbsp;— Ray clusters run on your AKS, in your VNet, on your storage (Azure Blob / ADLS Gen2 via BlobFuse2).&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The trust boundary is what matters&lt;/STRONG&gt;&amp;nbsp;— more than any individual data plane feature — for regulated workloads (financial services, healthcare, public sector) and any enterprise where proprietary data is the differentiation.&lt;/P&gt;
&lt;P&gt;The execution model:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Workloads run inside your AKS cluster&lt;/STRONG&gt;&amp;nbsp;— your subscription, your VNet. Model weights, training data, KV caches, checkpoints, and inference traffic never leave the boundary.&lt;/LI&gt;
&lt;LI&gt;Provisioning is ARM-native&amp;nbsp;— resources tag, scope, and inherit Azure Policy like anything else in the subscription.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoAIdentity" target="_blank" rel="noopener"&gt;Identity &lt;/A&gt;is Microsoft Entra ID end to end&lt;/STRONG&gt;&amp;nbsp;— workload identity issues pod credentials; RBAC governs access. No long-lived keys, no parallel secret store.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoANetworking" target="_blank" rel="noopener"&gt;Network controls&lt;/A&gt; are yours&lt;/STRONG&gt;&amp;nbsp;— Private Link, NSGs, Cilium-based Azure CNI policies, and customer-managed encryption keys via Key Vault.&lt;/LI&gt;
&lt;LI&gt;Audit is the Azure Activity Log&amp;nbsp;— the same surface your compliance team already monitors.&lt;/LI&gt;
&lt;LI&gt;The Anyscale Operator is the only Anyscale-controlled component in your environment&amp;nbsp;— it runs inside your AKS, communicates with the control plane via egress only, and accepts no inbound access from Anyscale.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The result: code and data stay in your Azure subscription. &lt;/STRONG&gt;Your existing compliance posture, audit surface, and data residency certifications carry forward — nothing new to attest. Billing rolls through the same Azure invoice with MACC drawdown — no second invoice, no parallel procurement.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Production evidence&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.xoople.com/" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Xoople&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;planetary‑scale satellite imagery on Anyscale on Azure; multimodal AI turns spectral data into operational intelligence.&amp;nbsp;&lt;EM&gt;"Anyscale lets our teams focus on models and outcomes rather than infrastructure, dramatically accelerating the path from experimentation to deployment,"&lt;/EM&gt;&amp;nbsp;— Milos Colic, VP of Engineering, Xoople.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://wayve.ai/" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Wayve&lt;/STRONG&gt;&lt;/A&gt; trains the next generation of autonomous‑driving foundation models on Anyscale on Azure, running distributed ML and data pipelines across large CPU and GPU fleets. The operational driver is GPU‑capacity aggregation at a scale that no single region or cluster can deliver.&lt;/P&gt;
&lt;P&gt;Beyond Anyscale on Azure, the same Ray runtime is used in production at Cursor, Physical Intelligence, xAI, Coinbase, Bedrock Robotics, and Runway. Bedrock Robotics scaled compute 85x on Anyscale without linearly increasing costs. Currently with 12M+ weekly downloads (+400% YoY) and 42K+ GitHub stars and now openly governed under the PyTorch Foundation (Linux Foundation), Ray is becoming the de-factor open-source standard and is not a single-vendor runtime.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Pricing&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;A href="https://aka.ms/AnyscaleonAzurePricing" target="_blank" rel="noopener"&gt;Pricing&lt;/A&gt;&amp;nbsp;is usage‑based and consolidates onto the same Azure invoice as the rest of the customer's subscription, including drawdown against existing Azure commitment (&lt;STRONG&gt;MACC)&lt;/STRONG&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure infrastructure&lt;/STRONG&gt;&amp;nbsp;— standard Azure compute and GPU charges for the AKS substrate the workload runs on, scaling directly with actual usage.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Anyscale service layer&lt;/STRONG&gt; — pay‑as‑you‑go through Azure service meters with no upfront commitment, priced by CPU, memory, and GPU type.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Where Anyscale on Azure fits&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Base-model intelligence is converging&lt;/STRONG&gt;. Enterprises can buy access to the same frontier models, so the model itself is no longer the moat. What separates the enterprises pulling ahead is the layer underneath: how efficiently they run the full AI lifecycle at scale, how much compounding leverage they extract from their proprietary data, and whether they own the runtime that ties it all&lt;STRONG&gt; &lt;/STRONG&gt;together. Anyscale on Azure is the Azure Native runtime layer for that posture — bringing the open-source distributed compute standard the AI industry has converged on into the same Azure governance, identity, and procurement model as the rest of the tenant.&lt;/P&gt;
&lt;P&gt;The shape of enterprise AI is settling. The teams pulling ahead are not the ones renting the most intelligence through APIs — they are the ones building and operating AI systems &lt;STRONG&gt;inside their own cloud, on their own data, under their own governance&lt;/STRONG&gt;, and scaling those systems on the open distributed runtime the industry has already converged on.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Anyscale on Azure&lt;/STRONG&gt; is that runtime, delivered as an Azure Native product:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Ray, productionized&lt;/STRONG&gt; — the open‑source distributed compute standard for AI, hardened with the Anyscale Runtime, a managed control plane, and observability designed for foundation‑model‑scale workloads.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;One runtime, the full AI lifecycle&lt;/STRONG&gt; — data preparation, training, fine‑tuning, reinforcement learning, inference, and agentic workloads in a single Python program, on a single substrate, with no cross‑system glue.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Inside your Azure tenant, on the AKS you already run&lt;/STRONG&gt; — customer‑owned data, customer‑owned models, customer‑owned governance. Entra identity, Azure RBAC, Private Link, Activity Log audit, and customer‑managed keys end to end.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;One Azure invoice&lt;/STRONG&gt; — usage‑based pricing through the Marketplace with MACC drawdown; no parallel procurement, no second vendor contract.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If your team is wrestling with GPU utilization, fragmented data‑to‑serving stacks, training jobs that exceed any single region's capacity, or hosted‑API costs that scale faster than your usage — this is the runtime built for that problem.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Try it now&amp;nbsp;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;Provision your first &lt;A class="lia-external-url" href="https://aka.ms/AoA/PortalCreate" target="_blank" rel="noopener" data-lia-auto-title-active="1"&gt;Anyscale Cloud&lt;/A&gt; by navigating to the Azure portal. Click on "Create" to begin creating the Anyscale cloud resource and link the necessary Azure resources.&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;Create &lt;/EM&gt;&lt;EM&gt;your Anyscale Cloud directly from Azure Portal.&lt;/EM&gt;&lt;/img&gt;&lt;img&gt;&lt;EM&gt;Attach an existing AKS cluster. Configure Storage and ACR Azure resources.&lt;/EM&gt;&lt;/img&gt;&lt;img&gt;&lt;EM&gt;Click on "Launch Anyscale" to navigate to the Anyscale console.&lt;/EM&gt;&lt;/img&gt;
&lt;P&gt;Explore the &lt;A href="https://aka.ms/docs/AoAQuickstart" target="_blank" rel="noopener"&gt;quickstart guides &lt;/A&gt;and &lt;A class="lia-external-url" href="https://aka.ms/docs/anyscale-on-azure" target="_blank" rel="noopener"&gt;documentation&lt;/A&gt;&amp;nbsp;on Microsoft Learn to get started. For architectural deep‑dives, capacity planning, or a hands‑on workshop with the Anyscale on Azure solution architects, reach out through your Microsoft account team.&lt;/P&gt;
&lt;P&gt;Deepen your expertise&lt;STRONG&gt; &lt;/STRONG&gt;and deep dive on best practices in the upcoming virtual webinar. &lt;A class="lia-external-url" href="https://www.anyscale.com/events/2026/06/16/anyscale-on-azure" target="_blank" rel="noopener"&gt;Register here.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The infrastructure for the next decade of enterprise AI is here. Build on it.&lt;/STRONG&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN class="lia-text-color-15"&gt;Links and Resources&lt;/SPAN&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.prnewswire.com/news-releases/anyscale-launches-on-microsoft-azure-as-a-native-integration-for-enterprises-to-build-sovereign-ai-and-take-control-of-variable-api-costs-302787635.html" target="_blank" rel="noopener"&gt;Press Release: Anyscale Launches on Microsoft Azure as a Native Integration for Enterprises &lt;/A&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzureLaunchBlog" target="_blank" rel="noopener"&gt;Announcing Anyscale on Azure public preview: Powered by Ray on AKS&lt;/A&gt;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleAzureFriday" target="_blank" rel="noopener"&gt;Youtube Video: Anyscale on Azure: Scale Python AI workloads with managed Ray on AKS&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzure" target="_blank" rel="noopener"&gt;Azure on Anyscale overview&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoAArchitecture" target="_blank" rel="noopener"&gt;Architecture&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A style="font-style: normal; font-weight: 400; background-color: rgb(255, 255, 255);" href="https://aka.ms/AoA/PortalCreate" target="_blank" rel="noopener"&gt;Create an Anyscale Cloud in Azure Portal&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzurePricing" target="_blank" rel="noopener"&gt;Pricing&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoASupport" target="_blank" rel="noopener"&gt;Support model&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoALegal" target="_blank" rel="noopener"&gt;Terms and Conditions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://aka.ms/docs/AoAFAQ" target="_blank" rel="noopener"&gt;Frequently asked questions&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 20:56:02 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/anyscale-on-azure-powering-enterprise-ai-at-massive-scale-on/ba-p/4523806</guid>
      <dc:creator>bobmital</dc:creator>
      <dc:date>2026-06-02T20:56:02Z</dc:date>
    </item>
    <item>
      <title>Announcing Go support in Azure Functions (Preview)</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-go-support-in-azure-functions-preview/ba-p/4523801</link>
      <description>&lt;P data-line="2"&gt;We're excited to announce that&amp;nbsp;&lt;STRONG&gt;Azure Functions now supports Go as a first-class language&lt;/STRONG&gt;, available today in public preview on the&amp;nbsp;&lt;STRONG&gt;Flex Consumption&lt;/STRONG&gt;&amp;nbsp;plan. Go developers can now build event-driven, serverless applications using idiomatic Go, the standard toolchain they already love, and the full breadth of Azure Functions triggers, bindings, and operational capabilities.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P data-line="4"&gt;TL;DR: Write Functions in Go using a new code-first programming model and SDK (&lt;A href="https://github.com/Azure/azure-functions-golang-worker" target="_blank" rel="noopener" data-href="https://github.com/Azure/azure-functions-golang-worker"&gt;azure-functions-golang-worker&lt;/A&gt;). Use triggers across HTTP, Timer, Service Bus, Event Hubs, Event Grid, Cosmos DB, and Blob Storage.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2 data-line="6"&gt;Why Go on Azure Functions&lt;/H2&gt;
&lt;P data-line="8"&gt;Go has become a default choice for cloud-native APIs, platform services, networking tools, and high-throughput integration workloads. Until now, teams that standardized on Go on Azure had to either:&lt;/P&gt;
&lt;UL data-line="10"&gt;
&lt;LI data-line="10"&gt;Use Azure Functions through the&amp;nbsp;custom handlers&amp;nbsp;protocol, missing out on a first-class developer experience, or&lt;/LI&gt;
&lt;LI data-line="11"&gt;Build and operate their own serving, scaling, and eventing infrastructure on containers or VMs.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="13"&gt;With first-class Go support, those teams get the&amp;nbsp;&lt;STRONG&gt;productivity of Go&lt;/STRONG&gt;&amp;nbsp;plus the&amp;nbsp;&lt;STRONG&gt;operational leverage of serverless&lt;/STRONG&gt;: automatic scaling, pay-per-use billing, integrated triggers across the Azure ecosystem, and built-in observability, without leaving the Go ecosystem.&lt;/P&gt;
&lt;H2 data-line="15"&gt;What's in the preview&lt;/H2&gt;
&lt;UL data-line="17"&gt;
&lt;LI data-line="17"&gt;&lt;STRONG&gt;A new Go programming model and SDK&lt;/STRONG&gt;: a code-first, idiomatic way to register Functions and declare triggers using functional options.&lt;/LI&gt;
&lt;LI data-line="18"&gt;&lt;STRONG&gt;Support for popular triggers&lt;/STRONG&gt;: HTTP, Timer, Service Bus (queues and topics), Event Hubs, Event Grid, Cosmos DB, and Blob Storage. More to come.&lt;/LI&gt;
&lt;LI data-line="19"&gt;&lt;STRONG&gt;Native Go build pipeline&lt;/STRONG&gt;:&amp;nbsp;go build&amp;nbsp;produces a single static binary that the Functions host invokes directly. No&amp;nbsp;function.json, no interop shims at request time.&lt;/LI&gt;
&lt;LI data-line="20"&gt;&lt;STRONG&gt;Integrated observability&lt;/STRONG&gt;: Application Insights logging, metrics, and distributed tracing.&lt;/LI&gt;
&lt;LI data-line="21"&gt;&lt;STRONG&gt;End-to-end tooling&lt;/STRONG&gt;: local development with a preview build of Azure Functions Core Tools. Deployment via Core Tools, zip deploy, or GitHub Actions.&lt;/LI&gt;
&lt;LI data-line="22"&gt;&lt;STRONG&gt;Flex Consumption&lt;/STRONG&gt;: fast elastic scale, scale-to-zero, per-second billing, VNet integration, and always-ready instances.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="24"&gt;A quick look at the programming model&lt;/H2&gt;
&lt;P data-line="26"&gt;The Go model is&amp;nbsp;&lt;STRONG&gt;code-first&lt;/STRONG&gt;: you register functions and declare triggers in Go, with compile-time checks and full IDE support. No separate JSON metadata to keep in sync.&lt;/P&gt;
&lt;P data-line="28"&gt;Here's a minimal HTTP-triggered Function:&lt;/P&gt;
&lt;LI-CODE lang="go"&gt;package main

import (
	"fmt"
	"net/http"

	"github.com/azure/azure-functions-golang-worker/sdk"
	"github.com/azure/azure-functions-golang-worker/worker"
)

func main() {
	app := sdk.FunctionApp()

	app.HTTP("hello", hello,
		sdk.WithMethods("GET", "POST"),
		sdk.WithAuth("anonymous"),
	)

	worker.Start(app)
}

func hello(w http.ResponseWriter, r *http.Request) {
	name := r.URL.Query().Get("name")
	if name == "" {
		name = "world"
	}
	fmt.Fprintf(w, "Hello, %s!", name)
}&lt;/LI-CODE&gt;
&lt;P data-line="61"&gt;Notice the HTTP handler is a plain&amp;nbsp;http.HandlerFunc, the same signature you'd use with&amp;nbsp;net/http&amp;nbsp;or any Go web framework. There's nothing Functions-specific to learn at the handler level.&lt;/P&gt;
&lt;H3 data-line="63"&gt;Registering other triggers&lt;/H3&gt;
&lt;P data-line="65"&gt;The same pattern works across triggers. Non-HTTP handlers take a context.Context plus a typed payload:&lt;/P&gt;
&lt;LI-CODE lang="go"&gt;import (
    "context"
    "log"

    "github.com/azure/azure-functions-golang-worker/sdk"
    "github.com/azure/azure-functions-golang-worker/sdk/bindings"
)

// Timer: runs every 10 seconds
func onTimer(ctx context.Context, t bindings.TimerInfo) error {
    log.Printf("timer fired; past due=%v", t.IsPastDue)
    return nil
}
app.Timer("cleanup", onTimer,
    sdk.WithSchedule("*/10 * * * * *"),
)

// Service Bus queue
func onOrder(ctx context.Context, msg bindings.ServiceBusMessage) error {
    log.Printf("order %s: %s", msg.MessageId, string(msg.Body))
    return nil
}
app.ServiceBusQueue("processOrder", onOrder,
    sdk.WithQueueName("orders"),
    sdk.WithConnection("ServiceBusConnection"),
)

// Event Hubs
func onEvent(ctx context.Context, e bindings.EventHubMessage) error {
    log.Printf("event seq=%d body=%s", e.SequenceNumber, string(e.Body))
    return nil
}
app.EventHub("ingest", onEvent,
    sdk.WithEventHubName("telemetry"),
    sdk.WithConnection("EventHubConnection"),
)

// Cosmos DB change feed
func onChange(ctx context.Context, docs []bindings.CosmosDocument) error {
    for _, d := range docs {
        log.Printf("doc %s: %s", d.ID, string(d.Data))
    }
    return nil
}
app.CosmosDB("onChange", onChange,
    sdk.WithDatabase("ToDoList"),
    sdk.WithContainer("Items"),
    sdk.WithConnection("CosmosDBConnection"),
)

// Event Grid
func onGridEvent(ctx context.Context, e bindings.EventGridEvent) error {
    log.Printf("%s: %s", e.EventType, e.Subject)
    return nil
}
app.EventGrid("onEvent", onGridEvent)&lt;/LI-CODE&gt;
&lt;H3 data-line="126"&gt;Extension triggers: real Azure SDK clients&lt;/H3&gt;
&lt;P data-line="128"&gt;For triggers like Blob Storage, the Go SDK injects a fully-typed Azure SDK client directly into your handler. You opt in with a blank import, so your binary only includes the extensions you actually use:&lt;/P&gt;
&lt;LI-CODE lang="go"&gt;import (
    "context"
    "io"
    "log"

    "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
    "github.com/azure/azure-functions-golang-worker/sdk"
    _ "github.com/azure/azure-functions-golang-worker/triggers/blob" // registers blob trigger client factory
    "github.com/azure/azure-functions-golang-worker/worker"
)

func onUpload(ctx context.Context, client *blob.Client) error {
    log.Printf("blob: %s", client.URL())
    resp, err := client.DownloadStream(ctx, nil)
    if err != nil {
        return err
    }
    defer resp.Body.Close()
    data, err := io.ReadAll(resp.Body)
    if err != nil {
        return err
    }
    log.Printf("size=%d", len(data))
    return nil
}

app.Blob("onUpload", onUpload,
    sdk.WithPath("uploads/{name}"),
    sdk.WithConnection("AzureWebJobsStorage"),
    sdk.WithSource("EventGrid"),
)&lt;/LI-CODE&gt;
&lt;P data-line="164"&gt;The handler receives a&amp;nbsp;*blob.Client&amp;nbsp;from&amp;nbsp;github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob, the same client you'd use in any other Go app. Because it's a real SDK client, you can&amp;nbsp;DownloadStream&amp;nbsp;blobs of any size without buffering the whole payload through the worker. Dependencies stay isolated per extension, so apps that don't use Blob never pull in&amp;nbsp;azblob&amp;nbsp;or&amp;nbsp;azidentity.&lt;/P&gt;
&lt;H2 data-line="166"&gt;Project layout&lt;/H2&gt;
&lt;P data-line="168"&gt;A Go function app is just a regular Go module plus the standard Functions config files:&lt;/P&gt;
&lt;LI-CODE lang=""&gt;my-function-app/
├── host.json
├── local.settings.json
├── go.mod
├── go.sum
└── main.go&lt;/LI-CODE&gt;
&lt;P data-line="179"&gt;No&amp;nbsp;function.json&amp;nbsp;and no generated metadata. Triggers are declared in&amp;nbsp;main.go.&amp;nbsp;go build,&amp;nbsp;go test, and&amp;nbsp;go mod tidy&amp;nbsp;all just work.&lt;/P&gt;
&lt;H2 data-line="181"&gt;Get started&lt;/H2&gt;
&lt;UL data-line="183"&gt;
&lt;LI data-line="183"&gt;&lt;A class="lia-external-url" href="https://aka.ms/azure-functions-go-quickstart" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Quickstart&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;Install the preview tooling, scaffold your first Go function app, run it locally, and deploy to Flex Consumption.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="186"&gt;We can't wait to see what you build. Welcome to Functions, Gophers.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 20:46:42 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-go-support-in-azure-functions-preview/ba-p/4523801</guid>
      <dc:creator>AnthonyChu</dc:creator>
      <dc:date>2026-06-02T20:46:42Z</dc:date>
    </item>
    <item>
      <title>Introducing the Azure Functions serverless agents runtime (preview)</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-the-azure-functions-serverless-agents-runtime/ba-p/4523804</link>
      <description>&lt;P data-line="2"&gt;We're thrilled to announce the&amp;nbsp;&lt;STRONG&gt;Azure Functions serverless agents runtime&lt;/STRONG&gt;, now in public preview. It brings a new,&amp;nbsp;&lt;STRONG&gt;markdown-first programming model&lt;/STRONG&gt;&amp;nbsp;for building AI agents as a first-class workload on Azure Functions, with the event-driven triggers, scale-to-zero economics, and operational integrations you know and love from the platform.&lt;/P&gt;
&lt;P data-line="4"&gt;A few things you could build in a matter of minutes:&lt;/P&gt;
&lt;UL data-line="6"&gt;
&lt;LI data-line="6"&gt;&lt;STRONG&gt;A daily briefing agent&lt;/STRONG&gt;&amp;nbsp;that wakes up on a timer, scours the web, and drops a summary in your Outlook inbox every morning.&lt;/LI&gt;
&lt;LI data-line="7"&gt;&lt;STRONG&gt;A Teams chat agent&lt;/STRONG&gt;&amp;nbsp;that triggers on every message and answers your team's questions, looking up data across your connected systems.&lt;/LI&gt;
&lt;LI data-line="8"&gt;&lt;STRONG&gt;An on-call troubleshooting agent&lt;/STRONG&gt;&amp;nbsp;that investigates incidents by querying logs in Azure Data Explorer and reports back what it found.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="10"&gt;Each one is a single markdown file with instructions plus a trigger, and deployed like any other function app and running on the Flex Consumption plan.&lt;/P&gt;
&lt;H2 data-line="12"&gt;Why a serverless agents runtime&lt;/H2&gt;
&lt;P data-line="14"&gt;Building production agents today usually means stitching together a framework, a hosting layer, message queues, identity, secrets, observability, and a long list of per-service integrations. Most of that work is plumbing, not the agent.&lt;/P&gt;
&lt;P data-line="16"&gt;Azure Functions has spent years making event-driven compute simple: declare a trigger, write the handler, get autoscale and managed identity for free. The serverless agents runtime applies that same model to agents:&lt;/P&gt;
&lt;UL data-line="18"&gt;
&lt;LI data-line="18"&gt;&lt;STRONG&gt;Agents are the unit of work.&lt;/STRONG&gt;&amp;nbsp;You define behavior in natural language, not boilerplate.&lt;/LI&gt;
&lt;LI data-line="19"&gt;&lt;STRONG&gt;Trigger agents from almost any event.&lt;/STRONG&gt;&amp;nbsp;HTTP requests, timers, queues, database changes, Teams messages, Outlook mail, and more.&lt;/LI&gt;
&lt;LI data-line="20"&gt;&lt;STRONG&gt;Tools, MCP servers, connectors, and sandboxed execution are declared, not coded.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI data-line="21"&gt;&lt;STRONG&gt;Deploy and operate like any function app.&lt;/STRONG&gt;&amp;nbsp;Flex Consumption for scale-to-zero and per-second billing, managed identity, VNet integration, Application Insights, and the same deployment tools you already use.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="23"&gt;Markdown-first: what an agent looks like&lt;/H2&gt;
&lt;P data-line="25"&gt;An agent is a .agent.md file. Your app can have multiple agents, each with its own metadata that declares the trigger. The markdown body becomes the agent's instructions.&lt;/P&gt;
&lt;P data-line="27"&gt;Here's a timer-triggered agent that summarizes the day's tech news and emails it:&lt;/P&gt;
&lt;LI-CODE lang="markdown"&gt;---
name: Daily Tech News Email
description: Fetches top tech news and emails a summary daily.

trigger:
  type: timer_trigger
  args:
    schedule: "0 0 15 * * *"
---

You are a news assistant. When triggered, do the following:

1. Scour the web for today's top tech news headlines. Use reputable sources;
   Include links to the original articles.
2. Summarize the top stories in a concise, well-formatted HTML email body.
3. Email the summary to $TO_EMAIL with the subject "Daily Tech News Summary"
   followed by today's date.&lt;/LI-CODE&gt;
&lt;P data-line="49"&gt;That's the whole function. Drop the file into your app, deploy, and it runs on the schedule. No framework wiring, no service-specific integration code.&lt;/P&gt;
&lt;P data-line="51"&gt;Your agents can share configuration and capabilities through a few files alongside the agent definitions. agents.config.yaml declares system tools and the default model. mcp.json lists the MCP servers your agents can call, including MCP-enabled Azure connections. A /tools folder holds custom Python tools and a /skills folder holds reusable prompt fragments. Everything here is optional and available to every agent automatically when present.&lt;/P&gt;
&lt;P data-line="53"&gt;In this example, the agent uses a Container Apps dynamic session to browse the web with Playwright, and a Microsoft Office 365 connection (exposed as an MCP server) to send the email:&lt;/P&gt;
&lt;LI-CODE lang="yaml"&gt;# agents.config.yaml
system_tools:
  dynamic_sessions_code_interpreter:
    endpoint: $ACA_SESSION_POOL_ENDPOINT

model: $AZURE_OPENAI_DEPLOYMENT&lt;/LI-CODE&gt;&lt;LI-CODE lang="json"&gt;// mcp.json
{
  "servers": {
    "office365": {
      "type": "http",
      "url": "$MICROSOFT_365_CONNECTION_MCP_ENDPOINT",
      "auth": {
        "scope": "https://apihub.azure.com/.default"
      }
    }
  }
}&lt;/LI-CODE&gt;
&lt;P data-line="79"&gt;The function app's managed identity authenticates to the connection's MCP endpoint, so there are no secrets to manage. Any Azure connector that supports MCP, or any remote MCP server, can be added the same way.&lt;/P&gt;
&lt;P data-line="81"&gt;Any of these global settings can be overridden per agent in the agent's metadata.&lt;/P&gt;
&lt;H2 data-line="83"&gt;What you get in the preview&lt;/H2&gt;
&lt;UL data-line="85"&gt;
&lt;LI data-line="85"&gt;&lt;STRONG&gt;Triggers across the Azure Functions catalog.&lt;/STRONG&gt;&amp;nbsp;HTTP, Timer, Queue, Service Bus, Event Hubs, Cosmos DB, Blob, Event Grid, plus new connection-backed triggers like Teams messages, Outlook mail, and calendar events.&lt;/LI&gt;
&lt;LI data-line="86"&gt;&lt;STRONG&gt;1,400+ Azure connectors as tools.&lt;/STRONG&gt;&amp;nbsp;Create a connection, enable its MCP endpoint, and an agent can send mail, post to Teams, create records, query data, all without integration code or auth plumbing.&lt;/LI&gt;
&lt;LI data-line="87"&gt;&lt;STRONG&gt;Any remote MCP server as tools.&lt;/STRONG&gt;&amp;nbsp;Use any remote MCP server.&lt;/LI&gt;
&lt;LI data-line="88"&gt;&lt;STRONG&gt;Sandboxed code and browser automation.&lt;/STRONG&gt;&amp;nbsp;Run code or a Playwright-powered browser in Azure Container Apps dynamic sessions, isolated per agent session.&lt;/LI&gt;
&lt;LI data-line="89"&gt;&lt;STRONG&gt;Built-in chat UI, HTTP API, and MCP server endpoint&lt;/STRONG&gt;&amp;nbsp;with no extra code.&lt;/LI&gt;
&lt;LI data-line="90"&gt;&lt;STRONG&gt;Custom Python tools&lt;/STRONG&gt;&amp;nbsp;in a&amp;nbsp;tools/&amp;nbsp;folder and&amp;nbsp;&lt;STRONG&gt;reusable skills&lt;/STRONG&gt;&amp;nbsp;in a&amp;nbsp;skills/&amp;nbsp;folder, shared across agents.&lt;/LI&gt;
&lt;LI data-line="91"&gt;&lt;STRONG&gt;Pluggable model providers.&lt;/STRONG&gt; Microsoft Foundry, Azure OpenAI, and OpenAI out of the box.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="93"&gt;Where this fits&lt;/H2&gt;
&lt;P data-line="95"&gt;The serverless agents runtime is designed for the agents most enterprises actually need to build:&lt;/P&gt;
&lt;UL data-line="97"&gt;
&lt;LI data-line="97"&gt;&lt;STRONG&gt;Scheduled background agents&lt;/STRONG&gt;&amp;nbsp;that summarize, monitor, or reconcile on a timer.&lt;/LI&gt;
&lt;LI data-line="98"&gt;&lt;STRONG&gt;Event-driven assistants&lt;/STRONG&gt;&amp;nbsp;that react to messages, emails, alerts, and database changes.&lt;/LI&gt;
&lt;LI data-line="99"&gt;&lt;STRONG&gt;Cross-system agents&lt;/STRONG&gt;&amp;nbsp;that tie multiple SaaS and enterprise apps together through connections. Trigger with a Teams message, look up the customer in Salesforce, send an email, and update a database record, all from one agent.&lt;/LI&gt;
&lt;LI data-line="100"&gt;&lt;STRONG&gt;Conversational front-ends&lt;/STRONG&gt;&amp;nbsp;that pair an HTTP or chat-UI entry point with the same agents your event triggers invoke.&lt;/LI&gt;
&lt;LI data-line="101"&gt;&lt;STRONG&gt;Agents as MCP servers&lt;/STRONG&gt;&amp;nbsp;that other agents and MCP clients can integrate with directly.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="103"&gt;We want your feedback&lt;/H2&gt;
&lt;P data-line="105"&gt;The serverless agents runtime is in public preview, and we're actively building it out with input from real customer workloads. Tell us what you build, what's missing, and where the model should go next.&lt;/P&gt;
&lt;H2 data-line="107"&gt;Get started&lt;/H2&gt;
&lt;P data-line="109"&gt;&lt;STRONG&gt;Docs:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="https://aka.ms/azure-functions-agents-docs" target="_blank" rel="noopener" data-href="https://aka.ms/azure-functions-agents-docs"&gt;aka.ms/azure-functions-agents-docs&lt;/A&gt;&lt;/P&gt;
&lt;P data-line="111"&gt;Building agents on Azure Functions has never been easier. We can't wait to see what you create with the serverless agents runtime!&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 22:23:58 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-the-azure-functions-serverless-agents-runtime/ba-p/4523804</guid>
      <dc:creator>AnthonyChu</dc:creator>
      <dc:date>2026-06-02T22:23:58Z</dc:date>
    </item>
    <item>
      <title>Azure Functions MCP Extension: What's New at Build 2026</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-functions-mcp-extension-what-s-new-at-build-2026/ba-p/4524099</link>
      <description>&lt;P&gt;The Azure Functions MCP extension has had a breakout year! Since its initial preview, the extension has grown from a single trigger type into a full-featured platform for building remote MCP servers: with tool, resource, and prompt triggers across multiple languages, MCP Apps for interactive UIs, built-in MCP authentication, and feature enhancements. Here's what's new and what it means for developers building MCP servers on Azure Functions.&lt;/P&gt;
&lt;H3&gt;The full MCP primitive set: Tools, resources, and prompts&lt;/H3&gt;
&lt;P&gt;When the MCP extension first shipped, it supported tool triggers. Declare a function as an MCP tool, and any MCP client can discover and call it. That was the starting point.&lt;/P&gt;
&lt;P&gt;Since then, we've shipped the remaining MCP primitives:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Resource triggers: expose a function as an &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-mcp-resource-trigger" target="_blank" rel="noopener"&gt;MCP resource&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Prompt triggers: expose a function as an &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-mcp-prompt-trigger" target="_blank" rel="noopener"&gt;MCP prompt&lt;/A&gt;, letting clients request structured prompt templates from your server.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Like tool triggers, resource and prompt triggers are supported in multiple languages including .NET, Java, Python, TypeScript, and JavaScript.&lt;/P&gt;
&lt;H3&gt;MCP Apps: interactive UI from your MCP server&lt;/H3&gt;
&lt;P&gt;&lt;A href="https://modelcontextprotocol.io/extensions/apps/overview" target="_blank" rel="noopener"&gt;MCP Apps&lt;/A&gt; let your tools return interactive user interfaces instead of plain text. Combine tool triggers with resource triggers, and your MCP server can serve rich, rendered experiences to MCP-aware clients.&lt;/P&gt;
&lt;P&gt;The Azure Functions MCP extension supports MCP Apps natively, meaning the same function app that exposes tools and resources can also serve UI components. The launch blog post on the &lt;A href="https://techcommunity.microsoft.com/blog/appsonazureblog/building-mcp-apps-with-azure-functions-mcp-extension/4496536" target="_blank" rel="noopener" data-lia-auto-title=" Azure Apps Blog " data-lia-auto-title-active="0"&gt;Azure Apps Blog &lt;/A&gt;walked through the pattern in detail.&lt;/P&gt;
&lt;P&gt;For .NET developers, the new fluent builder API (available in the &lt;A href="https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Mcp" target="_blank" rel="noopener"&gt;latest NuGet release&lt;/A&gt;) makes it easier to compose MCP Apps by chaining tool and resource definitions in a declarative style.&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;MCP Apps allow servers to return results in customize, interactive UIs that users can directly interact with in compatible clients.&lt;/EM&gt;&lt;/img&gt;
&lt;H3&gt;MCP authentication&lt;/H3&gt;
&lt;P&gt;The extension supports &lt;A href="https://learn.microsoft.com/en-us/azure/app-service/configure-authentication-mcp" target="_blank" rel="noopener"&gt;built-in MCP authentication&lt;/A&gt;, implementing the requirements of the MCP auth spec. All samples in the &lt;A href="https://aka.ms/remote-mcp" target="_blank" rel="noopener"&gt;aka.ms/remote-mcp&lt;/A&gt; repo enable built-in MCP auth by default with Microsoft Entra ID as the identity provider.&lt;/P&gt;
&lt;P&gt;Samples have also been updated to demonstrate how to exchange tokens in the On-Behalf-Of (OBO) flow, so your MCP tools can access downstream APIs using the invoking user's identity.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Auth configuration in the Azure portal:&lt;/STRONG&gt; Preview at Build is a one-click experience in the Azure portal for configuring built-in MCP auth. No more manual app registration creating, configuration and wiring to the server. Just open your server app on the portal and click to enable MCP auth. &lt;A class="lia-external-url" href="https://aka.ms/portal-mcp-auth-config" target="_blank"&gt;Try it out&lt;/A&gt;!&lt;/P&gt;
&lt;H3&gt;Feature enhancements&lt;/H3&gt;
&lt;P&gt;Beyond the headline primitives and auth, the extension has shipped a steady stream of capabilities the past few months. The following are the notable additions.&lt;/P&gt;
&lt;H4&gt;Structured content&lt;/H4&gt;
&lt;P&gt;Structured content lets you return machine-readable JSON metadata alongside your tool's response via the `structuredContent` field. Clients that support it can programmatically consume the data (e.g. parse fields, render tables, drive downstream logic) rather than just displaying text. Clients that don't support it still get the regular content blocks as a fallback.&lt;/P&gt;
&lt;H4&gt;Rich content types&lt;/H4&gt;
&lt;P&gt;Tools aren't limited to returning plain text. The extension supports the full set of MCP content block types, e.g. `TextContent`, `ImageContent`, `AudioContent`, `ResourceLink`, and `EmbeddedResource`, so your tools can return images, audio clips, references to resources, and inline file content alongside text.&lt;/P&gt;
&lt;H4&gt;Input and output schemas&lt;/H4&gt;
&lt;P&gt;`WithInputSchema` and `WithOutputSchema` give you explicit control over the JSON schemas advertised for your tools. This is especially useful when the auto-generated schema from function parameters doesn't capture the full contract. For example, when your tool accepts a complex nested object or returns a specific shape that clients depend on. Input and output schemas are currently supported in .NET, with support for other languages coming soon.&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;builder.ConfigureMcpTool("SearchDocs") .WithOutputSchema(""" { "type": "object", "properties": { "results": { "type": "array", "items": { "type": "string" } }, "query": { "type": "string" } }, "required": ["results", "query"] } """);&lt;/LI-CODE&gt;
&lt;H4&gt;Fluent configuration APIs in .NET&lt;/H4&gt;
&lt;P&gt;A set of fluent builder APIs that let you configure MCP primitives declaratively in `Program.cs`:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ConfigureMcpTool:&lt;/STRONG&gt; add properties, metadata, input/output schemas, or promote a tool to an MCP App&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ConfigureMcpResource&lt;/STRONG&gt;: attach metadata to resources&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ConfigureMcpPrompt&lt;/STRONG&gt;: define prompt arguments and metadata&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="csharp"&gt;builder.ConfigureMcpTool("sayhello") .WithProperty("name", McpToolPropertyType.String, "Name of the user", required: true) .WithMetadata("ui", new { resourceUri = "ui://index.html" });&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;What's next&lt;/H3&gt;
&lt;P&gt;Usage of the MCP extension has grown steadily since its preview launch. Tool execution volume has &lt;STRONG&gt;increased 15x&lt;/STRONG&gt; over the past several months as more customers move from experimentation to production. As adoption grows, so do the expectations. Developers building production MCP servers are hitting real friction around auth complexity, client configuration, and observability. We're continuing to invest in the extension to address these gaps and help customers be more successful building and hosting MCP servers on Azure Functions. Here's where we're focusing next.&lt;/P&gt;
&lt;H4&gt;Continued auth simplification&lt;/H4&gt;
&lt;P&gt;Auth remains the biggest barrier to getting an MCP server into production. We'll work on:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Smoother client setup: making it easier to connect any MCP client to an authenticated Azure Functions MCP server, not just VS Code.&lt;/LI&gt;
&lt;LI&gt;Simplified OBO flow: streamlining the experience of On-Behalf-Of authentication so developers can delegate user identity to downstream services with less configuration.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Our goal: the secure path should be the easy path.&lt;/P&gt;
&lt;H4&gt;Deeper integration with Microsoft Foundry&lt;/H4&gt;
&lt;P&gt;We'll build tighter integration between Azure Functions MCP servers and Microsoft Foundry. This includes surfacing MCP servers in &lt;A href="https://learn.microsoft.com/azure/foundry/agents/how-to/tools/toolbox" target="_blank" rel="noopener"&gt;Foundry Toolbox&lt;/A&gt;, a new feature introduced to help Foundry agents discover and consume tools from a single endpoint. Developers will be able to publish an MCP server from Functions and have it available to Foundry agents through Toolbox without manual endpoint configuration.&lt;/P&gt;
&lt;H4&gt;Continued feature enhancement&lt;/H4&gt;
&lt;P&gt;We prioritize based on feedback from the community raised in our &lt;A href="https://github.com/Azure/azure-functions-mcp-extension/issues" target="_blank" rel="noopener"&gt;GitHub repo&lt;/A&gt;. For example, support for streaming output and pagination are top items in our backlog today based on user demand.&lt;/P&gt;
&lt;P&gt;We also track the MCP spec's evolution closely and will continue shipping support for strategic features as they land. Examples of proposals we're following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;MCP Tasks&lt;/STRONG&gt;: the &lt;A class="lia-external-url" href="https://modelcontextprotocol.io/seps/2663-tasks-extension" target="_blank"&gt;Tasks extension&lt;/A&gt; (SEP-2663) defines a standard pattern for async, long-running tool calls with durable task handles. This replaces hand-rolled polling patterns and aligns well with Functions' execute-and-return model.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Stateless MCP&lt;/STRONG&gt;:&amp;nbsp;&lt;A href="https://modelcontextprotocol.io/seps/2575-stateless-mcp" target="_blank" rel="noopener"&gt;SEP-2575&lt;/A&gt;&amp;nbsp;proposes removing the mandatory initialization handshake, which is a natural fit for serverless platforms like Azure Functions where fresh instances can handle any request.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Have something you'd like us to prioritize? Let us know by filing a request on &lt;A href="https://github.com/Azure/azure-functions-mcp-extension/issues" target="_blank" rel="noopener"&gt;GitHub&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;Get started&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Samples: Samples showcasing most up-to-date features: &lt;A href="https://aka.ms/remote-mcp" target="_blank" rel="noopener"&gt;aka.ms/remote-mcp&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Documentation: &lt;A href="https://learn.microsoft.com/azure/azure-functions/functions-bindings-mcp" target="_blank" rel="noopener"&gt;Model Context Protocol for Azure Functions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;MCP Extension GitHub repo: &lt;A href="https://github.com/Azure/azure-functions-mcp-extension" target="_blank" rel="noopener"&gt;Azure Functions MCP Extension&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 21:02:12 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-functions-mcp-extension-what-s-new-at-build-2026/ba-p/4524099</guid>
      <dc:creator>lily-ma</dc:creator>
      <dc:date>2026-06-02T21:02:12Z</dc:date>
    </item>
    <item>
      <title>Introducing On-demand Sandboxes for Azure Durable Task Scheduler (Private Preview)</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-on-demand-sandboxes-for-azure-durable-task-scheduler/ba-p/4522333</link>
      <description>&lt;P&gt;Maybe it needs a native toolchain. Maybe it runs untrusted customer or LLM-generated code. Maybe it needs Python from a .NET orchestrator, or bursty compute that should scale to zero when the work is done.&lt;/P&gt;
&lt;P&gt;Today, we're thrilled to announce&lt;STRONG&gt; On-demand Sandboxes&lt;/STRONG&gt; &lt;STRONG&gt;for Azure Durable Task Scheduler&lt;/STRONG&gt;, now available in private preview. On-demand Sandboxes lets you move those individual workflow steps to managed, isolated compute while your orchestrator stays exactly where it is. Tell DTS which steps should run in isolation, provide a container image with the step code, and DTS handles provisioning, scaling, and teardown. No infrastructure to manage, no idle costs, no orchestrator changes.&lt;/P&gt;
&lt;H1&gt;&lt;A class="lia-external-url" href="https://forms.cloud.microsoft/r/wNCgttkBw3d" target="_blank" rel="noopener"&gt;Sign up for On-demand Sandboxes Private Preview Today →&lt;/A&gt;&lt;/H1&gt;
&lt;P&gt;&lt;STRONG&gt;Availability:&lt;/STRONG&gt; On-demand Sandboxes targets the &lt;STRONG&gt;standalone Durable Task SDKs&lt;/STRONG&gt;&amp;nbsp;used outside the Azure Functions host — for apps running on Azure Container Apps, Azure Kubernetes Service, App Service, or anywhere else you self-host. The private preview supports the&amp;nbsp;&lt;STRONG&gt;.NET&lt;/STRONG&gt;&amp;nbsp;and&amp;nbsp;&lt;STRONG&gt;Python&lt;/STRONG&gt;&amp;nbsp;Durable Task SDKs, with&amp;nbsp;&lt;STRONG&gt;additional language SDKs and Azure Functions support coming soon&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H2&gt;What is Azure Durable Task Scheduler?&lt;/H2&gt;
&lt;P&gt;The Durable Task Scheduler is a fully managed backend for durable execution on Azure. It can serve as the backend for a Durable Function App using the Durable Functions extension, or as the backend for an app leveraging the Durable Task SDKs in other compute environments, such as Azure Container Apps, Azure Kubernetes Service, or Azure App Service. For a deeper introduction, see the&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/durable-task/scheduler/durable-task-scheduler" target="_blank" rel="noopener"&gt;Durable Task Scheduler overview&lt;/A&gt;&amp;nbsp;or the full&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/durable-task/" target="_blank" rel="noopener"&gt;Durable Task documentation&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Why On-demand Sandboxes?&lt;/H2&gt;
&lt;P&gt;Most activities belong in-process. They're fast, simple, and co-located with your orchestrator. But sometimes you hit a step that doesn't fit: it needs a native binary, a different language runtime, per-invocation isolation, or bursty compute you don't want to keep warm. On-demand Sandboxes gives you a way to handle those exceptions without spinning up dedicated infrastructure or managing scaling policies in Azure Kubernetes Service or Azure Container Apps.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Activity-level granularity.&lt;/STRONG&gt;&amp;nbsp;Move individual steps to managed compute, not your whole app.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Per-activity or per-invocation isolation.&lt;/STRONG&gt;&amp;nbsp;Each execution runs in a clean, microVM-backed sandbox. Ideal for untrusted code, customer plugins, or LLM-generated logic.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cross-runtime flexibility.&lt;/STRONG&gt;&amp;nbsp;Run a Python inference step from a .NET orchestrator. No compromise on either side.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Scale-to-zero.&lt;/STRONG&gt;&amp;nbsp;Pay for CPU and memory per second of execution, not infrastructure that waits.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;No orchestrator changes.&lt;/STRONG&gt;&amp;nbsp;Your orchestration code and hosting model don't change at all.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Here are a few scenarios where On-demand Sandboxes shines:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Native toolchains.&lt;/STRONG&gt;&amp;nbsp;Package ffmpeg, LibreOffice, or Pandoc in a container without dragging them into your main app.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;CPU-heavy preprocessing.&lt;/STRONG&gt;&amp;nbsp;OCR, layout extraction, or image processing can scale independently of the rest of your workflow.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cross-runtime workflows.&lt;/STRONG&gt;&amp;nbsp;A .NET orchestrator dispatches a Python inference step. No compromises.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sandboxed code execution.&lt;/STRONG&gt;&amp;nbsp;Run customer plugins or LLM-generated code with a clean boundary on every invocation.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Multi-tenant isolation.&lt;/STRONG&gt;&amp;nbsp;Tenant-specific steps get dedicated boundaries while everything else stays in-process.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Bursty event-driven workloads.&lt;/STRONG&gt; Steps that spike hard but rarely may not justify always-on infrastructure. Sub-second cold starts mean you get capacity when you need it without paying to keep it warm.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;How it works&lt;/H2&gt;
&lt;P&gt;On-demand Sandboxes uses a two-part model: a worker profile in your orchestrator app that tells DTS which activities to offload, and a worker image that contains those activity implementations. Your orchestrator still calls activities the same way it always has; the decision to run one activity in a sandbox lives in the profile configuration.&lt;/P&gt;
&lt;H3&gt;1. Declare a sandbox worker profile&lt;/H3&gt;
&lt;P&gt;In the app that hosts your orchestrator, define a sandbox worker profile. The profile gives DTS the container image, resource shape, concurrency setting, and activity names that should run in a sandbox:&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;using Microsoft.DurableTask.Worker.AzureManaged.Sandbox;

[SandboxWorkerProfile("code-executor")]
internal sealed class CodeSandboxWorkerProfile : ISandboxWorkerProfile
{
    public void Configure(SandboxOptions options)
    {
        options.ContainerImage = Environment.GetEnvironmentVariable("DTS_SANDBOX_IMAGE")
            ?? throw new InvalidOperationException("DTS_SANDBOX_IMAGE is required.");
        options.Cpu = "1000m";
        options.Memory = "2048Mi";
        options.MaxConcurrentActivities = 1;
        options.AddActivity(TaskNames.ExecuteCode);
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;Then enable on-demand sandbox discovery when you configure the Durable Task worker in the main app:&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;workerBuilder.AddTasks(tasks =&amp;gt; tasks.AddAllGeneratedTasks());
workerBuilder.UseDurableTaskScheduler(options =&amp;gt;
{
    options.EndpointAddress = Environment.GetEnvironmentVariable("DTS_ENDPOINT");
    options.TaskHubName = Environment.GetEnvironmentVariable("DTS_TASK_HUB");
    options.Credential = credential;
});
workerBuilder.EnableSandboxes();&lt;/LI-CODE&gt;
&lt;P&gt;Here's what the profile configuration does:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SandboxWorkerProfile:&lt;/STRONG&gt; a friendly profile id for this sandbox setup. It groups the activity, image, and resource settings for monitoring and reuse across deployments.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ContainerImage:&lt;/STRONG&gt;&amp;nbsp;the container image (from your registry) that contains the activity implementations.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cpu / Memory:&lt;/STRONG&gt;&amp;nbsp;the resource shape for each worker instance. Sized per your activity's needs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;MaxConcurrentActivities:&lt;/STRONG&gt;&amp;nbsp;how many activities a single worker instance can process concurrently.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;AddActivity:&lt;/STRONG&gt; the specific activity to offload. Only activities added to a sandbox worker profile execute in DTS-managed isolated compute; everything else stays in-process.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The orchestrator call site doesn't change:&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;ExecuteCodeOutput execution = await context.CallActivityAsync&amp;lt;ExecuteCodeOutput&amp;gt;(
    TaskNames.ExecuteCode,
    new ExecuteCodeInput(pythonCode, input.CsvData));&lt;/LI-CODE&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;ExecuteCode&lt;/STRONG&gt;&lt;/EM&gt; is not registered in the main app's in-process activity list. When the orchestrator calls it, DTS uses the &lt;EM&gt;&lt;STRONG&gt;codegen&lt;/STRONG&gt;&lt;/EM&gt; profile to route the work to the sandbox image.&lt;/P&gt;
&lt;H3&gt;2. Build the worker image&lt;/H3&gt;
&lt;P&gt;The worker image is a container you own. In most apps, this worker lives in a separate project from the orchestrator host so it can have its own entry point, dependencies, and container image. It registers the activity implementations it can run and opts in to managed execution with &lt;STRONG&gt;UseSandboxWorker()&lt;/STRONG&gt;:&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;builder.Services.AddDurableTaskWorker(workerBuilder =&amp;gt;
{
    workerBuilder.AddTasks(tasks =&amp;gt;
    {
        tasks.AddActivity&amp;lt;ExecuteCodeActivity&amp;gt;();
    });

    workerBuilder.UseSandboxWorker();
});&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;UseSandboxWorker() &lt;/STRONG&gt;is the key line. It signals that this worker runs in DTS-managed compute. The sandbox worker does not need to configure the DTS endpoint, task hub, profile id, or credentials; DTS injects the runtime settings when it starts the container.&lt;/P&gt;
&lt;P&gt;The activity implementations themselves are standard Durable Task activities. There's nothing special about the activity code: it can call a runtime with different dependencies, such as Python and pandas, while running in an isolated container instead of in your main app's process.&lt;/P&gt;
&lt;P&gt;Package the image like any containerized service, including whatever runtimes and native tools the activity needs. Push it to your container registry (e.g., Azure Container Registry) and reference the image in the worker profile's &lt;EM&gt;&lt;STRONG&gt;ContainerImage&lt;/STRONG&gt;&lt;/EM&gt; option.&lt;/P&gt;
&lt;H3 aria-level="3"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;View logs in the DTS dashboard&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:270,&amp;quot;335559739&amp;quot;:120}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;Once your sandbox activities are running, you can view their execution logs directly in the Durable Task Scheduler dashboard. The dashboard shows real-time output from your managed workers, including stdout, stderr, and activity lifecycle events. This gives you full visibility into what's happening inside the sandbox without needing to configure external log sinks or set up your own observability pipeline.&lt;/P&gt;
&lt;img /&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Demo&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;div data-video-id="https://youtu.be/vyBFFdQdwHs/1780269548429" data-video-remote-vid="https://youtu.be/vyBFFdQdwHs/1780269548429" class="lia-video-container lia-media-is-center lia-media-size-large"&gt;&lt;iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FvyBFFdQdwHs%3Ffeature%3Doembed&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DvyBFFdQdwHs&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FvyBFFdQdwHs%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" allowfullscreen="" style="max-width: 100%"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;H3 aria-level="2"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Get started&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:360,&amp;quot;335559739&amp;quot;:150,&amp;quot;335572071&amp;quot;:6,&amp;quot;335572072&amp;quot;:4,&amp;quot;335572073&amp;quot;:15917785,&amp;quot;335572075&amp;quot;:6,&amp;quot;335572076&amp;quot;:4,&amp;quot;335572077&amp;quot;:15917785,&amp;quot;335572079&amp;quot;:6,&amp;quot;335572080&amp;quot;:4,&amp;quot;335572081&amp;quot;:15917785,&amp;quot;335572083&amp;quot;:6,&amp;quot;335572084&amp;quot;:4,&amp;quot;335572085&amp;quot;:15917785,&amp;quot;469789798&amp;quot;:&amp;quot;none&amp;quot;,&amp;quot;469789802&amp;quot;:&amp;quot;none&amp;quot;,&amp;quot;469789806&amp;quot;:&amp;quot;single&amp;quot;,&amp;quot;469789810&amp;quot;:&amp;quot;none&amp;quot;}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;On-demand Sandboxes is in private preview. To get access, &lt;A href="https://forms.cloud.microsoft/r/wNCgttkBw3" target="_blank" rel="noopener"&gt;sign up here&lt;/A&gt;. We'll enable the feature on your scheduler and help you get your first sandbox activity running.&lt;/P&gt;
&lt;P&gt;Once you're in, the workflow is straightforward: declare a sandbox worker profile in your orchestrator app, build and push a worker image, and DTS takes care of the rest.&lt;/P&gt;
&lt;H1&gt;&lt;A href="https://forms.cloud.microsoft/r/wNCgttkBw3d" target="_blank" rel="noopener"&gt;Sign up for On-demand Sandboxes Private Preview Today →&lt;/A&gt;&lt;/H1&gt;
&lt;P&gt;&lt;STRONG&gt;Documentation:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/durable-task/scheduler/durable-task-scheduler" target="_blank" rel="noopener"&gt;Durable Task Scheduler overview&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Samples:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="https://github.com/Azure-Samples/Durable-Task-Scheduler" target="_blank" rel="noopener"&gt;Azure-Samples/Durable-Task-Scheduler&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pricing:&lt;/STRONG&gt;&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/durable-task/scheduler/durable-task-scheduler-billing" target="_blank" rel="noopener"&gt;Azure Durable Task Scheduler pricing&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Questions, feedback, or ideas?&amp;nbsp;&lt;A href="https://github.com/Azure-Samples/Durable-Task-Scheduler/issues" target="_blank" rel="noopener"&gt;Open an issue in the Durable-Task-Scheduler GitHub repo&lt;/A&gt;. We'd love to hear from you.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-on-demand-sandboxes-for-azure-durable-task-scheduler/ba-p/4522333</guid>
      <dc:creator>greenie-msft</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>Announcing Anyscale on Azure public preview: Powered by Ray on AKS</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-anyscale-on-azure-public-preview-powered-by-ray-on/ba-p/4523704</link>
      <description>&lt;H2&gt;&lt;STRONG&gt;What's new&amp;nbsp;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;The defining workload of the cloud era is no longer a web service or a database. It is a distributed AI training or inference job that needs thousands of GPUs, a coherent data plane, and a way for a handful of engineers to operate all of it without losing their weekends. Getting there is still harder than it should be. GPU capacity is fragmented across regions and SKUs, data is scattered across the lifecycle, and identity and credentials sprawl with every cluster a team adds.&lt;/P&gt;
&lt;P&gt;Today, I’m excited to announce the public preview of &lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzure" target="_blank" rel="noopener"&gt;&lt;STRONG&gt;Anyscale on Azure&lt;/STRONG&gt;&lt;/A&gt;, bringing Anyscale’s managed Ray platform and the Anyscale Runtime natively to Azure, all running on Azure Kubernetes Service (AKS). It is the fastest path I have seen from a single notebook to a multi-region distributed AI job, running on the AKS clusters your platform team already operates.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Bringing the power of Ray to Azure&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;When I talk with customers who are scaling AI on Kubernetes, the same three problems come up:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity is fragmented. &lt;/STRONG&gt;GPU supply lives across regions, SKUs, and quotas, and a single cluster is rarely enough to satisfy a serious training run.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data is stranded. &lt;/STRONG&gt;Training, fine-tuning, and inference each pull from different stores, in different formats, with different access patterns, and that gap quietly slows every team down.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Operations don’t scale. &lt;/STRONG&gt;Credentials, identity, observability, and upgrade paths pile up cluster by cluster until the platform team becomes the bottleneck.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Anyscale and Microsoft have been working together to solve all three of these challenges, and today that work is ready for customers to try in public preview.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;“At Anyscale, we’re building a company around Ray. Ray is the open-source distributed compute engine for scaling python and AI workloads. What we’re bringing with Anyscale is the production layer on top: a performance-enhanced runtime, developer tooling, and managed operations so teams can stay focused on building. And now this is all delivered in an Azure-native manner with enterprise readiness on AKS.”&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;STRONG&gt;Robert Nishihara, Co-founder, Anyscale&lt;/STRONG&gt;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;H2&gt;&lt;STRONG&gt;What’s available in public preview today&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Starting today, you can provision and manage Anyscale on Azure directly from the Azure Portal or the Azure CLI, the same tools your platform team already uses for everything else. From Azure, you get native billing, identity, and cluster lifecycle management. From the Anyscale platform, your ML engineers get workspaces, job scheduling, and the Anyscale Runtime to build, train, and serve models without stitching infrastructure together. The solutions can help your organization across these three key areas:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Scaling GPU capacity: &lt;/STRONG&gt;Anyscale on Azure delivers elastic scalability through multi-cluster, multi-region capacity aggregation. A single Ray job can pull GPUs from wherever they happen to be available across your Azure footprint, so you stop building your training plan around the limits of any one cluster.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reliability across the AI lifecycle: &lt;/STRONG&gt;The Anyscale Runtime, paired with Azure storage, gives you a unified data plane that spans experimentation, training, fine-tuning, and inference. Training data, checkpoints, and inference artifacts live in one place from dev to production. Engineers stop stitching pipelines together and start shipping models.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Governance and security: &lt;/STRONG&gt;Anyscale on Azure uses Microsoft Entra workload identity with automated credential management on the AKS-native control plane. Your platform team keeps the operational model they already know, with the same RBAC, the same audit trail, and the same policies, without rolling new identity systems for every new AI workload.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;What customers are already building&lt;/STRONG&gt;&lt;/H2&gt;
&lt;img /&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://wayve.ai/" target="_blank" rel="noopener"&gt;Wayve&lt;/A&gt; is a self-driving startup training the next generation of self-driving models that power autonomous vehicles. Their work depends on aggregating GPU capacity at a scale no single region or cluster can deliver, which makes Anyscale on Azure’s elastic, multi-region capacity model exactly the unlock their training teams need.&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;“Wayve and Microsoft have a deep partnership focused on scaling embodied AI and the infrastructure behind it. As Wayve’s AI platform and data operations have grown, Azure has become a core part of its large-scale compute and ML stack. &lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;Wayve uses Ray, and increasingly Anyscale on Azure to run distributed ML and data pipelines across large CPU and GPU fleets, supporting large-scale inference, analytics, and dataset processing with improved efficiency and resiliency. This enables Wayve to train and deploy its autonomous driving AI at the speed and scale needed for safe, real-world deployment globally."&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;STRONG&gt;Girish Venkataramani, VP of Engineering, Wayve AI&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://www.xoople.com/" target="_blank" rel="noopener"&gt;Xoople&lt;/A&gt;&amp;nbsp;gathers global, high-quality Earth observation data through satellites, sensors, and other remote-sensing tools, then turns it into AI models that help customers understand the planet. Pipelines like theirs need to scale on demand without forcing a small team to stand up and operate Ray themselves, which is exactly what the managed model in Anyscale on Azure delivers.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;"What Xoople is doing is incredibly important as they are creating Earth's System of Record, the data layer AI has been missing, whilst also defining a new category that will transform decision making for the Enterprise.&amp;nbsp;&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;With Anyscale on Azure, Xoople can reliably run massively distributed AI workloads over planetary-scale satellite imagery, transforming complex spectral data into decision-ready intelligence.&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;EM&gt;Anyscale lets our teams focus on models and outcomes rather than infrastructure, dramatically accelerating experimentation to deployment. For our product teams and theirs, this means a faster stream of information, more agility and improved risk management.”&lt;/EM&gt;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;STRONG&gt;Milos Colic, VP of Engineering, Xoople&lt;/STRONG&gt;&lt;/P&gt;
&lt;/DIV&gt;
&lt;H2&gt;&lt;STRONG&gt;Built on the AKS you already run&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Anyscale on Azure runs on standard Azure Kubernetes Service. There is no fork or special cluster type. It composes with the AI work AKS has shipped over the last year: Dynamic Resource Allocation for GPUs, Multi-Instance GPU, NVIDIA Dynamo for multi-node inference, KAITO for fine-tuning and RAG, and Azure Container Storage v2 for stateful AI workloads. If you prefer open-source Ray, KubeRay on AKS continues to be a great path. Anyscale on Azure is for teams that want a managed Ray platform with the Anyscale Runtime, fully integrated with the AKS clusters and Azure services they already use.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Frequently asked questions&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;What’s the release status?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Public preview, available today.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Do I need to migrate off open-source KubeRay?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;No. Open-source Ray on AKS continues to be fully supported. Anyscale on Azure is for teams that want a managed Ray platform with the Anyscale Runtime. &lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzureOverview" target="_blank" rel="noopener"&gt;Learn how to easily onboard&lt;/A&gt; your open-source Ray into Anyscale on Azure.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How does pricing work?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzurePricing" target="_blank" rel="noopener"&gt;Pricing &lt;/A&gt;is usage-based with two components: the Azure infrastructure you consume, and the Anyscale service layer.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure infrastructure. &lt;/STRONG&gt;You pay Azure for the underlying AKS infrastructure you use, including compute and GPUs, and those charges scale directly with actual usage.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Anyscale service. &lt;/STRONG&gt;Pay-as-you-go through Azure service meters with no upfront commitment, based on CPU, memory, and GPU type. Anyscale charges for the orchestration and management layer, not for GPU capacity itself. Rates align with Anyscale’s global pricing list, with no regional multipliers at the Anyscale service layer. Anyscale Enterprise Support is included with the service.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;STRONG&gt;Get started&lt;/STRONG&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Start a workspace on Anyscale on Azure → &lt;/STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzureOverview" target="_blank" rel="noopener"&gt;aka.ms/AnyscaleonAzureOverview&lt;/A&gt;&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Watch our session from Microsoft Build on AKS and the Anyscale announcement:&amp;nbsp;&lt;/STRONG&gt;&lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/BRK222?source=sessions" target="_blank" rel="noopener"&gt;BRK222: The honest practitioner's take on agentic AI on Kubernetes&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;A huge thank-you to the Anyscale team and to the Ray community. This work would not exist without either of them. This is the start of the work, not the end. We have more coming on the roadmap, including expanded region coverage, deeper integration with the AKS AI stack, and continued investments in elastic, multi-region distributed training and inference. I cannot wait to see what you build.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-anyscale-on-azure-public-preview-powered-by-ray-on/ba-p/4523704</guid>
      <dc:creator>Brendan Burns</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>Announcing managed connectors for Azure Functions (Preview)</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-managed-connectors-for-azure-functions-preview/ba-p/4523798</link>
      <description>&lt;P data-line="2"&gt;&lt;STRONG&gt;Azure Functions now includes managed connectors in public preview - the same 1,400+ connector ecosystem behind Logic Apps and Power Platform - as first-class triggers in your Functions code&lt;/STRONG&gt;, plus typed SDKs for invoking connector actions from your function body. Build event-driven integrations with Microsoft 365, Salesforce, ServiceNow, SAP, Dynamics 365, and 1,400+ other systems using familiar Functions syntax.&lt;/P&gt;
&lt;P data-line="4"&gt;This release is the result of close collaboration between the&amp;nbsp;&lt;STRONG&gt;Azure Functions team&lt;/STRONG&gt;&amp;nbsp;and the&amp;nbsp;&lt;STRONG&gt;Connectors team&lt;/STRONG&gt;, the same team that builds and maintains the connector ecosystem behind Logic Apps and Power Platform. Triggers, SDKs, and the connection runtime were designed together so that connectors feel native to Functions, and so that the connector library that already powers thousands of Logic Apps workflows in production is available to Functions developers.&lt;/P&gt;
&lt;P data-line="6"&gt;The integration is built on the new&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/logic-apps/connector-namespace/connector-namespace-overview" target="_blank" rel="noopener" data-href="#"&gt;Connector Namespace&lt;/A&gt; service, which brings the Logic Apps/Power Platform connector runtime to developers as a programmable integration layer.&lt;/P&gt;
&lt;H2 data-line="21"&gt;A quick look: new Outlook email → post to Teams&lt;/H2&gt;
&lt;P data-line="23"&gt;Here's a function example (adapted from the &lt;A class="lia-external-url" href="https://github.com/nzthiago/FunctionAppConnectorsEmailProcessor" target="_blank" rel="noopener" data-href="https://github.com/nzthiago/FunctionAppConnectorsEmailProcessor"&gt;sample app&lt;/A&gt;): the Office 365 trigger fires on every new email in the watched inbox, and the function posts a notification to a Teams channel using the Teams connector SDK.&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Connector;
using Azure.Connectors.Sdk.Office365.Models;
using Azure.Connectors.Sdk.Teams;
using Azure.Connectors.Sdk.Teams.Models;

public class ProcessEmail(TeamsClient teams)
{
    private readonly string _teamId    = Environment.GetEnvironmentVariable("TEAMS_TEAM_ID")!;
    private readonly string _channelId = Environment.GetEnvironmentVariable("TEAMS_CHANNEL_ID")!;

    [Function("OnNewEmail")]
    public async Task Run([ConnectorTrigger] Office365OnNewEmailTriggerPayload payload)
    {
        foreach (var email in payload.Body?.Value ?? [])
        {
            var message = new PostMessageRequest
            {
                Recipient    = new() { GroupId = _teamId, ChannelId = _channelId },
                MessageBody  = $"&amp;lt;b&amp;gt;📧 New email&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;From:&amp;lt;/b&amp;gt; {email.From}&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Subject:&amp;lt;/b&amp;gt; {email.Subject}"
            };

            await teams.PostMessageToConversationAsync("Flow bot", "Channel", message);
        }
    }

    private sealed class PostMessageRequest : DynamicPostMessageRequest
    {
        public RecipientInfo Recipient   { get; set; } = new();
        public string        MessageBody { get; set; } = "";
    }

    private sealed class RecipientInfo
    {
        public string GroupId   { get; set; } = "";
        public string ChannelId { get; set; } = "";
    }
}&lt;/LI-CODE&gt;
&lt;P data-line="66"&gt;The TeamsClient is registered with DI at startup against the Teams connection's runtime URL — the same managed identity the trigger uses authenticates the outbound call. No OAuth code in the function. No HTTP client. No token handling.&lt;/P&gt;
&lt;P data-line="68"&gt;For the complete end-to-end samples see the &lt;A class="lia-external-url" href="https://github.com/azure-samples/functions-connectors" target="_blank" rel="noopener"&gt;Functions Connectors Samples&lt;/A&gt; repo.&lt;/P&gt;
&lt;H2 data-line="70"&gt;What's shipping in preview&lt;/H2&gt;
&lt;UL data-line="72"&gt;
&lt;LI data-line="73"&gt;&lt;STRONG&gt;Connector triggers.&lt;/STRONG&gt; First-class Functions triggers backed by Connector Namespace connections - Office 365 new-email, Teams message-posted, SharePoint item-created/updated, Dataverse row-changed, Salesforce record-updated, calendar events, and more. Configured via the [ConnectorTrigger] attribute (C#) and equivalent decorators as language SDKs roll out.&lt;/LI&gt;
&lt;LI data-line="74"&gt;&lt;STRONG&gt;Typed connector SDKs.&lt;/STRONG&gt;&amp;nbsp;Strongly-typed client libraries for invoking connector actions from inside your function —&amp;nbsp;OutlookClient,&amp;nbsp;TeamsClient,&amp;nbsp;Office365UsersClient,&amp;nbsp;DataverseClient,&amp;nbsp;SalesforceClient, and growing. Built jointly by the Connectors and Functions teams.&lt;/LI&gt;
&lt;LI data-line="75"&gt;&lt;STRONG&gt;Auth via managed identity and built-in authentication.&lt;/STRONG&gt; Configure the function app with built-in authentication to allow only the Connector Namespace to trigger the function. See &lt;A class="lia-external-url" href="https://github.com/Azure-Samples/functions-connectors-net-builtinauth" target="_blank" rel="noopener"&gt;.NET sample: built-in authentication with managed identity&lt;/A&gt;.&lt;/LI&gt;
&lt;LI data-line="76"&gt;&lt;STRONG&gt;Observability.&lt;/STRONG&gt; Every connector trigger run is recorded with information about the run. End to end tracing into the Function App is on the roadmap.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="78"&gt;&lt;STRONG&gt;Typed SDKs are rolling out incrementally.&lt;/STRONG&gt; Not all 1,400+ connectors have strongly-typed SDKs today, and language coverage will expand over time. You can see the ones supported in the different SDK repos for &lt;A class="lia-external-url" href="https://github.com/Azure/Connectors-NET-SDK" target="_blank" rel="noopener"&gt;.NET&lt;/A&gt;, &lt;A class="lia-external-url" href="https://github.com/Azure/Connectors-Python-SDK" target="_blank" rel="noopener"&gt;Python&lt;/A&gt;, and &lt;A class="lia-external-url" href="https://github.com/Azure/Connectors-Nodejs-SDK" target="_blank" rel="noopener"&gt;Node.js&lt;/A&gt;.&lt;/P&gt;
&lt;H2 data-line="80"&gt;The connector catalog&lt;/H2&gt;
&lt;P data-line="82"&gt;The full catalog is the Logic Apps connector library is in scope. Below are the categories most relevant to enterprise integrations:&lt;/P&gt;
&lt;P data-line="84"&gt;&lt;STRONG&gt;Microsoft 365&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="85"&gt;
&lt;LI data-line="85"&gt;&lt;STRONG&gt;Outlook (Office 365)&lt;/STRONG&gt;&amp;nbsp;— send email, create drafts, search mailbox, read calendar, manage events&lt;/LI&gt;
&lt;LI data-line="86"&gt;&lt;STRONG&gt;Microsoft Teams&lt;/STRONG&gt;&amp;nbsp;— post messages, create channels, list team members, manage meetings and tabs&lt;/LI&gt;
&lt;LI data-line="87"&gt;&lt;STRONG&gt;SharePoint&lt;/STRONG&gt;&amp;nbsp;— read and write lists and document libraries, subscribe to item-created/updated events&lt;/LI&gt;
&lt;LI data-line="88"&gt;&lt;STRONG&gt;OneDrive for Business&lt;/STRONG&gt;&amp;nbsp;— upload and download files, manage folders, track changes&lt;/LI&gt;
&lt;LI data-line="89"&gt;&lt;STRONG&gt;Excel Online (Business)&lt;/STRONG&gt;&amp;nbsp;— read and write worksheets, add rows, call named functions in workbooks&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="91"&gt;&lt;STRONG&gt;CRM and operations&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="92"&gt;
&lt;LI data-line="92"&gt;&lt;STRONG&gt;Dataverse / Dynamics 365&lt;/STRONG&gt;&amp;nbsp;— full entity CRUD across all standard and custom tables; use ODATA filters&lt;/LI&gt;
&lt;LI data-line="93"&gt;&lt;STRONG&gt;Salesforce&lt;/STRONG&gt;&amp;nbsp;— query and write contacts, leads, opportunities, and cases via SOQL&lt;/LI&gt;
&lt;LI data-line="94"&gt;&lt;STRONG&gt;ServiceNow&lt;/STRONG&gt;&amp;nbsp;— create and update incidents, change requests, and CMDB records&lt;/LI&gt;
&lt;LI data-line="95"&gt;&lt;STRONG&gt;Workday&lt;/STRONG&gt;&amp;nbsp;— read worker, position, and organization data&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="97"&gt;&lt;STRONG&gt;ERP and data&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="98"&gt;
&lt;LI data-line="98"&gt;&lt;STRONG&gt;SAP&lt;/STRONG&gt;&amp;nbsp;— call BAPIs and read tables (uses on-premises data gateway for SAP behind a firewall)&lt;/LI&gt;
&lt;LI data-line="99"&gt;&lt;STRONG&gt;SQL Server&lt;/STRONG&gt;&amp;nbsp;— execute queries, stored procedures, and table operations&lt;/LI&gt;
&lt;LI data-line="100"&gt;&lt;STRONG&gt;Oracle Database&lt;/STRONG&gt;&amp;nbsp;— same surface as SQL Server&lt;/LI&gt;
&lt;LI data-line="101"&gt;&lt;STRONG&gt;PostgreSQL&lt;/STRONG&gt;&amp;nbsp;— query and write via the generic SQL connector&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="103"&gt;&lt;STRONG&gt;Developer and platform&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL data-line="104"&gt;
&lt;LI data-line="104"&gt;&lt;STRONG&gt;Azure DevOps&lt;/STRONG&gt;&amp;nbsp;— read and write work items, pipelines, repositories, and pull requests&lt;/LI&gt;
&lt;LI data-line="105"&gt;&lt;STRONG&gt;GitHub&lt;/STRONG&gt;&amp;nbsp;— manage issues, PRs, and repository content.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="110"&gt;More trigger examples&lt;/H2&gt;
&lt;LI-CODE lang="csharp"&gt;// Office 365 — new email
[Function("OnNewEmail")]
public Task OnNewEmail([ConnectorTrigger] Office365OnNewEmailTriggerPayload payload) { /* ... */ }

// Teams — new channel message
[Function("OnTeamsMessage")]
public Task OnTeamsMessage([ConnectorTrigger] TeamsOnNewChannelMessageTriggerPayload payload) { /* ... */ }

// SharePoint — list item created
[Function("OnTicketCreated")]
public Task OnTicketCreated([ConnectorTrigger] SharePointOnNewListItemTriggerPayload payload) { /* ... */ }

// Salesforce — record updated
[Function("OnOpportunityUpdated")]
public Task OnOpportunityUpdated([ConnectorTrigger] SalesforceOnRecordUpdatedTriggerPayload payload) { /* ... */ }&lt;/LI-CODE&gt;
&lt;P data-line="130"&gt;The connection that backs each trigger is configured on the Connector Namespace as part of deployment, so trigger declarations stay focused on the event payload, not on auth or connection wiring.&lt;/P&gt;
&lt;H2 data-line="160"&gt;Pricing&lt;/H2&gt;
&lt;P data-line="162"&gt;There is&amp;nbsp;&lt;STRONG&gt;no extra cost&lt;/STRONG&gt;&amp;nbsp;for the integration itself. You pay:&lt;/P&gt;
&lt;UL data-line="164"&gt;
&lt;LI data-line="164"&gt;&lt;STRONG&gt;Existing Azure Functions pricing&lt;/STRONG&gt;&amp;nbsp;for execution (Flex Consumption per-second billing).&lt;/LI&gt;
&lt;LI data-line="165"&gt;&lt;STRONG&gt;Existing Logic Apps connector pricing&lt;/STRONG&gt;&amp;nbsp;for connector calls, billed at the same per-action rates Logic Apps customers pay today.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="167"&gt;See the&amp;nbsp;&lt;A class="lia-external-url" href="https://azure.microsoft.com/pricing/details/logic-apps/" target="_blank" rel="noopener" data-href="https://azure.microsoft.com/pricing/details/logic-apps/"&gt;Logic Apps pricing page&lt;/A&gt;&amp;nbsp;for current connector rates and standard/enterprise connector tiers.&lt;/P&gt;
&lt;H2 data-line="179"&gt;Preview restrictions&lt;/H2&gt;
&lt;UL data-line="181"&gt;
&lt;LI data-line="181"&gt;&lt;STRONG&gt;Language and runtime support&lt;/STRONG&gt;: typed SDKs and the&amp;nbsp;[ConnectorTrigger]&amp;nbsp;attribute ship first for&amp;nbsp;&lt;STRONG&gt;C# (.NET 10 isolated worker)&lt;/STRONG&gt;, followed closely by &lt;STRONG&gt;Python&lt;/STRONG&gt; and &lt;STRONG&gt;Node.js&lt;/STRONG&gt;. Java, and PowerShell are on the roadmap.&lt;/LI&gt;
&lt;LI data-line="182"&gt;&lt;STRONG&gt;Typed SDK coverage&lt;/STRONG&gt;: not every connector in the 1,400+ catalog has a typed SDK yet but coverage is expanding.&lt;/LI&gt;
&lt;LI data-line="184"&gt;&lt;STRONG&gt;Regional availability&lt;/STRONG&gt;: connector triggers are enabled per region as Connector Namespace rolls out. Check the documentation for the current region list.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="187"&gt;Calls to action&lt;/H2&gt;
&lt;UL data-line="189"&gt;
&lt;LI data-line="189"&gt;&lt;STRONG&gt;Developers building integrations with SaaS or enterprise systems&lt;/STRONG&gt;&amp;nbsp;should explore managed connectors in Azure Functions to reduce integration complexity and accelerate delivery.&lt;/LI&gt;
&lt;LI data-line="190"&gt;&lt;STRONG&gt;Partners&lt;/STRONG&gt;&amp;nbsp;can position this for customers migrating from on-premises integration platforms or looking to modernize custom integration code into a serverless, event-driven architecture.&lt;/LI&gt;
&lt;LI data-line="191"&gt;&lt;STRONG&gt;Customers running both Logic Apps and Functions today&lt;/STRONG&gt;&amp;nbsp;can consolidate integration logic: keep workflow-style orchestrations in Logic Apps, and move code-first event-driven integrations into Functions with the same connector library.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 data-line="193"&gt;Get started&lt;/H2&gt;
&lt;UL data-line="195"&gt;
&lt;LI data-line="195"&gt;&lt;STRONG&gt;Documentation&lt;/STRONG&gt;:&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-functions/functions-connectors-overview" target="_blank" rel="noopener" data-href="https://aka.ms/azure-functions-connectors"&gt;Azure Functions integration with managed connectors&lt;/A&gt;&lt;/LI&gt;
&lt;LI data-line="196"&gt;&lt;STRONG&gt;Samples&lt;/STRONG&gt;:&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/azure-samples/functions-connectors" target="_blank" rel="noopener" data-href="https://aka.ms/azure-functions-connectors-samples"&gt;Azure Functions integration with managed connectors in Azure Functions samples&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="202"&gt;Looking for&amp;nbsp;&lt;STRONG&gt;connectors as tools for AI agents&lt;/STRONG&gt;? That's covered in the&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/scenario-serverless-agents-runtime" target="_blank" rel="noopener" data-href="./serverless-agents-runtime.md"&gt;serverless agents Azure Functions runtime&lt;/A&gt;, which builds on this same Connector Namespace integration to expose connections as MCP tool servers for the agents runtime.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/announcing-managed-connectors-for-azure-functions-preview/ba-p/4523798</guid>
      <dc:creator>nzthiago</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>Introducing Azure Container Apps Sandboxes: Secure Infrastructure for Agentic Workloads</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-azure-container-apps-sandboxes-secure-infrastructure/ba-p/4524131</link>
      <description>&lt;P&gt;Today we are announcing the public preview of &lt;STRONG&gt;Azure Container Apps Sandboxes&lt;/STRONG&gt; - a new first-class resource type that gives you fast, secure, ephemeral compute environments with built-in suspend and resume. This is the underlying infrastructure on which products like &lt;A class="lia-external-url" href="https://docs.github.com/copilot/concepts/about-github-sandbox?utm_source=mike-hulmes-build-blog-github-sandbox-docs-cta&amp;amp;utm_medium=blog&amp;amp;utm_campaign=msbuild-2026" target="_blank" rel="noopener"&gt;Cloud sandboxes in GitHub Copilot&lt;/A&gt;, &lt;A class="lia-external-url" href="https://aka.ms/HostedAgents-blog" target="_blank" rel="noopener"&gt;Foundry Hosted Agents&lt;/A&gt;, and &lt;A class="lia-external-url" href="https://aka.ms/aca/express/launch-blog" target="_blank" rel="noopener"&gt;Azure Container Apps Express&lt;/A&gt; are built, you now have the opportunity to build your solutions leveraging this infrastructure.&lt;/P&gt;
&lt;P&gt;Azure Container Apps Sandboxes unlocks two massive opportunities. For platform developers and ISVs, sandboxes give you the same isolated compute fabric that powers many Microsoft products. You get the building blocks to create your own multi-tenant platform on proven, enterprise-scale infrastructure. For AI agents, sandboxes become a self-configurable tool that lets agents extend their own capabilities on the fly. An agent can spin up a fresh sandbox in milliseconds and use it to execute untrusted code, compile source, test HTTP requests against a live app, launch a browser session, or tackle whatever needs a quick and scalable infrastructure.&lt;/P&gt;
&lt;P&gt;On one side it empowers humans to build platforms, on the other it empowers agents to build their own capabilities. Both get enterprise-grade isolation, instant startup, and snapshot-based persistence out of the box.&lt;/P&gt;
&lt;P&gt;We'll walk through the resource model, sandbox lifecycle, the features that set Sandboxes apart - like snapshots, lifecycle policies, network egress controls, volumes, and managed identities - and show you how to get started with the portal and CLI.&lt;/P&gt;
&lt;H1&gt;What Are Container Apps Sandboxes?&lt;/H1&gt;
&lt;P&gt;Container Apps Sandboxes are secure, isolated compute environments that start in sub-second time, scale to thousands, and cost nothing when idle. Each sandbox runs in its own hardware-isolated microVM boundary - fully separated from the host, the platform, and every other sandbox. You bring your own Open Container Initiative (OCI) image, and Sandboxes handle the rest: provisioning from prewarmed pools, strong multi-tenant isolation, and snapshot-based suspend/resume that preserves full memory and disk state across sessions.&lt;/P&gt;
&lt;P&gt;There are many ways Sandboxes can help you build your next project - here are a few:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Your own build &amp;amp; test systems - wire a Sandbox into your CI/CD flow to run builds while your laptop stays cool.&lt;/LI&gt;
&lt;LI&gt;Agents that can run anything safely - an agent spawns a sandbox, executes work inside it, and returns the output with no agent host privileges required.&lt;/LI&gt;
&lt;LI&gt;Agent swarms - decompose a research question, spawn N sandbox workers in parallel (each pinned to its own image and egress policy), and synthesize the result.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Early access customers are already unlocking significant benefits by leveraging Azure Container Apps Sandboxes.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"With Azure Container Apps sandboxes, SitecoreAI can safely enable agents to take real action. The combination of multi-tenant isolation, rapid scale-out, and full automation allows Sitecore to run long-lived, autonomous agents that securely execute code, manage workflows, and interact with enterprise systems within secure, governed environments.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;With this foundation, we can build agents that do real work: assembling content, personalizing experiences, and optimizing campaigns in production. Agents that operate continuously, learn from results, and improve over time, so our customers get better outcomes without giving up control."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;- Mo Cherif, VP of AI and Innovation, &lt;A class="lia-external-url" href="https://www.sitecore.com/" target="_blank" rel="noopener"&gt;Sitecore&lt;/A&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;"We got early access to Azure Container Apps Sandboxes, and got the first prototype integrated with Atlas AI in hours, and it's already shaping a new Atlas AI capability that we plan to launch in preview in Q3.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;It gives every Atlas AI agent a safe, sandboxed workspace (file system, terminal, code execution) on a customer's live data in Cognite Data Fusion. The value: Industrial process, reliability, and production engineers spend days and weeks on questions like "which wells are underperforming and why?" These questions are tractable but expensive, so they are asked rarely and decisions are made on gut feel. With this, an agent pulls the data, runs the analysis, cross-references maintenance and inspection records, and returns a cited draft in minutes. Sandboxes make it practical: Aligned feature set, per-customer isolation, pause/resume across multi-day investigations, scale-to-zero economics."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;- Kelvin Sundli, Product manager, Atlas AI, &lt;A class="lia-external-url" href="https://www.cognite.com/" target="_blank" rel="noopener"&gt;Cognite&lt;/A&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2&gt;Resource Model: Sandbox Groups and Sandboxes&lt;/H2&gt;
&lt;P&gt;The top-level ARM resource is &lt;EM&gt;Microsoft.App/SandboxGroups&lt;/EM&gt;. A Sandbox Group is the management boundary for a collection of sandboxes that share configuration - think of it like a Container Apps Environment, but purpose-built for sandboxes.&lt;/P&gt;
&lt;P&gt;When you create a Sandbox Group, you specify:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Subscription&lt;/STRONG&gt;, &lt;STRONG&gt;Resource Group&lt;/STRONG&gt;, and &lt;STRONG&gt;Region&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sandbox defaults&lt;/STRONG&gt; (optional): default CPU, memory, disk, max sandbox count, and default idle timeout&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Networking&lt;/STRONG&gt;: optionally deploy into a custom VNet with a dedicated subnet for private networking&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Identity&lt;/STRONG&gt;: System or user assigned Entra identity.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Individual sandboxes are created within a Sandbox Group. Each sandbox has its own source (disk image or snapshot), resource tier, lifecycle policy, network egress policy, environment variables, ports, volumes, and connections.&lt;/P&gt;
&lt;H2&gt;Sandbox Lifecycle&lt;/H2&gt;
&lt;P&gt;Sandboxes have a well-defined lifecycle with the following states:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 67.4074%; height: 312px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 18.2822%" /&gt;&lt;col style="width: 81.672%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;State&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Creating&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Provisioning the sandbox from a disk image or snapshot&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Running&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Actively executing - backed by a live microVM&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Idle&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;System-suspended after inactivity; can auto-resume on the next request&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Suspended&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Full state (memory + disk) preserved as a snapshot; no compute costs&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Resuming&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Restoring from a suspended or idle state - sub-second for most workloads&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Stopped&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;User-initiated stop; can be resumed&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Stopping&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Graceful shutdown in progress&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Deleting&lt;/STRONG&gt;&lt;/td&gt;&lt;td style="height: 34.6667px;"&gt;Teardown in progress&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The key insight here is the distinction between &lt;STRONG&gt;Idle&lt;/STRONG&gt; and &lt;STRONG&gt;Suspended&lt;/STRONG&gt;. When a sandbox goes idle (e.g., no traffic for a configured timeout), the system can automatically suspend it and capture a snapshot. When a new request arrives, the sandbox resumes transparently. This gives you scale-to-zero economics with stateful compute - something that wasn't possible before without significant custom engineering.&lt;/P&gt;
&lt;H2&gt;Disk Images: Bring Your Own Container&lt;/H2&gt;
&lt;P&gt;Sandboxes boot from &lt;STRONG&gt;Disk Images&lt;/STRONG&gt; - Open Container Initiative (OCI) images converted into an optimized root filesystem format. You point to any OCI image (public or private registry), and the platform builds a bootable disk image from it.&lt;/P&gt;
&lt;P&gt;You can start with public, pre-built images maintained by the platform (for example, Ubuntu base images), or bring your own private images. For private registries, you can authenticate with username/token or use a &lt;STRONG&gt;user-assigned managed identity&lt;/STRONG&gt; for Azure Container Registry (ACR) – integrated with Azure as you expect.&lt;/P&gt;
&lt;H2&gt;Snapshots: Full-State Persistence&lt;/H2&gt;
&lt;P&gt;Snapshots capture the complete state of a running sandbox - memory, disk, and all running processes. When you resume a sandbox from a snapshot, every process, open file handle, and in-memory data structure is restored exactly as it was.&lt;/P&gt;
&lt;P&gt;A snapshot captures the full state of a running sandbox: memory pages, disk, processes. Two ways to make one - automatically on suspend, or manually on demand. Three things they're great for:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Checkpointing mid-task so a long-running agent can resume exactly where it left off&lt;/LI&gt;
&lt;LI&gt;Cloning an environment that's already warm - dependencies installed, caches populated, services running&lt;/LI&gt;
&lt;LI&gt;Shipping a "ready-to-go" state that resumes in sub-second instead of cold-booting&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Snapshots are &lt;STRONG&gt;free during the preview&lt;/STRONG&gt;, after which they will be stored as Azure Blob Storage at &lt;A class="lia-external-url" href="https://azure.microsoft.com/pricing/details/storage/blobs/" target="_blank" rel="noopener"&gt;standard rates&lt;/A&gt;. Each snapshot records the source sandbox, resource allocation (CPU, memory, disk), and container metadata - so what you get back is exactly what you snapshotted.&lt;/P&gt;
&lt;H2&gt;Resource Tiers&lt;/H2&gt;
&lt;P&gt;Every sandbox is assigned to a resource tier that determines its CPU, memory, and disk allocation:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 50.0926%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 25.0154%" /&gt;&lt;col style="width: 25.0154%" /&gt;&lt;col style="width: 25.0154%" /&gt;&lt;col style="width: 25.0154%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Tier&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;CPU&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Memory&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Disk&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;XS&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;0.25 vCPU&lt;/td&gt;&lt;td&gt;0.5 GB&lt;/td&gt;&lt;td&gt;5 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;S&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;0.5 vCPU&lt;/td&gt;&lt;td&gt;1 GB&lt;/td&gt;&lt;td&gt;10 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;M&lt;/STRONG&gt; (default)&lt;/td&gt;&lt;td&gt;1vCPU&lt;/td&gt;&lt;td&gt;2 GB&lt;/td&gt;&lt;td&gt;20 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;L&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;2 vCPU&lt;/td&gt;&lt;td&gt;4 GB&lt;/td&gt;&lt;td&gt;40 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;XL&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;4 vCPU&lt;/td&gt;&lt;td&gt;8 GB&lt;/td&gt;&lt;td&gt;80 GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;When creating a sandbox from a snapshot, the resource tier is inherited from the snapshot and cannot be changed - this ensures the restored environment has the exact resources it was running with when the snapshot was taken.&lt;/P&gt;
&lt;H2&gt;Lifecycle Policies: Auto-Suspend and Auto-Delete&lt;/H2&gt;
&lt;P&gt;Every sandbox can be configured with lifecycle policies that automate state transitions and cleanup:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Auto-Suspend&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Idle timeout&lt;/STRONG&gt;: How long a sandbox can sit idle before being suspended (configurable: 1m, 2m, 5m, 10m, 30m, 60m)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Suspend mode&lt;/STRONG&gt;:
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Disk + Memory&lt;/STRONG&gt; (default): Full snapshot including memory state - resume picks up exactly where you left off, with all processes and in-memory data intact.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Disk&lt;/STRONG&gt;: Only the disk is preserved; the VM restarts fresh on resume. Useful when you only need file persistence, not process continuity.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Auto-Delete&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Automatically delete sandboxes after a configurable number of days of inactivity&lt;/LI&gt;
&lt;LI&gt;Prevents accumulation of abandoned sandboxes that consume snapshot storage&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These lifecycle policies are what make Sandboxes economically viable at scale. A platform serving thousands of tenants can configure aggressive idle timeouts (say, 60 seconds) with Memory suspend mode, and each tenant's sandbox disappears from the billing meter almost immediately - but resumes in sub-second time the moment they return.&lt;/P&gt;
&lt;H2&gt;Network Egress Policy&lt;/H2&gt;
&lt;P&gt;For scenarios involving untrusted code - AI agents executing LLM-generated scripts, multi-tenant SaaS with user-submitted workloads - controlling outbound network access is critical. Sandboxes provide a per-sandbox Network Egress Policy:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Default action&lt;/STRONG&gt;: Allow or Deny all outbound traffic&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Host rules&lt;/STRONG&gt;: Domain-pattern rules (e.g., *.github.com → Allow) to permit specific destinations&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Custom CIDR rules&lt;/STRONG&gt;: Network-level rules for IP ranges (e.g., 10.0.0.0/8 → Deny)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Skip egress proxy&lt;/STRONG&gt;: Option to bypass the egress proxy entirely when custom VNet routing handles policy enforcement&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This means you can run a sandbox in a &lt;STRONG&gt;deny-by-default&lt;/STRONG&gt; posture and allowlist only the specific endpoints it needs (your API server, a package registry, etc.) - without setting up NSGs or firewall appliances.&lt;/P&gt;
&lt;H2&gt;Managed Volumes: Persistent and Shared Storage&lt;/H2&gt;
&lt;P&gt;Sandboxes support two types of mountable volumes, both managed by Microsoft:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 77.3148%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 26.0091%" /&gt;&lt;col style="width: 20.3782%" /&gt;&lt;col style="width: 53.5739%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Volume Type&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Backed By&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Best For&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Managed Azure Blob&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Azure Blob Storage&lt;/td&gt;&lt;td&gt;Shared data across sandboxes, file uploads/downloads, persistent artifacts&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Managed Data Disk&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Azure Disk Storage&lt;/td&gt;&lt;td&gt;High-performance storage for databases, build caches, large working sets - only available to one sandbox at a time&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Blob volumes come with a built-in file explorer in the portal - you can browse, upload, download, create folders, and drag-and-drop files directly. Data Disk volumes provide dedicated block storage with configurable sizes.&lt;/P&gt;
&lt;H2&gt;Secrets and Identity&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Secrets&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Sandbox Groups support key-value secrets scoped to the group. Secrets can be created, edited, and referenced by sandboxes within the group. These secrets can be used in egress policies to modify requests with transform or header-injection rules, without exposing the secrets to code running inside the sandbox.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Managed Identity&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Sandbox Groups support both system-assigned and user-assigned managed identities, with full RBAC role assignment management. This means your sandboxes can authenticate to Azure services (Key Vault, Storage, Cosmos DB, etc.) without managing credentials - the same identity model you use everywhere else in Azure.&lt;/P&gt;
&lt;H2&gt;MCP Connectors and Triggers&lt;/H2&gt;
&lt;P&gt;ACA Sandboxes now supports managed connectors through the Model Context Protocol (MCP), giving sandboxes access to external APIs - including Microsoft 365, Salesforce, ServiceNow, GitHub, and 1,400+ other systems - without managing credentials directly. Attach a Connector Gateway to your sandbox group, and every sandbox in the group can call external APIs through a standardized MCP interface at runtime. Pair connectors with triggers to build event-driven automation: route an Outlook email to a sandbox that triages it with an AI agent, or react to a SharePoint file upload by extracting and processing the document&amp;nbsp; all without writing glue code. Triggers can fire a shell command inside a sandbox or invoke an HTTP endpoint the sandbox exposes, so your automation shapes fit naturally around your workload.&lt;/P&gt;
&lt;P&gt;The integration is built on the new Connector Namespace service (az &lt;EM&gt;connector-namespace),&lt;/EM&gt; the same runtime behind Logic Apps and Power Platform connectors, now available as a programmable layer for sandboxes. See the &lt;A class="lia-external-url" href="https://github.com/Azure-Samples/azure-container-apps-sandboxes" target="_blank" rel="noopener"&gt;end-to-end samples&lt;/A&gt; for runnable azd up-deployable examples covering email triage and document automation scenarios.&lt;/P&gt;
&lt;H2&gt;The Portal Experience&lt;/H2&gt;
&lt;P&gt;Azure Container Apps Sandboxes are only available in the new &lt;A class="lia-external-url" href="https://sandboxes.azure.com/" target="_blank" rel="noopener"&gt;Azure Container Apps portal&lt;/A&gt; that provides a rich, IDE-like experience for working with sandboxes.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Creating a Sandbox&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The portal offers multiple creation paths:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Standard Sandbox&lt;/STRONG&gt; - full configuration control over source, resources, lifecycle, networking, and volumes&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;GitHub Copilot Sandbox -&lt;/STRONG&gt; preset, Copilot CLI ready to go, GitHub credentials can be wired through the Access Token before the sandbox is created&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Claude Sandbox&lt;/STRONG&gt; - Claude CLI pre-installed, ready for agentic coding inside the sandbox&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Using Coding Agents (Copilot CLI / Claude Code)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you live inside Copilot CLI or Claude Code, you don't need to learn a new CLI. Install the azure-sandbox skill once and your agent picks up the right skills:&lt;/P&gt;
&lt;LI-CODE lang="shell-session"&gt;# GitHub Copilot CLI # Add as a plugin marketplace /plugin marketplace add microsoft/azure-container-apps # Install all skills /plugin install sandboxes@Azure-Container-Apps # Claude Code claude plugin add microsoft/azure-container-apps&lt;/LI-CODE&gt;
&lt;P&gt;The skill runs prerequisite checks silently (&lt;EM&gt;az --version, az account show, node --version, aca --version&lt;/EM&gt;), prompts only if something's missing, and maps natural-language asks to the right aca commands. Bundled runbooks cover Copilot CLI BYOK (bring your own Azure OpenAI key), the deploy-a-web-app walkthrough, and shell setup.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sandbox Detail Page&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Once your sandbox is running, the detail page gives you immediate access to the sandbox terminal and additional details, such as -&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Network Audit&lt;/STRONG&gt; - real-time egress traffic log showing allowed and denied requests&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Monitor&lt;/STRONG&gt; - live CPU, memory, disk, and network utilization charts&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Connectors&lt;/STRONG&gt; - attached connections with an "Add" action&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Volumes&lt;/STRONG&gt; - mounted volumes with an "Add" action&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Log Stream&lt;/STRONG&gt; - streaming container logs&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Processes&lt;/STRONG&gt; - running process list inside the sandbox&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Files&lt;/STRONG&gt; - file explorer to browse the sandbox filesystem&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The toolbar actions let you manage the state of the sandbox - &lt;STRONG&gt;Resume&lt;/STRONG&gt; or &lt;STRONG&gt;Stop&lt;/STRONG&gt;. In the Ellipsis menu (⁝) you can find additional settings to manage network &lt;STRONG&gt;Egress Policy&lt;/STRONG&gt; and &lt;STRONG&gt;ingress &lt;/STRONG&gt;(Add port), take a &lt;STRONG&gt;Snapshot&lt;/STRONG&gt; of the sandbox, &lt;STRONG&gt;Commit&lt;/STRONG&gt; (save disk state as a new disk image), set &lt;STRONG&gt;Lifecycle Policy&lt;/STRONG&gt; or permanently Delete the sandbox. Finally, you can see additional &lt;STRONG&gt;Details&lt;/STRONG&gt; in a side panel.&lt;/P&gt;
&lt;H2&gt;Getting Started with the CLI and Python SDK&lt;/H2&gt;
&lt;P&gt;All sandbox and sandbox-group operations go through the &lt;EM&gt; aca &lt;/EM&gt; CLI. There are no &lt;EM&gt;az containerapp sandbox&lt;/EM&gt; commands, &lt;EM&gt;- az&lt;/EM&gt; is only used for &lt;EM&gt;az login&lt;/EM&gt;, &lt;EM&gt;az account show&lt;/EM&gt;, and resource-group management.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Install (CLI)&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;# Mac, Linux
curl -fsSL https://aka.ms/aca-cli-install | sh

# Windows
irm https://aka.ms/aca-cli-install-ps | iex&lt;/LI-CODE&gt;
&lt;P&gt;Run &lt;EM&gt;aca --help&lt;/EM&gt; to get started.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Install (Python SDK)&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;pip install azure-containerapps-sandbox&lt;/LI-CODE&gt;
&lt;P&gt;For more details, quick start and examples on ACA CLI and Python SDK, please go to &lt;A class="lia-external-url" href="https://sandboxes.azure.com" target="_blank" rel="noopener"&gt;https://sandboxes.azure.com&lt;/A&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H1&gt;Evolution from Dynamic Sessions&lt;/H1&gt;
&lt;P&gt;If you've used &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-apps/sessions" target="_blank" rel="noopener"&gt;Azure Container Apps Dynamic Sessions&lt;/A&gt;, Sandboxes are the next evolution of that capability. Everything Sessions can do, Sandboxes can do - and significantly more:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 78.0556%; height: 350.667px; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 59.4776%" /&gt;&lt;col style="width: 19.9479%" /&gt;&lt;col style="width: 20.5349%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;&lt;STRONG&gt;Capability&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;&lt;STRONG&gt;Dynamic Sessions&lt;/STRONG&gt;&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;&lt;STRONG&gt;Sandboxes&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 38.6667px;"&gt;&lt;td style="height: 38.6667px;"&gt;
&lt;P&gt;Sub-second startup&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 38.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 38.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Strong isolation&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Custom container images&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Custom VNet integration&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓ (Partial)&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Suspend/resume with Memory and Disk snapshots&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;-&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Lifecycle policies (auto-suspend, auto-delete)&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;-&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Network egress policy (per-sandbox)&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;-&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Persistent managed volumes (Blob, Data Disk)&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;-&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 34.6667px;"&gt;&lt;td style="height: 34.6667px;"&gt;
&lt;P&gt;Managed identity (system + user-assigned)&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;-&lt;/td&gt;&lt;td class="lia-align-left" style="height: 34.6667px;"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Secrets management&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left"&gt;-&lt;/td&gt;&lt;td class="lia-align-left"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Configurable resource tiers&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left"&gt;-&lt;/td&gt;&lt;td class="lia-align-left"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Direct access to sandbox in Portal experience&lt;/P&gt;
&lt;/td&gt;&lt;td class="lia-align-left"&gt;-&lt;/td&gt;&lt;td class="lia-align-left"&gt;
&lt;P&gt;✓&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;We will continue to support Dynamic Sessions, but all new investment goes into Sandboxes. If you're building new workloads on isolated ephemeral compute, start with Sandboxes.&lt;/P&gt;
&lt;H2&gt;How It All Fits Together&lt;/H2&gt;
&lt;P&gt;ACA Sandboxes is a platform primitive. It's the foundation on which multiple Microsoft products are already built - including ACA Express, Cloud sandboxes in GitHub Copilot, and Foundry Hosted Agents. When you build on Sandboxes, you're building on the same infrastructure that powers Microsoft's own portfolio.&lt;/P&gt;
&lt;P&gt;This is the evolution of what we shared with &lt;A class="lia-external-url" href="https://aka.ms/aca/project-legion-blog" target="_blank" rel="noopener"&gt;Project Legion&lt;/A&gt; in 2024. Legion described the internal infrastructure; Sandboxes exposes it as a customer-facing primitive that you can use directly.&lt;/P&gt;
&lt;H1&gt;What's Next&lt;/H1&gt;
&lt;P&gt;• Deeper Azure integrations - first-class connectivity with Azure networking, identity, storage, and AI services&lt;/P&gt;
&lt;P&gt;• Enhanced SDK and CLI - richer programmatic experiences for managing sandboxes at scale&lt;/P&gt;
&lt;P&gt;• More Microsoft services built on Sandboxes - this is just the beginning&lt;/P&gt;
&lt;H1&gt;Get Started Today&lt;/H1&gt;
&lt;P&gt;• &lt;STRONG&gt;Portal&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://sandboxes.azure.com/" target="_blank" rel="noopener"&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;https://sandboxes.azure.com/&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;• &lt;STRONG&gt;Documentation&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://aka.ms/aca/sandbox" target="_blank" rel="noopener"&gt;Azure Container Apps Sandboxes&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;• &lt;STRONG&gt;Pricing&lt;/STRONG&gt;: &lt;A class="lia-external-url" href="https://azure.microsoft.com/pricing/details/container-apps/" target="_blank" rel="noopener"&gt;Azure Container Apps Pricing&lt;/A&gt; (per-second vCPU/memory billing, scale-to-zero, snapshots at Blob Storage rates)&lt;/P&gt;
&lt;P&gt;We'd love to hear your feedback. You can ask questions, or file issues on the &lt;A class="lia-external-url" href="https://github.com/microsoft/azure-container-apps" target="_blank" rel="noopener"&gt;Azure Container Apps GitHub&lt;/A&gt; (prefix with [Sandbox] for Sandboxes-specific issues).&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/introducing-azure-container-apps-sandboxes-secure-infrastructure/ba-p/4524131</guid>
      <dc:creator>vyomnagrani</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>What's new in Azure Kubernetes Service at Microsoft Build 2026</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/what-s-new-in-azure-kubernetes-service-at-microsoft-build-2026/ba-p/4524862</link>
      <description>&lt;P&gt;A year ago, teams were still asking whether Kubernetes belonged anywhere near their AI workloads. That question has mostly been answered as the community comes together to . The real challenge now is operational: how to run training and inference at scale when cost, latency, and reliability are constantly in tension.&lt;/P&gt;
&lt;P&gt;The AKS announcements at Microsoft Build focus on that tension directly. They expand what you can control across the stack: how individual clusters are operated, how close workloads run to the hardware, how you scale across a fleet, and how AI workloads are trained and served on top.&lt;/P&gt;
&lt;H3&gt;Start with the cluster: reduce undifferentiated work&lt;/H3&gt;
&lt;P&gt;A lot of Kubernetes effort still goes into maintaining the cluster itself rather than running applications. Two updates reduce that overhead and make cluster behavior more predictable.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/aks/automatic/aks-automatic-managed-system-node-pools-about" target="_blank"&gt;Managed system node pools in AKS Automatic&lt;/A&gt;&lt;/STRONG&gt; are now generally available. These nodes run the core components that keep the cluster healthy. Previously, you had to plan capacity, handle patching, and scale them manually. Now Azure handles that lifecycle. In practice, this means system components no longer compete with your workloads for resources, which is especially important for GPU-backed nodes. That separation gives you more consistent performance and fewer surprises when workloads scale.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/azurecontainerlinux-blog​" target="_blank"&gt;&lt;STRONG&gt;Azure Container Linux&lt;/STRONG&gt;&lt;/A&gt;, also generally available, standardizes the host OS layer. It is a minimal, container-optimized Linux distribution maintained by Microsoft. The smaller package footprint reduces patching overhead and limits drift across clusters. For teams operating multiple environments, this creates a consistent baseline that is easier to maintain and secure over time, which becomes more important as fleets grow.&lt;/P&gt;
&lt;H3&gt;Tune for performance: remove infrastructure bottlenecks&lt;/H3&gt;
&lt;P&gt;Some workloads benefit from abstraction, while others pay for it (especially when you are pushing hardware limits).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;AKS on bare metal&lt;/STRONG&gt;, now in public preview, is designed for those cases. It lets you run AKS on dedicated machines without a hypervisor, giving you direct access to NVLink, RDMA, and high-performance networking. You still use the same AKS control plane and APIs, but without the additional layer between your workloads and the hardware.&lt;/P&gt;
&lt;P&gt;This matters for large training jobs, latency-sensitive inference, and high-throughput data pipelines, where small inefficiencies translate directly into higher cost or longer runtimes. Removing that overhead improves both performance and utilization as you scale.&lt;/P&gt;
&lt;H3&gt;Scale across the fleet: operate environments as one system&lt;/H3&gt;
&lt;P&gt;Most teams are not managing a single cluster – they are managing many, often across regions, clouds, and on-prem environments, and those differences tend to show up as operational inconsistency.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/kubernetes-fleet/concepts-fleet-arc-integration" target="_blank"&gt;Azure Kubernetes Fleet Manager for Arc-enabled clusters&lt;/A&gt;&lt;/STRONG&gt; is now generally available and extends fleet-level control beyond Azure. You can apply updates, enforce policies, and place workloads across clusters from a single control plane, which reduces the need to manage each environment independently.&lt;/P&gt;
&lt;P&gt;For AI workloads, this shows up in a few practical ways. You can roll out changes progressively with health checks between stages, place workloads based on GPU availability and SKU, and apply RBAC consistently across environments. That consistency makes it easier to reason about reliability and capacity as systems scale.&lt;/P&gt;
&lt;H3&gt;The AI layer: training and inference as first-class primitives&lt;/H3&gt;
&lt;P&gt;With the cluster and fleet in place, the next challenge is coordinating distributed AI workloads efficiently.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/AnyscaleonAzureLaunchBlog" target="_blank"&gt;&lt;STRONG&gt;Anyscale on Azure&lt;/STRONG&gt;&lt;/A&gt;, now in public preview, brings managed Ray to AKS. Kubernetes continues to handle scheduling and cluster lifecycle, while Ray coordinates distributed execution within a workload. That includes managing CPUs and GPUs together, handling heterogeneous and fractional GPU allocation, and orchestrating jobs that scale dynamically based on demand.&lt;/P&gt;
&lt;P&gt;The service runs inside your Azure subscription, integrates with Entra ID, and is billed through your existing agreement. It gives you more control over how compute is allocated within a job, which directly impacts both cost efficiency and time to completion.&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Model serving: from YAML to production endpoints&lt;/H3&gt;
&lt;P&gt;Model serving has been one of the more complex parts of running AI on Kubernetes. Open source tooling is starting to simplify that path without replacing the underlying platform.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://github.com/kaito-project/airunway" target="_blank"&gt;AI Runway&lt;/A&gt;&lt;/STRONG&gt;, introduced earlier this year at KubeCon Europe, provides a Kubernetes-native way to deploy and operate models. Instead of starting with configuration, you start by selecting a model, validating that it fits your available GPU memory, reviewing cost estimates, and deploying it. That action creates a ModelDeployment custom resource, which drives the rest of the workflow.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://github.com/kaito-project/kaito" target="_blank"&gt;KAITO&lt;/A&gt;&lt;/STRONG&gt;, the Kubernetes AI Toolchain Operator, handles much of the underlying orchestration. It estimates resource requirements, provisions nodes through tools like Karpenter, and launches optimized runtimes such as vLLM. From there, standard Kubernetes components take over. KEDA manages autoscaling based on workload metrics, Gateway API handles routing, and rollout strategies follow familiar Kubernetes patterns.&lt;/P&gt;
&lt;P&gt;AI Runway sits as a platform layer, with KAITO as one of several providers alongside options like NVIDIA Dynamo and KubeRay. It supports multiple serving engines, including vLLM, SGLang, TensorRT-LLM, and llama.cpp. These tools build on Kubernetes primitives rather than hiding them, so you can move faster without giving up visibility or control.&lt;/P&gt;
&lt;H3&gt;What this looks like in production&lt;/H3&gt;
&lt;P&gt;These capabilities show up as consistent patterns across teams, even when the use cases differ.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://news.microsoft.com/source/emea/features/ai-that-drives-change-wayve-rewrites-self-driving-playbook-with-deep-learning-in-azure/" target="_blank"&gt;Wayve&lt;/A&gt;&lt;/STRONG&gt;&amp;nbsp;is building an end-to-end deep learning AI Driver that can be fine-tuned to drive almost any car, in any city, primarily from cameras. It trains and validates that model on Azure, using AKS, Ray and now Anyscale on Azure to connect thousands of GPUs into a flexible supercomputer. The approach generalizes: Wayve took a new Nissan vehicle in Tokyo, a city it had never driven, and had it driving autonomously in four months. Wayve-equipped vehicles now operate in the UK, the United States, Germany, and Japan.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://ignite.microsoft.com/en-US/sessions/BRK117?source=sessions" target="_blank"&gt;Royal Bank of Canada&amp;nbsp;&lt;/A&gt;&lt;/STRONG&gt;built a self-service AI platform on AKS where development teams provision GPU resources and deploy models through a CI/CD workflow they run themselves. KAITO handles production model serving, with model images hosted in the bank's private container registry. The compliance perimeter wraps the entire path: private endpoints, Entra ID, Key Vault, and a private ACR keep models and data inside the bank's Azure boundary. Developers get self-service speed; the business gets the security and audit trail it requires.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="https://www.microsoft.com/en/customers/story/26553-simcorp-azure?msockid=19ea681fff4368ed14267f45fe326933" target="_blank"&gt;SimCorp&amp;nbsp;&lt;/A&gt;&lt;/STRONG&gt;unified its SimCorp One investment management platform on Azure and standardized on AKS to run workloads consistently across regions, without configuration drift and without turning Kubernetes into a product it has to operate. With that in place, it embedded governed, auditable AI directly into investment workflows.&lt;/P&gt;
&lt;H3&gt;The practitioner's takeaway&lt;/H3&gt;
&lt;P&gt;The common thread across these updates is not that they remove the cost-latency-reliability tradeoffs, but that they make them easier to manage explicitly.&lt;/P&gt;
&lt;P&gt;At the cluster layer, you trade control for simplicity where it makes sense, such as offloading system node management. At the infrastructure layer, you can choose between flexibility and raw performance, including when to run directly on hardware. At the workload layer, you decide how tightly to control scheduling, scaling, and serving behavior based on the needs of your models.&lt;/P&gt;
&lt;P&gt;The practical approach is to start with the constraint that matters most for your workload. If cost is the issue, focus on utilization and right-sizing. If latency is the constraint, look at placement and hardware access. If reliability is the concern, prioritize rollout controls and fleet consistency. Azure Kubernetes Service expands your options in each of these areas so you can make those tradeoffs deliberately rather than working around them.&lt;BR /&gt;&lt;BR /&gt;For the deeper version of this, join &lt;A href="https://techcommunity.microsoft.com/t5/TODO_LINK" target="_blank"&gt;The honest practitioner's take on agentic AI on Kubernetes&lt;/A&gt; (BRK222) at Microsoft Build 2026, live or online.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/what-s-new-in-azure-kubernetes-service-at-microsoft-build-2026/ba-p/4524862</guid>
      <dc:creator>coryskimming</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>What's new in Azure Container Apps at Build'26</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/what-s-new-in-azure-container-apps-at-build-26/ba-p/4524184</link>
      <description>&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/aca" target="_blank" rel="noopener"&gt;Azure Container Apps&lt;/A&gt; (ACA) is a fully managed serverless container platform that enables developers to build and deploy microservices and modern applications without requiring container expertise or needing infrastructure management. ACA provides built-in autoscaling (including scale to zero), per-second billing, advanced networking, built-in observability, and simplified developer experiences across multiple programming languages and frameworks.&lt;/P&gt;
&lt;P&gt;The world of application development is shifting rapidly. Agentic AI is fundamentally changing the requirements of cloud platforms - more code is being written by AI, more apps are being deployed by agents, and more deployment stacks are being assembled autonomously. Platforms are aligning to two concurrent demands: hosting intelligent agents as first-class workloads, and giving those same agents access to empty, secure compute pools as tools they can invoke on demand. At the same time, the proliferation of AI-generated code means that platforms must offer strong isolation for untrusted workloads, instant provisioning for rapid iteration, and production-grade defaults that make the right thing the easy thing - for both humans and agents.&lt;/P&gt;
&lt;P&gt;Azure Container Apps is purpose-built for this new reality. Whether you're a developer shipping a web app in minutes or an agent spinning up ephemeral sandboxes for code execution, ACA provides the serverless foundation that meets both audiences where they are. Customers across industries are betting on ACA as the compute foundation for their AI and cloud-native workloads:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://www.microsoft.com/en/customers/story/26105-replit-azure-openai-in-foundry-models" target="_blank" rel="noopener"&gt;Replit&lt;/A&gt; runs its agent-driven software creation platform on Azure, enabling enterprises like Hexaware to securely build and deploy AI-generated applications at scale with seamless procurement through Azure Marketplace.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://www.microsoft.com/en/customers/story/24530-layerx-azure-ai-foundry" target="_blank" rel="noopener"&gt;LayerX&lt;/A&gt; built its Ai Workforce document processing platform on Azure Container Apps, Azure OpenAI, Azure AI Search, and Cosmos DB - helping clients like Mitsui &amp;amp; Co. save 570 hours annually by automating manual document tasks.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://www.microsoft.com/en/customers/story/25876-sjr-azure-ai-foundry" target="_blank" rel="noopener"&gt;SJR&lt;/A&gt; built GX Manager with Microsoft Foundry to automate website personalization at scale - delivering production-grade, data-grounded content in seconds instead of hours of manual curation.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://www.microsoft.com/en/customers/story/25636-august-ai-linux-on-azure" target="_blank" rel="noopener"&gt;August AI&lt;/A&gt; powers an AI health companion serving over 3.5 million customers on Azure infrastructure, scoring 100% on the U.S. Medical Licensing Examination and delivering potentially life-saving medical support.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://www.microsoft.com/en/customers/story/26342-photon-education-microsoft-defender-for-cloud" target="_blank" rel="noopener"&gt;Photon Education&lt;/A&gt; created Classwise on Azure OpenAI and Foundry with Defender for Cloud security, enabling teachers to prepare lessons faster and engage students more effectively in inclusive learning environments.&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/running-foundry-agent-service-on-azure-container-apps/4518598" target="_blank" rel="noopener" data-lia-auto-title="Microsoft Foundry Agent Service" data-lia-auto-title-active="0"&gt;Microsoft Foundry Agent Service&lt;/A&gt; is built directly on Azure Container Apps, serving over 20,000 customers with a dedicated agent runtime that handles fast startup, tool execution, long-running operations, and enterprise-grade isolation at scale.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Following the &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/whats-new-in-azure-container-apps-at-ignite25/4470391" target="_blank" rel="noopener" data-lia-auto-title="features announced at Ignite'25" data-lia-auto-title-active="0"&gt;features announced at Ignite'25&lt;/A&gt; and our continued momentum through early 2026, we're excited to share what's new at Build'26. This release deepens our commitment to the agentic era with new primitives for secure ephemeral compute, the fastest path from container to production, a reimagined portal experience, and continued investment in security, observability, and developer productivity.&lt;/P&gt;
&lt;img /&gt;
&lt;H1&gt;Azure Container Apps Sandboxes (Public Preview)&lt;/H1&gt;
&lt;P&gt;Teams building agentic applications, multi-tenant platforms, development environments, and CI/CD systems have often had to stitch together custom infrastructure to run untrusted code safely, preserve state across sessions, and handle bursty demand without paying for idle capacity. &lt;A class="lia-external-url" href="https://aka.ms/aca/sandboxes" target="_blank" rel="noopener"&gt;Azure Container Apps Sandboxes&lt;/A&gt; addresses that challenge with a new first-class resource type that provides fast, secure, ephemeral compute environments with built-in suspend and resume capabilities.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Each sandbox runs in its own hardware-isolated microVM boundary, supports standard OCI container images, and starts in sub-second time. Sandboxes can preserve memory, disk state, and preloaded libraries in a snapshot, so workloads resume quickly from the same point without incurring a cold-start reload penalty.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why Sandboxes are perfect for agents&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agents can safely run AI-generated code in isolated environments with instant startup. Agents also accumulate context, intermediate results, and working state during long-running tasks. With sandbox snapshots, agents get persistent, isolated workspaces that survive across task boundaries - they can suspend and resume as needed, preserving full execution context including memory and disk.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key capabilities&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Sub-second startup - provision and execute immediately&lt;/LI&gt;
&lt;LI&gt;Hardware-isolated microVMs - strong security boundary for untrusted code&lt;/LI&gt;
&lt;LI&gt;Snapshot and resume - full state preservation (memory + disk) across sessions&lt;/LI&gt;
&lt;LI&gt;OCI container image support - bring any container&lt;/LI&gt;
&lt;LI&gt;Scale to zero, scale to thousands - consumption pricing with per-second billing&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This is the underlying infrastructure on which products like&amp;nbsp;&lt;A class="lia-external-url" href="https://docs.github.com/copilot/concepts/about-github-sandbox?utm_source=mike-hulmes-build-blog-github-sandbox-docs-cta&amp;amp;utm_medium=blog&amp;amp;utm_campaign=msbuild-2026" target="_blank" rel="noopener"&gt;Cloud Sandbox in GitHub Copilot&lt;/A&gt;,&amp;nbsp;&lt;A href="https://aka.ms/HostedAgents-blog" target="_blank" rel="noopener"&gt;Foundry Hosted Agents&lt;/A&gt;, and&amp;nbsp;&lt;A href="https://aka.ms/aca/express/launch-blog" target="_blank" rel="noopener"&gt;Azure Container Apps Express&lt;/A&gt; are built. ACA Sandboxes joins the Container Apps family alongside Apps, Jobs, Functions, and Dynamic Sessions as a foundational building block for the next generation of cloud and AI application workloads. Learn more about Azure Container Apps Sandboxes at &lt;A class="lia-external-url" href="https://aka.ms/aca/sandboxes" target="_blank" rel="noopener"&gt;https://aka.ms/aca/sandboxes&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;Azure Container Apps Express (Public Preview)&lt;/H1&gt;
&lt;P&gt;We recently launched &lt;A class="lia-external-url" href="https://aka.ms/aca/express/launch-blog" target="_blank" rel="noopener"&gt;Azure Container Apps Express&lt;/A&gt; in public preview - the simplest and fastest way to launch and scale powerful applications on Azure, from zero to hyperscale, without infrastructure decisions. It represents the first Azure compute platform purpose-built for agent and developer use alike.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Express is based on years of experience running Azure Container Apps at scale. We've learned that most developers working on web apps, APIs, and agents want to deploy quickly, have automatic scaling, and avoid dealing with complex infrastructure. Express provides these capabilities - it sets up your environment in seconds, handles any amount of traffic, and removes complicated settings. This helps teams move from writing code to having a production-ready app in minutes, not hours.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What makes Express different&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Instant provisioning - your app is running in seconds, not minutes&lt;/LI&gt;
&lt;LI&gt;Sub-second cold starts - fast enough for interactive UIs and on-demand agent endpoints&lt;/LI&gt;
&lt;LI&gt;Scale to and from zero - automatic, no configuration required&lt;/LI&gt;
&lt;LI&gt;Per-second billing - pay only for what you use, no environment provisioning fee&lt;/LI&gt;
&lt;LI&gt;Production-ready defaults - autoscaling, managed identity, secrets management, custom domains, container registry integration, revision management, and built-in observability&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Purpose-built for custom agents&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Agents need to spin up application endpoints on demand - fast, reliably, and without pre-provisioning infrastructure. Express is purpose-built for this pattern: it provisions in seconds, scales from zero instantly when an agent triggers a workload, and scales back down when the task is complete. Whether an agent is deploying a tool-use endpoint, standing up a temporary API for a multi-step workflow, or launching a web UI for human-in-the-loop review, Express gives it a production-grade, internet-reachable application with zero operational overhead.&lt;/P&gt;
&lt;P&gt;It's the fastest path from "an agent decided to deploy something" to "it's live and serving traffic."&lt;/P&gt;
&lt;P&gt;Learn more about Azure Container Apps Express at &lt;A class="lia-external-url" href="https://aka.ms/aca/express/launch-blog" target="_blank" rel="noopener"&gt;https://aka.ms/aca/express/launch-blog&lt;/A&gt;&lt;/P&gt;
&lt;H1&gt;New Azure Container Apps Portal&lt;/H1&gt;
&lt;P&gt;You open the Azure portal and want to deploy a Container App. Ten minutes later you're three blades deep, toggling settings you don't understand, wondering which workload profile is best before you even have an app.&lt;/P&gt;
&lt;P&gt;We built a different portal. One where deploying a container app takes less time than reading this paragraph. One where creating an Azure Container App is a single click. And one where experimental features ship weekly, not quarterly.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Smart defaults, advanced when you need&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Developers care about outcomes - where their app is running and how to reach it - not starting with a configuration form. The new portal offers three creation modes to keep setup simple:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Simple "one-click create" - auto-generates a unique name and provisions your app. Provide the container image and egress settings. That's it - no environment type selection, networking decisions, or container registry configuration.&lt;/LI&gt;
&lt;LI&gt;Advanced create - unlocks everything: custom VNets with subnet selection, managed identity for registry auth, lifecycle policies, egress controls, environment variables, custom scale rules, and more. It's a toggle at the top of the same form, not a separate workflow.&lt;/LI&gt;
&lt;LI&gt;Express App (Preview) - the new kind of ACA application that provisions and starts almost instantly.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Observe quickly, act faster&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The app overview page surfaces critical information at a glance - including a unified Log Stream that brings app and system logs together in one place. Getting to the root cause now takes fewer clicks, and next steps are always one click away.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Faster releases, direct feedback loop&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://containerapps.azure.com/" target="_blank" rel="noopener"&gt;Azure Container Apps Express&lt;/A&gt; (Preview) and &lt;A class="lia-external-url" href="https://sandboxes.azure.com/" target="_blank" rel="noopener"&gt;Azure Container Apps Sandboxes&lt;/A&gt; (Preview) are currently available only in this new portal. We ship weekly - often more. Upcoming Portal Features in settings give you an easy way to opt in to early access features and share feedback directly.&lt;/P&gt;
&lt;H1&gt;Security: Defender for Cloud Serverless Containers Posture and Confidential Compute&lt;/H1&gt;
&lt;P&gt;Security remains a top priority as enterprises run more sensitive and regulated workloads on Azure Container Apps. At Build'26, we're announcing two key security milestones.&lt;/P&gt;
&lt;H3&gt;Public Preview: Defender for Cloud Serverless Containers Posture on Azure Container Apps&lt;/H3&gt;
&lt;P&gt;Customers can now bring Azure Container Apps environments into Microsoft Defender for Cloud's Serverless Containers Posture experience, helping security teams extend posture management across more of their container estate from a single workflow. This makes it easier to gain visibility into Container Apps resources and assess risks across areas such as identity, networking, and container or image configuration.&lt;/P&gt;
&lt;P&gt;With this capability, teams can more consistently evaluate risk across container environments and use attack path analysis to identify potential exposure faster. The result is a more unified security posture, less manual effort, and stronger confidence when securing Container Apps deployments. Serverless Containers Posture is available as part of the &lt;A class="lia-external-url" href="https://azure.microsoft.com/en-us/pricing/details/defender-for-cloud/" target="_blank" rel="noopener"&gt;Defender CSPM plan&lt;/A&gt;. Learn more at the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/defender-for-cloud/concept-cloud-security-posture-management" target="_blank" rel="noopener"&gt;Defender for Cloud documentation&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;General Availability: Confidential Compute for Azure Container Apps&lt;/H3&gt;
&lt;P&gt;Confidential Compute in Azure Container Apps is now generally available, providing hardware-backed Trusted Execution Environments (TEEs) through workload profiles. This extends protection to data in use - in addition to data at rest and in transit - enabling teams to run higher-trust workloads with stronger isolation for sensitive data.&lt;/P&gt;
&lt;P&gt;With confidential computing now GA, Azure Container Apps becomes more viable for regulated, financial, healthcare, and other high-trust scenarios where organizations need hardware-enforced isolation that protects in-memory data, including from the underlying infrastructure.&lt;/P&gt;
&lt;P&gt;There is no extra charge for confidential compute workload profiles. Learn more at the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/confidential-computing/overview" target="_blank" rel="noopener"&gt;Azure Confidential Computing documentation&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H1&gt;Observability: HTTP Traffic Logs and OpenTelemetry Destinations&lt;/H1&gt;
&lt;P&gt;Knowing what's happening inside your application is essential to running production workloads with confidence. At Build'26, we're announcing two enhancements that give teams deeper visibility and more flexibility in where they send telemetry.&lt;/P&gt;
&lt;H3&gt;Monitor HTTP traffic in Azure Container Apps&lt;/H3&gt;
&lt;P&gt;Azure Container Apps now adds a dedicated Azure Monitor diagnostic setting category - &lt;EM&gt;ContainerAppHTTPLogs&lt;/EM&gt; - that exposes detailed HTTP access logs for incoming traffic. This capability is designed for high-volume request data, enabling teams to troubleshoot ingress and request-flow issues with much greater precision.&lt;/P&gt;
&lt;P&gt;With HTTP traffic logs, you can now investigate:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Failed requests and error codes&lt;/LI&gt;
&lt;LI&gt;Latency patterns and outliers&lt;/LI&gt;
&lt;LI&gt;Retries and WebSocket disconnects&lt;/LI&gt;
&lt;LI&gt;Routing behavior and backend connectivity&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The result is faster issue resolution, less operational friction, and stronger confidence in running high-traffic, business-critical applications. Standard Azure Monitor log volume charges apply. Learn more at &lt;A class="lia-external-url" href="https://azure.microsoft.com/en-us/pricing/details/monitor/" target="_blank" rel="noopener"&gt;Azure Monitor pricing&lt;/A&gt;.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Additional OpenTelemetry Destinations: New Relic, Dynatrace, Elastic&lt;/H3&gt;
&lt;P&gt;Azure Container Apps enhances its managed OpenTelemetry (OTel) capabilities by expanding support for third-party observability platforms. This update introduces additional endpoint options for commonly used monitoring tools - &lt;STRONG&gt;New Relic, Dynatrace, and Elastic&lt;/STRONG&gt; - extending the existing managed OpenTelemetry experience.&lt;/P&gt;
&lt;P&gt;Teams can now use a more consistent OpenTelemetry-based pipeline across Azure Monitor, Datadog, New Relic, Dynatrace, Elastic, and any OTLP-compatible endpoint, with less configuration overhead and more flexibility to route logs, metrics, and traces where they need them - without deploying or managing their own collectors.&lt;/P&gt;
&lt;P&gt;No extra charge applies. Learn more at the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-apps/opentelemetry-agents" target="_blank" rel="noopener"&gt;OpenTelemetry agents documentation&lt;/A&gt;.&lt;/P&gt;
&lt;H1&gt;Additional Enhancements and Ecosystem Updates&lt;/H1&gt;
&lt;P&gt;Beyond the headline announcements, Azure Container Apps continues to evolve with a steady cadence of improvements across the platform.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Override Scale Rules in Azure Functions on Azure Container Apps&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Azure Functions on Container Apps has traditionally used platform-managed scaling, where triggers are automatically translated into KEDA scale rules. With the new allowScalingRuleOverride property, customers can now choose to override platform-managed scaling and &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-apps/functions-scale-rule-override" target="_blank" rel="noopener"&gt;define their own custom KEDA scaling rules&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;This enhancement is especially useful for scenarios where automatically generated KEDA rules lead to unintended scaling behavior, where workloads require custom thresholds or concurrency tuning, or where teams need standardized scaling policies across services. It works with any of the 60+ KEDA scalers - Service Bus, Kafka, PostgreSQL, HTTP concurrency, Cron, and more.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Heroku Migration to Azure Container Apps&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;With Heroku entering maintenance mode, Azure Container Apps is a natural landing zone for Heroku workloads. New guidance and tooling makes the migration path straightforward - from &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/heroku-entered-maintenance-mode-%E2%80%94-heres-your-next-move/4504021" target="_blank" rel="noopener" data-lia-auto-title="understanding why ACA is the right next step" data-lia-auto-title-active="0"&gt;understanding why ACA is the right next step&lt;/A&gt; to a &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/a-practical-path-forward-for-heroku-customers-with-azure/4501797" target="_blank" rel="noopener" data-lia-auto-title="practical migration guide for hands-on implementation" data-lia-auto-title-active="0"&gt;practical migration guide for hands-on implementation&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dapr v1.16 Platform Upgrade&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Azure Container Apps completed a &lt;A class="lia-external-url" href="https://github.com/microsoft/azure-container-apps/issues/1676" target="_blank" rel="noopener"&gt;staged platform upgrade to Dapr v1.16.4&lt;/A&gt;, bringing modernized actor scheduling, improved scalability for reminders, and updated TLS/security internals. The upgrade is fully platform-managed, with minimal customer action required for most workloads.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Running AI Models on ACA Serverless GPUs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The community continues to push the boundaries of what's possible with serverless GPUs on ACA. Recent highlights include &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/gemma-4-on-azure-container-apps-serverless-gpu/4511671" target="_blank" rel="noopener" data-lia-auto-title="running Gemma 4 with Ollama" data-lia-auto-title-active="0"&gt;running Gemma 4 with Ollama&lt;/A&gt; for fully private, self-hosted inference, and &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/coreinfrastructureandsecurityblog/running-multimedia-ai-models-on-container-apps-with-serverless-gpu-a100--t4/4513063" target="_blank" rel="noopener" data-lia-auto-title="deploying ComfyUI for text-to-image and text-to-video workloads" data-lia-auto-title-active="0"&gt;deploying ComfyUI for text-to-image and text-to-video workloads&lt;/A&gt; - all with scale-to-zero and per-second billing.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hosting Remote MCP Servers on ACA&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Azure Container Apps is emerging as the preferred platform for hosting Model Context Protocol (MCP) servers. With serverless scaling, idle billing, HTTP/1.1 and HTTP/2 support, and managed identity integration, ACA provides a production-ready environment for exposing tools and APIs to AI agents. Multiple tutorials and guides are now available for deploying MCP servers on ACA, including &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/exposing-legacy-apis-hosted-on-azure-container-apps-to-ai-agents-using-mcp-serve/4470476" target="_blank" rel="noopener" data-lia-auto-title="integration with Azure API Management" data-lia-auto-title-active="0"&gt;integration with Azure API Management&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;App Modernization with GitHub Copilot&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;GitHub Copilot App Modernization can dramatically reduce the time required to modernize legacy applications and deploy them to ACA. A &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://techcommunity.microsoft.com/blog/appsonazureblog/from-maybe-next-quarter-to-running-before-lunch-on-container-apps---modernizing-/4495736" target="_blank" rel="noopener" data-lia-auto-title="recent walkthrough" data-lia-auto-title-active="0"&gt;recent walkthrough&lt;/A&gt; demonstrated upgrading a classic ASP.NET MVC app on .NET Framework to .NET 10 and deploying it to Azure Container Apps in hours - with managed identity and Key Vault integration enabled by default.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Skills Repository for Container Apps&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The new &lt;A class="lia-external-url" href="https://github.com/MicrosoftDocs/Agent-Skills/tree/main/skills/azure-container-apps" target="_blank" rel="noopener"&gt;Azure Skills repository&lt;/A&gt; includes comprehensive skills specifically for Azure Container Apps - covering troubleshooting, best practices, architecture patterns, security, deployment, and integration. These skills are designed to be used by AI agents and developer tools like GitHub Copilot CLI, providing rich context for building, deploying, and operating ACA workloads. It's another example of how the ACA ecosystem is evolving to be agent-native.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Docker Compose for Agents&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Docker Compose for Agents on Container Apps (public preview) brings the familiar Compose workflow to agentic applications. Declare models, agents, and MCP tools in a single &lt;EM&gt;compose.yaml&lt;/EM&gt; file and deploy unchanged from laptop to cloud - supporting LangGraph, Vercel AI SDK, Spring AI, CrewAI, and other frameworks. Learn more at the &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/container-apps/compose-agent" target="_blank" rel="noopener"&gt;Compose for Agents documentation&lt;/A&gt;.&lt;/P&gt;
&lt;H1&gt;What's Next&lt;/H1&gt;
&lt;P&gt;Azure Container Apps is redefining how developers and agents build, deploy, and operate intelligent applications. With Sandboxes for secure ephemeral compute, Express for instant provisioning, a reimagined portal for streamlined management, and continued investment in security and observability - ACA provides the ideal foundation for the agentic era.&lt;/P&gt;
&lt;P&gt;The features announced at Build'26 deepen our commitment to making Azure Container Apps the platform where both humans and AI agents can ship production workloads with confidence, speed, and minimal operational overhead.&lt;/P&gt;
&lt;P&gt;Also, if you're at Build, come see us at the following sessions:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/BRK221" target="_blank" rel="noopener"&gt;Breakout 221&lt;/A&gt;: Idea to production-ready agent in seconds on AI-native runtime&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/DEM312" target="_blank" rel="noopener"&gt;Demo 312&lt;/A&gt;: Multi-agents in action with 3 AI agents, 3 frameworks, tools &amp;amp; models&lt;/LI&gt;
&lt;LI&gt;&lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/LABSP580" target="_blank" rel="noopener"&gt;Lab 580&lt;/A&gt;: Build and deploy reasoning agents with NVIDIA Nemotron and Foundry&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/LTG453" target="_blank" rel="noopener"&gt;Lightning Talk 453&lt;/A&gt;: Building an End‑to‑End Enterprise AI Platform on Azure&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Or come visit us at the Azure Application Services booth #44. Visit our&amp;nbsp;&lt;A class="lia-external-url" href="https://github.com/microsoft/azure-container-apps" target="_blank" rel="noopener"&gt;GitHub page&lt;/A&gt; for feedback, feature requests, or questions. Check out &lt;A class="lia-external-url" href="https://github.com/microsoft/azure-container-apps/wiki/Roadmap" target="_blank" rel="noopener"&gt;our roadmap&lt;/A&gt; to see what we're working on next. We look forward to hearing from you!&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/what-s-new-in-azure-container-apps-at-build-26/ba-p/4524184</guid>
      <dc:creator>vyomnagrani</dc:creator>
      <dc:date>2026-06-02T19:30:00Z</dc:date>
    </item>
    <item>
      <title>Azure Functions at Build 2026 Update</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-functions-at-build-2026-update/ba-p/4524075</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Azure Functions took another big leap at Build 2026&lt;/STRONG&gt;. It is now the best programming model for event-driven apps and agents, on the best infrastructure to write secure code that scales. The headline features: serverless agents, connectors to M365, Teams, and more, Go, MCP, and Durable Tasks.&lt;/P&gt;
&lt;H1&gt;Microsoft Copilot scales AI workflows to hundreds of millions with Durable Task Scheduler&lt;/H1&gt;
&lt;P&gt;Before we start with all the announcements, we want to highlight a new case study. As Microsoft Copilot scaled to support complex, long-running AI workflows, engineering teams needed a more reliable and consistent orchestration model. By standardizing on Durable Task Scheduler in Azure Functions, Copilot unified state management, retries, and recovery across services, helping run hundreds of millions of executions weekly while improving resilience and delivery speed.&lt;/P&gt;
&lt;P&gt;Read the customer story: &lt;A href="https://aka.ms/microsoft-copilot-dts" target="_blank" rel="noopener" aria-label="Link https://aka.ms/microsoft-copilot-dts"&gt;https://aka.ms/microsoft-copilot-dts&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;Serverless agents runtime (Preview)&lt;/H2&gt;
&lt;P&gt;→&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/azure-functions-serverless-agents-blog" target="_blank" rel="noopener"&gt;Full post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Functions now has a first-class programming model for AI agents.&lt;/STRONG&gt;&amp;nbsp;Define an agent in a&amp;nbsp;&lt;EM&gt;.agent.md&lt;/EM&gt; file with markdown instructions plus metadata that declares the trigger and tools, and deploy it exactly like any other Function. No framework to wire up, no hosting infrastructure to manage.&lt;/P&gt;
&lt;P&gt;Any Azure Functions trigger can run an agent: HTTP, Timer, Service Bus, Event Hubs, Cosmos DB, or the new connection-backed triggers (Teams message, Outlook mail, calendar events, SharePoint item). Agents get access to MCP tool servers, sandboxed code and browser execution via Azure Container Apps dynamic sessions, and the full 1,400+ connector catalog. Built-in surfaces like chat UI, HTTP chat API, and MCP server endpoint are opt-in with no extra code.&lt;/P&gt;
&lt;P&gt;The operational model is exactly what you already know: Flex Consumption for scale-to-zero and per-second billing, managed identity for auth, Application Insights for traces, azd for deployment.&lt;/P&gt;
&lt;P data-line="27"&gt;Here's a timer-triggered agent that summarizes the day's tech news and emails it:&lt;/P&gt;
&lt;LI-CODE lang="markdown"&gt;--- 
name: Daily Tech News Email 
description: Fetches top tech news and emails a summary daily. 
trigger: 
  type: timer_trigger 
  args: schedule: "0 0 15 * * *" 
--- 
You are a news assistant. When triggered, do the following: 1. Scour the web for today's top tech news headlines. Use reputable sources; Include links to the original articles. 2. Summarize the top stories in a concise, well-formatted HTML email body. 3. Email the summary to $TO_EMAIL with the subject "Daily Tech News Summary" followed by today's date.&lt;/LI-CODE&gt;
&lt;P&gt;That's the whole function!&lt;/P&gt;
&lt;H2&gt;Managed connectors (Preview)&lt;/H2&gt;
&lt;P&gt;→&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/connectors-with-functions-blog" target="_blank" rel="noopener" data-lia-auto-title="Full post" data-lia-auto-title-active="0"&gt;Full post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Functions now includes the same 1,400+ managed connectors behind Logic Apps and Power Platform as first-class triggers in your Functions code, plus typed SDKs for invoking connector actions from your function body.&lt;/STRONG&gt;&amp;nbsp;Built jointly with the Connectors team on the new&amp;nbsp;&lt;STRONG&gt;Connector Namespace&lt;/STRONG&gt;&amp;nbsp;service, so connectors feel native to Functions and the library that already powers thousands of Logic Apps workflows is now available to Functions developers.&lt;/P&gt;
&lt;P&gt;React to SaaS events with first-class triggers like Office 365 new-email, Teams message-posted, SharePoint item-created, Dataverse row-changed, Salesforce record-updated, calendar events, and more using the [ConnectorTrigger] attribute. Call connector actions from your code via strongly-typed clients like OutlookClient, TeamsClient, Office365UsersClient, DataverseClient, and SalesforceClient.&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;public class ProcessEmail(TeamsClient teams) { 
[Function("OnNewEmail")] public async Task Run([ConnectorTrigger] Office365OnNewEmailTriggerPayload payload) { 
  foreach (var email in payload.Body?.Value ?? []) { 
    await teams.PostMessageToConversationAsync("Flow bot", "Channel", new PostMessageRequest { 
      Recipient = new() { GroupId = _teamId, ChannelId = _channelId }, 
      MessageBody = $"&amp;lt;b&amp;gt;New email&amp;lt;/b&amp;gt; from {email.From}: {email.Subject}" 
      }); 
    } 
  } 
}&lt;/LI-CODE&gt;
&lt;H2&gt;MCP updates&lt;/H2&gt;
&lt;P&gt;→ &lt;A class="lia-external-url" href="https://aka.ms/functions-mcp-build" target="_blank" rel="noopener"&gt;Full MCP extension post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The &lt;STRONG&gt;Azure Functions MCP extension&lt;/STRONG&gt; &lt;STRONG&gt;now covers all the MCP primitives&lt;/STRONG&gt; like tool, resource, and prompt triggers are supported in .NET, Java, Python, TypeScript, and JavaScript. The extension also supports &lt;STRONG&gt;MCP Apps&lt;/STRONG&gt; for interactive UI, where your tools can return rendered widgets instead of plain text.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;And for .NET developers, a new&amp;nbsp;&lt;STRONG&gt;fluent builder API&lt;/STRONG&gt;&amp;nbsp;makes it easier to compose MCP servers by chaining tool and resource definitions in a declarative style:&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;builder.ConfigureMcpTool("sayhello") 
.WithProperty("name", McpToolPropertyType.String, "Name of the user", required: true) 
.WithMetadata("ui", new { resourceUri = "ui://index.html" });&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Finally,&amp;nbsp;&lt;STRONG&gt;Built-in MCP authentication&lt;/STRONG&gt; now offers a one-click configuration experience in the Azure portal, and a new AI tab in your function app lets you enable MCP auth without manual app registration or wiring.&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-teams="true"&gt;New Azure Functions CLI (Preview)&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;V5 is here! A ground-up, next-gen build of the Azure Functions CLI. Now in public preview this release gives local Functions development a refresh.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-teams="true"&gt;Configuration profiles let you define your deployment targets up front, so func init can &lt;STRONG&gt;scaffold a project with&amp;nbsp;full‑fidelity host settings&lt;/STRONG&gt; in a single command. That means no more surprises when you deploy, earlier access to new platform capabilities, and improved reliability across environments.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;New func setup preps your machine for&amp;nbsp;&lt;STRONG&gt;.NET, Node, Python, or Go in one command&lt;/STRONG&gt;. The &lt;EM&gt;func quickstart&lt;/EM&gt; command scaffolds complete, ready-to-run apps from a &lt;STRONG&gt;curated catalog&lt;/STRONG&gt;. And a new &lt;STRONG&gt;interactive func run dashboard&lt;/STRONG&gt; gives you a live TTY UI with a function browser, log navigation, and keyboard shortcuts.&lt;/P&gt;
&lt;P&gt;Existing func workflows for create, run, publish, and deploy carry forward unchanged, so you can try v5 alongside your current projects. Give it a spin and let us know what you think. Full command reference:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-core-tools-reference?pivots=func-cli-v5" target="_blank" rel="noopener" aria-label="Link Azure Functions local runtime and tools reference (v5)"&gt;Azure Functions local runtime and tools reference (v5)&lt;/A&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;SPAN data-teams="true"&gt;Azure Functions VS Code Template Gallery (Preview)&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;The latest version of the Azure Functions extension for VS Code introduces a new &lt;STRONG&gt;Template Gallery&lt;/STRONG&gt;, giving you single-click access to complete, ready-to-deploy templates. The gallery is hand-curated and maintained by the Functions team to keep every template aligned with the latest releases and best practices, including Azure Developer CLI (AZD) enablement and recommended settings. It already covers the majority of supported languages and triggers, and will continue to expand with the newest Azure Functions features. The same templates are available across both VS Code and the new Functions CLI (func quickstart).&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;Go language support (Preview)&lt;/H2&gt;
&lt;P&gt;→&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/azure-functions-golang-blog" target="_blank" rel="noopener"&gt;Full post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Azure Functions now supports Go as a first-class language&lt;/STRONG&gt;, available on Flex Consumption. The programming model is code-first and idiomatic: HTTP handlers are plain http.HandlerFunc, non-HTTP triggers take a context.Context and a typed payload, and the project layout is a standard Go module. Go build, go test, and go mod tidy just work.&lt;/P&gt;
&lt;LI-CODE lang="go"&gt;package main import ( "fmt" "net/http" "github.com/azure/azure-functions-golang-worker/sdk" "github.com/azure/azure-functions-golang-worker/worker" ) 
func main() { 
  app := sdk.FunctionApp() 
  app.HTTP("hello", hello, sdk.WithMethods("GET", "POST"), sdk.WithAuth("anonymous"), ) 
  worker.Start(app) 
} 
func hello(w http.ResponseWriter, r *http.Request) { 
  name := r.URL.Query().Get("name") 
  if name == "" { name = "world" } 
  fmt.Fprintf(w, "Hello, %s!", name) 
}&lt;/LI-CODE&gt;
&lt;P&gt;Triggers in preview: HTTP, Timer, Service Bus, Event Hubs, Event Grid, Cosmos DB, and Blob Storage. No function.json, no interop shims, no generated metadata to keep in sync.&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-teams="true"&gt;On-demand Sandboxes&lt;/SPAN&gt; for Durable Task Scheduler (Private Preview)&lt;/H2&gt;
&lt;P&gt;→ &lt;A class="lia-external-url" href="https://aka.ms/dts-sandboxes" target="_blank" rel="noopener"&gt;Full post&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Move individual orchestration steps to managed, isolated compute while your orchestrator stays exactly where it is.&lt;/STRONG&gt;&amp;nbsp;Declare which activities should run as serverless, point at a container image, and DTS handles provisioning, scaling, and teardown. No infrastructure to manage, no idle costs, no orchestrator changes.&lt;/P&gt;
&lt;P&gt;Each execution runs in a clean, microVM-backed sandbox with per-activity or per-invocation isolation, ideal for native toolchains (ffmpeg, LibreOffice, Pandoc), CPU-heavy preprocessing (OCR, image work), cross-runtime steps (a Python inference activity called from a .NET orchestrator), sandboxed execution of customer plugins or LLM-generated code, and bursty workloads that can't justify always-on infrastructure.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://forms.cloud.microsoft/r/wNCgttkBw3d" target="_blank" rel="noopener"&gt;Sign up for On-demand Sandboxes Private Preview Today →&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;Azure Functions Skills for coding agents (Preview)&lt;/H2&gt;
&lt;P&gt;→&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/azure-functions-skills-blog" target="_blank" rel="noopener"&gt;Full post&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Bring Azure Functions expertise to your coding agent.&lt;/STRONG&gt; Azure Functions Skills equips GitHub Copilot CLI, Claude Code, and Codex with Functions-specific knowledge like trigger and binding patterns, language anti-patterns, runtime versions, and deployment best practices, so your agent gives accurate guidance instead of generic advice. One command installs guided workflows to create, deploy, diagnose, and review Functions apps. The standout is the doctor command: it uses LLM-powered semantic analysis to catch configuration mistakes and code issues like missing error handling, blocking I/O, hardcoded secrets, durable-orchestrator non-determinism, and supply-chain risks &lt;EM&gt;before&lt;/EM&gt; you deploy, available as both a local CLI command and a GitHub Actions pre-deploy gate.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Try it now!&lt;/STRONG&gt; &lt;A class="lia-external-url" href="https://github.com/Azure/azure-functions-skills" target="_blank" rel="noopener"&gt;npx @azure/functions-skills install&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;Built-in Grafana dashboards (Generally available)&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Every function app now has a single pane of glass for operations with zero setup.&lt;/STRONG&gt;&amp;nbsp;A new&amp;nbsp;&lt;STRONG&gt;Grafana dashboards&lt;/STRONG&gt; entry in the function app's portal TOC opens a prebuilt dashboard purpose-built for Functions: execution count, success/failure rates, p50/p95/p99 duration, resource utilization, scale activity, and recent errors linked to Application Insights logs all in one view, scoped to your app. It's powered by Azure Monitor managed Grafana, so there's nothing to provision, wire up, or pay extra for. Duplicate and customize it to make it your own, save it to your subscription, and share it with your team.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/azure-functions-grafana" target="_blank" rel="noopener"&gt;Start using built-in Grafana Dashboards today!&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;TLS/SSL certificate support Flex Consumption (Preview)&lt;/H2&gt;
&lt;P&gt;Azure Functions Flex Consumption now &lt;STRONG&gt;supports TLS/SSL certificates&lt;/STRONG&gt; through a new site-scoped certificate model in public preview. Each function app can hold up to 3 private (.pfx) and 3 public (.cer) certificates uploaded directly, imported from Azure Key Vault, or issued as free App Service Managed Certificates to enable custom domains, client-certificate authentication, and mutual TLS scenarios on Flex Consumption.&lt;/P&gt;
&lt;P&gt;See&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-functions/flex-consumption-how-to#configure-site-scoped-certificates" target="_blank" rel="noopener"&gt;Configure site-scoped certificates&lt;/A&gt;, &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code#site-scoped-certificates" target="_blank" rel="noopener"&gt;infrastructure as code instructions&lt;/A&gt;,&amp;nbsp;and the&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/azure/azure-functions/functions-scale#certificates" target="_blank" rel="noopener"&gt;cross-plan certificate comparison&lt;/A&gt; for details.&lt;/P&gt;
&lt;H2&gt;Rolling Updates for Flex Consumption (Generally Available)&lt;/H2&gt;
&lt;P&gt;Rolling updates are now generally available in the Flex Consumption plan, &lt;STRONG&gt;delivering zero-downtime deployments with a simple configuration change&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Instead of forcefully restarting all instances during code or configuration updates, the platform gracefully replaces live instances by draining batches every few seconds while dynamically scaling out the latest version to meet demand. This approach ensures uninterrupted execution and resilient throughput across HTTP, non-HTTP, and Durable workloads - even during intensive scale-out scenarios.&lt;/P&gt;
&lt;P&gt;Learn more at &lt;A class="lia-external-url" href="https://aka.ms/functions/rolling-updates" target="_blank" rel="noopener"&gt;Site update strategies in Flex Consumption&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;OS-level dependencies with containers on Flex Consumption (coming soon)&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Bring your own OS-level dependencies to Flex Consumption without giving up serverless.&lt;/STRONG&gt; Package your Functions worker and app code as a container image with a standard Dockerfile (Chromium for Playwright, native toolchains, custom system libraries, whatever your app needs) and run it on the Flex Consumption plan. You get the things that make Flex valuable: dynamic, event-driven scaling across all triggers and the pay-per-execution billing model. This is expected in the next couple of months.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://forms.office.com/r/N5Zhrfj9B9" target="_blank" rel="noopener"&gt;Sign up to get early access and updates →&lt;/A&gt;&lt;/P&gt;
&lt;H2&gt;How to engage&lt;/H2&gt;
&lt;P&gt;Everything announced this week is being actively shaped by real workloads. We want to hear from you.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;X (Twitter)&lt;/STRONG&gt;:&amp;nbsp;&lt;A href="http://x.com/azurefunctions" target="_blank" rel="noopener"&gt;http://x.com/azurefunctions&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Q&amp;amp;A&lt;/STRONG&gt;: file issues and track progress at &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/answers/questions/ask/" target="_blank" rel="noopener"&gt;https://learn.microsoft.com/en-us/answers/questions/ask/&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:47:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-functions-at-build-2026-update/ba-p/4524075</guid>
      <dc:creator>nzthiago</dc:creator>
      <dc:date>2026-06-02T19:47:19Z</dc:date>
    </item>
    <item>
      <title>Closing the AI-readiness gap with agentic modernization</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/closing-the-ai-readiness-gap-with-agentic-modernization/ba-p/4524011</link>
      <description>&lt;H3&gt;Legacy debt is widening the AI-readiness gap&lt;/H3&gt;
&lt;P&gt;Legacy systems and mounting tech debt aren't just slowing your AI agenda — they're quietly stealing its potential. Aging architectures, and complex, decades-old applications, databases, and infrastructure weren't designed for high performance, complex, dynamically scaling agentic workloads. The longer legacy lasts, the wider the gap between AI ambition and AI-readiness.&lt;/P&gt;
&lt;P&gt;This year at Microsoft Build 2026, we're taking our biggest step yet toward closing it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In a recent Forrester study, 94% of IT leaders ranked&amp;nbsp;&lt;STRONG&gt;modernization as a top priority for their AI strategy&lt;/STRONG&gt;, yet only 43% of their portfolios have been modernized on average, and only 32% are AI-ready.¹ Ambition for AI adoption is at a high, yet most are held back by the &lt;STRONG&gt;underlying legacy code, technical debt, and modernization backlog&lt;/STRONG&gt;. Forrester’s data underscores it: on average, 35% of modernization projects stall due to legacy constraints, 65% cite security and compliance as the top challenge, 58% are held back by the complexity of monolithic applications, and 59% struggle with finding skilled talent to execute.¹&lt;/P&gt;
&lt;P&gt;The result: AI initiatives that stall before they ever reach production. Modernization is a key step to move towards AI production; and it’s typically easier said than done. The growing problem is how to execute at the pace and scale that AI now demands.&lt;/P&gt;
&lt;P&gt;That’s why IT operators, architects, application owners, and developers are turning to agents to eliminate legacy toil, connect workstreams across teams, and scale their modernization efforts while customizing how they modernize.&lt;/P&gt;
&lt;H3&gt;The first agentic end-to-end modernization solution that unifies IT and developer workflows&lt;/H3&gt;
&lt;P&gt;Azure Copilot migration agent and GitHub Copilot modernization agent create the first agentic, end-to-end modernization solution that unifies IT and developer workflows— helping organizations close the AI-readiness gap by connecting discovery, assessment, planning, code transformation, governance, deployment, and observability into one continuous system. Built into the tools IT teams and developers already use, the solution combines estate-scale planning with GitHub-native execution, application-aware migration, broad workload coverage across apps, infrastructure, and data, and enterprise-grade privacy, security, and flexibility— so modernization becomes a governed, scalable, portfolio-level capability across teams, rather than a series of one-off projects.&lt;/P&gt;
&lt;div data-video-id="https://www.youtube.com/watch?v=jXv9ymVRjr4&amp;amp;t=1s/1780077938160" data-video-remote-vid="https://www.youtube.com/watch?v=jXv9ymVRjr4&amp;amp;t=1s/1780077938160" class="lia-video-container lia-media-is-center lia-media-size-large"&gt;&lt;iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FjXv9ymVRjr4%3Fstart%3D1%26feature%3Doembed%26start%3D1&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DjXv9ymVRjr4&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FjXv9ymVRjr4%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" allowfullscreen="" style="max-width: 100%"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;H3&gt;Building the estate-wide modernization plan&lt;/H3&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/migrate/azure-copilot-migration-agent?view=migrate" target="_blank" rel="noopener"&gt;Azure Copilot migration agent (public preview)&lt;/A&gt; brings AI to every step of estate modernization planning - from discovery and assessment to dependency mapping, ROI analysis, and wave planning - reducing months of manual analysis to minutes.&lt;/P&gt;
&lt;P&gt;For organizations with a clear picture of their estate, the migration agent accelerates the path from inventory to wave plan. For organizations that don’t, the migration agent helps them build that picture from scratch: what is running, what depends on what, what to move, what to modernize, what to retire, and in what order.&lt;/P&gt;
&lt;P&gt;By creating business-goal oriented estate plans, generating ROI analysis in minutes, and aligning IT and development teams through connected workflows, it helps enterprises move mission critical applications, databases, and infrastructure onto Azure faster and more confidently, with a continuous, data-driven view of what to modernizing next&lt;SPAN style="color: rgb(30, 30, 30);"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;Freeing teams from the legacy tax&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A class="lia-external-url" href="https://aka.ms/ghcp-modernization" target="_blank" rel="noopener"&gt;GitHub Copilot modernization agent&lt;/A&gt;, now generally available,&lt;/STRONG&gt; empowers application owners, architects, and developers to scale modernization across their entire application portfolio.&lt;/P&gt;
&lt;P&gt;Operated from the CLI, the modernization agent acts as an orchestrator that simultaneously:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Assesses readiness across multiple applications at once&lt;/LI&gt;
&lt;LI&gt;Plans application-specific modernization journeys and executes the identified migration tasks&lt;/LI&gt;
&lt;LI&gt;Surfaces deep code and dependency-level insights and recommendations&lt;/LI&gt;
&lt;LI&gt;Automates upgrades for Java and .NET applications&lt;/LI&gt;
&lt;LI&gt;Recommends Azure services aligned to organizational standards&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;With its native design into GitHub Copilot, the modernization agent creates issues, pull requests, and shareable assessment reports for each application as it works. Architects and application owners retain visibility and governance from a single view, while developers receive clear, prioritized work they can execute from the agent or finish directly in their preferred editor. Behind the scenes, the modernization agent coordinates with GitHub Copilot's coding agent to complete tasks asynchronously across repositories, with a full monitoring and audit trail in GitHub's Agent HQ.&lt;/P&gt;
&lt;P&gt;The result is a connected planning-to-execution flow that finally makes modernization at scale possible, without sacrificing oversight or control. In just a few months, the modernization agent has already accelerated modernization up to 4x faster across hundreds of thousands of legacy .NET and Java applications at hundreds of customers.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;DIV class="lia-embeded-content" contenteditable="false"&gt;&lt;IFRAME src="https://medius.microsoft.com/Embed/video-nc/c50454c2-143c-4af6-9eba-4ad7b342cbaf" allowfullscreen="allowfullscreen" frameborder="0" style="width: 100%; min-height: 500px;" sandbox="allow-scripts allow-same-origin allow-forms"&gt;&lt;/IFRAME&gt;&lt;/DIV&gt;
&lt;H3&gt;Enterprise level customization&lt;/H3&gt;
&lt;P&gt;Every application is built and operated as uniquely as the business it serves. The path to modernization must be equally unique: tailored to each application's architecture, dependencies, and intent. At Build, we're excited to announce the general availability of &lt;A class="lia-external-url" href="https://aka.ms/ghcp-modernization-custom-skills" target="_blank" rel="noopener"&gt;custom skills&lt;/A&gt; for the modernization agent.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://aka.ms/ghcp-modernization-custom-skills" target="_blank" rel="noopener"&gt;Custom skills&lt;/A&gt; (GA) let developers teach the modernization agent how their organization works by encoding proprietary patterns, libraries, Azure best practices, and migration approaches once, then reusing them across every run. &amp;nbsp;Each skill is authored as a skill.md file with build instructions, sample usage, reference APIs, and more, and is built on open-standard agent skills so teams aren't locked into a proprietary format.&lt;/P&gt;
&lt;P&gt;With &lt;A class="lia-external-url" href="https://aka.ms/ghcp-modernization-custom-skills" target="_blank" rel="noopener"&gt;custom skills&lt;/A&gt;, developers can equip the modernization agent with:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Business-specific context, knowledge, intent, and migration approaches for application-aware guidance&lt;/LI&gt;
&lt;LI&gt;Centralized skills library to reuse and repeat tasks across the portfolio&lt;/LI&gt;
&lt;LI&gt;Full traceability for every skill used in generating the modernization plan&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The result is portfolio-scale execution with application-level specificity, in the same agentic workflow. And because skills live in a shared library, teams can reuse and repeat for faster, more consistent modernization outcomes aligned with the application's goals.&lt;/P&gt;
&lt;DIV class="lia-embeded-content" contenteditable="false"&gt;&lt;IFRAME src="https://medius.microsoft.com/Embed/video-nc/ec5b152d-2684-4993-bdd6-33dd6ae88fde" allowfullscreen="allowfullscreen" frameborder="0" style="width: 100%; min-height: 500px;" sandbox="allow-scripts allow-same-origin allow-forms"&gt;&lt;/IFRAME&gt;&lt;/DIV&gt;
&lt;H3&gt;Innovating while closing the AI-readiness gap&lt;/H3&gt;
&lt;P&gt;GitHub Copilot is already dramatically reducing technical debt in real world environments, helping to close the AI readiness gap and, more importantly, innovate faster with AI. Organizations that adopt agentic modernization can not only close their AI-readiness gap, they can also make modernization a continuous process, allowing them to more readily integrate AI into existing business applications and services&lt;/P&gt;
&lt;P&gt;Ready to reimagine your applications? Join us at Microsoft Build this year, online or in person, to see our product teams reimagine applications live with GitHub Copilot modernization, share customer success, and empower you to modernize with confidence in days, not months.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Join online or in person for Build session &lt;A class="lia-external-url" href="https://build.microsoft.com/en-US/sessions/BRK220?source=sessions" target="_blank" rel="noopener"&gt;BRK220&lt;/A&gt; on Wednesday 9AM PST&lt;/LI&gt;
&lt;LI&gt;Learn more about GitHub Copilot modernization:&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/ghcp-modernization" target="_blank" rel="noopener"&gt;aka.ms/ghcp-modernization&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Dive deeper at the virtual .NET Agentic Modernization Day on June 16&lt;SUP style="color: rgb(30, 30, 30);"&gt;th&lt;/SUP&gt;&lt;SPAN style="color: rgb(30, 30, 30);"&gt;: &lt;/SPAN&gt;&lt;A class="lia-external-url" href="https://aka.ms/dotnetday/rsvp" target="_blank" rel="noopener"&gt;aka.ms/dotnetday/rsvp&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-19"&gt;&lt;EM&gt;¹ &lt;/EM&gt;&lt;EM&gt;Forrester’s Q1 2026 Cloud and AI Application Modernization Survey [E-66670]&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 19:49:29 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/closing-the-ai-readiness-gap-with-agentic-modernization/ba-p/4524011</guid>
      <dc:creator>Mike_Hulme</dc:creator>
      <dc:date>2026-06-02T19:49:29Z</dc:date>
    </item>
    <item>
      <title>Azure SRE Agent at Microsoft Build 2026: Bringing agentic operations to the enterprise</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-sre-agent-at-microsoft-build-2026-bringing-agentic/ba-p/4524669</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Build 2026 &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Update&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;When we launched Azure SRE Agent, the promise was simple: reduce operational toil, improve up time, and evolve teams from manual incident response towards AI-powered operations. Since GA in March 2026, that promise has held up in production. Teams are using the agent to diagnose live issues, reason across telemetry and code, and automate response workflows - and the footprint has grown fast.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;But there's a gap between an agent that works in a dev/test environment and one that works in your &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;production&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt; environment. Real production environments sits behind a private network with strict egress rules for enterprise security. Their code lives in a GitHub Enterprise tenant that a consumer OAuth sign-in can't reach. Platform teams need to govern what the agent can learn and use, and connectors must scale across many tools and many teams.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;At Microsoft Build 2026, we're announcing five releases that take a major step toward enterprise adoption at scale:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;VNet integration&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;Preview&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - Run SRE Agent inside your private Azure workloads, with full support for enterprise network boundaries and private connectivity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Managed Connectors&lt;/STRONG&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;- A redesigned connector experience for governing, securing and scaling connections across observability, incident management, code, and collaboration tools plus an expanded SaaS connector catalog including Jira, GitLab, Slack, Power BI, and more.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt;Granular permissions model &lt;/STRONG&gt;- &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Set allow, ask, and deny rules on individual tools&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;. &lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;Admins can set guardrails that apply everywhere; Agent users can approve tools for the rest of their conversation without waiting on policy changes.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Native GitHub Enterprise support&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - Ground investigations in your enterprise repositories and workflows, so an incident can become an issue, an investigation, a pull request, and a repair plan — all under a governed service identity.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Private Plugins Marketplace&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt; &lt;/STRONG&gt;- Give platform teams a governed way to publish approved skills, MCP tools, and operational workflows to every SRE Agent in the tenant.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;Together with our Infrastructure-as-Code templates, these releases make Azure SRE Agent easy to integrate into secure environments with locked-down networks, regulated teams and complex codebases.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Read the series&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;VNet integration&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - &lt;A class="lia-external-url" href="https://aka.ms/sreagent/blog/VNET" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/blog/VNET&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Managed Connectors&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - &lt;A href="https://aka.ms/sreagent/blog/connectorsv2" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/blog/connectorsv2&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;SRE Agent permissions model&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - &lt;A href="https://aka.ms/sreagent/blog/HooksAndToolPermissions" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/blog/HooksAndToolPermissions&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="4" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Native GitHub Enterprise support&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;STRONG&gt; &lt;/STRONG&gt;- &lt;A class="lia-external-url" href="https://aka.ms/sreagent/blog/githubenterprise" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/blog/githubenterprise&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="5" data-aria-level="1"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Private Plugins Marketplace&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt; - &lt;A class="lia-external-url" href="https://aka.ms/sreagent/blog/privatepluginmarketplace" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/blog/privatepluginmarketplace&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;&lt;STRONG&gt;📺 Watch the on-demand session from #MSBuild 2026&lt;/STRONG&gt; - &lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/build26" target="_blank"&gt;https://aka.ms/sreagent/build26&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;Get started&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Create an SRE Agent — &lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Documentation — &lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/newdocs" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/newdocs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;Recipes — &lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/recipes" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/recipes&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;What's next&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;We're exploring Microsoft Entra Agent ID for first-class agent identity and Microsoft Agent 365 integration for centralized agent governance. What enterprise controls would unlock adoption in your production environments? Tell us in the comments below&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2026 15:46:10 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/azure-sre-agent-at-microsoft-build-2026-bringing-agentic/ba-p/4524669</guid>
      <dc:creator>dchelupati</dc:creator>
      <dc:date>2026-06-03T15:46:10Z</dc:date>
    </item>
    <item>
      <title>Bring Your Own GitHub App: Connecting Azure SRE Agent to Enterprise Repositories</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/bring-your-own-github-app-connecting-azure-sre-agent-to/ba-p/4524673</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P aria-level="3"&gt;&lt;EM&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;What if your SRE agent could access your enterprise GitHub repositories the same way your CI/CD pipelines do&amp;nbsp; with a governed service identity, not a personal token?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph" data-ccp-parastyle-defn="{&amp;quot;ObjectId&amp;quot;:&amp;quot;276295ed-5df2-5456-988c-5fdbab071054|1&amp;quot;,&amp;quot;ClassId&amp;quot;:1073872969,&amp;quot;Properties&amp;quot;:[201342446,&amp;quot;1&amp;quot;,201342447,&amp;quot;5&amp;quot;,201342448,&amp;quot;3&amp;quot;,201342449,&amp;quot;1&amp;quot;,469777841,&amp;quot;Aptos&amp;quot;,469777842,&amp;quot;Arial&amp;quot;,469777843,&amp;quot;游明朝&amp;quot;,469777844,&amp;quot;Aptos&amp;quot;,201341986,&amp;quot;3&amp;quot;,469769226,&amp;quot;Aptos,Arial&amp;quot;,268442635,&amp;quot;24&amp;quot;,335559705,&amp;quot;2052&amp;quot;,335559740,&amp;quot;240&amp;quot;,201341983,&amp;quot;0&amp;quot;,335559739,&amp;quot;180&amp;quot;,335559738,&amp;quot;180&amp;quot;,469775450,&amp;quot;First Paragraph&amp;quot;,201340122,&amp;quot;2&amp;quot;,134234082,&amp;quot;true&amp;quot;,134233614,&amp;quot;true&amp;quot;,469778129,&amp;quot;FirstParagraph&amp;quot;,335572020,&amp;quot;1&amp;quot;,469775498,&amp;quot;Body Text&amp;quot;,469778324,&amp;quot;Body Text&amp;quot;]}"&gt;Azure SRE Agent connects to your GitHub repositories to build &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;rich&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; context &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;about&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; your systems source code, infrastructure definitions, deployment configs, skills, runbooks, and operational history. This context is what turns generic troubleshooting into root cause analysis that points to the exact file, the exact commit, the exact config change.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt; This is part of the Azure SRE Agent announcements at&amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/Build26/blog/SREAgent"&gt;Build 2026&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;For teams on &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char" data-ccp-charstyle-defn="{&amp;quot;ObjectId&amp;quot;:&amp;quot;a31b87fc-7929-525d-a968-aa0f568a0536|1&amp;quot;,&amp;quot;ClassId&amp;quot;:1073872969,&amp;quot;Properties&amp;quot;:[201342446,&amp;quot;1&amp;quot;,201342447,&amp;quot;5&amp;quot;,201342448,&amp;quot;1&amp;quot;,201342449,&amp;quot;1&amp;quot;,469777841,&amp;quot;Consolas&amp;quot;,469777842,&amp;quot;Consolas&amp;quot;,469777843,&amp;quot;Aptos&amp;quot;,469777844,&amp;quot;Consolas&amp;quot;,201341986,&amp;quot;1&amp;quot;,469769226,&amp;quot;Consolas&amp;quot;,268442635,&amp;quot;22&amp;quot;,469775450,&amp;quot;Verbatim Char&amp;quot;,201340122,&amp;quot;1&amp;quot;,134233614,&amp;quot;true&amp;quot;,469778129,&amp;quot;VerbatimChar&amp;quot;,335572020,&amp;quot;1&amp;quot;,134231262,&amp;quot;true&amp;quot;,469777929,&amp;quot;Source Code&amp;quot;,469778324,&amp;quot;Default Paragraph Font&amp;quot;]}" data-ccp-charstyle-linked-defn="{&amp;quot;ObjectId&amp;quot;:&amp;quot;94116779-72d8-55e3-836f-dfb3e4f6a90b|1&amp;quot;,&amp;quot;ClassId&amp;quot;:1073872969,&amp;quot;Properties&amp;quot;:[201342446,&amp;quot;1&amp;quot;,201342447,&amp;quot;5&amp;quot;,201342448,&amp;quot;1&amp;quot;,201342449,&amp;quot;1&amp;quot;,469777841,&amp;quot;Consolas&amp;quot;,469777842,&amp;quot;Consolas&amp;quot;,469777843,&amp;quot;Aptos&amp;quot;,469777844,&amp;quot;Consolas&amp;quot;,201341986,&amp;quot;1&amp;quot;,469769226,&amp;quot;Consolas&amp;quot;,268442635,&amp;quot;22&amp;quot;,469775450,&amp;quot;Source Code&amp;quot;,201340122,&amp;quot;2&amp;quot;,134233614,&amp;quot;true&amp;quot;,469778129,&amp;quot;SourceCode&amp;quot;,335572020,&amp;quot;1&amp;quot;,335559740,&amp;quot;240&amp;quot;,201341983,&amp;quot;0&amp;quot;,335559739,&amp;quot;200&amp;quot;,469777929,&amp;quot;Verbatim Char&amp;quot;,469778324,&amp;quot;Normal&amp;quot;]}"&gt;github.com&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;, connecting is a quick OAuth sign-in. Today, we are extending that same deep context to GitHub Enterprise Cloud and introducing Bring Your Own GitHub App as a first-class authentication model for enterprise teams that need governed, app-based access to their repositories.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;Enterprise GitHub, enterprise identity&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Large organizations run on GitHub Enterprise Cloud with EMU (Enterprise Managed Users). In these environments, every identity is governed centrally, tokens are scoped by policy, rotated on schedule, and tied to individual humans.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;When an SRE agent needs to access your repositories, the identity it uses matters. With a GitHub App, the agent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;operates&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; under a service identity registered and owned by your organization. Every repository operation — every clone, every issue query, every file read is attributed to the App’s installation, not to an individual engineer. Your security and compliance teams can trace agent activity to a governed service identity, and your audit logs reflect exactly what happened.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Block Text"&gt;GitHub Apps are the same identity model enterprises already use for CI/CD pipelines, deployment automation, and internal tooling. BYO App extends it to your SRE agent.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:480,&amp;quot;335559737&amp;quot;:480,&amp;quot;335559738&amp;quot;:100,&amp;quot;335559739&amp;quot;:100,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;How it works&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;When you bring your own GitHub App to Azure SRE Agent, the authentication flow uses short-lived tokens with explicit permissions:&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Your organization registers a GitHub App&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; on your GHE instance (or &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;github.com&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;) with the specific repository permissions you choose, Contents Read, Metadata Read, and optionally Issues or Pull Requests.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;The App’s private key lives in Azure Key Vault.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; The agent’s managed identity reads the PEM at runtime, mints a JWT, and exchanges it for an installation token that expires in about an hour. The private key never leaves Key Vault.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Permissions are declared, not inherited.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; The App has exactly the access you configured at registration. The agent cannot exceed those boundaries regardless of who set it up.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Token &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;refresh is&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; automatic.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; No human token to expire, no refresh chain to &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;maintain&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;. The agent mints new installation tokens as needed.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;For organizations managing multiple GitHub instances&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; say, one for platform engineering and another for application teams&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;each instance gets its own GitHub App with its own Key Vault secret. You can assign a different user-assigned managed identity per App for security isolation. Disconnecting one host does not affect others.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;What your agent does with GitHub access&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;Once connected, your agent uses GitHub for more than source code. Repositories hold the artifacts that define how your services run and how your agent reasons about them:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Source code and infrastructure definitions.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; The agent reads application code, Bicep templates, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Terraform&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; configurations, and &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Dockerfiles&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; to understand what a service &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;actually does&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; — not what the docs say it does.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;&lt;STRONG&gt;Skills and runbooks&lt;/STRONG&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; Teams store agent skills, response plans, and operational runbooks as files in repositories. GitHub access lets the agent load and &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;update&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; these artifacts directly.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Configuration and deployment history.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; Helm charts, pipeline definitions, environment configs, and release manifests give the agent the context to correlate an incident with what changed and when.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;Issues and pull requests.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;&lt;STRONG&gt; &lt;/STRONG&gt;The agent can &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;search&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; issues for known problems, &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;check&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; recent PRs for regression candidates, and create issues or PRs when it &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;identifies&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt; a fix.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Block Text"&gt;Logs tell the agent what happened. Code tells it why. Your skills and runbooks tell &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Block Text"&gt;it&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Block Text"&gt; what to do about it.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559685&amp;quot;:480,&amp;quot;335559737&amp;quot;:480,&amp;quot;335559738&amp;quot;:100,&amp;quot;335559739&amp;quot;:100,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;The difference with &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;BYO&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; App is the identity under which all of this happens. These operations occur under your organization’s App identity with the permissions you declared, the audit trail you govern, and the key lifecycle you control.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 2"&gt;GitHub Enterprise Cloud hosts&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;For GitHub Enterprise Cloud domains (&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;*.ghe.com&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;), the Code Access wizard automatically selects &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;BYO&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; App as the authentication method. This is by &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;design,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; GHE Cloud hosts use App-based authentication exclusively.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Body Text"&gt;The setup:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact" data-ccp-parastyle-defn="{&amp;quot;ObjectId&amp;quot;:&amp;quot;eafb41c0-47a4-52dc-ac6b-3b5a7536b560|1&amp;quot;,&amp;quot;ClassId&amp;quot;:1073872969,&amp;quot;Properties&amp;quot;:[201342446,&amp;quot;1&amp;quot;,201342447,&amp;quot;5&amp;quot;,201342448,&amp;quot;3&amp;quot;,201342449,&amp;quot;1&amp;quot;,469777841,&amp;quot;Aptos&amp;quot;,469777842,&amp;quot;Arial&amp;quot;,469777843,&amp;quot;游明朝&amp;quot;,469777844,&amp;quot;Aptos&amp;quot;,201341986,&amp;quot;3&amp;quot;,469769226,&amp;quot;Aptos,Arial&amp;quot;,268442635,&amp;quot;24&amp;quot;,335559705,&amp;quot;2052&amp;quot;,335559740,&amp;quot;240&amp;quot;,201341983,&amp;quot;0&amp;quot;,335559739,&amp;quot;36&amp;quot;,335559738,&amp;quot;36&amp;quot;,469775450,&amp;quot;Compact&amp;quot;,201340122,&amp;quot;2&amp;quot;,134234082,&amp;quot;true&amp;quot;,134233614,&amp;quot;true&amp;quot;,469778129,&amp;quot;Compact&amp;quot;,335572020,&amp;quot;1&amp;quot;,469778324,&amp;quot;Body Text&amp;quot;]}"&gt;Create a GitHub App on your GHE instance.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; Set Contents: Read and Metadata: Read at minimum. Install it on the repositories your agent needs.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;Store the private key in Azure Key Vault.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; Full PEM content &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;as&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; a secret.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;Grant the agent’s managed identity Key Vault Secrets User&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; on that vault.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI aria-setsize="-1" data-leveltext="%1." data-font="" data-listid="5" data-list-defn-props="{&amp;quot;335552541&amp;quot;:0,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769242&amp;quot;:[65533,0],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;%1.&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;multilevel&amp;quot;}" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;Enter Client ID and Key Vault&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;secret&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; URI&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; in Code Access. The agent &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;validates&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt; credentials and loads your repositories.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: rgb(30, 30, 30);" data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;BYO App on &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-charstyle="Verbatim Char"&gt;github.com&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; works the same way&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt;,&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="First Paragraph"&gt; useful when your organization’s policy requires App-based authentication even for public GitHub.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:180,&amp;quot;335559739&amp;quot;:180,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P aria-level="2"&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 aria-level="2"&gt;&lt;STRONG&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Resources&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="0" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;Create new SRE Agent — &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;SRE Agent Documentation &lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;—&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/newdocs" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/newdocs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;SRE Agent recipes — &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/recipes" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/recipes&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Build 2026 SRE Agent announcements - &lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank"&gt;https://aka.ms/Build26/blog/SREAgent&lt;/A&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 21:09:03 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/bring-your-own-github-app-connecting-azure-sre-agent-to/ba-p/4524673</guid>
      <dc:creator>dchelupati</dc:creator>
      <dc:date>2026-06-02T21:09:03Z</dc:date>
    </item>
    <item>
      <title>Private Plugins with Azure SRE Agent</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/private-plugins-with-azure-sre-agent/ba-p/4523763</link>
      <description>&lt;P&gt;SRE's and platform teams are building operational skills specific to their infrastructure: investigation runbooks, compliance checks, cost analysis playbooks, deployment verification procedures. The next step is making that work reusable across every agent in the organization without exposing it publicly. Today, SRE Agent supports plugin marketplaces hosted in private GitHub repositories, including GitHub Enterprise. This is part of the Azure SRE Agent announcements at&amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/Build26/blog/SREAgent"&gt;Build 2026&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You can now point SRE Agent at a private repo when adding a marketplace or installing a plugin. Authentication is handled per-marketplace, and supports OAuth, GitHub PATs, and GitHub Apps for GHE tenants.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;From one agent to an organization’s plugin catalog&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Most teams start with a single SRE Agent connected to their services. The agent learns their infrastructure, runs their runbooks, and handles their incidents. It works well.&lt;/P&gt;
&lt;P&gt;Then adoption grows. A second team stands up their own agent. Then a third. Platform engineering wants every agent to run the same compliance checks. Security needs approval hooks enforced consistently. FinOps has cost governance skills that should be standard across the organization. Suddenly the question isn’t “how do I set up my agent,” it’s “how do we share operational knowledge across all of them.”&lt;/P&gt;
&lt;P&gt;Without a distribution model, teams end up copying skill files between agents manually. A platform team writes a runbook, shares it over email or a wiki link, and each service team pastes it into their agent individually. When the runbook improves, some agents get updated, some don’t. There’s no version tracking, no central catalog, and no way to know which agent is running which version of which skill.&lt;/P&gt;
&lt;P&gt;Private marketplace support solves this.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;How Private Plugin marketplace meet enterprise needs&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;A platform team publishes once, every agent installs.&lt;/STRONG&gt; Codify best practices as plugins in a private GitHub repo. Service teams add that repo as a marketplace in their agents and install what they need. Compliance checks, cost governance thresholds, incident playbooks, deployment verification procedures all distributed through versioned plugins.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Each team retains ownership.&lt;/STRONG&gt; Security controls which plugins enforce approval hooks. FinOps locks cost thresholds into parameter values. Platform engineering governs infrastructure investigation patterns. The marketplace is the distribution layer for organizational standards.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Versions are pinned, updates are explicit.&lt;/STRONG&gt; Each installation locks to the commit at install time. A merged PR upstream does not change any agent’s behavior. Teams promote new versions on their own schedule: validate in dev, promote to staging, then production. Different agents can run different versions simultaneously.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Reuse across environments and tools.&lt;/STRONG&gt; The same plugin works across dev, staging, and production agents, and can be reused by local coding agents and other services that support plugins. One source of truth, not separate copies per environment.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Accessing Private Plugin marketplaces&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Private repo support adds authentication to the SRE Agent's plugin workflow so your agent can clone and install from repos that require credentials. Authentication is configured once per marketplace. Every plugin within it inherits the credentials.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;Auth method&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;When to use&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Setup&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;OAuth&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;github.com repos your agent can already access&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Uses your existing GitHub connection. One click.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;Personal access token&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Private repos in other orgs on github.com&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;Per-marketplace PAT. Scoped to just that marketplace.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
&lt;P&gt;&lt;STRONG&gt;GitHub App&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;GitHub Enterprise (*.ghe.com)&lt;/P&gt;
&lt;/td&gt;&lt;td&gt;
&lt;P&gt;BYO App with private key in Azure Key Vault. Short-lived tokens minted at runtime.&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;&lt;STRONG&gt;Getting started&lt;/STRONG&gt;&lt;/H2&gt;
&lt;OL&gt;
&lt;LI&gt;In SRE Agent, navigate to&amp;nbsp;&lt;STRONG&gt;Builder &amp;gt; Plugins&lt;/STRONG&gt;, then click&amp;nbsp;&lt;STRONG&gt;Add Marketplace&lt;/STRONG&gt; and enter the URL of the private marketplace you want to connect to.&lt;BR /&gt;&lt;img&gt;Entering the marketplace reference&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Then click&amp;nbsp;&lt;STRONG&gt;Connect to GitHub&lt;/STRONG&gt; to complete the OAuth sign-in.&lt;BR /&gt;&lt;img&gt;OAuth completed&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Click&amp;nbsp;&lt;STRONG&gt;Add&lt;/STRONG&gt; and you will see the plugins available from your connected marketplace.&lt;BR /&gt;&lt;img&gt;Browsing plugins&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Click on the plugin to install and in the detail view you can browse the skills packaged with the plugin. click&amp;nbsp;&lt;STRONG&gt;Install&amp;nbsp;&lt;/STRONG&gt;to install this plugin.&lt;img&gt;Plugin detail view&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;You can now see the skills imported from plugins from&amp;nbsp;&lt;STRONG&gt;Capabilities &amp;gt; Skills &amp;gt; Custom Skills&lt;/STRONG&gt;&lt;img&gt;Plugin skill available in skills list&lt;/img&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&lt;STRONG&gt;The bottom line&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Private repo support turns the Plugin Marketplace from a public skill catalog into your organization’s internal distribution platform for operational automation. Your team writes the plugins. Your agents install them. Your GitHub permissions control who has access.&lt;/P&gt;
&lt;P&gt;Try it yourself: create a private repo with a marketplace.json and a few skills, add it as a marketplace in your agent, and install a plugin.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Resources&lt;/STRONG&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;SRE Agent documentation —&amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/sreagent/newdocs"&gt;https://aka.ms/sreagent/newdocs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;SRE Agent overview —&amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/sreagent/newdocsoverview"&gt;https://aka.ms/sreagent/newdocsoverview&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Plugin Marketplace capability page —&amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/sreagent/newdocs/capabilities/plugin-marketplace"&gt;https://aka.ms/sreagent/newdocs/capabilities/plugin-marketplace&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Build 2026 SRE Agent announcements - &lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank"&gt;https://aka.ms/Build26/blog/SREAgent&lt;/A&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 21:09:48 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/private-plugins-with-azure-sre-agent/ba-p/4523763</guid>
      <dc:creator>ebencarek</dc:creator>
      <dc:date>2026-06-02T21:09:48Z</dc:date>
    </item>
    <item>
      <title>VNet integration for Azure SRE Agent (preview)</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/vnet-integration-for-azure-sre-agent-preview/ba-p/4524287</link>
      <description>&lt;P&gt;For many production systems, the logs, databases, private endpoints, repositories, and runbooks an SRE Agent needs to do its job are behind network boundaries your security team already governs. VNet integration for Azure SRE Agent, now in preview, puts the agent's outbound traffic under those same controls - your virtual network, your NSG rules, your private DNS - so it reaches only what your network allows.&lt;/P&gt;
&lt;P&gt;The principle is one your security team already applies to every other workload: a component's network access shouldn't depend on the component behaving correctly. Identity governs what the agent can reach. Permissions and hooks shape what it does within reach. The network sits beneath both: it blocks any request to a destination you haven't allowed no matter what the agent decides.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Why egress control matters&amp;nbsp;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Two reasons.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;First, the agent reads sensitive things by design. Inspecting logs, code, configuration, and internal systems is the whole point during an incident, which means you have to decide where that data can go. Open egress gives that data a path out of your network - a risk you wouldn't accept for any other production-adjacent workload.&lt;/LI&gt;
&lt;LI&gt;Second, it reasons over text it didn't write - logs, issue descriptions, tool output — which is how prompt injection gets in. Handling that is partly model safety, and Azure SRE Agent runs under Microsoft's Responsible AI standard with safety work from OpenAI and Anthropic. Network controls add another layer: an instruction that tries to reach a destination you haven't allowed can't run, because the network blocks it.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;P&gt;For example, an agent investigating an outage might query Log Analytics, read deployment configuration, and call an internal runbook - all private resources. With VNet integration, those calls follow the routes, DNS, and firewall rules your workloads already use. A request to an external endpoint you haven't allowed fails at the network boundary. It doesn't depend on the model recognizing the risk and refusing; the network stops it either way.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Choose an egress mode&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Azure SRE Agent has three egress modes, and you don't have to start at the strongest.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Unrestricted&lt;/STRONG&gt; - all outbound traffic allowed&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Limited&lt;/STRONG&gt; - deny all outbound, allow an explicit list of hosts. Gives you host-level control without setting up a full VNet&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure VNet&lt;/STRONG&gt; - outbound traffic goes through a delegated subnet in your network, with your NSG rules and private DNS applied. The recommended mode for production and regulated workloads.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;STRONG&gt;How Azure VNet mode works&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Outbound traffic takes one of two paths, and every call takes exactly one.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Your VNet.&lt;/STRONG&gt; Everything not placed on the managed path goes through a delegated subnet in your own network, where your NSG rules, private DNS, and firewall all apply. The agent is just another workload on that subnet, so it can reach what the subnet can reach: databases behind private endpoints, internal services, monitoring stores, and key vaults -the parts of production that aren't reachable from the public internet. The resources that matter most during an incident are usually the private ones. If your network connects to on-premises over ExpressRoute or VPN, the agent can reach those systems too, as long as your existing routes and rules allow it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The managed infra path.&lt;/STRONG&gt; Some destinations go through Azure SRE Agent's managed infrastructure network instead - platform services the agent needs, plus optional categories you turn on: package registries, code repositories, and remote MCP servers. This path skips your VNet, so your NSG rules and Firewall Policies don't apply to it. Treat it as a deliberate exception, used only where you need it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why public services start on the managed path&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Public services are hard to allow by IP address. GitHub, PyPI, npm, NuGet, apt, and the container registries run on large, changing IP ranges, and they don't map to a single Azure service tag. If your NSG filters by IP and port, keeping those lists up to date is constant work, and when a list falls behind, the agent can't pull a package or read a repository - and an investigation stalls on a networking problem that has nothing to do with the incident.&lt;/P&gt;
&lt;P&gt;Each category has a toggle: package registries (PyPI, npm, NuGet, apt), code repositories (GitHub, GitHub Enterprise, Azure DevOps), remote MCP servers, and a list of additional hostnames. Starting with these on the managed path keeps the agent working reliably without maintaining an IP allowlist. For build-time dependencies, that's usually fine.&lt;/P&gt;
&lt;P&gt;If you want this traffic inspected too, the next step is name-based (FQDN) egress filtering in your own network. Once your firewall can allow github.com and pypi.org by name, you can move these categories off the managed path and route them through your VNet instead&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Configure it&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Two decisions: the subnet, and what (if anything) uses the bypass.&lt;/P&gt;
&lt;img /&gt;
&lt;OL&gt;
&lt;LI&gt;Navigate to Settings &amp;gt; Workspace Configuration &amp;gt; Network&lt;/LI&gt;
&lt;LI&gt;Choose Azure VNet as the egress mode.&lt;/LI&gt;
&lt;LI&gt;Select a subnet that is /28 or larger and delegated to `Microsoft.App/environments`.&lt;/LI&gt;
&lt;LI&gt;Decide which categories, if any, use the bypass.&lt;/LI&gt;
&lt;LI&gt;Restrict who can change the egress mode and bypass toggles. These settings widen or narrow the agent's reach, so govern them like any production network control.&lt;/LI&gt;
&lt;LI&gt;Test the outbound behavior before using the agent with production data.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;A reasonable setup for most enterprises during preview: use Azure VNet mode, keep package registries and code repositories on the bypass if you need reliable access to them, and route everything else through your VNet. Stricter environments can turn those categories off and rely on their own name-based firewall rules.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;What it doesn't cover yet&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;VNet integration is in preview, with two limitations to know. It covers outbound traffic only - reaching the agent privately from inside your network isn't part of this preview. And connector traffic still routes over the public internet; the governance and credential isolation in Connectors V2 still apply.&lt;/P&gt;
&lt;P&gt;Use VNet integration for outbound control of the agent workspace, and combine it with identity, RBAC, tool permissions, hooks, and connector governance for a complete set of controls.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Where it fits&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;VNet integration doesn't replace identity, RBAC, tool permissions, or connector governance. It controls where traffic can go. The agent still needs the right identity and permissions to access a resource in the first place.&lt;/P&gt;
&lt;P&gt;Identity is the foundation: your RBAC assignments decide what the agent can reach. Permissions and hooks shape what it does within reach: allow/ask/deny rules control what runs, and hooks let you inspect or change a tool call before it runs. VNet integration sits underneath, controlling where traffic can go no matter what the agent tries to do.&lt;/P&gt;
&lt;P&gt;You want the agent to be capable. You also want a boundary that holds whether or not it is.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Get started&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Create an SRE Agent - &lt;A href="https://aka.ms/sreagent" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Documentation - &lt;A href="https://aka.ms/sreagent/newdocs" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/newdocs&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Recipes - &lt;A href="https://aka.ms/sreagent/recipes" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/recipes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Build 2026 Announcement - &lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank" rel="noopener"&gt;https://aka.ms/Build26/blog/SREAgent&lt;/A&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 22:54:04 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/vnet-integration-for-azure-sre-agent-preview/ba-p/4524287</guid>
      <dc:creator>sanchitmehta</dc:creator>
      <dc:date>2026-06-02T22:54:04Z</dc:date>
    </item>
    <item>
      <title>Managed Connectors for SRE Agent (preview)- Govern what your agent can do</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/managed-connectors-for-sre-agent-preview-govern-what-your-agent/ba-p/4524840</link>
      <description>&lt;P&gt;Giving an agent access to a tool is the easy part. The harder question is what it's allowed to do with that access. "Can the agent copy a file in OneDrive?" mostly answers itself. "Can it copy any file, to any destination, over one that's already there?" is the one that decides whether the integration has a governance layer.&lt;/P&gt;
&lt;P&gt;Managed Connectors is built around that second question. It expands the catalog of tools the agent can reach - OneDrive, SharePoint, Google Drive, GitLab, Power BI, Microsoft Security Copilot, with more being added regularly - and pairs it with a governance model that keeps the policy for those tools outside the agent's control. This is part of the Azure SRE Agent announcements at&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank" rel="noopener" data-href="https://aka.ms/Build26/blog/SREAgent"&gt;Build 2026&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;What's new&lt;/H3&gt;
&lt;P&gt;Managed Connectors is the next generation of our connector experience. It significantly expands the catalog of third-party and first-party SaaS integrations available to SRE Agent and surfaces each one to the agent as a curated set of operations through the Model Context Protocol (MCP) - the same standard the agent already uses for every other tool source.&lt;/P&gt;
&lt;H3&gt;Governance: the agent gets capability, you keep control&lt;/H3&gt;
&lt;P&gt;The governance model is the headline of this release, so it's worth being concrete about it. When you add a connector, you walk through a short wizard - Set up connector, Configure tools, Review &amp;amp; Save - and the "Configure tools" step is where the policy is set.&lt;/P&gt;
&lt;P&gt;Three things make it different from "just wire the API up to the LLM":&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You choose what's exposed - it isn't automatic. A connector might offer 40+ operations; in the wizard you pick the ones the agent can use. The rest aren't shown to the model, so it can't call them.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Parameter policy lives outside the agent. For each selected operation you can mark parameters as user-defined (pinned to a value you specify) or agent-defined (the agent fills it in). On the Microsoft Planner “Create a task” tool, for example, you can choose the group ID from a list of your joined groups – this means that the agent provides the task details but can’t assign it to any arbitrary group, because that isn’t a parameter it sees when invoking the tool.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Per-tool approval is built in. Each operation has an &lt;EM&gt;Allow/Ask&lt;/EM&gt; toggle integrated directly into the creation and edit wizards. "Ask" routes the call through the agent runtime human-in-the-loop approval flow before it executes. On that same Microsoft Planner connector, you might leave read-only tools like “List tasks” or "Get plan details” on Allow, but flip “Delete a task” to Ask so a human must confirm before anything is removed. This is enforced on the agent's runtime; it is not a prompt instruction the model can be talked out of following.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Credential Isolation&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;No long-lived secrets in the agent.&lt;/STRONG&gt; No API keys, no client secrets, no certificates, no OAuth tokens. All service credentials are encrypted at rest and stored outside of the agent’s trust boundary&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Automatic token refreshed.&lt;/STRONG&gt; Once you consent, the internal connector resource keeps your tokens valid. You won't be asked to re-authenticate unless your service itself requires it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;You consent once, in your own browser, with your own service.&lt;/STRONG&gt; SRE Agent never proxies your password or the sign-in flow.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Per-connection authorization.&lt;/STRONG&gt; Each connection is bound to the specific SRE Agent instance you set up on and cannot be used by external threat actors.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;How it fits together&lt;/H3&gt;
&lt;P&gt;All of this is stored and evaluated outside the agent loop. Each configured connector becomes an MCP server that the SRE Agent runtime registers as a tool source, the same standard wire format the agent uses for everything else, so adoption on the model side is trivial. Each layer does one job, and the trust boundary between "what the model decided" and "what was actually sent" is explicit and inspectable: the agent never sees the operations you didn't select, never sees the parameter slots you pinned, and cannot bypass approval on operations you marked Ask.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;H3&gt;How to try it&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Open the SRE Agent portal and go to &lt;STRONG&gt;Builder&lt;/STRONG&gt; &amp;gt; &lt;STRONG&gt;Connectors&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Pick a connector from the catalog with the “Preview” label and go through the creation wizard steps.&lt;/LI&gt;
&lt;LI&gt;At the “Set up connector” step, choose how the connector authenticates. Start with “OAuth” if you just want to sign-in and see it working against your own account.&lt;/LI&gt;
&lt;LI&gt;At “Configure tools”, select the operations you want to expose, pin any parameters that shouldn't be agent-controlled, and mark sensitive operations as “Ask.”&lt;/LI&gt;
&lt;LI&gt;Review &amp;amp; Save. The connector is registered with the runtime and immediately available to your agent. You can enable/disable specific tools or connectors in the “Capabilities” section.&lt;/LI&gt;
&lt;LI&gt;Edit connector – after creating the new connector, at any point you can go back and authenticate it with a different account, add or remove operations, update tool parameters and configure approval policies&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-parastyle="heading 3"&gt;Resources&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;134245418&amp;quot;:true,&amp;quot;134245529&amp;quot;:true,&amp;quot;335559738&amp;quot;:160,&amp;quot;335559739&amp;quot;:80}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="0" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;Create new SRE Agent —&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;SRE Agent Documentation&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;—&lt;/SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/newdocs" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/newdocs&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI aria-setsize="-1" data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&amp;quot;335551671&amp;quot;:0,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;SRE Agent recipes —&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;A href="https://aka.ms/sreagent/recipes" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/sreagent/recipes&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;&lt;SPAN data-ccp-parastyle="Compact"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{&amp;quot;201341983&amp;quot;:0,&amp;quot;335559738&amp;quot;:36,&amp;quot;335559739&amp;quot;:36,&amp;quot;335559740&amp;quot;:240}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Build 2026 SRE Agent announcements - &lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank" rel="noopener"&gt;https://aka.ms/Build26/blog/SREAgent&lt;/A&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 21:12:53 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/managed-connectors-for-sre-agent-preview-govern-what-your-agent/ba-p/4524840</guid>
      <dc:creator>Dalibor_Kovacevic</dc:creator>
      <dc:date>2026-06-02T21:12:53Z</dc:date>
    </item>
    <item>
      <title>Shaping what Azure SRE Agent does: Tool Permissions and Hooks</title>
      <link>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/shaping-what-azure-sre-agent-does-tool-permissions-and-hooks/ba-p/4524791</link>
      <description>&lt;P&gt;When an AI agent runs against production, the first question every security team asks is "&lt;EM&gt;What can it do, who decided it could, and what stops it from doing something it should not."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Azure SRE Agent reached general availability in March. Since then, teams inside Microsoft and customers running it against real production workloads have asked for the same thing: finer-grained controls over what the agent can do on its own and a clear answer to who governs each call that reaches a tool.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Today at &amp;nbsp;&lt;A href="vscode-file://vscode-app/Volumes/VS%20Code/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html" target="_blank" rel="noopener" data-href="https://aka.ms/Build26/blog/SREAgent"&gt;Build 2026&lt;/A&gt;, we are releasing global tool access policies as one of a set of new governance controls. This post covers how they work. Tool access policies give security and platform teams a single place to define which tools the agent can invoke, under what conditions, and what requires human approval before it runs. Underneath those policies sits the identity the agent runs as the bedrock that every other control layer depends on. It is defense in depth applied to agent behavior: layers of control, each one holding on its own, so that governing the agent is something you can read, audit, and reason about as you scale it across production.&lt;/P&gt;
&lt;H2&gt;Identity is the bedrock: managed identity today, agent identity next&lt;/H2&gt;
&lt;P&gt;Start here, because nothing else matters if you skip it. The identity the SRE Agent runs as, and the Azure RBAC role assignments on that identity, are the most powerful boundary the agent works inside of. If your role assignments do not grant the agent access to a resource, none of the controls below come into play, because the agent cannot reach the resource to begin with. Network rules, tool permissions, hooks, and connector contracts all sit on top of an RBAC story that you write. The features in this post add layers above that floor. They do not replace it.&lt;/P&gt;
&lt;P&gt;Today the SRE Agent operates as a managed identity, and your RBAC role assignments on that identity govern what it can do. This is the bedrock, and it is the same model your other Azure workloads already use. You assign roles, you scope them, and the agent inherits exactly what you granted and nothing more.&lt;/P&gt;
&lt;P&gt;Everything that follows assumes the bedrock is in place. With identity settled, the next question is the obvious one: where is the agent allowed to send its traffic?&lt;/P&gt;
&lt;H2&gt;Permissions: govern what the agent does with a tool&lt;/H2&gt;
&lt;P data-line="22"&gt;Identity decides what the agent can reach. Permissions decide what the agent does with the access it has, down to the individual tool. Two levels cover the range: a point-and-click grid for the common cases, and hooks when a decision needs your own code.&lt;/P&gt;
&lt;P data-line="24"&gt;The grid is the easy mode. Every tool the agent can use, built-in tools along with MCP servers, services, and custom tools, shows up in one searchable list with two switches. &lt;STRONG&gt;On/Off&lt;/STRONG&gt; sets whether the tool is available at all; turn it off and the agent cannot use it. &lt;STRONG&gt;Allow/Ask&lt;/STRONG&gt; sets what happens when it is on: Allow lets the agent run the tool automatically, Ask requires a human to approve every time, except in Autonomous mode. Select tools in bulk to flip a whole category at once, filter by category or permission, and use the Advanced permissions tab when you want rules that apply at global, per-agent, or per-thread scope instead of tool by tool. Defaults stay put until you touch them, and the engine is fail-closed: if a rule cannot be evaluated, the call is blocked rather than allowed. That covers most of what teams need.&lt;/P&gt;
&lt;P data-line="26"&gt;Underneath those switches are three rules, &lt;STRONG&gt;allow&lt;/STRONG&gt;, &lt;STRONG&gt;ask&lt;/STRONG&gt;, and &lt;STRONG&gt;deny&lt;/STRONG&gt;, and the Advanced tab is where you set them by scope. Global rules apply to every agent and thread, Agent rules to one custom agent, Thread rules to a single conversation. Deny is the hard one: it blocks the tool outright no matter the run mode, and a deny at a higher scope always wins, so an Allow at thread scope cannot reopen something denied globally. That split is deliberate. A platform team sets the Global guardrails that should never be crossed and the Asks that always need a human, and service teams add their own Allow rules at Agent scope for routine work, without being able to override the guardrails above them.&lt;/P&gt;
&lt;P data-line="28"&gt;Platform team, Global scope:&lt;/P&gt;
&lt;UL data-line="30"&gt;
&lt;LI data-line="30"&gt;deny: bash(az * delete *) - never delete, on any agent or thread&lt;/LI&gt;
&lt;LI data-line="31"&gt;deny: bash(kubectl delete *)&lt;/LI&gt;
&lt;LI data-line="32"&gt;ask: bash(az webapp restart *) - always confirm, even in Autonomous&lt;/LI&gt;
&lt;LI data-line="33"&gt;allow: bash(az monitor *) - auto-approve monitoring queries&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="35"&gt;Service team, Agent scope:&lt;/P&gt;
&lt;UL data-line="37"&gt;
&lt;LI data-line="37"&gt;allow: bash(kubectl get *) - routine read-only work&lt;/LI&gt;
&lt;LI data-line="38"&gt;allow: bash(kubectl describe *)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P data-line="40"&gt;Two details make this safe to lean on. Rules match the canonicalized tool invocation rather than the raw text, so enforcement holds no matter how the command was assembled. And fail-closed has a softer edge than a hard stop: a cached last-known-good policy covers transient failures, so a blip in the policy store blocks the call rather than silently widening access.&lt;/P&gt;
&lt;P&gt;You can find these under &lt;STRONG&gt;Capabilities &lt;/STRONG&gt;&amp;gt; &lt;STRONG&gt;Tools&lt;/STRONG&gt;&lt;/P&gt;
&lt;img&gt;Tools permissions.&lt;/img&gt;&lt;img&gt;Advanced Tool permissions.&lt;/img&gt;
&lt;P data-line="48"&gt;The layer worth spending time on is hooks. Allow and Ask answer "should this tool run." Hooks answer "should this specific call run, given exactly what it is about to do." A hook fires before the agent runs a tool and receives the actual call, parameters and all. Your code then decides the outcome and can reshape it: rewrite parameters before they are sent, inject extra context into the pipeline as a user message so the agent reconsiders before its next step, block the call outright, or redirect the agent toward a safer path. Because your code sees the real parameters, the decision can depend on anything you can express in code: which resource the call targets, whether a value falls outside an allowed range, the time of day, the result of an external policy lookup. This is where you write the rule the grid cannot.&lt;/P&gt;
&lt;P data-line="50"&gt;Two kinds of hook, mixable on the same agent. Command hooks are a script you write; reach for these when code is enough. Prompt hooks put a separate LLM in the loop as a judge that evaluates the call in context; reach for these when the decision needs reasoning rather than a fixed rule. A real example from our own internal test agent: when the agent tries to list files through the shell with ls or dir, a hook blocks the call. The agent absorbs the signal, reconsiders, and reaches for the ListDir tool instead. The hook did not argue with a human. It shaped what happened next. As with the grid, configure nothing and the agent behaves exactly as it does today. Both are additive.&lt;/P&gt;
&lt;P data-line="52"&gt;Authoring one is a short form. You name the hook, pick the event (Pre Tool Use, so it runs before the call), and set a tool matcher, either picked from the tool menu or written as a regex like (FetchWebpage|SearchMemory) with anchors and lookaheads when you need them, so the hook fires only on the calls you care about. You set a timeout and a fail mode (Block, so a hook that errors or hangs stops the call rather than waving it through), and you write the body in Bash or Python. A command hook reads the call as JSON on stdin, the event name, the tool name, its parameters, and the call id, and answers on stdout. Print nothing and exit zero to allow. Return a block decision with a reason to stop the call, and that reason is what the agent reads back. You can also substitute: run a cheaper or safer version yourself, block the real call, and hand your own output back as the result, so the agent never runs the expensive or risky original.&lt;/P&gt;
&lt;LI-CODE lang="bash"&gt;#!/bin/bash
input=$(cat)
tool=$(echo "$input" | jq -r '.tool_name')

# Block one tool, with a reason the agent will read
if [ "$tool" = "ExampleToolName" ]; then
  echo '{"decision":"block","reason":"Blocked ExampleToolName by hook policy."}'
  exit 0
fi

# Otherwise allow: print nothing and exit 0
exit 0&lt;/LI-CODE&gt;
&lt;P&gt;You can find these under &lt;STRONG&gt;Builder &lt;/STRONG&gt;&amp;gt; &lt;STRONG&gt;Hooks&lt;/STRONG&gt;&lt;/P&gt;
&lt;img&gt;Pre Tool Use Hook with inline sample starter code.&lt;/img&gt;
&lt;H2&gt;Each layer holds on its own&amp;nbsp;&lt;/H2&gt;
&lt;P data-line="73"&gt;The layers stack. Identity is the floor: your RBAC assignments decide what the agent can reach at all. Permissions, the grid and hooks together, decide what it does with a tool. You author each layer, each one holds whether or not the layer above it behaves as expected, and all of it configures through the same ARM and Bicep surface your platform team already uses, reproducible the way the rest of your Azure estate is.&lt;/P&gt;
&lt;P data-line="75"&gt;The upgrade path is additive and non-breaking. Existing agents keep working. Turn on each control when you are ready, in the order your governance requires.&lt;/P&gt;
&lt;P data-line="77"&gt;There is more coming. We run Azure SRE Agent inside Microsoft on our own production workloads, so we feel the same gaps you do, and the next round is shaped by what we hear from teams running it in production today. Which control is doing the most for you, and which one are you still waiting on? Let us know and thank you!&lt;/P&gt;
&lt;H2&gt;Getting started&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Create new SRE Agent — &lt;A href="https://aka.ms/sreagent" target="_blank" rel="noopener"&gt;&lt;U&gt;https://aka.ms/sreagent&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;SRE Agent Documentation — &lt;A href="https://aka.ms/sreagent/newdocs" target="_blank" rel="noopener"&gt;&lt;U&gt;https://aka.ms/sreagent/newdocs&lt;/U&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;SRE Agent recipes — &lt;A href="https://aka.ms/sreagent/recipes" target="_blank" rel="noopener"&gt;https://aka.ms/sreagent/recipes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Build 2026 Announcement - &lt;A class="lia-external-url" href="https://aka.ms/Build26/blog/SREAgent" target="_blank" rel="noopener"&gt;https://aka.ms/Build26/blog/SREAgent&lt;/A&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 02 Jun 2026 21:11:11 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/apps-on-azure-blog/shaping-what-azure-sre-agent-does-tool-permissions-and-hooks/ba-p/4524791</guid>
      <dc:creator>Dalibor_Kovacevic</dc:creator>
      <dc:date>2026-06-02T21:11:11Z</dc:date>
    </item>
  </channel>
</rss>

