Share via


教學課程:透過 Bicep 使用部署堆疊 (預覽)

在本教學課程中,您將了解建立及管理部署堆疊的流程。 本教學課程著重於在資源群組範圍建立部署堆疊。 不過,您也可以在訂用帳戶範圍中建立部署堆疊。 若要取得有關建立部署堆疊的進一步見解,請參閱建立部署堆疊 (部分機器翻譯)。

必要條件

建立 Bicep 檔案

在 Visual Studio Code 中建立 Bicep 檔案以建立儲存體帳戶和虛擬網路。 此檔案可用來建立您的部署堆疊。

param resourceGroupLocation string = resourceGroup().location
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param vnetName string = 'vnet${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: resourceGroupLocation
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-11-01' = {
  name: vnetName
  location: resourceGroupLocation
  properties: {
    addressSpace: {
      addressPrefixes: [
        '10.0.0.0/16'
      ]
    }
    subnets: [
      {
        name: 'Subnet-1'
        properties: {
          addressPrefix: '10.0.0.0/24'
        }
      }
      {
        name: 'Subnet-2'
        properties: {
          addressPrefix: '10.0.1.0/24'
        }
      }
    ]
  }
}

將 Bicep 檔案另存為 main.bicep

建立部署堆疊

若要建立資源群組和部署堆疊,請執行下列命令,確保您根據執行位置提供適當的 Bicep 檔案路徑。

az group create \
  --name 'demoRg' \
  --location 'centralus'

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

deny-settings-mode 參數會向受控資源指派特定型別的權限,以避免資源遭未經授權的安全性主體刪除。 如需詳細資訊,請參閱保護受控資源免於遭到刪除 (部分機器翻譯)。

列出部署堆疊,然後列出受控資源

若要檢查部署,您可以列出部署堆疊,並列出部署堆疊的受控資源。

列出已部署的部署堆疊:

az stack group show \
  --resource-group 'demoRg' \
  --name 'demoStack'

輸出會顯示兩個受控資源:一個儲存體帳戶和一個虛擬網路:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-08-14-58-28-fd6bb",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT30.1685405S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Network/virtualNetworks/vnetthmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/demoRg/providers/Microsoft.Storage/storageAccounts/storethmimleef5fwk",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-08T14:58:28.377564+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-08T14:58:28.377564+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

您也可以列出部署堆疊中的受控資源來檢查部署:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

輸出如下:

{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deployments/demoStack-2023-06-05-20-55-48-38d09",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT29.006353S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Resources/deploymentStacks/demoStack",
  "location": null,
  "name": "demoStack",
  "outputs": null,
  "parameters": {},
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "demoRg",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Network/virtualNetworks/vnetzu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/demoRg/providers/Microsoft.Storage/storageAccounts/storezu6pnx54hqubm",
      "resourceGroup": "demoRg",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2023-06-05T20:55:48.006789+00:00",
    "createdBy": "johndole@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2023-06-05T20:55:48.006789+00:00",
    "lastModifiedBy": "johndole@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}

更新部署堆疊

若要更新部署堆疊,請對底層 Bicep 檔案進行必要的修改,然後重新執行命令以建立部署堆疊,或使用 Azure PowerShell 中的 set 命令。

在本教學課程中,您會執行下列活動:

  • 更新受控資源的屬性。
  • 將資源新增至堆疊。
  • 中斷受控資源的連結。
  • 將現有的資源連結至堆疊。
  • 刪除受控資源。

更新受控資源

在上一個步驟結束時,您有一個具有兩個受控資源的堆疊。 您將更新儲存體帳戶資源的屬性。

編輯 main.bicep 檔案,以將 SKU 名稱從 Standard_LRS 變更為 Standard_GRS

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_GRS'
  }
}

執行下列命令來更新受控資源:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

您可以執行下列命令來檢查 SKU 屬性:

az resource list --resource-group 'demoRg'

新增受控資源

在上一個步驟結束時,您有一個具有兩個受控資源的堆疊。 您會將另一個儲存體帳戶資源新增至堆疊。

編輯 main.bicep 檔案,以包括另一個儲存體帳戶定義:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

執行下列命令來更新部署堆疊:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

您可以列出部署堆疊中的受控資源來檢查部署:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

除了兩個現有的資源之外,您還會看到新的儲存體帳戶。

中斷受控資源的連結

在上一個步驟結束時,您有一個具有三個受控資源的堆疊。 您會中斷其中一個受控資源的連結。 中斷資源的連結之後,它會保留在資源群組中。

編輯 main.bicep 檔案,以移除來自上一個步驟的下列儲存體帳戶定義:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

執行下列命令來更新部署堆疊:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

您可以列出部署堆疊中的受控資源來檢查部署:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

您應該會在堆疊中看到兩個受控資源。 不過,已中斷連結的資源仍會列在資源群組中。 您可以執行下列命令來列出資源群組中的資源:

az resource list --resource-group 'demoRg'

將現有的資源連結至堆疊

在上一個步驟結束時,您有一個具有兩個受控資源的堆疊。 與受控資源相同的資源群組中有非受控資源。 您會將此非受控資源附加至堆疊。

編輯 main.bicep 檔案,以包括非受控資源的儲存體帳戶定義:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

執行下列命令來更新部署堆疊:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

您可以列出部署堆疊中的受控資源來檢查部署:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

您應該會看到三個受控資源。

刪除受控資源

在上一個步驟結束時,您有一個具有三個受控資源的堆疊。 在上述其中一個步驟中,您已中斷受控資源的連結。 有時候,建議您刪除資源,而不是中斷資源的連結。 若要刪除資源,您可以使用 delete-resources 參數搭配 create/set 命令。

編輯 main.bicep 檔案,以移除下列儲存體帳戶定義:

resource storageAccount1 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: '1${storageAccountName}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

搭配 delete-resources 參數執行下列命令:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none' \
  --delete-resources

除了 delete-resources 參數之外,還有另外兩個參數可用:delete-alldelete-resource-groups。 如需詳細資訊,請參閱控制中斷連結和刪除 (部分機器翻譯)。

您可以列出部署堆疊中的受控資源來檢查部署:

az stack group show \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --output 'json'

您應該會在堆疊中看到兩個受控資源。 資源也會從資源群組中移除。 您可以執行下列命令來檢查資源群組:

az resource list --resource-group 'demoRg'

設定否定性設定

建立部署堆疊時,可以向受控資源指派特定型別的權限,以避免資源遭未經授權的安全性主體刪除。 這些設定稱為否定性設定。

Azure CLI 包含下列參數,可用於自訂否定性指派:

  • deny-settings-mode:定義禁止對受控資源進行的作業,防止未經授權的安全性主體嘗試刪除或更新資源。 除非明確授與存取權,否則此限制適用於所有人。 值包括:nonedenyDeletedenyWriteAndDelete
  • deny-settings-apply-to-child-scopes:否定性設定會套用至子系 Azure 管理範圍。
  • deny-settings-excluded-actions:排除於否定性設定之外的角色型存取控制 (RBAC) 管理作業清單。 最多允許 200 個動作。
  • deny-settings-excluded-principals:排除於鎖定之外的 Microsoft Entra 主體識別碼清單。 最多允許 5 個主體。

在本教學課程中,您會設定否定設定模式。 如需有關其他否定設定的詳細資訊,請參閱保護受控資源免於遭到刪除 (部分機器翻譯)。

在上一個步驟結束時,您有一個具有兩個受控資源的堆疊。

執行下列命令,並將否定設定模式參數設定為 deny-delete:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'denyDelete'

下列刪除命令應該會失敗,因為否定設定模式設定為 deny-delete:

az resource delete \
  --resource-group 'demoRg' \
  --name '<storage-account-name>' \
  --resource-type 'Microsoft.Storage/storageAccounts'

使用否定設定模式將堆疊更新為無,以便您可以完成本教學課程的其餘部分:

az stack group create \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --template-file './main.bicep' \
  --deny-settings-mode 'none'

從堆疊匯出範本

透過匯出部署堆疊,您可以產生 Bicep 檔案。 此 Bicep 檔案可作為未來開發和後續部署的資源。

az stack group export \
  --name 'demoStack' \
  --resource-group 'demoRg'

您可以透過管道將輸出傳送至檔案。

刪除部署堆疊

若要刪除部署堆疊,然後刪除受控資源,請執行下列命令:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg' \
  --delete-all

如果執行不含 delete all 參數的刪除命令,將會中斷受控資源的連結,但不會刪除。 例如:

az stack group delete \
  --name 'demoStack' \
  --resource-group 'demoRg'

下列參數可用來控制中斷連結和刪除之間的作業。

  • --delete-all:同時刪除資源和資源群組。
  • --delete-resources:僅刪除資源。
  • --delete-resource-groups:僅刪除資源群組。

如需詳細資訊,請參閱刪除部署堆疊 (部分機器翻譯)。

下一步

部署堆疊 (部分機器翻譯)