クラウドネイティブ入門
クラウドネイティブアプリケーションは “インフラを意識させない” 設計が前提です。コンテナ/Kubernetes/サーバーレスといったマネージド基盤を活用し、スケール・冗長化・監視をプラットフォームに委ねることで、アプリ本来のビジネスロジックに集中できます。従来のオンプレ / デスクトップ開発と最も異なる点は 「ステートレスで短命なプロセスが自動的に増減する」 という実行モデルです。
① Azure Functions ガイド
観点 | ポイント |
---|---|
目的・概要 | Azure Functions は Azure App Service 上で動く 完全マネージドな“イベント駆動”実行環境。コードは 1 つの関数単位でデプロイし、HTTP、キュー、ストレージ変更、Service Bus などのトリガーが来た時だけ実行されるため、アイドル時課金がゼロ (従量課金プラン) になる。 ([Azure Functions overview |
仕組み | – Function App = “関数を束ねるコンテナ”。設定 (ホスティングプラン・ランタイム) を共有- トリガー & バインディング で外部サービスを宣言的に接続- ランタイムは .NET 6 / 8 (GA) と .NET 9 Preview が選択可 (.isolated 推奨) ([Azure Functions runtime versions overview |
ホスティングプラン | Consumption (最小コスト / 100 ms 単位課金), Premium (常駐 + VNET など高機能), Dedicated (App Service) ([Azure Functions scale and hosting |
スケール | 呼び出し回数・キュー長などメトリクスで自動インスタンス増減。Cold Start を抑えたい場合は Premium を選択 |
開発ワークフロー | 1. dotnet new あるいは Visual Studio / VS Code でプロジェクト作成2. Azure Functions Core Tools でローカル実行・デバッグ3. az functionapp create / GitHub Actions で CI/CD |
監視 & 運用 | Application Insights が標準組み込み。分散トレースも自動収集 |
実装例(C# /.NET 8 Isolated)
// Program.cs
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
public class HelloFn
{
[Function(nameof(HelloFn))]
public static HttpResponseData Run(
[HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestData req,
FunctionContext ctx)
{
var res = req.CreateResponse(HttpStatusCode.OK);
res.WriteString("Hello from Azure Functions!");
return res;
}
}
func start
でローカル実行し、func azure functionapp publish <APP_NAME>
でデプロイ。
.NET Aspire での開発
観点 | ポイント |
---|---|
概要 | .NET Aspire は “クラウドネイティブ .NET スタック”。分散サービス構成(アプリホスト、サービスデフォルト、コンポーネント宣言)とローカルオーケストレーションを Visual Studio / CLI から即利用できる。8.0 で GA、9.x で継続進化中。 (NET Aspire docs: What’s new for January 2025 – Learn Microsoft, [.NET Aspire what’s new? |
Azure Functions 統合 (Preview) | Visual Studio で “.NET Aspire Orchestrator Support” をチェックすると、Functions プロジェクトが Aspire App Host と同時生成され、全サービスを dotnet run 一発で並行起動できる。 (.NET Aspire and Azure Functions integration preview – Visual Studio …, NET Aspire Azure Functions integration (Preview) – Learn Microsoft) |
仕組み | – AppHost : Dapr-styleプロセスで各サービスを監視&ログ UI も提供- ServiceDefaults : 標準ポリシー (Retry/Timeout/Telemetry) を DI 経由で注入- Components : Redis/PostgreSQL/Storage などを YAML ではなく C# DSL で宣言 |
ローカル→クラウド移行 | Aspire で動くコンテナ/リソース定義を Bicep & GitHub Actions テンプレートに自動変換可能 (export) |
実装例 | bash<br>dotnet new func --name ApiFns -lang C# -f net8.0 --use-defaults --hosted<br>dotnet new aspire-host --name MyApp.AppHost<br>dotnet new aspire-servicedefaults -n MyApp.ServiceDefaults<br> AppHostProgram.cs にcsharp<br>builder.AddAzureFunctions("ApiFns");<br>builder.AddRedis("cache");<br> を追記 → dotnet run で Functions + Redis コンテナ + ダッシュボードが自動起動 |
旧来型エンジニアへの“つまずきポイント”と対策
課題 | どう乗り越えるか |
---|---|
状態保持 | ローカルメモリに保存しない。Cosmos DB、Redis、Storage へ外出し |
スケールに伴う競合 | 関数は再試行される前提で 冪等 (idempotent) 設計 |
依存サービスの接続文字列 | ASP.NET の appsettings.json ではなく 環境変数 / Key Vault へ |
デバッグ | Aspire のダッシュボードに統合ログ/分散トレースが集約されるので “F5” デバッグ感覚を維持 |
CI/CD パイプライン | GitHub Actions に azure/functions-action@v1 , azure/login を追加。Aspire の export bicep 出力を使えば IaC をほぼ自動生成 |
まとめ
- Azure Functions は「イベントが来た時だけスケールアウトする関数」を書くだけで可用性・課金最適化を自動化するサーバーレス基盤。
- .NET Aspire を組み合わせると、ローカル環境で複数サービス+依存ミドルウェアをワンクリック起動し、そのままクラウドへ展開できる。
- 従来のネイティブアプリから移行する際は ステートレス化・外部サービス依存・IaC 前提の DevOps 文化を意識することが最重要。
参考リンクも合わせてご覧ください(Microsoft Learn / DevBlogs / Visual Studio Magazine など上記出典)。
コメントを残す