編輯

共用方式為


Azure 開發人員 CLI 常見問題

本文回答有關 Azure 開發人員 CLI 的常見問題。

常規

如何卸載 Azure 開發人員 CLI?

視您最初安裝的方式而定,卸載 azd 有不同的選項。 如需詳細資訊,請流覽 安裝頁面

Azure 開發人員 CLI 與 Azure CLI 有何差異?

Azure 開發人員 CLIazd) 和 Azure CLIaz) 都是命令行工具,但它們可協助您執行不同的工作。

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』。 我可以在本機開發環境中繼續我的工作嗎?

是的。 您可以在本機繼續開發工作。

  1. 執行 azd init -t <template repo>,將範本專案複製到本機計算機。
  2. 若要提取使用 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 設定會啟用下列工作流程來管理您的秘密:

  1. 如果指定的秘密存在,則會使用 secretOrRandomPassword 函式從 Key Vault 擷取。
  2. 如果秘密不存在,則會建立 Key Vault,而隨機產生的秘密會儲存在其中。
  3. 在未來的部署中,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