編輯

共用方式為


Azure Developer CLI 常見問題

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

一般

如何? 卸載 Azure 開發人員 CLI?

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

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

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

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

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

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

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