Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Deploy a .NET 8 App to Azure Kubernetes Service (AKS) – Tutorial Guide

2025年09月19日に「Dev.to」が公開したITニュース「Deploy a .NET 8 App to Azure Kubernetes Service (AKS) – Tutorial Guide」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

.NET 8アプリをDockerでコンテナ化し、Azure Kubernetes Service (AKS) にデプロイする初心者向けガイドだ。GitHub Actionsで自動デプロイも設定し、クラウドでのアプリ開発の基礎を実践的に習得できる。

ITニュース解説

このニュース記事は、システムエンジニアを目指す初心者が、最新のクラウド環境でアプリケーションを動かすための一歩を学ぶための実践的なガイドである。具体的には、C#言語で開発された.NET 8のWeb APIを、Dockerという技術を使ってコンテナ化し、それをMicrosoft AzureのKubernetes Service (AKS)上にデプロイする方法を、順を追って解説している。さらに、コードの変更が自動的にクラウド上のアプリケーションに反映されるよう、GitHub Actionsを使った継続的インテグレーション・継続的デプロイメント(CI/CD)パイプラインの構築も学ぶことができる。これにより、現代のソフトウェア開発に不可欠なクラウドデプロイと自動化のスキルを習得できる。

まず、アプリケーションを開発・実行するために必要なツールの準備から始める。これには、コードエディタとして広く使われるVisual Studio Code、.NETアプリケーションをビルドするための.NET 8 SDK、アプリケーションをコンテナ化してローカルで実行するためのDocker Desktopが含まれる。また、Azureのリソースを操作するためのAzure CLI、Kubernetesクラスターを管理するためのkubectl、GitHubリポジトリを操作するためのGitHub CLI、そしてコードのバージョン管理を行うGitも必要となる。これら以外に、GitHubアカウントとAzureアカウントも必須であり、特にAzureアカウントは無料枠を活用して実験できる。ツールの準備が整ったら、dotnet --versionなどのコマンドで正しくインストールされているかを確認することが推奨される。

次に、最初のステップとしてシンプルな.NET 8 Web APIを構築する。このアプリケーションは、架空の天気予報データを返すWebサービスとして機能する。プロジェクトの作成、必要なライブラリの追加、そしてAPIエンドポイントのコード実装を行う。重要な点として、Kubernetesでのアプリケーション監視に役立つヘルスチェック機能と、APIのドキュメントを自動生成するSwagger UIを組み込む。アプリケーションはKestrelというWebサーバー上で動作し、コンテナ内での標準的なポートである8080番ポートでリクエストを受け付けるように設定する。ローカルでアプリケーションを実行し、ブラウザから各エンドポイントにアクセスして正しく動作することを確認する。

アプリケーションが動作することを確認したら、それをDockerコンテナとしてパッケージ化する。この工程では、Dockerfileという設定ファイルを作成する。Dockerfileには、アプリケーションをビルドし、最終的に実行可能なイメージを作成するための一連の手順が記述される。軽量で効率的なコンテナイメージを作成するため、マルチステージビルドと呼ばれる手法を用いる。これは、アプリケーションのビルド環境と実行環境を分け、最終的なイメージには必要な最小限のファイルのみを含める方法である。また、.dockerignoreファイルを作成して、不要なファイルがコンテナイメージに含まれないようにすることで、イメージのサイズを小さく保ち、セキュリティを高める。Dockerfileとアプリケーションコードを使ってDockerイメージをビルドし、そのイメージからコンテナを起動して、ローカルでアプリケーションがコンテナ内で正常に動作することを確認する。

アプリケーションがコンテナ化されたら、いよいよクラウド環境であるAzureのインフラストラクチャをセットアップする。まず、Azure CLIを使って自身のAzureアカウントにログインし、作業対象のサブスクリプションを選択する。次に、関連するAzureリソースをまとめる論理的なコンテナとして「リソースグループ」を作成する。コンテナイメージを保存するためには「Azure Container Registry (ACR)」が必要となる。これは、Docker Hubのようなプライベートなコンテナイメージレジストリであり、作成したDockerイメージを安全に保管し、AKSから利用できるようにする。ACRが準備できたら、ローカルでビルドしたイメージを直接プッシュする代わりに、Azureのサービスを使ってDockerfileから直接イメージをビルドし、ACRにプッシュする。これにより、ローカル環境とクラウド環境でのビルド環境の差異による問題を避けることができる。

Azureインフラの核心である「Azure Kubernetes Service (AKS)」クラスターを作成する。AKSはKubernetesをMicrosoftが管理してくれるサービスであり、インフラの構築や運用を簡素化できる。クラスター作成時には、ノード数や仮想マシンのサイズを指定し、先ほど作成したACRとの連携設定も行うことで、後でコンテナイメージをAKSが簡単に取得できるようにする。AKSクラスターのプロビジョニングには数分かかるため、その間に他の作業を進めるか、休憩を取る。クラスターが準備できたら、az aks get-credentialsコマンドを使ってkubectlコマンドラインツールがAKSクラスターに接続できるよう設定し、kubectl get nodesコマンドでノードが正しく認識されていることを確認する。

次に、Kubernetesクラスター上でアプリケーションをどのように実行するかを定義する「Kubernetesマニフェスト」を作成する。これはYAML形式のファイルで、大きく分けて二つの種類がある。一つは「Deployment(デプロイメント)」で、アプリケーションのコンテナイメージ、実行するレプリカ(インスタンス)の数、コンテナが利用するリソース(メモリ、CPU)の上限と要求、そしてコンテナの健全性を監視するためのヘルスプローブ(Liveness、Readiness、Startup)などを定義する。ヘルスプローブは、アプリケーションが正常に動作しているか、リクエストを受け入れる準備ができているかをKubernetesに伝え、問題があれば自動的に再起動したり、トラフィックを振り分けたりするために重要である。もう一つは「Service(サービス)」で、デプロイされたアプリケーションを外部からアクセス可能にするための設定を行う。今回はLoadBalancerタイプを使用し、Azureのロードバランサーを通じてアプリケーションにパブリックIPアドレスを割り当て、インターネットからアクセスできるようにする。これらのYAMLファイルをkubectl applyコマンドでAKSクラスターに適用することで、アプリケーションがデプロイされ、指定されたレプリカ数で実行されるようになる。

アプリケーションがAKSにデプロイされたら、kubectl get servicesコマンドを使って、割り当てられた外部IPアドレスを確認する。このIPアドレスを使って、ブラウザやcurlコマンドでアプリケーションの各エンドポイントにアクセスし、クラウド上でアプリケーションが正常に動作していることを検証する。これにより、アプリケーションがコンテナ化され、Kubernetesによって管理され、外部からアクセス可能になっている状態が完成する。

最後の重要なステップは、GitHub Actionsを使ったCI/CDパイプラインの構築である。これにより、コードをGitHubリポジトリにプッシュするだけで、自動的にアプリケーションのビルド、DockerイメージのACRへのプッシュ、そしてAKSクラスターへのデプロイが実行されるようになる。まず、Gitを使ってローカルのプロジェクトを初期化し、GitHubリポジトリにプッシュする。次に、GitHub ActionsがAzureリソースにアクセスするための認証情報として、「Azureサービスプリンシパル」を作成し、その認証情報をGitHubリポジトリの「シークレット」として安全に登録する。さらに、ACR名、リソースグループ名、AKSクラスター名もシークレットとして設定する。その後、.github/workflowsディレクトリ内にYAML形式のワークフローファイルを定義する。このファイルには、コードのチェックアウト、.NETアプリケーションのビルドとテスト、Azureへのログイン、DockerイメージのビルドとACRへのプッシュ、そしてAKSへのデプロイ(既存のデプロイメントのイメージを更新)という一連の自動化ステップが記述される。このワークフローファイルをコミットしてGitHubにプッシュすると、GitHub Actionsが自動的に起動し、パイプラインが実行される。コードの変更をプッシュするたびに、この自動プロセスが繰り返され、アプリケーションがクラウド上で常に最新の状態に保たれる。

このCI/CDパイプラインが機能することを確認するため、アプリケーションのコード(例えばウェルカムメッセージやバージョン番号)を少し変更し、その変更をGitHubリポジトリにプッシュする。すると、GitHub Actionsのワークフローが自動的に実行され、数分後にはクラウド上のアプリケーションが更新されたことを外部IPアドレス経由で確認できる。これにより、手動でのデプロイ作業が不要となり、開発効率が大幅に向上する。

万が一、デプロイ中に問題が発生した場合に備え、一般的なトラブルシューティング方法も示されている。例えば、ImagePullBackOffエラーが発生した場合は、kubectl describe podコマンドで詳細を確認したり、AKSがACRからイメージをプルする権限があるかをaz aks check-acrコマンドで検証したりする。kubectlコマンドが見つからない、Dockerデーモンが起動していない、Azureリソースへのアクセスが拒否される、GitHub Actionsが失敗するといった問題への対処法も学ぶ。また、Kubernetesクラスターやポッド、サービスの状態を確認するためのkubectl getkubectl logskubectl describeといったデバッグコマンドは、問題解決に非常に役立つ。

最後に、実験が終わった後に不要なAzureリソースを削除する方法が提示されている。これは、課金を防ぎ、リソースをきれいに保つために非常に重要である。個別のリソースを削除する方法と、リソースグループごと全て削除する方法の二つがあり、特にデモ目的の場合はリソースグループごと削除するのが最も簡単で確実である。このチュートリアルを通じて、開発者は.NET Web APIの構築、Dockerによるコンテナ化、Azure Kubernetes Serviceへのデプロイ、GitHub ActionsによるCI/CDパイプラインの構築という、クラウドネイティブ開発の一連のスキルを習得できる。今後は、データベースの統合、監視の強化、セキュリティ対策、高度なKubernetes機能の利用、Infrastructure as Codeの導入など、さらにステップアップするための学習パスも示されている。

関連コンテンツ

関連IT用語