本文回答有關 Azure 開發人員 CLI 的常見問題。
常規
如何卸載 Azure 開發人員 CLI?
視您最初安裝的方式而定,卸載 azd
有不同的選項。 如需詳細資訊,請流覽 安裝頁面。
Azure 開發人員 CLI 與 Azure CLI 有何差異?
Azure 開發人員 CLI (azd
) 和 Azure CLI (az
) 都是命令行工具,但它們可協助您執行不同的工作。
azd
著重於高階開發人員工作流程。 除了布建/管理 Azure 資源之外,azd
也有助於將雲端元件、本機開發組態和管線自動化合併成完整的解決方案。
Azure CLI 是一種控制平面工具,可用來建立和管理 Azure 基礎結構,例如虛擬機器、虛擬網路和記憶體。 Azure CLI 是針對特定系統管理工作的細微命令所設計。
什麼是環境名稱?
Azure 開發人員 CLI 會使用環境名稱來設定 Azure 開發人員 CLI 範本所使用的 AZURE_ENV_NAME
環境變數。 AZURE_ENV_NAME也會用來在 Azure 資源組名前面加上前置詞。 因為每個環境都有自己的組態,Azure 開發人員 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 開發人員 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 開發人員 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 中的預存密碼。 如果密鑰保存庫已經存在,則不會重新建立,但下次執行時會再次儲存相同的秘密值。
我可以使用 Azure 免費訂用帳戶嗎?
是,但每個 Azure 位置只能有一個部署。 如果您已經使用選取的 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"
}
此專案會在您下次布建應用程式時建立名為 「my-unique-name」 的新資源,而不是隨機值,例如 「app-web-aj84u2adj」。。 您可以使用 Azure 入口網站手動移除舊的資源群組,或執行 azd down
來移除所有先前的部署。 拿掉資源之後,請執行 azd provision
,以新的名稱再次建立資源。
此名稱必須是全域唯一的,否則當您嘗試建立資源時,會在 azd provision
期間收到ARM錯誤。
命令:azd provision
命令如何知道要布建哪些資源?
此命令會使用 Bicep 範本,其位於 <your-project-directory-name>/infra
底下來布建 Azure 資源。
哪裡可以找到在 Azure 中布建哪些資源?
移至 https://portal.azure.com,然後尋找您的資源群組,也就是 rg-<your-environment-name>
。
如何尋找 Azure 錯誤的詳細資訊?
我們使用 Bicep 範本,其位於 <your-project-directory-name>/infra
底下,以布建 Azure 資源。 如果發生問題,我們會在 CLI 輸出中包含錯誤訊息。
您也可以移至 https://portal.azure.com,然後尋找您的資源群組,也就是 rg-<your-environment-name>
。 如果任何部署失敗,請選取錯誤連結以取得詳細資訊。
如需其他資源,請參閱針對常見的 Azure 部署錯誤進行疑難解答 - Azure Resource Manager。
是否有 『azd provision』 的記錄檔?
即將推出。 這項功能已規劃為未來的版本。
命令:azd deploy
我可以重新執行此命令嗎?
是的。
azd 如何尋找要部署我的程序代碼的 Azure 資源?
在部署期間,azd
會先尋找以 azd-env-name
標記的群組,並使用符合您環境名稱的值,來探索組成應用程式的所有資源群組。 然後,它會列舉這些資源群組中的所有資源,並尋找以 azd-service-name
標記的資源,其值符合 azure.yaml
的服務名稱。
雖然我們建議在資源上使用標籤,但您也可以使用 azure.yaml
中的 resourceName
屬性來提供明確的資源名稱。 在此情況下,不會執行上述邏輯。
如何在略過其他服務時,在專案中部署特定服務?
部署專案時,您可以選擇在命令中指定服務名稱來部署特定服務(也就是 azd deploy api
),或流覽至只包含您想要部署之服務的子資料夾。 這樣做時,所有其他服務都會列為 - Skipped
。
如果您不想略過任何服務,請務必從根資料夾執行命令,或將 --all
旗標新增至命令。
命令:azd up
我可以重新執行 『azd up』嗎?
是的。 我們使用
如何尋找 『azd up』 的記錄檔?
即將推出。 這項功能已規劃為未來的版本。
命令:azd pipeline
什麼是 Azure 服務主體?
Azure 服務主體是用來與應用程式、託管服務和自動化工具來存取 Azure 資源的身分識別。 此存取受限於指派給服務主體的角色,這可讓您控制哪些資源可以存取和層級。 如需從 Azure 驗證至 GitHub 的詳細資訊,請參閱 Connect GitHub 和 Azure |Microsoft Docs。
我是否需要先建立 Azure 服務主體,才能執行 'azd pipeline config'?
不。
azd pipeline config
命令會負責建立 Azure 服務主體,並執行必要的步驟,將秘密儲存在您的 GitHub 存放庫中。
儲存在 GitHub 中的所有秘密為何?
此命令會在 GitHub 中儲存四個秘密: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 或 Terraform 不支援它。
- 針對 Azure DevOps,明確呼叫
--auth-type
,因為federated
會導致錯誤。 - 針對 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 deploy --no-prompt
取代 run: azd up --no-prompt
。
哪裡可以找到我在執行 'azd pipeline config' 時所觸發的 GitHub Actions 作業記錄檔?
移至 https://github.com/<your-GH-account>/<your-repo>/actions
,然後參考工作流程執行中的記錄檔。
在本機建置容器應用程式
為什麼我無法在本機執行我正在建置的容器應用程式?
在本機建置容器應用程式時,您必須在容器中執行 azd auth login
,應用程式才能使用 AzureDeveloperCliCredential
。 或者,您可以將應用程式設定為使用服務主體,而不是 AzureDeveloperCliCredential
。