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'

出力には、2 つの管理対象リソース (1 つのストレージ アカウントと 1 つの仮想ネットワーク) が表示されます。

{
  "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 コマンドを使用します。

このチュートリアルでは、次のアクティビティーを実行します。

  • 管理対象リソースのプロパティを更新します。
  • スタックにリソースを追加します。
  • 管理対象リソースをデタッチします。
  • 既存のリソースをスタックにアタッチします。
  • 管理対象リソースを削除します。

管理対象リソースを更新する

前の手順の最後で、2 つの管理対象リソースを含む 1 つのスタックを保持しています。 ストレージ アカウント リソースのプロパティを更新します。

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'

管理対象リソースを追加する

前の手順の最後で、2 つの管理対象リソースを含む 1 つのスタックを保持しています。 ストレージ アカウント リソースをもう 1 つスタックに追加します。

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'

2 つの既存のリソースに加えて、新しいストレージ アカウントが表示されます。

管理対象リソースをデタッチする

前の手順の最後で、3 つの管理対象リソースを含む 1 つのスタックを保持しています。 管理対象リソースの 1 つをデタッチします。 リソースは、デタッチされるとリソース グループに残ります。

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'

スタック内の 2 つの管理対象リソースが表示されます。 ただし、デタッチされたリソースは、引き続きリソース グループに一覧表示されます。 次のコマンドを実行して、リソース グループ内のリソースを一覧表示できます。

az resource list --resource-group 'demoRg'

既存のリソースをスタックにアタッチする

前の手順の最後で、2 つの管理対象リソースを含む 1 つのスタックを保持しています。 管理対象リソースと同じリソース グループ内に非管理対象リソースがあります。 この非管理対象リソースをスタックにアタッチします。

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'

3 つの管理対象リソースが表示されます。

管理対象リソースを削除する

前の手順の最後で、3 つの管理対象リソースを含む 1 つのスタックを保持しています。 前の手順の 1 つで、管理対象リソースをデタッチしました。 場合によっては、デタッチする代わりにリソースを削除する必要があります。 リソースを削除するには、create/set コマンドで delete-resources スイッチを使用します。

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 の 2 つのスイッチを使用できます。 詳細については、「デタッチと削除を制御する」を参照してください。

デプロイ スタック内の管理対象リソースを一覧表示して、デプロイを確認できます。

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

スタック内の 2 つの管理対象リソースが表示されます。 リソースは、リソース グループからも削除されます。 リソース グループは、次のコマンドを実行して確認できます。

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 プリンシパル ID の一覧。 最大 5 つのプリンシパルが許可されます。

このチュートリアルでは、拒否設定モードを構成します。 その他の拒否設定の詳細については、「管理対象リソースを削除から保護する」を参照してください。

前の手順の最後で、2 つの管理対象リソースを含む 1 つのスタックを保持しています。

拒否設定モード スイッチを deny-delete に設定して、次のコマンドを実行します。

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

拒否設定モードが deny-delete に設定されているため、次の delete コマンドは失敗します。

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

拒否設定モードを none に指定してスタックを更新し、チュートリアルの残りの部分を完了できるようにします。

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: リソース グループのみを削除します。

詳細については、「デプロイ スタックを削除する」参照してください。

次のステップ