この記事では、Azure Developer CLI (azd) のツール、コマンド、環境に関してよく寄せられる質問に対する回答を示します。
一般的な質問
次のセクションでは、一般的な ツールと環境に関する質問について説明します。
Azure 開発者 CLI をアンインストールするにはどうすればよいですか?
最初にインストールした方法に応じて、 をアンインストールするためのさまざまなオプションがあります。 詳細については、のインストール ページ を参照してください。
Azure Developer CLI とAzure CLIの違いは何ですか?
Azure Developer CLI (azd) と Azure CLI (az) はどちらもコマンドライン ツールですが、さまざまなタスクを実行するのに役立ちます。
は、高度な開発者ワークフローに重点を置いています。 Azure リソースのプロビジョニング/管理とは別に、azd は、クラウド コンポーネント、ローカル開発構成、パイプライン自動化を完全なソリューションにまとめるのに役立ちます。
Azure CLIは、仮想マシン、仮想ネットワーク、ストレージなどのAzureインフラストラクチャを作成および管理するためのコントロール プレーン ツールです。 Azure CLIは、特定の管理タスクの詳細なコマンドを中心に設計されています。
詳細については、Azure Developer CLI と 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 `azd 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 init と azd up を参照してください。
複数の環境を設定できますか?
Yes. さまざまな環境 (開発、テスト、運用など) を設定できます。 azd env を使用して、これらの環境を管理できます。
環境構成 (.env) ファイルはどこに格納されますか?
.env ファイルのパスが 。 詳細については、「環境変数の 管理」を参照してください。
env ファイルはどのように使用されますか?
Azure Developer CLI では、azd コマンドは環境構成の .env ファイルを参照します。
azd deploy などのコマンドは、.env ファイルを更新します。例えば、db 接続文字列や Azure Key Vault エンドポイントを更新します。
Codespaces で を実行しました。 ローカル開発環境で作業を続行できますか?
Yes. 開発作業はローカルで続行できます。
- を実行して、テンプレート プロジェクトをローカル コンピューターに複製します。
- Codespaces を使用して作成された既存の env をプルダウンするには、実行します。 以前と同じ環境名、サブスクリプション、場所を指定してください。
デバイスログインに問題がある場合、Codespaces で認証するにはどうすればよいですか?
Codespaces でのデバイス コード認証に関する問題 (2FA 要求の繰り返しやエラーなど) が発生した場合は、VS Code Desktop を使用して次の回避策を試してください。
- 次のいずれかの方法を使用して、VS Code Desktop で Codespace を開きます。
- コマンド パレット (Windows の場合は Ctrl + Shift + P、MacOs の場合は Cmd + Shift + P) を使用し、Codespaces: Open in VS Code Desktop を選択>。
- ブラウザーで Codespace の左下隅をクリックし、[ VS Code Desktop で開く] を選択します)。
- VS Code Desktop ターミナルで 、azd auth login を実行し、ブラウザー ベースの認証を完了します。
- 認証が完了したら、VS Code Desktop を閉じて、ブラウザーで Codespace に戻ります。 認証状態は保持されます。
azure.yaml ファイルはどのように使用されますか?
azure.yaml ファイルには、テンプレートに含まれるAzure リソースのアプリと種類が記述されています。
関数の動作は何ですか?
secretOrRandomPassword 関数は、キー コンテナー名とシークレットのパラメーターが指定されている場合に、Azure Key Vaultからシークレットを取得します。 これらのパラメーターが指定されていない場合、またはシークレットを取得できない場合、関数は代わりに使用するランダムに生成されたパスワードを返します。
次の例は、 ファイル内の の一般的なユース ケースを示しています。
${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が既に存在する場合は再作成されませんが、次の実行のために同じシークレット値が再び格納されます。
無料サブスクリプション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" 作成テンプレートを使用すると、リソースの名前を構成できます。 これを行うには、 フォルダーの にエントリを追加できます。 例えば次が挙げられます。
"webServiceName": {
"value": "my-unique-name"
}
このエントリでは、次回アプリケーションをプロビジョニングするときに、ランダム化された値 ("app-web-aj84u2adj" など) ではなく、"my-unique-name" という名前の新しいリソースが作成されます。 Azure ポータルを使用して古いリソース グループを手動で削除するか、azd down を実行して以前のすべてのデプロイを削除できます。 リソースを削除した後、 を実行して、新しい名前でもう一度作成します。
この名前はグローバルに一意である必要があります。それ以外の場合は、リソースを作成しようとしたときに、 中に ARM エラーが発生します。
複数のAzure テナントを操作できますか?
Yes. 特定のテナントで認証するには、 コマンドで パラメーターを使用します。
azd auth login --tenant-id <tenant-id>
すべてのテナントにがアクセスできるようにする場合、まずブラウザーでMulti-Factor Authentication (MFA)のチャレンジを処理できます。
- ブラウザーで Azure portal を開きます。
- 各テナントを 1 つずつ切り替えます。 このアクションにより、必要な MFA チャレンジがトリガーされ、トークンが更新されます。
- ターミナルで を実行します。 は、ブラウザーの既存のセッションとアクセス トークンを使用します。このトークンは、アクセスしたすべてのテナントで有効になりました。
を複数回実行できますか?
Yes. 増分デプロイ モードを使用します。 詳細については、 azd up を参照してください。
プロビジョニング
次のセクションでは、 プロビジョニング プロセスについて説明します。
を複数回実行できますか?
Yes. 増分デプロイ モードを使用します。 詳細については、 azd provision を参照してください。
コマンドは、プロビジョニングするリソースをどのように認識しますか?
このコマンドでは Bicep テンプレート を使用し、Azureリソースをプロビジョニングします。テンプレートは <your-project-directory-name>/infra にあります。
Azureでプロビジョニングされているリソースはどこで確認できますか?
に移動し、リソース グループ () を探します。
Azureエラーに関する詳細情報を確認するにはどうすればよいですか?
Azureリソースのプロビジョニングには、<your-project-directory-name>/infra の下にあるBicep テンプレートを使用します。 問題がある場合は、CLI 出力にエラー メッセージを含めます。
に移動し、リソース グループ () を探すこともできます。 いずれかのデプロイが失敗した場合は、エラー リンクを選択して詳細情報を取得します。
その他のリソースについては、一般的なAzureデプロイ エラー (Azure Resource Manager) を参照してください。
のログ ファイルはありますか?
もうすぐです。 この機能は、今後のリリースで予定されています。
デプロイメント
次のセクションでは、 展開プロセスについて説明します。
を複数回実行できますか?
Yes. 詳細については、 azd deploy を参照してください。
azd は自分のコードをデプロイするAzure リソースをどのように見つけますか?
デプロイの際にはまず、環境の名前と一致する値を持つタグを付けられたグループを探すことによって、アプリケーションを構成するすべてのリソースグループを発見します。 次に、これらの各リソース グループ内のすべてのリソースを列挙し、のサービスの名前と一致する値を持つ でタグ付けされたリソースを探します。
リソースにタグを使用することをお勧めしますが、azure.yaml の プロパティを使用して明示的なリソース名を指定することもできます。 その場合、上記のロジックは実行されません。
他のサービスをスキップしながら、プロジェクトに特定のサービスをデプロイするにはどうすればよいですか?
プロジェクトを配置する場合は、コマンドでサービス名を指定するか ()、またはデプロイするサービスのみを含むサブフォルダーに移動して、特定のサービスをデプロイすることができます。 その場合、他のすべてのサービスが として表示されます。
サービスをスキップしない場合は、必ずルート フォルダーからコマンドを実行するか、コマンドに フラグを追加してください。
パイプラインの構成
次のセクションでは、CI/CD パイプラインの構成について説明します。
Azure サービス プリンシパルとは
Azure サービス プリンシパルは、アプリ、ホステッド サービス、およびAzure リソースにアクセスするための自動化ツールで使用するために作成された ID です。 このアクセスは、サービス プリンシパルに割り当てられているロールによって制限されます。これにより、アクセスできるリソースとどのレベルでアクセスできるかを制御できます。 AzureからGitHubへの認証の詳細については、「Connect GitHub and Azure |Microsoft Docs。
azd pipeline configを実行する前に、Azure サービス プリンシパルを作成する必要がありますか?
No. azd パイプライン構成 コマンドは、Azure サービス プリンシパルを作成し、GitHub リポジトリにシークレットを格納するために必要な手順を実行します。
GitHubに格納されているすべてのシークレットは何ですか?
このコマンドは、GitHubに 4 つのシークレット (AZURE_CREDENTIALS、AZURE_ENV_NAME、AZURE_LOCATION、および AZURE_SUBSCRIPTION_ID) を格納します。 に移動して、各シークレットの値をオーバーライドできます。
OpenID Connect (OIDC) とは何ですか。サポートされていますか?
OpenID Connect を使用すると、ワークフローは有効期間の短いトークンをAzureから直接交換できます。
OIDC は、GitHub ActionsおよびAzure パイプラインの既定値 (federated として設定) としてサポートされていますが、Azure DevOpsまたは Terraform ではサポートされていません。
- Azure DevOpsの場合、
--auth-typeをfederatedとして明示的に呼び出すと、エラーが発生します。 - Terraform の場合:
- が定義されていない場合、デフォルトの値に切り替えられ、警告が発生します。
- が明示的に に設定されている場合、エラーが発生します。
GitHub Actionsに格納されているAzure サービス プリンシパルをリセットするにはどうすればよいですか?
に移動し、新しいサービス プリンシパルの JSON オブジェクト全体をコピーして貼り付けることで、 を更新します。 例えば次が挙げられます。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
GitHub Actions ファイルはどこに保存されますか?
GitHub Actions ファイルパスは <your-project-directory-name>\.github\workflows\azure-dev.yml です。 詳細については、「Quickstart: サービス プリンシパルを作成し、GitHub アクションを実行するを参照してください。
azure-dev.yml ファイルで、ビルド ステップのコードだけをデプロイできますか?
Yes. を に置き換えます。
azd pipeline configの実行時にトリガーしたGitHub Actions ジョブのログはどこにありますか?
に移動し、ワークフロー実行のログ ファイルを参照します。
コンテナー アプリケーションのローカルでのビルド
ビルド中のコンテナー アプリをローカルで実行できないのはなぜですか?
コンテナー アプリケーションをローカルでビルドする場合は、アプリケーションが を操作するために、コンテナーで を実行する必要があります。 または、の代わりにサービス プリンシパルを使用するようにアプリケーションを構成することもできます。