本文回答有關 Azure 開發人員 CLI 的常見問題。
一般
如何? 卸載 Azure 開發人員 CLI?
根據您最初安裝的方式,有不同的卸載 azd
選項。 如需詳細資訊, 請瀏覽安裝頁面 。
Azure 開發人員 CLI 與 Azure CLI 有何差異?
Azure 開發人員 CLI (azd
) 和 Azure CLI (az
) 都是命令行工具,但它們可協助您執行不同的工作。
azd
著重於高階開發人員工作流程。 除了布建/管理 Azure 資源之外, azd
也可協助將雲端元件、本機開發組態和管線自動化結合成完整的解決方案。
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 開發人員 CLI 中 azd
,命令會參考環境組態的 .env 檔案。 例如,使用 db 連接字串 和 Azure 金鑰保存庫 端點來更新 .env 檔案等azd deploy
命令。
我已經在 Codespaces 中執行 『azd up』。 我可以在本機開發環境中繼續我的工作嗎?
是。 您可以在本機繼續開發工作。
- 執行
azd init -t <template repo>
以將範本專案複製到本機計算機。 - 若要提取使用 Codespaces 建立的現有 env,請執行
azd env refresh
。 請務必提供與之前相同的環境名稱、訂用帳戶和位置。
如何使用 azure.yaml 檔案?
azure.yaml 檔案描述範本中包含的應用程式和 Azure 資源類型。
'secretOrRandomPassword' 函式的行為為何?
如果提供金鑰保存庫名稱和秘密的參數,函secretOrRandomPassword
式會從 Azure 金鑰保存庫 擷取秘密。 如果未提供這些參數或無法擷取秘密,函式會改為傳回隨機產生的密碼來改用。
下列範例示範 檔案中的 main.parameters.json
常見使用案例secretOrRandomPassword
。 和 ${AZURE_KEY_VAULT_NAME}
sqlAdminPassword
變數會當做 金鑰保存庫 和秘密名稱的參數傳遞。 如果無法擷取值,則會改為產生隨機密碼。
"sqlAdminPassword": {
"value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
}
的輸出secretOrRandomPassword
也應該儲存到使用 Bicep 進行未來的執行 金鑰保存庫。 在部署之間擷取和重複使用相同的秘密,可能會防止在重複產生新值時出現的錯誤或非預期行為。 若要建立 金鑰保存庫 並將產生的秘密儲存在其中,請使用下方的 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
函式從 金鑰保存庫 擷取。 - 如果秘密不存在,則會建立 金鑰保存庫,而隨機產生的秘密會儲存在其中。
- 在未來的部署中,
secretOrRandomPassword
方法會擷取其存在於 金鑰保存庫 中的預存秘密。 如果 金鑰保存庫 已經存在,則不會重新建立,但下次執行時會再次儲存相同的秘密值。
我可以使用 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 服務 的應用程式正在觸發「預先欺騙的網站」警告,如何修正此問題?
這可能是因為我們的命名資源方法所發生。
我們的「Azure Dev」撰寫範本可讓您設定資源的名稱。 若要這樣做,您可以將專案新增至 main.parameters.json
資料夾中的 infra
。 例如:
"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
的群組,並使用符合您環境名稱的值來探索組成應用程式的所有資源群組。 然後,它會列舉這些資源群組中的所有資源,並尋找以 符合您服務azure.yaml
名稱的值標記azd-service-name
的資源。
雖然我們建議在資源上使用標籤,但您也可以使用 resourceName
中的 azure.yaml
屬性來提供明確的資源名稱。 在此情況下,不會執行上述邏輯。
命令:azd up
我可以重新執行 『azd up』嗎?
是。 我們使用 累加式部署模式。
如何? 尋找 'azd up' 的記錄檔嗎?
即將推出。 這項功能已規劃為未來的版本。
命令:azd pipeline
什麼是 Azure 服務主體?
Azure 服務主體是用來與應用程式、託管服務和自動化工具來存取 Azure 資源的身分識別。 此存取受限於指派給服務主體的角色,這可讓您控制哪些資源可以存取和層級。 如需從 Azure 驗證至 GitHub 的詳細資訊,請參閱 連接 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 up --no-prompt
替換為 run: azd deploy --no-prompt
。
哪裡可以找到我在執行 'azd pipeline config' 時所觸發的 GitHub Actions 作業記錄檔?
移至 https://github.com/<your-GH-account>/<your-repo>/actions
,然後參考工作流程執行中的記錄檔。
在本機建置容器應用程式
為什麼我無法在本機執行我正在建置的容器應用程式?
在本機建置容器應用程式時,您必須在容器中執行 azd auth login
,應用程式才能使用 AzureDeveloperCliCredential
。 或者,您可以將應用程式設定為使用服務主體,而不是 AzureDeveloperCliCredential
。