<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Deployment | The .NET Blog</title><link>https://thedotnetblog.com/fr/tags/deployment/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>fr</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 30 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/fr/tags/deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Votre Agent MAF Local Vient d'Obtenir une Maison en Production</title><link>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/fr/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</guid><description>Foundry Hosted Agents donne à votre agent Microsoft Agent Framework une identité, un scaling, une persistance de session et une observabilité sans configuration supplémentaire. Voici à quoi cela ressemble en pratique.</description><content:encoded>&lt;p&gt;Faire fonctionner un agent localement est la partie amusante. La partie délicate est tout ce qui vient après : le déployer sans perdre la tête, gérer les sessions, configurer l&amp;rsquo;identité, câbler l&amp;rsquo;observabilité. Cela signifie généralement beaucoup d&amp;rsquo;infrastructure personnalisée.&lt;/p&gt;
&lt;p&gt;Foundry Hosted Agents vient de supprimer la majeure partie de cette infrastructure pour les utilisateurs de Microsoft Agent Framework (MAF).&lt;/p&gt;
&lt;h2 id="ce-que-foundry-hosted-agents-fait-vraiment"&gt;Ce que Foundry Hosted Agents Fait Vraiment&lt;/h2&gt;
&lt;p&gt;Lorsque vous déployez un agent MAF dans Foundry Hosted Agents, la plateforme gère une liste étonnamment longue de choses que vous auriez autrement à construire vous-même :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mise à l&amp;rsquo;échelle à zéro&lt;/strong&gt; — votre agent ne coûte rien en idle et redémarre automatiquement&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandboxes isolés par VM par session&lt;/strong&gt; — chaque session utilisateur obtient son propre sandbox avec persistance du système de fichiers qui survit aux événements de réduction d&amp;rsquo;échelle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entra ID intégré&lt;/strong&gt; — chaque agent obtient sa propre identité pour appeler les modèles Foundry, Toolbox et les services Azure sans secrets dans l&amp;rsquo;image&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Déploiements versionnés&lt;/strong&gt; — chaque déploiement est un instantané immuable, avec support de déploiement blue/green et canary&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observabilité sans configuration&lt;/strong&gt; — &lt;code&gt;APPLICATIONINSIGHTS_CONNECTION_STRING&lt;/code&gt; est injecté au runtime pour que les traces OpenTelemetry de MAF s&amp;rsquo;écoulent automatiquement dans App Insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce dernier point est vraiment appréciable. Pas de câblage supplémentaire, pas de configuration additionnelle. Les traces apparaissent simplement.&lt;/p&gt;
&lt;h2 id="la-différence-de-code-est-minime"&gt;La Différence de Code Est Minime&lt;/h2&gt;
&lt;p&gt;C&amp;rsquo;est ce que j&amp;rsquo;apprécie le plus dans cette intégration. Vous ne réécrivez pas votre agent. Vous l&amp;rsquo;encapsulez simplement :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En .NET :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry.Hosting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MapFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;En Python :&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ResponsesHostServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C&amp;rsquo;est tout. La même logique que vous avez testée localement est ce qui s&amp;rsquo;exécute en production. La plateforme l&amp;rsquo;encapsule dans l&amp;rsquo;infrastructure de gestion de sessions, d&amp;rsquo;identité et de scaling.&lt;/p&gt;
&lt;h2 id="deux-protocoles-un-agent"&gt;Deux Protocoles, Un Agent&lt;/h2&gt;
&lt;p&gt;Les Hosted Agents supportent deux styles d&amp;rsquo;endpoints :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Responses&lt;/strong&gt; (&lt;code&gt;/responses&lt;/code&gt;) — compatible OpenAI, gère l&amp;rsquo;historique des conversations et le streaming. Bon défaut pour les agents de type chat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invocations&lt;/strong&gt; (&lt;code&gt;/invocations&lt;/code&gt;) — vous définissez le schéma requête/réponse. Bon pour les workflows non conversationnels.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous construisez quelque chose qui ressemble à une conversation, commencez avec Responses. Si vous construisez un agent de type API qui prend une entrée structurée et retourne une sortie structurée, Invocations vous donne la flexibilité.&lt;/p&gt;
&lt;h2 id="le-flux-de-déploiement-avec-azd"&gt;Le Flux de Déploiement avec &lt;code&gt;azd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Lorsque vous exécutez &lt;code&gt;azd up&lt;/code&gt; avec un agent MAF :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crée optionnellement un projet Foundry et déploie un modèle&lt;/li&gt;
&lt;li&gt;Empaquette votre code et pousse une image vers Azure Container Registry&lt;/li&gt;
&lt;li&gt;Provisionne du calcul depuis l&amp;rsquo;image ACR&lt;/li&gt;
&lt;li&gt;Attribue un Entra ID dédié à l&amp;rsquo;agent&lt;/li&gt;
&lt;li&gt;Expose un endpoint stable (&lt;code&gt;https://{project_endpoint}/agents/{agent_name}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Gère tout le reste à partir de ce point&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les sessions persistent jusqu&amp;rsquo;à 30 jours. Le calcul inactif est déprovisionné après 15 minutes et restauré transparemment sur la prochaine requête. Du point de vue de l&amp;rsquo;agent, rien n&amp;rsquo;a changé.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;La distance entre &amp;ldquo;fonctionnant localement&amp;rdquo; et &amp;ldquo;s&amp;rsquo;exécutant en production&amp;rdquo; a toujours été longue et douloureuse pour les agents IA. Foundry Hosted Agents + MAF réduit considérablement cet écart. Si vous avez déjà un agent local construit avec Agent Framework, cela vaut la peine d&amp;rsquo;essayer aujourd&amp;rsquo;hui.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;équipe annonce que GA arrive bientôt — c&amp;rsquo;est actuellement en preview. Consultez les &lt;a href="https://learn.microsoft.com/en-us/agent-framework/hosting/foundry-hosted-agent"&gt;docs d&amp;rsquo;intégration MAF Hosted Agent&lt;/a&gt; et les &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/04-hosting/FoundryHostedAgents"&gt;exemples .NET&lt;/a&gt; pour démarrer.&lt;/p&gt;
&lt;p&gt;Article original : &lt;a href="https://devblogs.microsoft.com/agent-framework/from-local-to-production-deploy-your-microsoft-agent-framework-agent-with-foundry-hosted-agents/"&gt;From Local to Production: Deploy Your Microsoft Agent Framework Agent with Foundry Hosted Agents&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>