次の方法で共有


Worker サービスを Azure にデプロイする

この記事では、.NET Worker サービスを Azure にデプロイする方法について説明します。 Worker を Azure Container Registry (ACR) から Azure Container Instance (ACI) として実行すると、クラウドでマイクロサービスとして機能できます。 実行時間の長いサービスには多くのユース ケースがあり、この理由から Worker サービスが存在します。

このチュートリアルでは、以下の内容を学習します。

  • ワーカー サービスを作成します。
  • コンテナー レジストリ リソースを作成します。
  • イメージをコンテナー レジストリにプッシュします。
  • コンテナー インスタンスとしてデプロイします。
  • worker サービスの機能を確認します。

ヒント

すべての ".NET のワーカー" サンプル ソース コードは、 サンプル ブラウザー でダウンロードできます。 詳細については、「コード サンプルを閲覧: .NETのワーカー」をご覧ください。

[前提条件]

新しいプロジェクトを作成する

Visual Studio で新しい Worker Service プロジェクトを作成するには、 ファイル>New>Project...を選択します。[ 新しいプロジェクトの作成 ] ダイアログで"Worker Service" を検索し、Worker Service テンプレートを選択します。 目的のプロジェクト名を入力し、適切な場所を選択して、[ 次へ] を選択します。 [ 追加情報 ] ページで、 ターゲット フレームワーク の [ .NET 5.0] を選択し、[ Docker の有効化 ] オプションをオンにして Docker サポートを有効にします。 目的の Docker OS を選択します。

Visual Studio Code を使用して新しい Worker Service プロジェクトを作成するには、統合ターミナルから .NET CLI コマンドを実行します。 詳細については、「 Visual Studio Code: 統合ターミナル」を参照してください。

統合ターミナルを開き、 dotnet new コマンドを実行し、 <Project.Name> を目的のプロジェクト名に置き換えます。

dotnet new worker --name <Project.Name>

.NET CLI の新しい worker サービス プロジェクト コマンドの詳細については、「 dotnet new worker」を参照してください。

.NET CLI を使用して新しい Worker Service プロジェクトを作成するには、作業ディレクトリでお気に入りのターミナルを開きます。 dotnet new コマンドを実行し、<Project.Name>を目的のプロジェクト名に置き換えます。

dotnet new worker --name <Project.Name>

.NET CLI の新しい worker サービス プロジェクト コマンドの詳細については、「 dotnet new worker」を参照してください。

依存パッケージを確実に復元し、エラーなしでコンパイルするようにアプリケーションをビルドします。

Visual Studio からアプリケーションをビルドするには、 F6 キーを押すか、[ ビルド>ソリューションのビルド ] メニュー オプションを選択します。

Visual Studio Code からアプリケーションをビルドするには、統合ターミナル ウィンドウを開き、作業ディレクトリから dotnet build コマンドを実行します。

dotnet build

.NET CLI ビルド コマンドの詳細については、 dotnet buildを参照してください。

.NET CLI からアプリケーションをビルドするには、作業ディレクトリから dotnet build コマンドを実行します。

dotnet build <path/to/project.csproj>

<path/to/project.csproj>値を指定します。これは、ビルドするプロジェクト ファイルへのパスです。 .NET CLI ビルド コマンドの詳細については、 dotnet buildを参照してください。

Docker のサポートを追加する

新しい Worker プロジェクトの作成時に [ Docker を有効にする] チェック ボックスが正しく選択されている場合は、「 Docker イメージのビルド 」ステップに進みます。

このオプションを選択しなかった場合でも、心配する必要はありません。今でも追加できます。 Visual Studio で、ソリューション エクスプローラープロジェクト ノードを右クリックし、[追加>Docker サポート] を選択します。 ターゲット OS を選択するように求められます。既定の OS 選択で [OK] を選択します。

Docker ファイル のオプション

Visual Studio Code では、 Docker 拡張機能Azure アカウント拡張機能 がインストールされている必要があります。 コマンド パレットを開き、[ Docker: ワークスペースへの Docker ファイルの追加 ] オプションを選択します。 アプリケーション プラットフォームの選択を求めるメッセージが表示されたら、[.NET: Core Console] を選択します。 [ プロジェクトの選択] を求められたら、作成した Worker Service プロジェクトを選択します。 [オペレーティング システムの選択] を求められたら、最初に一覧表示された OS を選択します。 オプションの Docker Compose ファイルを含めるかどうかを確認するメッセージが表示されたら、[いいえ] を選択します

Docker のサポートには Dockerfile が必要です。 このファイルは、Docker イメージとして .NET Worker サービスを構築するための包括的な手順のセットです。 Dockerfile は、ファイル拡張子のないファイルです。 次のコードは Dockerfile の例であり、プロジェクト ファイルのルート ディレクトリに存在する必要があります。

CLI では、 Dockerfile は自動的には作成 されません 。 その内容を、プロジェクトのルート ディレクトリにある Dockerfile という名前の新しいファイルにコピーします。

FROM mcr.microsoft.com/dotnet/runtime:8.0@sha256:e6b552fd7a0302e4db30661b16537f7efcdc0b67790a47dbf67a5e798582d3a5 AS base
WORKDIR /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:35792ea4ad1db051981f62b313f1be3b46b1f45cadbaa3c288cd0d3056eefb83 AS build
WORKDIR /src
COPY ["App.CloudService.csproj", "./"]
RUN dotnet restore "App.CloudService.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "App.CloudService.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "App.CloudService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "App.CloudService.dll"]

*App.CloudService を参照する Dockerfile のさまざまな行を更新する必要があります。これをプロジェクトの名前に置き換えます。

公式の .NET イメージの詳細については、 Docker Hub: .NET ランタイムDocker Hub: .NET SDK に関する記事を参照してください。

Docker イメージを構築する

Docker イメージをビルドするには、Docker エンジンが実行されている必要があります。

Important

Docker Desktop と Visual Studio を使用する場合は、 ボリューム共有に関連するエラーを回避するために、ボリューム共有が有効になっていることを確認します。

  1. Docker Desktop の [設定] 画面で、[ 共有ドライブ] を選択します。
  2. プロジェクト ファイルを含むドライブを選択します。

詳細については、「Docker を 使用した Visual Studio 開発のトラブルシューティング」を参照してください。

ソリューション エクスプローラーDockerfile を右クリックし、[Docker イメージのビルド] を選択します。 [出力] ウィンドウが表示され、docker buildコマンドの進行状況が報告されます。

エクスプローラーDockerfile を右クリックし、[ビルド イメージ] を選択します。 イメージに タグを付けるメッセージが表示されたら、「 appcloudservice:latest」と入力します。 Docker タスクの出力ターミナルが表示され、Docker ビルド コマンドの進行状況が報告されます。

イメージにタグを付けるメッセージが表示 されない 場合は、Visual Studio Code が既存の tasks.jsonに依存している可能性があります。 使用するタグが望ましくない場合は、 docker-build 構成項目の dockerBuild/tag 値を tasks 配列内で更新することで変更できます。 次の構成セクションの例を考えてみます。

{
  "type": "docker-build",
  "label": "docker-build: release",
  "dependsOn": [
    "build"
  ],
  "dockerBuild": {
    "tag": "appcloudservice:latest",
    "dockerfile": "${workspaceFolder}/cloud-service/Dockerfile",
    "context": "${workspaceFolder}",
    "pull": true
  },
  "netCore": {
    "appProject": "${workspaceFolder}/cloud-service/App.CloudService.csproj"
  }
}

Dockerfile のルート ディレクトリでターミナル ウィンドウを開き、次の docker コマンドを実行します。

docker build -t appcloudservice:latest -f Dockerfile .

docker build コマンドを実行すると、Dockerfile 内の各行が命令ステップとして処理されます。 このコマンドは、イメージをビルドし、そのイメージを指す appcloudservice という名前のローカル リポジトリを作成します。

ヒント

生成された Dockerfile は開発環境によって異なります。 たとえば、Visual Studio から Docker サポートを追加すると、Dockerfile の手順が異なるため、Visual Studio Code から Docker イメージをビルドしようとすると問題が発生する可能性があります。 1 つの 開発環境 を選択し、このチュートリアル全体で使用することをお勧めします。

コンテナー レジストリを作成する

Azure Container Registry (ACR) リソースを使用すると、プライベート レジストリ内のコンテナー イメージと成果物をビルド、格納、および管理できます。 コンテナー レジストリを作成するには、Azure portal で 新しいリソースを作成 する必要があります。

  1. サブスクリプションと対応するリソース グループを選択します (または、新しいリソース グループを作成します)。
  2. レジストリ名を入力します。
  3. 場所を選択 します
  4. 適切な SKU ( Basic など) を選択します。
  5. [Review + create](レビュー + 作成) を選択します。
  6. 検証に合格したことを確認したら、[作成] を選択します。

Important

コンテナー インスタンスの作成時にこのコンテナー レジストリを使用するには、 管理者ユーザーを有効にする必要があります。 アクセス キーを選択し、管理者ユーザーを有効にします。

Azure Container Registry (ACR) リソースを使用すると、プライベート レジストリ内のコンテナー イメージと成果物をビルド、格納、および管理できます。 Dockerfile のルート ディレクトリでターミナル ウィンドウを開き、次の Azure CLI コマンドを実行します。

Important

Azure CLI から Azure リソースを操作するには、ターミナル セッションに対して認証されている必要があります。 認証するには、 az login コマンドを使用します。

az login

ログインしたら、 az account set コマンドを使用して、複数のサブスクリプションがあり、既定のサブスクリプションが設定されていない場合にサブスクリプションを指定します。

az account set --subscription <subscription name or id>

Azure CLI にサインインすると、それに応じてセッションでリソースを操作できます。

worker サービスを関連付けるリソース グループがまだない場合は、 az group create コマンドを使用して作成します。

az group create -n <resource group> -l <location>

<resource group>名と<location>を指定します。 コンテナー レジストリを作成するには、 az acr create コマンドを呼び出します。

az acr create -n <registry name> -g <resource group> --sku <sku> --admin-enabled true

プレースホルダーを独自の適切な値に置き換えます。

  • <registry name>: レジストリの名前。
  • <resource group>: 使用したリソース グループ名。
  • <sku>: 使用できる値、 BasicClassicPremium、または Standard

上記のコマンドでは次のことが行われます。

  • 指定したリソース グループにレジストリ名を指定して、Azure Container Registry を作成します。
  • 管理者ユーザーを有効にします。これは Azure Container Instances に必要です。

詳細については、「 クイック スタート: Azure コンテナー レジストリを作成する」を参照してください。

イメージをコンテナー レジストリにプッシュする

.NET Docker イメージがビルドされ、コンテナー レジストリ リソースが作成されたので、イメージをコンテナー レジストリにプッシュできるようになりました。

ソリューション エクスプローラーでプロジェクトを右クリックし、[発行] を選択します[発行] ダイアログが表示されます。 [ターゲット] で、[Azure] を選択し、[次へ] を選択します。

Visual Studio: [発行] ダイアログ - [Azure] を選択する

[特定のターゲット] で、[Azure Container Registry] を選択し、[次へ] を選択します。

Visual Studio: [発行] ダイアログ - コンテナー レジストリの選択

次に、 コンテナー レジストリで、ACR リソースの作成に使用した サブスクリプション名 を選択します。 [コンテナー レジストリ] の選択領域で、作成したコンテナー レジストリを選択し、[完了] を選択します。

Visual Studio: [発行] ダイアログ - コンテナー レジストリの詳細を選択する

これにより、イメージをコンテナー レジストリに発行するために使用できる発行プロファイルが作成されます。 [ 発行 ] ボタンを選択してイメージをコンテナー レジストリにプッシュすると、[ 出力 ] ウィンドウに発行の進行状況が報告されます。正常に完了すると、"正常に発行されました" というメッセージが表示されます。

Visual Studio Code のアクティビティ バーから Docker を選択します。 イメージ ツリー ビュー パネルを展開し、appcloudserviceイメージ ノードを展開し、latest タグを右クリックします。

Visual Studio Code: Docker - プッシュ イメージ

統合ターミナル ウィンドウは、 docker push コマンドの進行状況をコンテナー レジストリに報告します。

イメージをコンテナー レジストリにプッシュするには、まずレジストリにサインインする必要があります。

az acr login -n <registry name>

az acr login コマンドは、Docker CLI を使用してコンテナー レジストリにサインインします。 イメージをコンテナー レジストリにプッシュするには、コンテナー レジストリ名をとして <registry name> コマンドを使用します。

az acr build -r <registry name> -t appcloudservice .

上記のコマンドでは次のことが行われます。

  • ソースを tar ファイルにパックします。
  • コンテナー レジストリにアップロードします。
  • コンテナー レジストリは tar ファイルを開梱します。
  • コンテナー レジストリ リソースの docker build コマンドを Dockerfile に対して実行します。
  • イメージをコンテナー レジストリに追加します。

イメージがコンテナー レジストリに正常にプッシュされたことを確認するには、Azure portal に移動します。 コンテナー レジストリ リソースを開き、[ サービス] で [ リポジトリ] を選択します。 画像が表示されます。

コンテナー インスタンスとしてデプロイする

Visual Studio Code で、アクティビティ バーから Docker を選択します。 REGISTRIES ノードを展開し、[レジストリの接続] を選択します。 メッセージが表示されたら Azure を選択し、必要に応じてサインインします。

Important

Visual Studio Code からコンテナー インスタンスとしてデプロイすることは、Mac では機能しなくなりました。 詳細については、「 GitHub: Visual Studio Code の Docker 拡張機能について」を参照してください。

Visual Studio Code - Docker: Connect レジストリ

REGISTRIES ノードを展開し、Azure を選択し、サブスクリプション>コンテナー レジストリ>イメージを選択して、タグを右クリックします。 [ イメージを Azure Container Instances にデプロイする] を選択します

Visual Studio Code - Docker: Azure Container Instances にイメージをデプロイする

コンテナー インスタンスを作成するには、最初に az container create コマンドを使用してコンテナー グループを作成します。

az container create -g <resource group> \
  --name <instance name> \
  --image <registry name>.azurecr.io/<image name>:latest \
  --registry-password <password>

適切な値を指定します。

  • <resource group>: このチュートリアルで使用しているリソース グループ名。
  • <instance name>: コンテナー インスタンスの名前。
  • <registry name>: コンテナー レジストリの名前。
  • <image name>: イメージの名前。
  • <password>: コンテナー レジストリのパスワード。これは、Azure portal の Container Registry リソース >Access キーから取得できます。

コンテナー インスタンスを作成するには、Azure portal で 新しいリソースを作成 する必要もあります。

  1. 同じ サブスクリプションと、前のセクションの対応する リソース グループ を選択します。
  2. コンテナー名 (appcloudservice-container) を入力します。
  3. 前の [場所] の選択に対応するリージョンを選択します。
  4. [イメージ ソース] で、[Azure Container Registry] を選択します。
  5. 前の手順で指定した名前で レジストリ を選択します。
  6. イメージイメージタグを選択します。
  7. [Review + create](レビュー + 作成) を選択します。
  8. 検証に合格したと仮定して、[作成] を選択します。

リソースが作成されるまでに少し時間がかかる場合があります。作成したら、[ リソースに移動 ] ボタンを選択します。

詳細については、「 クイック スタート: Azure コンテナー インスタンスを作成する」を参照してください

サービス機能を確認する

コンテナー インスタンスが作成された直後に、コンテナー インスタンスの実行が開始されます。

ワーカー サービスが正しく機能していることを確認するには、コンテナー インスタンス リソースの Azure portal に移動し、[ コンテナー ] オプションを選択します。

Azure portal: 実行中のコンテナー インスタンス

コンテナーとその現在の 状態が表示されます。 この場合は、 実行中です。 [ ログ] を選択すると、.NET worker サービスの出力が表示されます。

ワーカー サービスが正しく機能していることを確認するには、実行中のアプリケーションのログを表示します。 az container logs コマンドを使用します。

az container logs -g <resource group> --name <instance name>

適切な値を指定します。

  • <resource group>: このチュートリアルで使用しているリソース グループ名。
  • <instance name>: コンテナー インスタンスの名前。

.NET worker サービスの出力ログが表示されます。これは、コンテナー化されたアプリを ACI に正常にデプロイしたことを意味します。

こちらも参照ください