Azure Developer CLI (azd) を使用すると、必要な認証と環境設定を自動的に構成することで、Aspire Actions または GitHub Devops パイプラインを使用して、Azure プロジェクトをデプロイできます。 この記事では、Aspireを使用してAzure Container Appsにazd プロジェクトを作成して展開するプロセスについて説明します。 次の概念について学習します。
-
azdとの統合がAspireプロジェクトでどのように機能するかを調べる -
GitHubを使用して、Azure プロジェクトのためにAspireまたは
azdDevOps リポジトリを作成および構成します。 - GitHub Actions ワークフローや Azure DevOps パイプラインの実行、および Azure デプロイを監視し調査する
[前提条件]
Aspireを使用するには、次のものがローカルにインストールされている必要があります。
-
.NET 8.0 または .NET 9.0。
- Aspire 9.4 以降では、.NET 10 Preview 5 以降がサポートされています。
- OCI 準拠のコンテナー ランタイム。次に例を示します。
- Docker デスクトップ または Podman. 詳細については、「コンテナー ランタイム」を参照してください。
- 次のような統合開発者環境 (IDE) またはコード エディター。
- Visual Studio 2022 バージョン 17.9 以降 (任意)
-
Visual Studio Code (任意)
- C# Dev Kit: 拡張 (オプション)
- JetBrains Rider とプラグインAspire(省略可能)
詳細については、Aspireセットアップとツール、および SDK のAspireに関する説明を参照してください。
- Azure DevOps 組織を作成、または既存の組織を選択する
-
Azure DevOps Personal Access Token (PAT) を作成し、後で使用するために保存します。 次のアクセス許可を使用してトークンを構成します。
- エージェント プール (読み取り、管理)
- ビルド (データの読み取りと実行)
- コード(完全)
- プロジェクトとチーム (読み取り、書き込み、管理)
- リリース (読み取り、書き込み、実行、管理)
- サービス接続 (読み取り、クエリ、管理)
また、Azure Developer CLIをローカル (バージョン 1.5.1 以降) にインストールする必要があります。 一般的なインストール オプションは次のとおりです。
Aspire ソリューションを作成する
出発点として、この記事では、AspireAspire テンプレートから ソリューションを作成していることを前提としています。 詳細については、「 クイック スタート: 初めての Aspire アプリをビルドする」を参照してください。
テンプレートを初期化する
新しいターミナルウィンドウを開き、
cdして、ソリューションのディレクトリに移動します。azd initコマンドを実行して、azdを使用してプロジェクトを初期化します。このコマンドにより、ローカル ディレクトリ構造が検査され、アプリの種類が決定されます。azd initコマンドの詳細については、azd init 参照してください。 が 3 つのアプリ初期化オプションを求められたら、
azd[現在のディレクトリのコードを使用する] を選択します。? How do you want to initialize your app? [Use arrows to move, type to filter] > Use code in the current directory Select a template Create a minimal projectディレクトリをスキャンした後、
azd正しい AspireAppHost プロジェクトが見つかったことを確認するメッセージが表示されます。 [確認] を選択し、アプリを初期化するオプションを続行します。Detected services: .NET (Aspire) Detected in: D:\source\repos\AspireSample\AspireSample.AppHost\AspireSample.AppHost.csproj azd will generate the files necessary to host your app on Azure using Azure Container Apps. ? Select an option [Use arrows to move, type to filter] > Confirm and continue initializing my app Cancel and exit環境名を入力します。これは、Azure でプロビジョニングされたリソースに名前を付け、
devやprodなどのさまざまな環境を管理するために使用します。Generating files to run your app on Azure: (✓) Done: Generating ./azure.yaml (✓) Done: Generating ./next-steps.md SUCCESS: Your app is ready for the cloud! You can provision and deploy your app to Azure by running the azd up command in this directory. For more information on configuring your app, see ./next-steps.md
azd は、多数のファイルを生成し、作業ディレクトリに配置します。 これらのファイルは次のとおりです。
- azure.yaml: AppHost プロジェクトなどのアプリのサービス Aspire について説明し、それらを Azure リソースにマップします。
-
.azure/config.json: 現在のアクティブな環境が何であるかを
azd通知する構成ファイル。 - .azure/aspireazddev/.env: 環境固有のオーバーライドが含まれています。
GitHub リポジトリとパイプラインを作成する
Azure Developer CLI を使用すると、リソースをプロビジョニングして Azureにデプロイするための適切な構成とアクセス許可を持つ CI/CD パイプラインを自動的に作成できます。
azd アプリの GitHub リポジトリがまだ存在しない場合は作成することもできます。
azd pipeline configコマンドを実行してデプロイ パイプラインを構成し、Azureに安全に接続します。azd pipeline configアプリ リソースをプロビジョニングしてデプロイするサブスクリプションを選択します。
リソースに使用する Azure の場所を選択します。
ディレクトリに新しい
リポジトリを作成するかどうかを確認するメッセージが表示されたら、「 y 」と入力し、Enterキー押します。 注
GitHub リポジトリを作成するには、GitHubにログインする必要があります。 好みに応じて異なるいくつかの選択肢があります。 ログインすると、現在のディレクトリに新しいリポジトリを作成するように求められます。
新しいプライベート GitHub リポジトリ を作成を選択して、git リモートを構成します。
新しい GitHub リポジトリに任意の名前を入力するか、Enter キーを押して既定の名前を使用します。
azdGitHub に新しいリポジトリを作成し、Azureに対する認証に必要なシークレットを使用して構成します。
y を入力して、ローカルの変更をコミットしてプッシュし、構成されたパイプラインを開始するように求めるメッセージ
azdが表示されたら続行します。
GitHub アクションのワークフローとデプロイを調べる
GitHubのリンク出力を使用して、新しい
azdリポジトリに移動します。アクション タブを選択して、リポジトリ ワークフローを表示します。 新しいワークフローが実行されているか、既に完了していることがわかります。 ワークフローを選択して、実行のログにジョブ ステップと詳細を表示します。 たとえば、 アプリケーションのデプロイ などの手順を展開して、完了したアクションの詳細を表示できます。
[アプリケーション展開] を選択して、その手順のログを展開します。
apiserviceとwebfrontendの 2 つのエンドポイント URL が出力されます。 これらのリンクのいずれかを選択して別のブラウザー タブで開き、デプロイされたアプリケーションを調べる。
おめでとうございます! AspireアクションとAzure Developer CLIアクションを使用して、GitHub プロジェクトを正常にデプロイしました。
マルチプロジェクト ソリューションの作業ディレクトリを構成する
AppHost プロジェクトがルート ディレクトリにない既存のマルチプロジェクト GitHub ソリューションに Aspire Actions を追加する場合は、特定のワークフロー ステップに対して working-directory パラメーターの構成が必要になる場合があります。 このセクションでは、これらの調整のタイミングと方法について説明します。
作業ディレクトリの構成が必要な場合
azd pipeline config コマンドは、GitHub AppHost プロジェクトがリポジトリのルート ディレクトリにあることを前提とするAspire Actions ワークフローを生成します。 ただし、多くの実際のシナリオでは、特に 既存のアプリケーションに Aspire を追加する場合は、AppHost プロジェクトがサブディレクトリ内にある可能性があります。
たとえば、リポジトリの構造が次のようになります。
└───📂 MyAspireApp
├───📂 MyAspireApp.ApiService
├───📂 MyAspireApp.AppHost
│ ├─── MyAspireApp.AppHost.csproj
│ └─── AppHost.cs
├───📂 MyAspireApp.Web
└─── MyAspireApp.sln
インフラストラクチャのプロビジョニングとアプリケーションのデプロイに関して生成されたワークフロー ステップは、リポジトリ ルートではなく、MyAspireApp.AppHost ディレクトリから実行する必要があります。
GitHub アクション ワークフローの更新
azd pipeline configを実行した後、.github/workflows/azure-dev.ymlで生成されたワークフロー ファイルを調べます。
azdコマンドを実行する手順を探し、必要に応じて working-directory パラメーターを追加します。
生成された元の手順の例を次に示します。
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
次の手順を更新して、 working-directory パラメーターを含めます。
- name: Provision Infrastructure
run: azd provision --no-prompt
working-directory: ./MyAspireApp.AppHost
env:
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Deploy Application
run: azd deploy --no-prompt
working-directory: ./MyAspireApp.AppHost
env:
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
正しい作業ディレクトリを見つける
作業ディレクトリは、Aspire AppHost プロジェクト ( によって生成された azd init ファイルを含むプロジェクト) を含むフォルダーを指す必要があります。 このディレクトリは、次の方法で識別できます。
-
Aspire.AppHostファイルで、.csprojパッケージ参照を含むプロジェクトを探します。 - azure.yaml ファイルを含むディレクトリを見つけます。
- 他のサービスを調整するソリューションで参照されているプロジェクトを見つけます。
注
パイプラインのセットアップ中にazdなどの一部のazd initコマンドは、AppHost プロジェクト ディレクトリから実行されていない場合は、working-directory パラメーターも必要になる場合があります。
Azure DevOps リポジトリとパイプラインを作成する
Important
前提条件で説明したように、
Azure Developer CLI を使用すると、リソースをプロビジョニングして Azureにデプロイするための適切な構成とアクセス許可を持つパイプラインを自動的に作成できます。
azd アプリ用の Azure Pipelines リポジトリがまだ存在しない場合は作成することもできます。
azd pipeline configコマンドを実行してデプロイ パイプラインを構成し、Azureに安全に接続します。 既定の--provider azdoActions 構成ではなく、Azure Pipelines を使用する GitHub オプションを含めます。azd pipeline config --provider azdoImportant
azd pipeline configを実行する前に、azd initを正常に実行してプロジェクトを初期化していることを確認してください。 パイプラインの実行中に "プロジェクトが存在しない" などのエラーが発生した場合は、 ソリューションのトラブルシューティングのセクションを 参照してください。アプリ リソースをプロビジョニングしてデプロイするサブスクリプションを選択します。
リソースに使用する Azure の場所を選択します。
先ほど作成した個人用アクセス トークンを貼り付けます。
作成または選択した Azure DevOps 組織名を入力します。
現在のディレクトリに新しいリポジトリを作成するように求められたら、「
y 」と入力し、Enterキー押します。 git リモートを構成するように求められたら、「新しい Azure DevOps プロジェクトを作成する」を選択します。
aspireazdなど、新しいリポジトリに対して選択した一意の名前を入力します。azd、Azure Repos に新しいリポジトリを作成し、Azureに対する認証に必要なシークレットを使用して構成します。y を入力して、ローカルの変更をコミットしてプッシュし、構成されたパイプラインを開始するように求めるメッセージ
azdが表示されたら続行します。
パイプラインとデプロイされたアプリを調べる
Azureによる状態リンク出力を使用して、新しい
azdパイプラインに移動します。完了したパイプライン実行を選択して、概要を表示します。
ビューの下部にあるジョブ リンクを選択して、ジョブの詳細に移動します。
ジョブの詳細ページには、個々のすべてのステージの状態が表示されます。 プロビジョニング インフラストラクチャ を選択すると、そのステージのログが表示されます。このログには、
azdによって完了したすべてのプロビジョニング手順が詳しく示されます。 ログの下部で、最終的な状態メッセージをメモし、プロビジョニングされた Azure リソース グループにリンクします。プロビジョニング出力ログの下部にあるリンクを選択して、新しい Azure リソース グループに移動します。
注
Azure ポータルで検索して、新しいリソース グループに直接移動することもできます。 リソース グループ名は、
azdに指定した環境名の前にrg-を付けたものになります。webfrontend コンテナー アプリを選択します。コンテナー アプリは、サイトの公開部分をホストします。
Webfrontend の詳細ページで、アプリケーション URL リンクを選択して、ブラウザーでサイトを開きます。
Important
ブラウザーでサイトを表示するときに 403 Forbidden エラーが発生した場合は、イングレス設定が正しく構成されていることを確認します。
ポータルの Azure アプリ ページで、左側のナビゲーションの イングレス に移動します。
イグレス トラフィックに任意の場所からのトラフィックを受け入れるに設定されていることを確認し、変更を保存します。
おめでとうございます! Aspire と Azure Developer CLI Pipelines を使用して、Azure プロジェクトを正常にデプロイしました。
トラブルシューティング Azure DevOps パイプラインのデプロイ
このセクションでは、Aspire DevOps パイプラインを使用してAzure プロジェクトをデプロイするときに発生する可能性がある一般的な問題について説明します。
エラー: プロジェクトが存在しません。新しいプロジェクトを作成するには、azd init を実行します
問題: Azure DevOps パイプラインのプロビジョニング手順中に、次のエラー メッセージが表示されます。
ERROR: no project exists; to create a new project, run azd init
原因: このエラーは、通常はリポジトリにコミットされていないファイル (azd init と azure.yaml フォルダー) が .azure コマンドによって生成されるために発生します。 パイプラインがクリーンな環境で実行されている場合、これらのファイルは存在しないため、 azd コマンドが失敗します。
解決策: この問題を解決するには、いくつかの方法があります。
オプション 1: パイプラインで azd init を実行する (推奨)
プロビジョニング手順の前に、 azd init ステップを Azure DevOps パイプラインに追加します。
--from-codeフラグと--no-prompt フラグを使用して、コマンドを非対話形式で実行できます。
- task: AzureCLI@2
displayName: 'Initialize Azure Developer CLI'
inputs:
azureSubscription: '$(AZURE_SERVICE_CONNECTION)'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
azd init --from-code --no-prompt
azd env new $(AZURE_ENV_NAME) --location $(AZURE_LOCATION) --subscription $(AZURE_SUBSCRIPTION_ID)
注
--no-promptでもプロンプトが表示される場合は、別の手順としてazd initとazd env newを実行するか、環境変数を使用してプロンプトに対する回答を提供してください。
--from-code フラグは、テンプレートから新しいプロジェクトを作成するのではなく、現在のディレクトリ内の既存のコードを使用するように azd に指示します。
パイプラインで次の変数を定義してください。
-
AZURE_ENV_NAME: 環境名 (devやprodなど)。 -
AZURE_LOCATION: Azure リージョン (たとえば、eastus2)。 -
AZURE_SUBSCRIPTION_ID: Azure サブスクリプション ID。
オプション 2: 必要なファイルをリポジトリにコミットする
生成されたファイルをリポジトリにコミットする場合:
- プロジェクト ディレクトリ
azd initローカルで実行します。 - 生成された
azure.yamlファイルをリポジトリに追加します。 - 必要に応じて、環境固有の設定を保持する場合は、
.azureフォルダーをリポジトリに追加します。
注
.azure フォルダーには、機密情報を含む環境固有の構成が含まれています。 リポジトリにコミットする前に、内容を慎重に確認してください。
オプション 3: 適切な初期化で azd パイプライン構成を使用する
azd pipeline config --provider azdoが正常にローカルで実行された後、azd initを実行していることを確認します。 このコマンドは、初期化を自動的に処理する正しい構成でパイプラインを設定する必要があります。
問題が引き続き発生する場合は、次のことを確認します。
- あなたのプロジェクト構造は、
azdが期待するAspire プロジェクトのものと一致します。 - 正しいディレクトリ (通常、
.slnファイルがある場所) からコマンドを実行しています。 - Azure DevOps サービス接続には、リソースをプロビジョニングするために必要なアクセス許可があります。
リソースをクリーンアップする
作成した Azure リソースが不要になったら、次の Azure CLI コマンドを実行してリソース グループを削除します。 リソース グループを削除すると、その中に含まれるリソースも削除されます。
az group delete --name <your-resource-group-name>
詳細については、「リソースをクリーンアップする」をAzureで参照してください。
Aspire