探索並編輯 Azure Developer CLI 範本檔案

Azure 開發者 CLI (azd) 範本是一個標準儲存庫,包含組態與基礎架構資產,能用於azd專案的配置與部署。 無論你是建立新範本還是從現有範本開始,你都必須負責隨著專案演進審查與維護其檔案。

本文說明如何檢查與編輯主要範本檔案。 完整結構的概念說明,請參見 Azure Developer CLI 範本。

本文使用 hello-azd 範本作為標準範例,讓你能看到每個檔案在真實專案中的作用。 這些概念同樣適用於你為自己應用程式產生的範本。 要跟著操作,請在一個空目錄中初始化範本:

azd init --template hello-azd

該hello-azd範本會將容器化的 C# 應用程式部署到 Azure 容器應用程式,並透過 Bicep 配置支援的 Azure 資源。 它使用如下的資料夾結構,每個主要資產對應到本文中的一個區塊:

.
├── azure.yaml                # Project configuration (Explore azure.yaml)
├── infra/                    # Infrastructure as code (Infrastructure files)
│   ├── main.bicep            # Deployment entry point
│   ├── main.parameters.json  # Parameter values that azd supplies
│   ├── abbreviations.json    # Resource name abbreviations
│   ├── app/                  # Application-specific modules
│   └── core/                 # Reusable resource modules
├── src/                      # Application source code (Source code)
│   └── Dockerfile            # Container image build for the app
├── .azure/                   # Environment configuration
└── README.md

具體結構依專案而異,並 azure.yaml 標示所使用的路徑 azd 。 以下章節說明如何編輯每個資產。

在做出重大變更前,先提交或儲存一個已知良好的範本版本。 檢視所有變更,包括內嵌憑證、不必要的資源、過度權限、網路暴露、服務層級及環境特定值。

探索 azure.yaml

該 azure.yaml 檔案定義專案,說明 azd 如何配置基礎設施、打包應用程式碼及部署各項服務。 它可以定義服務、基礎設施設定、掛鉤、工作流程及其他專案行為。

該 hello-azd 範本定義了一個名為 aca的單一服務:

name: azd-starter
metadata:
  template: hello-azd-dotnet
services:
  aca:
    project: ./src
    language: csharp
    host: containerapp
    docker:
      path: ./Dockerfile
      remoteBuild: true

每個物業都說明 azd 了如何處理這項服務:

  • aca 是服務名稱。 azd用它來將服務與承載它的 Azure 資源匹配。 欲了解更多資訊,請參閱 設定服務探索。
  • project: ./src 指向用於 azd 包裝與部署的應用程式原始碼。
  • language: csharp 識別應用程式語言。
  • host: containerapp 告知 azd 將服務部署至 Azure 容器應用程式。
  • docker從目錄中的 src 建立Dockerfile容器映像。
  • remoteBuild指示 azd 使用 Azure Container Registry(ACR)來建置容器映像。

新增服務定義

在 azd 下,針對 services 應部署的每個其他應用程式新增一個項目。 服務定義會指定其來源目錄、語言及 Azure 主機目標。 例如,描述一個新的 API 專案:

services:
  api:
    project: ./src/api
    language: csharp
    host: appservice

當你移動應用程式碼時,更新對應 project 的路徑。 當你更改主機架構時,請同時更新服務定義和提供主機的基礎設施。

關於所有可用的屬性與支援值,請參閱結構。azure.yaml

原始程式碼

應用程式來源為可選。 帶有可部署應用程式的範本通常會在目錄下 src 組織原始碼,但你不需要使用特定的資料夾名稱或排版。 在 azure.yaml 中,每個服務的 project 屬性會告訴 azd 其原始程式碼位於何處。

在 hello-azd中,aca服務設定 project: ./src,因此azd將 C# 應用程式打包在目錄中src,並部署到 Azure 容器應用程式。 因為服務也會設定docker設定,會在azd部署前從Dockerfilesrc目錄中建立容器映像。

azd 在受支援的 Azure 主機上支援 Node.js、Python、.NET、Java 和 Go。 範本也可以部署容器。 關於目前的語言、框架與主機組合,請參見 支援語言與環境。

編輯原始碼就像在任何應用程式倉庫裡一樣。 如果你新增服務或移動其來源目錄,請更新其 azure.yaml 服務定義。 如果應用程式需要新的 Azure 資源,更新基礎架構,並透過設定將所需的端點或資源名稱傳給應用程式。

變更服務來源目錄

例如,如果你將應用程式src從 移動hello-azd到 src/app,則更新project服務的aca值:

services:
  aca:
    project: ./src/app
    language: csharp
    host: containerapp
    docker:
      path: ./Dockerfile
      remoteBuild: true

基礎設施檔案

該infra目錄包含定義模板 Azure 資源的 Bicep 或 Terraform 檔案。 在 hello-azd中,目錄infra使用 Bicep,並包含以下關鍵資產:

  • main.bicep 是 azd 用來佈建資源的標準部署進入點。
  • main.parameters.json 提供 的 main.bicep參數值。
  • app 包含針對應用程式的特定模組。
  • core 包含可重複使用的共用資源模組,如儲存與主機。

main.bicep如何在azd up期間執行

當你執行 azd up時,配置階段會部署 infra/main.bicep。 在 hello-azd中, main.bicep 鎖定訂閱範圍,建立資源群組,然後呼叫模組來配置應用程式所需的資源:

targetScope = 'subscription'

// Create a storage account
module storage './core/storage/storage-account.bicep' = {
  name: 'storage'
  scope: rg
  params: {
    name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}'
    location: location
    tags: tags
    allowSharedKeyAccess: false
    containers: [ { name: 'attachments' } ]
    tables: [ { name: 'tickets' } ]
  }
}

// Container app for the 'aca' service
module web 'app/app.bicep' = {
  name: serviceName
  scope: rg
  params: {
    // ...
    serviceName: serviceName
  }
}

該main.bicep檔案配置了使用者指派的管理身份、Azure 儲存體 帳號、Azure 容器應用程式 環境與登錄檔,以及承載該aca服務的容器應用程式。 它也會指派讓受管理身份存取儲存的功能。 模組會將每個資源放在獨立檔案中,保持 main.bicep 可讀性。

新增資源至 main.bicep

將資源宣告直接新增至 infra/main.bicep,以用於簡單或單次使用的資源。 當你重複使用資源、需要多個相關資源,或想保持main.bicep可讀性時,將資源分拆到獨立的 Bicep 模組中。 例如 hello-azd,許多範本將可重用模組歸類於 infra/core。

對於常見的 Azure 資源,建議使用Azure驗證模組,而不是從零開始撰寫模組。 驗證模組由 Microsoft 維護,遵循安全與可靠性最佳實務,並減少你在範本中維護的基礎設施程式碼量。

如需完整逐步解說,了解如何將新資源新增至 hello-azd,請參閱 「擴充範本」。

main.parameters.json 檔案會將由 azd 維護的值對應到 Bicep 參數中。 範本 hello-azd 使用以下參數:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environmentName": { "value": "${AZURE_ENV_NAME}" },
    "location": { "value": "${AZURE_LOCATION}" },
    "principalId": { "value": "${AZURE_PRINCIPAL_ID}" },
    "principalType": { "value": "${AZURE_PRINCIPAL_TYPE=User}" }
  }
}

每個項目都會將一個 Bicep 參數綁定到環境中azd維持的值,例如環境名稱、位置,以及執行部署的主體。 針對會因環境或部署而異的值使用 main.parameters.json,例如環境名稱、位置或由 azd 產生的資源名稱。 保持在不同環境中不變的穩定值,作為參數預設值或文字值。main.bicep 這種方法讓同一個 Bicep 能在不同環境中重複使用,而不必每次部署都進行編輯。

當你新增或編輯基礎設施時:

  • 保持資源配置環境獨立。 使用參數和 azd 環境值,而非嵌入訂閱 ID、資源名稱、位置或憑證。
  • 對於敏感值,請使用安全輸出,且不要將祕密以純文字部署輸出的形式暴露出來。
  • 將最小權限角色指派應用於受管理身份。
  • 保持服務定義 azure.yaml 與目標資源保持一致。
  • 檢視服務層級、擴展限制、冗餘及保留設定對成本的影響。

關於 Bicep 語言與模組指引,請參閱 Bicep 文件。 關於基於 Terraform 的範本,請參見 Use Terraform with Azure Developer CLI。

設定服務探索

預設情況下,azd透過尋找標籤azd-service-name與服務名稱azure.yaml相符的資源來發現服務的 Azure 資源。 如果你重新命名服務,請更新對應的資源標籤,或在 中明確設定資源名稱 azure.yaml。

例如,在 hello-azd 中,aca 服務名稱與容器應用程式資源上的 azd-service-name 標籤相符。 azure.yaml服務定義設定了名稱:

services:
  aca:
    project: ./src
    language: csharp
    host: containerapp

infra/app/app.bicep 中的容器應用程式模組會套用相符的標籤:

tags: union(tags, { 'azd-service-name': serviceName })

配置非標準基礎設施路徑

infra該azure.yaml區塊識別基礎設施提供者及入口點。 這些數值在使用預設 Bicep 佈局時是可選的,但宣告它們可以讓非標準配置更容易理解:

infra:
  provider: bicep
  path: infra
  module: main

環境設定

該 .azure 目錄包含本地環境狀態與產生 azd 的值,例如所選訂閱、位置、資源名稱及部署輸出。 將此目錄視為本地狀態,而非可重複使用的範本資產。 不要提交包含秘密或特定環境值的環境檔案。

新增基礎設施輸出

當你執行azd provision部署 Bicep 時,它會將基礎設施入口點的輸出以azd環境值的形式擷取。 新增資源端點、資源名稱及管理身份客戶端 ID 的輸出,這些都是應用程式服務或掛鉤所需要的。 例如,hello-azd 會輸出來自 main.bicep 的容器登錄和受控識別詳細資料:

output AZURE_CONTAINER_REGISTRY_ENDPOINT string = containerAppsEnv.outputs.registryLoginServer
output AZURE_CONTAINER_REGISTRY_NAME string = containerAppsEnv.outputs.registryName
output AZURE_USER_ASSIGNED_IDENTITY_NAME string = identity.outputs.name

當管理身份或 金鑰保存庫 參考可以提供存取時,不要輸出祕密。 配置完成後,透過執行 azd env get-values來檢查捕獲的值。

欲了解更多資訊,請參閱 管理環境變數。

測試您的變更

執行 azd up 以配置基礎架構並部署任何應用程式服務:

azd up

如果你打算分享範本,請先在乾淨的目錄中初始化,然後用新環境部署。 此測試有助於辨識範本中不包含的本地檔案、快取值或環境特定的假設。

請求幫助

如需了解如何提出錯誤、請求協助或建議Azure開發者 CLI 新功能,請造訪 troubleshooting and support 頁面。