<?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>Cloud-Native | The .NET Blog</title><link>https://thedotnetblog.com/id/tags/cloud-native/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>id</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/id/tags/cloud-native/index.xml" rel="self" type="application/rss+xml"/><item><title>Hooks azd dengan Python, TypeScript, dan .NET: Selamat Tinggal Shell Script</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI kini mendukung hooks dalam Python, JavaScript, TypeScript, dan .NET. Tidak perlu lagi beralih ke Bash hanya untuk menjalankan script migrasi.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jika pernah memiliki proyek yang sepenuhnya ditulis dalam .NET namun tetap harus menulis script Bash untuk hooks azd, rasa frustrasi itu sudah pasti familiar. Mengapa harus beralih ke sintaks shell di langkah pre-provisioning ketika seluruh proyek menggunakan C#?&lt;/p&gt;
&lt;p&gt;Masalah ini kini memiliki solusi resmi. Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;baru saja meluncurkan dukungan multi-bahasa untuk hooks&lt;/a&gt;, dan hasilnya sesuai ekspektasi.&lt;/p&gt;
&lt;h2 id="apa-itu-hooks"&gt;Apa itu hooks&lt;/h2&gt;
&lt;p&gt;Hooks adalah script yang berjalan di titik-titik penting dalam siklus hidup &lt;code&gt;azd&lt;/code&gt; — sebelum provisioning, setelah deployment, dan lainnya. Didefinisikan di &lt;code&gt;azure.yaml&lt;/code&gt;, mereka memungkinkan injeksi logika kustom tanpa memodifikasi CLI.&lt;/p&gt;
&lt;p&gt;Sebelumnya hanya Bash dan PowerShell yang didukung. Kini bisa menggunakan &lt;strong&gt;Python, JavaScript, TypeScript, atau .NET&lt;/strong&gt; — dan &lt;code&gt;azd&lt;/code&gt; menangani sisanya secara otomatis.&lt;/p&gt;
&lt;h2 id="cara-kerja-deteksi-bahasa"&gt;Cara kerja deteksi bahasa&lt;/h2&gt;
&lt;p&gt;Cukup arahkan hook ke sebuah file dan &lt;code&gt;azd&lt;/code&gt; akan menyimpulkan bahasa dari ekstensinya:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tanpa konfigurasi tambahan. Jika ekstensinya ambigu, bisa menambahkan &lt;code&gt;kind: python&lt;/code&gt; (atau bahasa yang sesuai) secara eksplisit.&lt;/p&gt;
&lt;h2 id="detail-penting-per-bahasa"&gt;Detail penting per bahasa&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Letakkan &lt;code&gt;requirements.txt&lt;/code&gt; atau &lt;code&gt;pyproject.toml&lt;/code&gt; di samping script (atau direktori induknya). &lt;code&gt;azd&lt;/code&gt; akan otomatis membuat virtual environment, menginstal dependensi, dan menjalankan script.&lt;/p&gt;
&lt;h3 id="javascript-dan-typescript"&gt;JavaScript dan TypeScript&lt;/h3&gt;
&lt;p&gt;Pola yang sama — letakkan &lt;code&gt;package.json&lt;/code&gt; dekat script dan &lt;code&gt;azd&lt;/code&gt; akan menjalankan &lt;code&gt;npm install&lt;/code&gt; terlebih dahulu. Untuk TypeScript, menggunakan &lt;code&gt;npx tsx&lt;/code&gt; tanpa langkah kompilasi dan tanpa &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Dua mode tersedia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mode project&lt;/strong&gt;: Jika ada &lt;code&gt;.csproj&lt;/code&gt; di samping script, &lt;code&gt;azd&lt;/code&gt; otomatis menjalankan &lt;code&gt;dotnet restore&lt;/code&gt; dan &lt;code&gt;dotnet build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode single-file&lt;/strong&gt;: Di .NET 10+, file &lt;code&gt;.cs&lt;/code&gt; mandiri dapat dijalankan langsung via &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Tidak perlu file project.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="konfigurasi-per-executor"&gt;Konfigurasi per executor&lt;/h2&gt;
&lt;p&gt;Setiap bahasa mendukung blok &lt;code&gt;config&lt;/code&gt; opsional:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="mengapa-ini-penting-bagi-developer-net"&gt;Mengapa ini penting bagi developer .NET&lt;/h2&gt;
&lt;p&gt;Hooks adalah tempat terakhir dalam proyek berbasis azd yang memaksa pergantian bahasa. Sekarang seluruh deployment pipeline — dari kode aplikasi hingga lifecycle hooks — bisa hidup dalam satu bahasa. Utility .NET yang sudah ada bisa digunakan kembali di hooks, shared library bisa direferensikan, dan pemeliharaan shell script pun berakhir.&lt;/p&gt;
&lt;h2 id="penutup"&gt;Penutup&lt;/h2&gt;
&lt;p&gt;Salah satu perubahan yang terlihat kecil namun benar-benar mengurangi gesekan dalam workflow azd sehari-hari. Dukungan multi-bahasa untuk hooks sudah tersedia sekarang — cek &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;post resmi&lt;/a&gt; untuk dokumentasi lengkap.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Mendapatkan MongoDB EF Core dan Azure Data Lake — Dua Integrasi yang Patut Dicoba</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 menambahkan integrasi MongoDB Entity Framework Core dan Azure Data Lake Storage dengan health check otomatis dan service discovery. Inilah tampilannya dalam praktik.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 hadir dengan dua integrasi database baru yang patut diperhatikan: MongoDB Entity Framework Core dan Azure Data Lake Storage.&lt;/p&gt;
&lt;h2 id="mongodb-bertemu-ef-core-di-aspire"&gt;MongoDB bertemu EF Core di Aspire&lt;/h2&gt;
&lt;p&gt;Aspire telah mendukung MongoDB untuk sementara, tapi selalu driver mentah — tidak ada EF Core, tidak ada DbContext, tidak ada kueri LINQ. Sekarang Anda mendapatkan pengalaman EF Core penuh dengan MongoDB, beserta health check otomatis dan service discovery dari Aspire.&lt;/p&gt;
&lt;p&gt;Pengaturan di AppHost:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&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;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithDataVolume&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&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;apiService&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;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&amp;#34;&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&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;Di proyek yang menggunakan:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Daftarkan DbContext Anda:&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="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&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;Integrasi menangani connection pooling, trace OpenTelemetry, dan health check di belakang layar.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-bergabung"&gt;Azure Data Lake Storage bergabung&lt;/h2&gt;
&lt;p&gt;Di AppHost:&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&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;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&amp;#34;&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&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;analyticsService&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;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&amp;#34;&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&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;Di proyek yang menggunakan:&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="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&amp;#34;&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;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&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;Tidak ada manajemen connection string manual, tidak ada pencarian kredensial.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 adalah rilis inkremental, tapi integrasi MongoDB EF Core dan Data Lake mengisi celah nyata. &lt;a href="https://get.aspire.dev"&gt;Upgrade ke 13.2&lt;/a&gt; dan coba.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier Kini GA — Optimasi Biaya Blob Storage Otomatis Tanpa Aturan Siklus Hidup</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Tingkat cerdas Azure Blob Storage kini tersedia secara umum, secara otomatis memindahkan objek antara tingkat hot, cool, dan cold berdasarkan pola akses aktual.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda pernah menghabiskan waktu menyetel kebijakan siklus hidup Azure Blob Storage dan kemudian menyaksikannya runtuh ketika pola akses berubah, ini untuk Anda. Microsoft baru saja mengumumkan &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;ketersediaan umum smart tier&lt;/a&gt; untuk Azure Blob dan Data Lake Storage.&lt;/p&gt;
&lt;h2 id="yang-sebenarnya-dilakukan-smart-tier"&gt;Yang sebenarnya dilakukan smart tier&lt;/h2&gt;
&lt;p&gt;Smart tier terus mengevaluasi waktu akses terakhir setiap objek di akun penyimpanan Anda. Data yang sering diakses tetap di hot, data tidak aktif pindah ke cool setelah 30 hari, lalu ke cold setelah 60 hari lagi. Saat data diakses lagi, langsung dipromosikan kembali ke hot.&lt;/p&gt;
&lt;p&gt;Tidak ada aturan siklus hidup yang perlu dikonfigurasi. Tidak ada penyesuaian manual.&lt;/p&gt;
&lt;p&gt;Selama pratinjau, Microsoft melaporkan bahwa &lt;strong&gt;lebih dari 50% kapasitas yang dikelola smart tier secara otomatis berpindah ke tingkat lebih dingin&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-untuk-developer-net"&gt;Mengapa ini penting untuk developer .NET&lt;/h2&gt;
&lt;p&gt;Skenario praktis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telemetri dan log aplikasi&lt;/strong&gt; — panas saat debugging, jarang diakses setelah beberapa minggu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline data dan output ETL&lt;/strong&gt; — akses intensif saat pemrosesan, lalu sebagian besar dingin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konten yang dibuat pengguna&lt;/strong&gt; — unggahan terbaru panas, konten lama mendingin secara bertahap&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pertukaran-yang-perlu-diketahui"&gt;Pertukaran yang perlu diketahui&lt;/h2&gt;
&lt;p&gt;Aturan peringkatan smart tier bersifat statis (30 hari → cool, 90 hari → cold). Jika Anda membutuhkan ambang batas kustom, aturan siklus hidup masih berlaku.&lt;/p&gt;</content:encoded></item><item><title>Di Mana Anda Harus Meng-host Agen AI di Azure? Panduan Keputusan Praktis</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure menawarkan enam cara untuk meng-host agen AI — dari kontainer mentah hingga Foundry Hosted Agents yang sepenuhnya dikelola. Inilah cara memilih yang tepat untuk workload .NET Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda sedang membangun agen AI dengan .NET sekarang, Anda mungkin sudah memperhatikan: ada &lt;em&gt;banyak&lt;/em&gt; cara untuk meng-host-nya di Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents.&lt;/p&gt;
&lt;p&gt;Microsoft baru saja menerbitkan &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;panduan komprehensif untuk hosting agen Azure AI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="enam-opsi-sekilas"&gt;Enam opsi sekilas&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opsi&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;th&gt;Anda kelola&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kontrol container penuh tanpa kerumitan K8s&lt;/td&gt;
&lt;td&gt;Observabilitas, state, siklus hidup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kepatuhan enterprise, multi-cluster&lt;/td&gt;
&lt;td&gt;Semuanya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tugas singkat berbasis event&lt;/td&gt;
&lt;td&gt;Hampir tidak ada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen HTTP sederhana&lt;/td&gt;
&lt;td&gt;Deployment, scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen opsional kode&lt;/td&gt;
&lt;td&gt;Hampir tidak ada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen framework kustom&lt;/td&gt;
&lt;td&gt;Hanya kode agen Anda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="foundry-hosted-agents--titik-manis-untuk-developer-agen-net"&gt;Foundry Hosted Agents — titik manis untuk developer agen .NET&lt;/h2&gt;
&lt;p&gt;Deployment benar-benar sederhana:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ext install azure.ai.agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Satu perintah &lt;code&gt;azd up&lt;/code&gt; membangun container, mendorongnya ke ACR, menyediakan proyek Foundry, dan memulai agen.&lt;/p&gt;
&lt;h2 id="kerangka-keputusan-saya"&gt;Kerangka keputusan saya&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Butuh infrastruktur nol?&lt;/strong&gt; → Foundry Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Punya kode agen kustom tapi ingin hosting terkelola?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tugas singkat berbasis event?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kontrol container maksimum?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kepatuhan ketat dan multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Untuk sebagian besar developer .NET yang membangun dengan Semantic Kernel atau Microsoft Agent Framework, Hosted Agents kemungkinan adalah titik awal yang tepat. Cek &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;panduan lengkap dari Microsoft&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: Yang Sebenarnya Perlu Diperhatikan Pengembang .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft menjatuhkan tembok pengumuman Kubernetes di KubeCon Europe 2026. Inilah versi tersaringnya — hanya pembaruan AKS dan cloud-native yang penting jika Anda mengekspedisi aplikasi .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft baru saja menerbitkan &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;rekap lengkap KubeCon Europe 2026 mereka&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mtls-tanpa-pajak-service-mesh"&gt;mTLS tanpa pajak service mesh&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; memberi Anda mutual TLS, otorisasi berbasis aplikasi, dan telemetri traffic — tanpa menerapkan mesh sidecar berat. API ASP.NET Core yang berkomunikasi dengan background worker — semua terenkripsi di tingkat jaringan, tanpa perubahan kode aplikasi.&lt;/p&gt;
&lt;h2 id="observabilitas-gpu"&gt;Observabilitas GPU&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS kini menampilkan metrik GPU secara native&lt;/a&gt; ke Prometheus dan Grafana terkelola. Tanpa exporter kustom.&lt;/p&gt;
&lt;h2 id="jaringan-lintas-kluster"&gt;Jaringan lintas kluster&lt;/h2&gt;
&lt;p&gt;Azure Kubernetes Fleet Manager kini mengirimkan &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;jaringan lintas kluster&lt;/a&gt; — konektivitas terpadu, registri layanan global.&lt;/p&gt;
&lt;h2 id="upgrade-yang-lebih-aman"&gt;Upgrade yang lebih aman&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Upgrade agent pool biru-hijau&lt;/strong&gt; membuat node pool paralel. &lt;strong&gt;Rollback agent pool&lt;/strong&gt; memungkinkan Anda kembali ke versi sebelumnya.&lt;/p&gt;
&lt;h2 id="dari-mana-memulai"&gt;Dari mana memulai&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observabilitas dulu&lt;/strong&gt; — aktifkan metrik GPU dan log aliran jaringan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coba upgrade biru-hijau&lt;/strong&gt; — uji alur kerja rollback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot jaringan berbasis identitas&lt;/strong&gt; — aktifkan mTLS untuk satu jalur layanan&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item></channel></rss>