この記事では、Azure Developer CLI に関してよく寄せられる質問に回答します。
全般
Azure Developer CLI をアンインストールする方法
最初にインストールした方法に応じて、azd
をアンインストールするためのさまざまなオプションがあります。 詳細については、のインストール ページ を参照してください。
Azure Developer CLI と Azure CLI の違いは何ですか?
azd
は、高度な開発者ワークフローに重点を置いています。
azd
は、Azure リソースのプロビジョニングと管理とは別に、クラウド コンポーネント、ローカル開発構成、パイプライン自動化を完全なソリューションにまとめるのに役立ちます。
Azure CLI は、仮想マシン、仮想ネットワーク、ストレージなどの Azure インフラストラクチャを作成および管理するためのコントロール プレーン ツールです。 Azure CLI は、特定の管理タスクの詳細なコマンドを中心に設計されています。
環境名とは
Azure Developer CLI では、環境名を使用して、Azure Developer CLI テンプレートで使用される AZURE_ENV_NAME
環境変数を設定します。 AZURE_ENV_NAMEは、Azure リソース グループ名の前に付けるためにも使用されます。 各環境には独自の構成セットがあるため、Azure Developer CLI ではすべての構成ファイルが環境ディレクトリに格納されます。
├── .Azure [This directory displays after you run add init or azd up]
│ ├── <your environment1> [A directory to store all environment-related configurations]
│ │ ├── .env [Contains environment variables]
│ │ └── main.parameters.json [A parameter file]
│ └── <your environment2> [A directory to store all environment-related configurations]
│ │ ├── .env [Contains environment variables]
│ │ └── main.parameters.json [A parameter file]
│ └──config.json
複数の環境を設定できますか?
はい。 さまざまな環境 (開発、テスト、運用など) を設定できます。
azd env
を使用して、これらの環境を管理できます。
環境構成 (.env) ファイルはどこに格納されますか?
.env ファイルのパスが <your-project-directory-name>\.azure\<your-environment-name>\.env
。
env ファイルはどのように使用されますか?
Azure Developer CLI では、azd
コマンドは環境構成の .env ファイルを参照します。
azd deploy
などのコマンドでは、db 接続文字列や Azure Key Vault エンドポイントなどの .env ファイルも更新されます。
Codespaces で 'azd up' を実行しました。 ローカル開発環境で作業を続行できますか?
はい。 開発作業はローカルで続行できます。
-
azd init -t <template repo>
を実行して、テンプレート プロジェクトをローカル コンピューターに複製します。 - Codespaces を使用して作成された既存の env をプルダウンするには、
azd env refresh
実行します。 以前と同じ環境名、サブスクリプション、場所を指定してください。
azure.yaml ファイルはどのように使用されますか?
azure.yaml ファイルには、テンプレートに含まれている Azure リソースのアプリと種類が記述されています。
'secretOrRandomPassword' 関数の動作は何ですか?
secretOrRandomPassword
関数は、キー コンテナー名とシークレットのパラメーターが指定されている場合に、Azure Key Vault からシークレットを取得します。 これらのパラメーターが指定されていない場合、またはシークレットを取得できない場合、関数は代わりに使用するランダムに生成されたパスワードを返します。
次の例は、main.parameters.json
ファイル内の secretOrRandomPassword
の一般的なユース ケースを示しています。
${AZURE_KEY_VAULT_NAME}
変数と sqlAdminPassword
変数は、Key Vault とシークレットの名前のパラメーターとして渡されます。 値を取得できない場合は、代わりにランダムなパスワードが生成されます。
"sqlAdminPassword": {
"value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
}
secretOrRandomPassword
の出力も、今後の実行のために Bicep を使用して Key Vault に保存する必要があります。 デプロイ間で同じシークレットを取得して再利用すると、新しい値を繰り返し生成するときに発生する可能性のあるエラーや意図しない動作を防ぐことができます。 Key Vault を作成し、生成されたシークレットを格納するには、次の Bicep コードを使用します。 これらのモジュールの完全なサンプル コードは、Azure Developer CLI GitHub リポジトリで確認できます。
module keyVault './core/security/keyvault.bicep' = {
name: 'keyvault'
scope: resourceGroup
params: {
name: '${take(prefix, 17)}-vault'
location: location
tags: tags
principalId: principalId
}
}
module keyVaultSecrets './core/security/keyvault-secret.bicep' = {
name: 'keyvault-secret-sqlAdminPassword'
scope: resourceGroup
params: {
keyVaultName: keyVault.outputs.name
name: 'sqlAdminPassword'
secretValue: sqlAdminPassword
}
}]
この Bicep セットアップにより、シークレットを管理するための次のワークフローが有効になります。
- 指定したシークレットが存在する場合は、
secretOrRandomPassword
関数を使用して Key Vault から取得されます。 - シークレットが存在しない場合は、Key Vault が作成され、ランダムに生成されたシークレットが内部に格納されます。
- 今後のデプロイでは、
secretOrRandomPassword
メソッドは格納されているシークレットを取得し、Key Vault に存在するようになりました。 Key Vault が既に存在する場合、Key Vault は再作成されませんが、次の実行のために同じシークレット値が再び格納されます。
Azure 無料サブスクリプションを使用できますか?
はい。ただし、各 Azure の場所にデプロイできるのは 1 つだけです。 選択した Azure の場所を既に使用している場合は、デプロイ エラーが表示されます。
InvalidTemplateDeployment: The template deployment '<env_name>' isn't valid according to the validation procedure. The tracking ID is '<tracking_id>'. See inner errors for details.
別の Azure の場所を選択して問題を解決できます。
Azure App Service でホストされているアプリが、"先に見つめるサイト" という警告をトリガーしています。 どのように修正できますか?
これは、リソースに名前を付ける方法が原因で発生する可能性があります。
"Azure Dev" で作成されたテンプレートを使用すると、リソースの名前を構成できます。 これを行うには、infra
フォルダーの main.parameters.json
にエントリを追加できます。 例えば:
"webServiceName": {
"value": "my-unique-name"
}
このエントリでは、次回アプリケーションをプロビジョニングするときに、ランダム化された値 ("app-web-aj84u2adj" など) ではなく、"my-unique-name" という名前の新しいリソースが作成されます。 Azure portal を使用して古いリソース グループを手動で削除するか、azd down
を実行して以前のすべてのデプロイを削除できます。 リソースを削除した後、azd provision
を実行して、新しい名前でもう一度作成します。
この名前はグローバルに一意である必要があります。それ以外の場合は、リソースを作成しようとしたときに、azd provision
中に ARM エラーが発生します。
コマンド: azd provision
このコマンドは、プロビジョニングするリソースをどのように認識しますか?
このコマンドでは、Azure リソースをプロビジョニングするために <your-project-directory-name>/infra
の下にある Bicep テンプレートを使用します。
Azure でプロビジョニングされているリソースはどこで確認できますか?
https://portal.azure.com に移動し、リソース グループ (rg-<your-environment-name>
) を探します。
Azure エラーに関する詳細情報を確認するにはどうすればよいですか?
Azure リソースのプロビジョニングには、<your-project-directory-name>/infra
の下にある Bicep テンプレートを使用します。 問題がある場合は、CLI 出力にエラー メッセージを含めます。
https://portal.azure.com に移動し、リソース グループ (rg-<your-environment-name>
) を探すこともできます。 いずれかのデプロイが失敗した場合は、エラー リンクを選択して詳細情報を取得します。
その他のリソースについては、「一般的な Azure デプロイ エラーのトラブルシューティング - Azure Resource Manager」を参照してください。
'azd provision' のログ ファイルはありますか?
もうすぐです。 この機能は、今後のリリースで予定されています。
コマンド: azd deploy
このコマンドを再実行できますか?
はい。
azd は自分のコードをデプロイする Azure リソースをどのように見つけますか?
デプロイ中、azd
はまず、azd-env-name
でタグ付けされたグループと、環境の名前と一致する値を持つグループを探すことによって、アプリケーションを構成するすべてのリソース グループを検出します。 次に、これらの各リソース グループ内のすべてのリソースを列挙し、azure.yaml
のサービスの名前と一致する値を持つ azd-service-name
でタグ付けされたリソースを探します。
リソースにタグを使用することをお勧めしますが、azure.yaml
の resourceName
プロパティを使用して明示的なリソース名を指定することもできます。 その場合、上記のロジックは実行されません。
他のサービスをスキップしながら、プロジェクトに特定のサービスをデプロイするにはどうすればよいですか?
プロジェクトを配置する場合は、コマンドでサービス名を指定するか (azd deploy api
)、またはデプロイするサービスのみを含むサブフォルダーに移動して、特定のサービスをデプロイすることができます。 その場合、他のすべてのサービスが - Skipped
として表示されます。
サービスをスキップしない場合は、必ずルート フォルダーからコマンドを実行するか、コマンドに --all
フラグを追加してください。
コマンド: azd up
'azd up' を再実行できますか?
はい。 増分デプロイ モードを使用します。
'azd up' のログ ファイルを見つけるにはどうすればよいですか?
もうすぐです。 この機能は、今後のリリースで予定されています。
コマンド: azd pipeline
Azure サービス プリンシパルとは
Azure サービス プリンシパルは、アプリ、ホストされたサービス、および Azure リソースにアクセスするための自動化されたツールで使用するために作成された ID です。 このアクセスは、サービス プリンシパルに割り当てられているロールによって制限されます。これにより、アクセスできるリソースとどのレベルでアクセスできるかを制御できます。 Azure から GitHub への認証の詳細については、GitHub と Azure 接続に関するページを参照してください。Microsoft Docs.
'azd pipeline config' を実行する前に、Azure サービス プリンシパルを作成する必要がありますか?
いいえ。
azd pipeline config
コマンドは、Azure サービス プリンシパルを作成し、GitHub リポジトリにシークレットを格納するために必要な手順を実行します。
GitHub に格納されているすべてのシークレットは何ですか?
このコマンドは GitHub に 4 つのシークレット (AZURE_CREDENTIALS、AZURE_ENV_NAME、AZURE_LOCATION、AZURE_SUBSCRIPTION_ID) を格納します。
https://github.com/<your-GH-account>/<your-repo>/secrets/actions
に移動して、各シークレットの値をオーバーライドできます。
OpenID Connect (OIDC) とは何ですか。サポートされていますか?
OpenID Connectを使用すると、ワークフローは有効期間の短いトークンを Azure から直接交換できます。
OIDC は GitHub Actions と Azure Pipeline (フェデレーション
- Azure DevOps の場合、
federated
として--auth-type
を明示的に呼び出すと、エラーが発生します。 - Terraform の場合:
-
--auth-type
が定義されていない場合、clientcredentials
にフォールバックし、警告が発生します。 -
--auth-type
が明示的にfederated
に設定されている場合、エラーが発生します。
-
GitHub Actions に格納されている Azure サービス プリンシパルをリセットするにはどうすればよいですか?
https://github.com/<your-GH-account>/<your-repo>settings/secrets/actions
に移動し、新しいサービス プリンシパルの JSON オブジェクト全体をコピーして貼り付けることで、AZURE_CREDENTIALS
を更新します。 例えば:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
GitHub Actions ファイルはどこに保存されますか?
GitHub Actions ファイルのパスが <your-project-directory-name>\.github\workflows\azure-dev.yml
。
azure-dev.yml ファイルで、ビルド ステップのコードだけをデプロイできますか?
はい。
run: azd up --no-prompt
を run: azd deploy --no-prompt
に置き換えます。
"azd pipeline config" を実行したときにトリガーした GitHub Actions ジョブのログはどこにありますか?
https://github.com/<your-GH-account>/<your-repo>/actions
に移動し、ワークフロー実行のログ ファイルを参照します。
コンテナー アプリケーションのローカルでのビルド
ビルド中のコンテナー アプリをローカルで実行できないのはなぜですか?
コンテナー アプリケーションをローカルでビルドする場合は、アプリケーションが AzureDeveloperCliCredential
を操作するために、コンテナーで azd auth login
を実行する必要があります。 または、AzureDeveloperCliCredential
の代わりにサービス プリンシパルを使用するようにアプリケーションを構成することもできます。